При работе с конфигурацией 1С:Зарплата и Управление Персоналом (ЗУП) редакции 3.1 программисты часто сталкиваются с дублированием данных в регистрах сведений. Например, наряду с основным регистром КадроваяИсторияСотрудников существуют регистры КадроваяИсторияСотрудниковИспр и КадроваяИсторияСотрудниковИнтервальный. Понимание логики этих объектов критически важно для корректного написания запросов и отладки механизмов расчета. В данной статье мы подробно разберем назначение каждой группы таких регистров.
Рассмотрим ситуацию, когда в системе реализован механизм исправления документов «задним числом». В ЗУП 3 это делается с помощью кнопки «Исправить» в нижней части формы документа (например, в «Приеме на работу» или «Кадровом переводе»).
Проанализируем, зачем здесь нужны регистры с суффиксом Испр. В отличие от ЗУП 2.5, где исправления часто приводили к путанице в движениях, в ЗУП 3 реализована концепция «замещения» данных. Когда мы нажимаем кнопку «Исправить», система создает новый документ, который должен полностью заменить движения старого в основных регистрах. Однако старый документ не удаляется, и его первичные данные должны быть где-то сохранены на случай, если пользователь решит отменить исправление (удалить исправляющий документ).
Алгоритм работы системы:
Испр.ГрафикРаботыСотрудников) записи исходного документа могут помечаться как неактивные или удаляться, уступая место записям нового документа.Испр, найдет «законсервированные» данные и восстановит их в основном регистре.Таким образом, регистры Испр — это служебное хранилище для поддержки целостности цепочек исправлений. В обычных отчетах и расчетах эти данные использовать не нужно.
Иногда возникают ситуации, когда данные в основном регистре сведений не совпадают с фактическими данными из регистров расчета. Это часто встречается в механизме сбора данных для среднего заработка. Выясним причину существования регистров типа ДанныеОВремениДляРасчетаСреднегоОбщийКорректировка.
В ЗУП 3 данные для расчета среднего не вычисляются «на лету» по всем регистрам расчета, так как это было бы слишком медленно. Вместо этого они аккумулируются в специальных регистрах сведений при проведении документов начислений. Если в системе возникают коллизии (например, ручные правки в документах начисления или сложные перерасчеты), система вычисляет разницу (дельту) и записывает ее в корректировочный регистр.
Важный нюанс: при формировании данных для среднего заработка программный интерфейс (API) ЗУП суммирует показатели из трех источников:
ДанныеОВремениДляРасчетаСреднегоОбщий).ДанныеОВремениДляРасчетаСреднегоОбщийКорректировка).СведенияОВремениДляРасчетаСреднегоОбщий).Если вы заметили, что данные при расчете среднего удваиваются, это может свидетельствовать об ошибке в процедурах обновления или о некорректном завершении работы обработчиков, которые не очистили служебные записи в этих регистрах. В таких случаях рекомендуется проверить содержимое корректировочных регистров на наличие «осиротевших» записей, ссылающихся на удаленные или исправленные документы. Чтобы снизить вероятность подобных проблем при обслуживании систем 1С, целесообразно настроить автоматическое обновление и тестирование 1С по расписанию.
Интервальные регистры — это одно из самых значимых архитектурных новшеств ЗУП 3. Разберем по шагам, какую проблему они решают. В классических периодических регистрах 1С (ЗУП 2.5) для получения состояния сотрудника на каждую дату периода приходилось использовать виртуальную таблицу СрезПоследних в цикле или соединении, что крайне ресурсозатратно.
В ЗУП 3 интервальные регистры (например, СостоянияСотрудниковИнтервальный) хранят записи в формате «Дата начала — Дата окончания». Это позволяет получать данные простым условием попадания даты в интервал:
ВЫБРАТЬ
Регистр.Сотрудник,
Регистр.Состояние
ИЗ
РегистрСведений.СостоянияСотрудниковИнтервальный КАК Регистр
ГДЕ
&НужнаяДата МЕЖДУ Регистр.ДатаНачала И Регистр.ДатаОкончания
Рассмотрим преимущества такого подхода:
Проанализируем пример: если сотруднику назначен постоянный график, а затем введен документ «Командировка» на 5 дней, в интервальном регистре график будет «разрезан» на три части: до командировки, во время (с другим состоянием) и после.
Разберем ситуацию, описанную пользователями на форуме: «При расчете среднего заработка данные из регистра исправления суммируются с данными основного регистра». Как мы выяснили выше, регистры Испр не должны участвовать в расчетах. Если это происходит, скорее всего, в запросе ошибочно выбраны не те таблицы или произошел сбой в логике заполнения Корректировки.
Рекомендации по исправлению ошибок в служебных регистрах:
Испр после удаления документов-исправлений через «Объект» (минуя стандартные процедуры).ОбменДанными.Загрузка = Истина), интервальные регистры могут не обновиться, что приведет к неверным данным в кадровых отчетах. В таких ситуациях необходимо вызвать процедуру обновления интервалов из программного интерфейса конфигурации.Таким образом, мы видим, что избыточность данных в ЗУП 3 — это не ошибка, а продуманный механизм, обеспечивающий высокую скорость работы отчетов и надежность при исправлении кадровых документов. При переезде в новую базу или объединении накопленных сведений перенос данных ЗУП 3 — ЗУП 3 обеспечивает сохранение всей информации, включая служебные записи.