Для чего нужны регистры с суффиксами «Испр», «Корректировка» и интервальные регистры в 1С:ЗУП 3.1?

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

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

Механизм регистров с суффиксом «Испр»

Рассмотрим ситуацию, когда в системе реализован механизм исправления документов «задним числом». В ЗУП 3 это делается с помощью кнопки «Исправить» в нижней части формы документа (например, в «Приеме на работу» или «Кадровом переводе»).

Проанализируем, зачем здесь нужны регистры с суффиксом Испр. В отличие от ЗУП 2.5, где исправления часто приводили к путанице в движениях, в ЗУП 3 реализована концепция «замещения» данных. Когда мы нажимаем кнопку «Исправить», система создает новый документ, который должен полностью заменить движения старого в основных регистрах. Однако старый документ не удаляется, и его первичные данные должны быть где-то сохранены на случай, если пользователь решит отменить исправление (удалить исправляющий документ).

Алгоритм работы системы:

  1. При создании документа-исправления система копирует текущие движения исходного документа в соответствующий регистр с суффиксом Испр.
  2. В основном регистре (например, ГрафикРаботыСотрудников) записи исходного документа могут помечаться как неактивные или удаляться, уступая место записям нового документа.
  3. Если пользователь решит отменить исправление и удалит новый документ, система обратится к регистру Испр, найдет «законсервированные» данные и восстановит их в основном регистре.

Таким образом, регистры Испр — это служебное хранилище для поддержки целостности цепочек исправлений. В обычных отчетах и расчетах эти данные использовать не нужно.

Регистры «Корректировка» и расчет среднего заработка

Иногда возникают ситуации, когда данные в основном регистре сведений не совпадают с фактическими данными из регистров расчета. Это часто встречается в механизме сбора данных для среднего заработка. Выясним причину существования регистров типа ДанныеОВремениДляРасчетаСреднегоОбщийКорректировка.

В ЗУП 3 данные для расчета среднего не вычисляются «на лету» по всем регистрам расчета, так как это было бы слишком медленно. Вместо этого они аккумулируются в специальных регистрах сведений при проведении документов начислений. Если в системе возникают коллизии (например, ручные правки в документах начисления или сложные перерасчеты), система вычисляет разницу (дельту) и записывает ее в корректировочный регистр.

Важный нюанс: при формировании данных для среднего заработка программный интерфейс (API) ЗУП суммирует показатели из трех источников:

Если вы заметили, что данные при расчете среднего удваиваются, это может свидетельствовать об ошибке в процедурах обновления или о некорректном завершении работы обработчиков, которые не очистили служебные записи в этих регистрах. В таких случаях рекомендуется проверить содержимое корректировочных регистров на наличие «осиротевших» записей, ссылающихся на удаленные или исправленные документы. Чтобы снизить вероятность подобных проблем при обслуживании систем 1С, целесообразно настроить автоматическое обновление и тестирование 1С по расписанию.

Интервальные регистры: производительность и точность

Интервальные регистры — это одно из самых значимых архитектурных новшеств ЗУП 3. Разберем по шагам, какую проблему они решают. В классических периодических регистрах 1С (ЗУП 2.5) для получения состояния сотрудника на каждую дату периода приходилось использовать виртуальную таблицу СрезПоследних в цикле или соединении, что крайне ресурсозатратно.

В ЗУП 3 интервальные регистры (например, СостоянияСотрудниковИнтервальный) хранят записи в формате «Дата начала — Дата окончания». Это позволяет получать данные простым условием попадания даты в интервал:


ВЫБРАТЬ
    Регистр.Сотрудник,
    Регистр.Состояние
ИЗ
    РегистрСведений.СостоянияСотрудниковИнтервальный КАК Регистр
ГДЕ
    &НужнаяДата МЕЖДУ Регистр.ДатаНачала И Регистр.ДатаОкончания

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

  1. Скорость: Поиск по интервалам работает на порядок быстрее, чем расчет среза последних на каждую дату.
  2. Временные переводы: Если сотрудник переведен на другую должность временно (указана «Дата по»), интервальный регистр сразу содержит две записи: одну на период перевода и вторую (возвратную) на период после его окончания. В обычном регистре сведений «возвратной» записи нет до тех пор, пока не наступит дата события.
  3. Вытеснение: Система автоматически «разрезает» интервалы при вводе перекрывающихся документов (например, больничный внутри отпуска).

Проанализируем пример: если сотруднику назначен постоянный график, а затем введен документ «Командировка» на 5 дней, в интервальном регистре график будет «разрезан» на три части: до командировки, во время (с другим состоянием) и после.

Типичные проблемы и методы их решения

Разберем ситуацию, описанную пользователями на форуме: «При расчете среднего заработка данные из регистра исправления суммируются с данными основного регистра». Как мы выяснили выше, регистры Испр не должны участвовать в расчетах. Если это происходит, скорее всего, в запросе ошибочно выбраны не те таблицы или произошел сбой в логике заполнения Корректировки.

Рекомендации по исправлению ошибок в служебных регистрах:

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

← На главную