При переходе с версии 1С:Зарплата и Управление Персоналом 2.5 на редакцию 3.1 пользователи часто сталкиваются с проблемой неверного расчета остатков отпусков. Одной из главных причин является разница в архитектуре хранения данных: в ЗУП 3.1 существует специализированный регистр накопления ЗаработанныеПраваНаОтпуска, в то время как в ЗУП 2.5 логика построена иначе. Разберем подробно, как работает старая версия программы и как найти «концы» при расхождениях.
Проанализируем ситуацию: в ЗУП 3.1 при проведении кадровых документов (прием, отпуска, прогулы) система сразу делает записи в регистр ЗаработанныеПраваНаОтпуска. Это позволяет мгновенно увидеть состояние прав сотрудника на любой момент времени. В ЗУП 2.5 такого «материализованного» регистра нет. Все права на отпуск в редакции 2.5 являются расчетными величинами, которые вычисляются алгоритмами программы в момент формирования отчета или открытия карточки сотрудника.
Рассмотрим, где именно в ЗУП 2.5 могут храниться данные, влияющие на этот расчет:
ФактическиеОтпуска: здесь фиксируется использование дней отпуска (когда и сколько сотрудник отгулял).СостояниеСотрудниковОрганизаций: отсюда система берет данные о невыходах, которые могут сдвигать рабочий год (например, отпуска за свой счет).ОстаткиОтпусковОрганизаций: это место, где хранятся ручные корректировки и «входящие» остатки на дату начала ведения учета в базе.Если нам необходимо выявить разницу и понять, почему дата отсчета отпуска сдвинулась, мы не можем просто «прочитать регистр». Нам нужно вызвать ту же программную функцию, которую использует сама система. Выясним, как это сделать. Основная логика сосредоточена в общем модуле ПроцедурыУправленияПерсоналом. Для получения таблицы заработанных прав мы можем воспользоваться функцией ОстаткиОтпусков.
Рассмотрим пример кода, который позволит нам выгрузить таблицу периодов и прав так, как их видит ЗУП 2.5:
// Пример вызова функции расчета остатков в ЗУП 2.5
ДатаРасчета = ТекущаяДата();
СотрудникОбъект = Справочники.СотрудникиОрганизаций.НайтиПоКоду("00001");
// Функция возвращает таблицу значений с колонками:
// ВидЕжегодногоОтпуска, ДатаНачалаРабочегоГода, ДатаОкончанияРабочегоГода, КоличествоДней
ТаблицаОстатков = ПроцедурыУправленияПерсоналом.ОстаткиОтпусков(СотрудникОбъект, ДатаРасчета);
Для Каждого СтрокаОтпуска Из ТаблицаОстатков Цикл
Сообщить("Период с: " + СтрокаОтпуска.ДатаНачалаРабочегоГода + " по: " + СтрокаОтпуска.ДатаОкончанияРабочегоГода);
Сообщить("Дней положено: " + СтрокаОтпуска.КоличествоДней);
КонецЦикла;
Именно сравнение результатов этой функции в 2.5 с записями в регистре ЗаработанныеПраваНаОтпуска в 3.1 поможет найти точку расхождения.
Разберем ситуацию, описанную пользователями: сотрудник взял отпуск за свой счет более чем на 14 дней. Согласно законодательству (ст. 121 ТК РФ), время таких отпусков сверх 14 календарных дней в рабочем году не включается в стаж, дающий право на ежегодный основной оплачиваемый отпуск. Следовательно, дата окончания рабочего года должна сдвинуться вперед на количество дней превышения.
В ЗУП 2.5 этот расчет происходит динамически. Программа анализирует периоды отсутствия внутри каждого рабочего года. Если в ЗУП 3.1 после переноса данных дата сдвинулась неверно (например, в декабре вместо февраля), это сигнализирует о том, что данные о невыходах в документах Перенос данных легли некорректно или накопленный итог дней за свой счет за прошлые периоды был интерпретирован иначе.
Посмотрим на типичные причины ошибок при «полном» переносе:
Выясним, какие шаги предпринять, если мы обнаружили расхождение между 2.5 и 3.1:
Перенос данных, рекомендуется ввести документ Ввод остатков отпусков на дату начала учета в новой базе. Это принудительно установит правильные периоды и остатки, подтвержденные кадровиком, и обнулит все предыдущие расчетные ошибки.Кадровый учет — Учет невыходов — Остатки отпусков. Посмотрите, нет ли там ручных корректировок. В ЗУП 2.5 используется форма списка справочника СотрудникиОрганизаций в режиме ФормаОстатковОтпусков, данные для которой берутся из справочника ОстаткиОтпусковОрганизаций. Возможно, кадровики в старой базе когда-то правили данные руками, и эти правки не «подцепились» при автоматическом переносе.Подведем итог: Прямого аналога регистра «Заслуженные права на отпуска» в ЗУП 2.5 не существует. Для анализа используйте программный вызов функции ПроцедурыУправленияПерсоналом.ОстаткиОтпусков и сверяйте полученную таблицу периодов с данными в 3.1. Самым эффективным способом исправления ошибок переноса является ввод корректных остатков через соответствующий документ Ввод остатков отпусков в новой базе.