РЕГИСТРЫ СВЕДЕНИЙ

Учебник 1С РЕГИСТРЫ СВЕДЕНИЙ

Кроме фамилии имени и отчества нам желательно знать еще некоторые сведения о сотруднике, например, его должность.
Штатное расписание компании мы будем хранить в отдельном справочнике, назовем его Должности. Заведем его.
Процедура добавления должна быть вам знакома из прошлой главы , повторятся не буду. (pic 5.1)

8gl7g5001
Для подсистемы Бухгалтерия включим видимость команды Должности:создать (pic 5.2)

8gl7g5002
Каждому сотруднику теперь нужно назначить должность.
Можно создать отдельный реквизит в справочнике сотрудники с типом ссылки на справочник Должности.
Но не исключено, что кто-то из сотрудников окажется карьеристом и будет расти по карьерной лестнице.
Или водитель вначале будет стажером, потом перейдет в статус водителя-экспедитора.
При расчете зарплаты это обстоятельство нужно учитывать.
Так или иначе нам необходимо где-то хранить изменения в статусе сотрудника.
Для этой цели идеально подходит такой объект 1С, который называется периодическим регистром сведений.   Создадим его.
Находим в дереве ветвь Регистры сведений. Через контекстное меню добавляем новый регистр, называем его Должности,  периодичность – в пределах дня, режим записи – независимый.
Независимый означает, что мы его можем редактировать вручную.(pic 5.3)

8gl7g5003
Заходим на вкладку Подсистемы, устанавливаем видимость для подсистемы Бухгалтерия.
Заходим на вкладку Данные и добавляем измерение Сотрудники тип СправочникСотрудники.
Ссылка (pic 5.4) Именно по этому измерению система будет определять какому сотруднику какая должность соответствует.

8gl7g5004
Добавляем ресурс должность, в нем будем хранить должность сотрудника на определенную дату.(pic 5.4a)

8gl7g5004a
Должно получиться так (pic 5.5)
Отредактируем справочник сотрудники.
Зайдем в свойства справочника на вкладку формы.
Вызовем конструктор формы элемента, щелкнув напротив соответствующей записи на значок лупы.
Появится конструктор формы, нажмем готово. (pic 5.7)

8gl7g5006
Появится окно разделенное на три части.
В правом верхнем окне добавим два реквизита ДатаДолжности (pic 5.8а) с заголовком Актуальная дата
Обратите внимание, что Тип должен быть "Дата" и состав даты "Дата"

8gl7g5007
И ДолжностьСотрудника (pic 5.8)

8gl7g5008
Захватим мышкой и последовательно перетащим влево.
Внизу можно видеть, что добавленные реквизиты появились в форме элемента.
Давайте немного поправим размещение. Сейчас у нас наши реквизиты размещены друг под другом.
Лучше разместить их в одну линию.
Для этого нажмем на кнопку добавить (зеленый кружок с плюсом) и выберем Группа-обычная группа (pic 5.9)

8gl7g5009
В свойствах группы укажем группировка Горизонтальная (pic 5.10)

8gl7g5010
И мышкой перетащим наши вновь созданные реквизиты в новую группу (pic 5.11)

8gl7g5011
Теперь наши реквизиты выстроились в линию (pic 5.12)

8gl7g5012
Т.к. должность сотрудника храниться в регистре сведений, нам необходимо ее оттуда извлечь.
Регистр сведений Должности периодический, т.е. значение его зависит от даты на которую мы хотим его прочитать.
Дату мы будем брать из реквизита ДатаДолжности, которая при открытии справочника будет устанавливаться в текущую дату.
Внизу редактирования формы есть закладка, которая называется Модуль. (pic 5.13)

8gl7g5013
Перейдем на нее. Пока здесь нет ничего. Вернемся на вкладку Форма.
В верхнем окне станем на Форма и вызовем через контекстное меню палитру свойств. (pic 5.14)

8gl7g5014
Внизу в группе События напротив события ПриОткрытии щелкнув на значок лупы, мы окажемся в модуле формы и там будет сформирована заготовка процедуры ПриОткрытии.
Все, что мы напишем в этой процедуре будет выполнено при открытии формы. (pic 5.15)

