Как найти аналог регистра «Заслуженные права на отпуска» в ЗУП 2.5 и разобраться с расхождениями при переносе в ЗУП 3.1?

Программист 1С:Зарплата и Управление Персоналом Управленческий учет
← На главную

При переходе с версии 1С:Зарплата и Управление Персоналом 2.5 на редакцию 3.1 пользователи часто сталкиваются с проблемой неверного расчета остатков отпусков. Одной из главных причин является разница в архитектуре хранения данных: в ЗУП 3.1 существует специализированный регистр накопления ЗаработанныеПраваНаОтпуска, в то время как в ЗУП 2.5 логика построена иначе. Разберем подробно, как работает старая версия программы и как найти «концы» при расхождениях.

Принципиальное различие механизмов учета

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

Рассмотрим, где именно в ЗУП 2.5 могут храниться данные, влияющие на этот расчет:

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

Как программно получить данные из ЗУП 2.5

Если нам необходимо выявить разницу и понять, почему дата отсчета отпуска сдвинулась, мы не можем просто «прочитать регистр». Нам нужно вызвать ту же программную функцию, которую использует сама система. Выясним, как это сделать. Основная логика сосредоточена в общем модуле ПроцедурыУправленияПерсоналом. Для получения таблицы заработанных прав мы можем воспользоваться функцией ОстаткиОтпусков.

Рассмотрим пример кода, который позволит нам выгрузить таблицу периодов и прав так, как их видит ЗУП 2.5:


// Пример вызова функции расчета остатков в ЗУП 2.5
ДатаРасчета = ТекущаяДата();
СотрудникОбъект = Справочники.СотрудникиОрганизаций.НайтиПоКоду("00001");

// Функция возвращает таблицу значений с колонками: 
// ВидЕжегодногоОтпуска, ДатаНачалаРабочегоГода, ДатаОкончанияРабочегоГода, КоличествоДней
ТаблицаОстатков = ПроцедурыУправленияПерсоналом.ОстаткиОтпусков(СотрудникОбъект, ДатаРасчета);

Для Каждого СтрокаОтпуска Из ТаблицаОстатков Цикл
    Сообщить("Период с: " + СтрокаОтпуска.ДатаНачалаРабочегоГода + " по: " + СтрокаОтпуска.ДатаОкончанияРабочегоГода);
    Сообщить("Дней положено: " + СтрокаОтпуска.КоличествоДней);
КонецЦикла;

Именно сравнение результатов этой функции в 2.5 с записями в регистре ЗаработанныеПраваНаОтпуска в 3.1 поможет найти точку расхождения.

Проблема сдвига рабочего года из-за отпусков «за свой счет»

Разберем ситуацию, описанную пользователями: сотрудник взял отпуск за свой счет более чем на 14 дней. Согласно законодательству (ст. 121 ТК РФ), время таких отпусков сверх 14 календарных дней в рабочем году не включается в стаж, дающий право на ежегодный основной оплачиваемый отпуск. Следовательно, дата окончания рабочего года должна сдвинуться вперед на количество дней превышения.

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

Посмотрим на типичные причины ошибок при «полном» переносе:

Как исправить ситуацию в ЗУП 3.1

Выясним, какие шаги предпринять, если мы обнаружили расхождение между 2.5 и 3.1:

  1. Проверка документа «Ввод остатков отпусков»: это самый надежный способ. Вместо того чтобы пытаться исправить тысячи строк в регистрах Перенос данных, рекомендуется ввести документ Ввод остатков отпусков на дату начала учета в новой базе. Это принудительно установит правильные периоды и остатки, подтвержденные кадровиком, и обнулит все предыдущие расчетные ошибки.
  2. Очистка и перезаполнение регистра: Как советуют опытные специалисты, иногда помогает очистка регистра заработанных прав с последующим пересчетом. Однако в случае «полного переноса» это редко решает проблему системно, так как алгоритм снова обратится к кривым исходным данным.
  3. Проверка справочника в 2.5: Перейдите в меню Кадровый учет — Учет невыходов — Остатки отпусков. Посмотрите, нет ли там ручных корректировок. В ЗУП 2.5 используется форма списка справочника СотрудникиОрганизаций в режиме ФормаОстатковОтпусков, данные для которой берутся из справочника ОстаткиОтпусковОрганизаций. Возможно, кадровики в старой базе когда-то правили данные руками, и эти правки не «подцепились» при автоматическом переносе.

Подведем итог: Прямого аналога регистра «Заслуженные права на отпуска» в ЗУП 2.5 не существует. Для анализа используйте программный вызов функции ПроцедурыУправленияПерсоналом.ОстаткиОтпусков и сверяйте полученную таблицу периодов с данными в 3.1. Самым эффективным способом исправления ошибок переноса является ввод корректных остатков через соответствующий документ Ввод остатков отпусков в новой базе.

← На главную