Как работают интервальные регистры в 1С:ЗУП 3 и когда они заполняются

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При работе с современными конфигурациями на платформе 1С:Предприятие 8.3, такими как Зарплата и управление персоналом (ЗУП 3.1) или ERP Управление предприятием, разработчики часто сталкиваются с регистрами сведений, в названии которых присутствует слово Интервальный. Например, КадроваяИсторияСотрудниковИнтервальный или ГрафикРаботыСотрудниковИнтервальный. Понимание механики их работы критически важно для корректного построения запросов и отладки системы. Давайте подробно разберем, что это за объекты, зачем они нужны и в какой момент происходит их актуализация.

Что такое интервальные регистры и зачем они нужны

Для начала проанализируем архитектурную проблему, которую решают эти регистры. В классических конфигурациях (например, ЗУП 2.5) кадровая история хранилась в обычных периодических регистрах сведений. Чтобы получить состояние сотрудника на определенную дату, система обращалась к виртуальной таблице СрезПоследних. Однако при огромном количестве записей и необходимости получать данные по тысячам сотрудников в сложных отчетах, производительность СрезаПоследних падает. Это происходит из-за того, что СУБД приходится выполнять сложные вложенные подзапросы для поиска актуальной записи.

Рассмотрим решение, предложенное методистами 1С: создать вторичные регистры, которые хранят данные в виде готовых временных интервалов. В таких регистрах каждая запись имеет не только дату начала (Период), но и явную дату окончания. Таким образом, любая точка во времени попадает в строго определенный интервал.

Преимущества такого подхода:

  1. Высокая скорость чтения: Вместо использования ресурсоемкой виртуальной таблицы СрезПоследних, мы используем обычную таблицу регистра с простым условием в секции ГДЕ: НужнаяДата МЕЖДУ ДатаНачала И ДатаОкончания.
  2. Упрощение запросов: Нам не нужно думать о том, как получить состояние на дату; мы просто выбираем запись, перекрывающую интересующий нас период.
  3. Работа с будущими периодами: Интервальная схема позволяет легко видеть всю цепочку изменений сотрудника "вперед", что важно для планирования отпусков и графиков.

Момент и механизм заполнения интервальных регистров

Выясним, когда именно заполняются эти данные. Важно понимать, что интервальные регистры — это производные объекты. Данные в них попадают не напрямую из документов, а зеркально отражают содержимое "основных" (базовых) регистров.

Проанализируем техническую цепочку событий:

  1. Пользователь проводит документ (например, Кадровый перевод).
  2. Документ делает движения в основной регистр сведений — КадроваяИсторияСотрудников.
  3. В модуле набора записей основного регистра в процедуре ПриЗаписи срабатывает программный код, который инициирует пересчет интервалов.
  4. Система анализирует все записи по данному сотруднику (физическому лицу) в основном регистре и полностью перезаписывает соответствующие интервалы в регистре КадроваяИсторияСотрудниковИнтервальный.

Таким образом, актуализация происходит в момент записи основного регистра. Это может происходить как при проведении документа, так и при ручной правке записей регистра (если она разрешена). Интервальный регистр обычно является независимым, что позволяет системе обновлять его без необходимости перепроводить документы-регистраторы, просто на основании имеющихся данных в базе.

Особенности структуры данных

Посмотрим на структуру типичного интервального регистра. В нем присутствуют ключевые поля:

Интересной особенностью является обработка наложений. Если в один день происходят два события (например, перевод и изменение оплаты), система в интервальном регистре выстраивает их в строгой последовательности, используя внутренние приоритеты и номера строк, чтобы исключить пересечение периодов с одинаковым смыслом.

Как правильно работать с интервальными регистрами программно

Рассмотрим рекомендации по разработке. Хотя технически мы можем написать прямой запрос к таблице интервального регистра, фирма 1С крайне не рекомендует этого делать. Причина проста: логика формирования интервалов может меняться в обновлениях конфигурации.

Для получения данных рекомендуется использовать методы программного интерфейса (API) общих модулей. Разберем пример использования основного инструмента разработчика — модуля ЗарплатаКадрыПериодическиеРегистры. Рассмотрим фрагмент кода для получения кадровых данных:


// Пример получения данных из интервального регистра через типовой механизм
ПараметрыПолучения = ЗарплатаКадрыПериодическиеРегистры.ПараметрыПолученияДанных();
ПараметрыПолучения.ИмяРегистра = "КадроваяИсторияСотрудников";
ПараметрыПолучения.ДатаАктуальности = ТекущаяДата();
ПараметрыПолучения.ПостроитьЗапрос = Истина;

// Метод сам решит, использовать интервальный регистр или основной
Результат = ЗарплатаКадрыПериодическиеРегистры.СоздатьВТИмяРегистраСрезПоследних(МенеджерВТ, "ВТКадроваяИстория", ПараметрыПолучения);

Метод СоздатьВТИмяРегистраСрезПоследних внутри себя проверяет наличие интервального аналога для указанного регистра. Если интервальный регистр существует и он актуален, запрос будет направлен к нему, что существенно ускорит выполнение кода.

Проблемы рассинхронизации и "кривые руки"

Проанализируем ситуацию, описанную в сообщениях форума: что делать, если в интервальном регистре "фигня" или данные не соответствуют документам? Такое случается при нарушении последовательности проведения документов "задним числом" или при программной записи в основные регистры с отключенными обработчиками событий.

Для исправления подобных ситуаций в типовых конфигурациях предусмотрены специальные инструменты:

  1. Обработка "Пересчет данных интервальных регистров": Ее можно найти через поиск в меню "Все функции" (или "Функции для технического специалиста"). Она позволяет принудительно пересчитать интервалы по выбранному регистру или конкретному сотруднику.
  2. Регламентные задания: В системе могут быть настроены задания, которые в фоновом режиме проверяют целостность интервалов и дозаполняют пропуски, если оперативная запись по какой-то причине не сработала.

Выводы и практические советы

Подведем итог нашего анализа. Интервальные регистры — это мощный инструмент оптимизации, который делает работу системы ЗУП 3 плавной даже на огромных базах данных. При работе с ними следует придерживаться следующих правил:

Разбираясь в таких тонкостях платформенных решений, мы повышаем качество своего кода и понимаем, почему система ведет себя именно так в сложных ситуациях с кадровым учетом и расчетом зарплаты.

← На главную