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