8gl7g5015
Т.е мы написали, что при открытии формы ДатаДолжности при открытии формы устанавливается в текущую дату.
Если вы помните, ранее мы создали периодический регистр сведений, где договорились хранить должности сотрудника.
Чтобы выковырять из регистра сведений необходимую должность нужно знать первое, чью должность мы хотим получить и второе, на какую дату мы хотим увидеть её.
Для этого мы используем метод  регистра сведений ПолучитьПоследнее(КонецПериода, Отбор), где КонецПериода
Определяет момент времени, по который необходимо получить значения ресурсов.
Может задаваться значениями типа Дата, МоментВремени или Граница.
Если параметр не указан, то будут возвращены значения ресурсов самой последней записи регистра.
Отбор
Тип: Структура. Структура, содержащая отбор по измерениям регистра.
Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры - задает отбираемое по данному измерению значение.
Если параметр не указан, то отбор не используется.
Возвращаемое значение:
Тип: Структура. Возвращает структуру, содержащую значения ресурсов.
Представляет собой коллекцию пар КлючИЗначение. При этом ключ может быть только строковым.
К значениям структуры можно обращаться как к свойствам объекта. При этом ключ используется как имя свойства.
Структура используется обычно для хранения небольшого количества значений, каждое из которым имеет некоторое имя.
Итак, чтобы сделать отбор нам необходимо создать структуру с ключем «Сотрудник» и значением: справочник.Сотрудники (строго говоря ссылки на элемент справочника сотрудники)
Т.к. читать из регистра сведений нам придется часто, разумнее поместить процедуру чтения в общий модуль из которого наша процедура будет видна для всех.
Назовем этот общий модуль ЧтениеРегистраСведений.
Для этого в контекстном меню на ветке общие модули нажимаем добавить и вводим в палитре свойств его название. (pic 5.16)

8gl7g5016
Обратите внимание, галочка в свойстве Глобальный должна быть снята, а в свойствах Сервер и Вызов сервера – установлена. (pic 5.17)

8gl7g5017
Пишем функцию чтения должности из регистра сведений и указываем, что она должна выполняться на сервере.(pic 5.18)

8gl7g5018
Теперь вернемся в модуль формы элемента справочника сотрудники и допишем процедуру ПриОткрытии (pic 5.19)

8gl7g5019
Здесь, чтобы присвоить реквизиту ДолжностьСотрудника значение должности мы обращаемся по имени к общему модулю ЧтениеРегистраСведений и через точку к функции этого модуля ПрочитатьЗначениеДолжности.
В качестве ссылки на элемент справочника  сотрудники передаем Объект.Ссылка, а в качестве даты текущую дату.
ОК. Прочитать должность мы теперь можем, но только на текущую дату. Но, что, если мы захотим узнать, а какая должность у сотрудника была вчера?
Для этого вызываем свойства реквизита ДатаДолжности (pic 5.20)

8gl7g5020
В палитре свойств в События нажимаем на значок лупы напротив события ОбработкаВыбора (pic 5.21)

8gl7g5021
В открывшейся заготовке процедуры ДатаДолжностиОбработкаВыбора пишем (pic 5.22)

8gl7g5022
Т.е. практически тоже самое, что и в процедуре при открытии формы, только в качестве даты передаем ВыбранноеЗначение.
Теперь почти готово, осталось только создать механизм записи в регистр сведений, а то читать будет нечего.
Запись в регистр сведений сделаем с помощью менеджера записи регистра сведений.
У нас уже имеется общий модуль для работы с регистром сведений, там и будем продолжать. (pic 5.23)

8gl7g5023
Здесь должно быть все понятно.
Не забудьте в процедуре поставить ключевое слово Экспорт, иначе она будет не видна вне общего модуля.
В модуле формы становимся на Форма, вызываем свойства находим событие ПриЗаписиНаСервере, нажимаем на значок лупы.(pic 5.24)

8gl7g5024
В сформированной заготовке пишем (pic 5.25)

8gl7g5025
Перед записью проверяем изменилась ли значение должности и, если изменилось записываем новое значение в регистр сведений.
Осталось только проверить как это все работает. Жмем F5.
Заходим в подсистему Бухгалтерия и добавляем несколько должностей (pic 5.26)

8gl7g5026
Заходим в справочник сотрудников и выбираем сотрудника Рожков, выставим дату 10.03.2011, выберем должность стажер, запишем.
Выберем дату 14.03.2011 и установим должность водитель-экспедитор, запишем.
Закроем и снова откроем элемент справочника сотрудники Рожков, посмотрим на его должность (pic 5.27)

8gl7g5027
Попробуйте изменить дату на 10.03.2011 (pic 5.28)

8gl7g5028
Замечание: чтобы должности выбирались вот таким компактным списком (pic 5.29)

8gl7g5029
Нужно в свойствах справочник должности за закладке Формы установить галочку Быстрый выбор (pic 5.30)

8gl7g5030
Если присмотреться, то панели навигации, эта та которая в 1С у нас слева, видны два одинаковых пункта Должности, если нажать первый, то мы перейдем к списку справочника должности, второй выведет нас к записям регистра сведений должности (pic 5.31)

8gl7g5031
Что бы не было путаницы в конфигураторе зайдем в свойства регистра сведений Должности и в поле Представление списка запишем Записи должностей.(pic 5.32)

8gl7g5032
Перейдем в 1С, панель навигации у нас изменилась.(pic 5.33)

8gl7g5033
Творение наше работает.
Конечно, по уму перемещение на должность лучше делать приказами, возможно позже мы так и сделаем, а пока и так неплохо.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *