Почему в 1С:ЗУП 3.1 ломается история графиков работы при их частом изменении и как это исправить?

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

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

В этой статье мы подробно разберем, почему возникает эта архитектурная проблема, как устроены интервальные регистры «под капотом» программы и какие существуют практические способы исправления этой ошибки — как для старых, так и для новых релизов 1С:ЗУП.

В чем суть проблемы и почему «молчат» стандартные регистры?

Проанализируем классическую ситуацию. Сотруднику в течение месяца несколько раз меняли график работы с помощью документов Изменение графика работы или Кадровый перевод. Все документы проведены без ошибок. Если мы откроем стандартный регистр сведений График работы сотрудников, то увидим идеальную картину: записи идут последовательно, периоды не пересекаются, и финальная запись указывает на возврат к исходному графику.

Однако при просмотре истории кадровых изменений в карточке сотрудника или при расчете заработной платы программа ведет себя так, будто действует совершенно другой график. Все дело в том, что начиная с версий 3.1.4/3.1.5, разработчики фирмы «1С» изменили архитектуру получения кадровых данных для повышения быстродействия системы.

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

Архитектурная причина сбоя: как работают интервальные регистры

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

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

Способ 1. Официальное решение для новых релизов (ЗУП 3.1.35.13 и выше)

Фирма «1С» признала проблему рассогласования интервальных регистров системной. Начиная с релизов 3.1.35.13 (и ЗУП КОРП 3.1.35.14), в программе появился официальный встроенный инструмент для исправления таких ошибок.

Если ваша база обновлена до актуального релиза, выполните следующие шаги:

  1. Перейдите в раздел Администрирование, затем выберите пункт Обслуживание (в некоторых интерфейсах — Сервис).
  2. Найдите и откройте техническую обработку «Перезаполнение интервальных регистров».
  3. Запустите процесс перезаполнения. Обработка полностью очистит поврежденные интервальные таблицы (включая графики работы, кадровую историю и плановые начисления) и сформирует их заново на основе исходных проведенных кадровых документов.

Важно: Процедура перезаполнения может занять продолжительное время в зависимости от объема информационной базы. Рекомендуется выполнять ее в период наименьшей активности пользователей.

Способ 2. Быстрый пользовательский «костыль» (для старых релизов)

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

Рассмотрим этот алгоритм пошагово:

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

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

Способ 3. Перепроведение документов в строгой хронологии

Если документов по сотруднику за месяц было введено действительно много, и простой перезапуск интервалов через «Отсутствие» не помог, необходимо восстановить правильную последовательность документов-регистраторов:

  1. Откройте список кадровых документов по данному сотруднику (кадровые переводы, изменения графиков, перемещения).
  2. Отмените проведение всех документов, которые вносили изменения в графики работы или кадровые данные за спорный период (начиная с самого последнего и двигаясь к началу месяца).
  3. Начните проводить документы заново, но теперь в строгой хронологической последовательности: сначала самый ранний документ, затем следующий за ним и так далее до самого позднего.

Такой подход позволяет платформе корректно распределить «секунды» документов в базе данных и правильно рассчитать вытеснение интервалов в регистре График работы сотрудников интервальный.

Способ 4. Программное обновление регистра (для администраторов и разработчиков)

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

Для обновления интервального регистра сведений используется следующий метод платформы:


// Пример вызова обновления интервального регистра программно
РегистрыСведений.ГрафикРаботыСотрудниковИнтервальный.ОбновитьИнтервальныйРегистрСведений(ПараметрыОбновления);

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

Способ 5. Ручное перекрытие графиков новым документом

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

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

← На главную