Как исправить раздвоение записи об увольнении в интервальном регистре при временном переводе в 1С:ЗУП 3.1?

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

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

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

Механика работы интервальных регистров в ЗУП 3.1

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

Этот регистр является «вычисляемым». Он не заполняется напрямую документами в привычном смысле, а формируется программным кодом при проведении кадровых документов. Алгоритм «нарезает» историю сотрудника на непрерывные интервалы. Проблема возникает в следующей ситуации:

  1. Сотрудник переведен временно (например, с 01.05.2023 по 30.09.2023).
  2. Сотрудник увольняется раньше этой даты (например, 13.09.2023).
  3. Система видит дату окончания временного перевода (30.09.2023) и ошибочно считает её значимой точкой изменения состояния, даже если сотрудник уже уволен. В итоге создается первый интервал увольнения с 13.09 по 30.09 и второй — с 01.10 по «пустую» дату (31.12.3999).

Способ 1. Проверка версии конфигурации и патчей

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

Однако, как показывает практика, даже на новых релизах (например, 3.1.27.92) проблема может проявляться, если кадровые документы были оформлены специфическим образом (например, использовался Документ.КадровыйПереводСписком). Рассмотрим, как проверить чистоту конфигурации:

  1. Убедимся, что в базе отсутствуют расширения, влияющие на проведение кадровых документов.
  2. Сравним конфигурацию с поставщиком (cf файл), чтобы исключить наличие кастомных правок в общем модуле КадровыйУчет.

Способ 2. Использование штатной обработки «Обновление интервалов»

Если перепроведение документа Увольнение не помогает, воспользуемся штатным инструментом исправления данных. В ЗУП 3.1 предусмотрена специальная обработка, которая полностью пересчитывает интервальные регистры на основе первичных данных.

Выполним следующие шаги:

  1. Перейдем в раздел Администрирование — Обслуживание.
  2. Развернем подраздел Корректировка данных.
  3. Найдем ссылку Обновление интервалов кадровой истории.
  4. В открывшемся окне выберем конкретного сотрудника, по которому наблюдается разрыв, и нажмем кнопку «Обновить».

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

Способ 3. Манипуляции с датами документов

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

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

Такая последовательность заставляет систему заново инициализировать цепочку событий в регистре КадроваяИсторияСотрудников, что часто устраняет фантомные точки разрыва.

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

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


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

Проанализируем результат: если в основном регистре у записи об увольнении заполнено поле ДействуетДо, или если в предыдущей записи о переводе дата окончания не была корректно «перекрыта» увольнением, мы увидим это в запросе. Это поможет понять, какой именно документ требует перезаполнения.

Способ 5. Ручная корректировка (крайняя мера)

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

Разберем, как это сделать:

  1. Через «Функции для технического специалиста» откроем регистр КадроваяИсторияСотрудниковИнтервальный.
  2. Установим отбор по сотруднику.
  3. Найдем две записи об увольнении.
  4. У первой записи изменим Дату окончания (установим 31.12.3999).
  5. Вторую запись (которая начинается с даты окончания перевода) удалим полностью.

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

← На главную