Учебник 1С РЕГИСТРЫ СВЕДЕНИЙ
Кроме фамилии имени и отчества нам желательно знать еще некоторые сведения о сотруднике, например, его должность.
Штатное расписание компании мы будем хранить в отдельном справочнике, назовем его Должности. Заведем его.
Процедура добавления должна быть вам знакома из прошлой главы , повторятся не буду. (pic 5.1)
Для подсистемы Бухгалтерия включим видимость команды Должности:создать (pic 5.2)
Каждому сотруднику теперь нужно назначить должность.
Можно создать отдельный реквизит в справочнике сотрудники с типом ссылки на справочник Должности.
Но не исключено, что кто-то из сотрудников окажется карьеристом и будет расти по карьерной лестнице.
Или водитель вначале будет стажером, потом перейдет в статус водителя-экспедитора.
При расчете зарплаты это обстоятельство нужно учитывать.
Так или иначе нам необходимо где-то хранить изменения в статусе сотрудника.
Для этой цели идеально подходит такой объект 1С, который называется периодическим регистром сведений. Создадим его.
Находим в дереве ветвь Регистры сведений. Через контекстное меню добавляем новый регистр, называем его Должности, периодичность – в пределах дня, режим записи – независимый.
Независимый означает, что мы его можем редактировать вручную.(pic 5.3)
Заходим на вкладку Подсистемы, устанавливаем видимость для подсистемы Бухгалтерия.
Заходим на вкладку Данные и добавляем измерение Сотрудники тип СправочникСотрудники.
Ссылка (pic 5.4) Именно по этому измерению система будет определять какому сотруднику какая должность соответствует.
Добавляем ресурс должность, в нем будем хранить должность сотрудника на определенную дату.(pic 5.4a)
Должно получиться так (pic 5.5)
Отредактируем справочник сотрудники.
Зайдем в свойства справочника на вкладку формы.
Вызовем конструктор формы элемента, щелкнув напротив соответствующей записи на значок лупы.
Появится конструктор формы, нажмем готово. (pic 5.7)
Появится окно разделенное на три части.
В правом верхнем окне добавим два реквизита ДатаДолжности (pic 5.8а) с заголовком Актуальная дата
Обратите внимание, что Тип должен быть "Дата" и состав даты "Дата"
И ДолжностьСотрудника (pic 5.8)
Захватим мышкой и последовательно перетащим влево.
Внизу можно видеть, что добавленные реквизиты появились в форме элемента.
Давайте немного поправим размещение. Сейчас у нас наши реквизиты размещены друг под другом.
Лучше разместить их в одну линию.
Для этого нажмем на кнопку добавить (зеленый кружок с плюсом) и выберем Группа-обычная группа (pic 5.9)
В свойствах группы укажем группировка Горизонтальная (pic 5.10)
И мышкой перетащим наши вновь созданные реквизиты в новую группу (pic 5.11)
Теперь наши реквизиты выстроились в линию (pic 5.12)
Т.к. должность сотрудника храниться в регистре сведений, нам необходимо ее оттуда извлечь.
Регистр сведений Должности периодический, т.е. значение его зависит от даты на которую мы хотим его прочитать.
Дату мы будем брать из реквизита ДатаДолжности, которая при открытии справочника будет устанавливаться в текущую дату.
Внизу редактирования формы есть закладка, которая называется Модуль. (pic 5.13)
Перейдем на нее. Пока здесь нет ничего. Вернемся на вкладку Форма.
В верхнем окне станем на Форма и вызовем через контекстное меню палитру свойств. (pic 5.14)
Внизу в группе События напротив события ПриОткрытии щелкнув на значок лупы, мы окажемся в модуле формы и там будет сформирована заготовка процедуры ПриОткрытии.
Все, что мы напишем в этой процедуре будет выполнено при открытии формы. (pic 5.15)
Т.е мы написали, что при открытии формы ДатаДолжности при открытии формы устанавливается в текущую дату.
Если вы помните, ранее мы создали периодический регистр сведений, где договорились хранить должности сотрудника.
Чтобы выковырять из регистра сведений необходимую должность нужно знать первое, чью должность мы хотим получить и второе, на какую дату мы хотим увидеть её.
Для этого мы используем метод регистра сведений ПолучитьПоследнее(КонецПериода, Отбор), где КонецПериода
Определяет момент времени, по который необходимо получить значения ресурсов.
Может задаваться значениями типа Дата, МоментВремени или Граница.
Если параметр не указан, то будут возвращены значения ресурсов самой последней записи регистра.
Отбор
Тип: Структура. Структура, содержащая отбор по измерениям регистра.
Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры - задает отбираемое по данному измерению значение.
Если параметр не указан, то отбор не используется.
Возвращаемое значение:
Тип: Структура. Возвращает структуру, содержащую значения ресурсов.
Представляет собой коллекцию пар КлючИЗначение. При этом ключ может быть только строковым.
К значениям структуры можно обращаться как к свойствам объекта. При этом ключ используется как имя свойства.
Структура используется обычно для хранения небольшого количества значений, каждое из которым имеет некоторое имя.
Итак, чтобы сделать отбор нам необходимо создать структуру с ключем «Сотрудник» и значением: справочник.Сотрудники (строго говоря ссылки на элемент справочника сотрудники)
Т.к. читать из регистра сведений нам придется часто, разумнее поместить процедуру чтения в общий модуль из которого наша процедура будет видна для всех.
Назовем этот общий модуль ЧтениеРегистраСведений.
Для этого в контекстном меню на ветке общие модули нажимаем добавить и вводим в палитре свойств его название. (pic 5.16)
Обратите внимание, галочка в свойстве Глобальный должна быть снята, а в свойствах Сервер и Вызов сервера – установлена. (pic 5.17)
Пишем функцию чтения должности из регистра сведений и указываем, что она должна выполняться на сервере.(pic 5.18)
Теперь вернемся в модуль формы элемента справочника сотрудники и допишем процедуру ПриОткрытии (pic 5.19)
Здесь, чтобы присвоить реквизиту ДолжностьСотрудника значение должности мы обращаемся по имени к общему модулю ЧтениеРегистраСведений и через точку к функции этого модуля ПрочитатьЗначениеДолжности.
В качестве ссылки на элемент справочника сотрудники передаем Объект.Ссылка, а в качестве даты текущую дату.
ОК. Прочитать должность мы теперь можем, но только на текущую дату. Но, что, если мы захотим узнать, а какая должность у сотрудника была вчера?
Для этого вызываем свойства реквизита ДатаДолжности (pic 5.20)
В палитре свойств в События нажимаем на значок лупы напротив события ОбработкаВыбора (pic 5.21)
В открывшейся заготовке процедуры ДатаДолжностиОбработкаВыбора пишем (pic 5.22)
Т.е. практически тоже самое, что и в процедуре при открытии формы, только в качестве даты передаем ВыбранноеЗначение.
Теперь почти готово, осталось только создать механизм записи в регистр сведений, а то читать будет нечего.
Запись в регистр сведений сделаем с помощью менеджера записи регистра сведений.
У нас уже имеется общий модуль для работы с регистром сведений, там и будем продолжать. (pic 5.23)
Здесь должно быть все понятно.
Не забудьте в процедуре поставить ключевое слово Экспорт, иначе она будет не видна вне общего модуля.
В модуле формы становимся на Форма, вызываем свойства находим событие ПриЗаписиНаСервере, нажимаем на значок лупы.(pic 5.24)
В сформированной заготовке пишем (pic 5.25)
Перед записью проверяем изменилась ли значение должности и, если изменилось записываем новое значение в регистр сведений.
Осталось только проверить как это все работает. Жмем F5.
Заходим в подсистему Бухгалтерия и добавляем несколько должностей (pic 5.26)
Заходим в справочник сотрудников и выбираем сотрудника Рожков, выставим дату 10.03.2011, выберем должность стажер, запишем.
Выберем дату 14.03.2011 и установим должность водитель-экспедитор, запишем.
Закроем и снова откроем элемент справочника сотрудники Рожков, посмотрим на его должность (pic 5.27)
Попробуйте изменить дату на 10.03.2011 (pic 5.28)
Замечание: чтобы должности выбирались вот таким компактным списком (pic 5.29)
Нужно в свойствах справочник должности за закладке Формы установить галочку Быстрый выбор (pic 5.30)
Если присмотреться, то панели навигации, эта та которая в 1С у нас слева, видны два одинаковых пункта Должности, если нажать первый, то мы перейдем к списку справочника должности, второй выведет нас к записям регистра сведений должности (pic 5.31)
Что бы не было путаницы в конфигураторе зайдем в свойства регистра сведений Должности и в поле Представление списка запишем Записи должностей.(pic 5.32)
Перейдем в 1С, панель навигации у нас изменилась.(pic 5.33)
Творение наше работает.
Конечно, по уму перемещение на должность лучше делать приказами, возможно позже мы так и сделаем, а пока и так неплохо.