При работе с типовой конфигурацией «Зарплата и Управление Персоналом» можно обратить внимание на особенности заполнения периода в регистрах сведений. Например, в регистре «Кадровая история сотрудников» записи, созданные разными документами, имеют одинаковую дату, но разное время в пределах суток: прием на работу – 00:00:20, увольнение – 00:00:05, отпуск – 23:59:50. Это обеспечивает корректную хронологию событий и позволяет системе однозначно определять последовательность операций.

Данный механизм реализован с помощью подписки на события – объекта конфигурации, который позволяет назначить общий обработчик для определенных событий объектов метаданных. В данном случае используется подписка «УстановитьСдвигПериодаРегистраСПериодичностьюСекунда».
Для чего это нужно
Записи в регистры, как правило, выполняются с датой документа, соответствующей началу дня. Если несколько документов, влияющих на состояние сотрудника, введены одной датой, возникает неопределенность в очередности событий. Механизм сдвига периода решает эту задачу: он модифицирует время записи, добавляя к началу дня определенное количество секунд в зависимости от типа документа-регистратора.
Как работает подписка (общий принцип)
Обработчик подписки представляет собой экспортируемую процедуру общего модуля. В конфигурации ЗУП эту роль выполняет процедура ЗарплатаКадрыРасширенныйСобытия.УстановитьСдвигПериодаРегистраСПериодичностьюСекунда.
При попытке записи набора записей в регистр, который является источником для данной подписки, выполняется следующий алгоритм:
- Проверка условий применения. На первом этапе процедура определяет, требуется ли вмешательство в период записей. Выполняется проверка на служебные режимы записи, наличие пометок удаления, а также анализируются дополнительные свойства набора записей. В определенных случаях (например, для вторичных записей) сдвиг периода не применяется.
- Определение типа документа-регистратора. Из набора записей извлекаются ссылки на документы, которые являются регистраторами. Для дальнейшей работы используется первый регистратор из набора.
- Получение значения сдвига. Вызывается функция ЗарплатаКадрыРасширенный.ЗначениеСдвигаПериодаЗаписиРегистра(Регистратор). Эта функция содержит сопоставление типов документов и числовых значений сдвига в секундах.
- Например, для документов увольнения возвращается значение 5, для приема на работу – 20, для отпусков – 86350, для утверждения тарифной сетки – 86340. Если тип документа не найден в списке, функция может вернуть Неопределено, что инициирует альтернативный алгоритм расчета времени.

- Например, для документов увольнения возвращается значение 5, для приема на работу – 20, для отпусков – 86350, для утверждения тарифной сетки – 86340. Если тип документа не найден в списке, функция может вернуть Неопределено, что инициирует альтернативный алгоритм расчета времени.
- Корректировка периода записей. Полученное значение сдвига прибавляется к началу дня, который содержится в поле Период каждой записи набора. В результате все записи одного документа получают одинаковое время, соответствующее его типу, что позволяет выстроить правильную последовательность событий внутри одних суток.
Добавление собственного регистра в механизм
При создании нового регистра сведений, для которого требуется аналогичное поведение, нет необходимости копировать или модифицировать существующий программный код. Достаточно в подписку на событие «УстановитьСдвигПериодаРегистраСПериодичностьюСекунда» добавить в «Источники» созданный регистр сведений.

После этого при записи движений в новый регистр документами, уже обрабатываемыми подпиской (прием, увольнение, отпуск и т.д.), период записей будет автоматически корректироваться в соответствии с установленными правилами.
Вступайте в нашу телеграмм-группу Инфостарт