При работе в программе 1С:Зарплата и управление персоналом 3.1 пользователи часто сталкиваются с ситуацией, когда в отчете Личная карточка (Т-2) в разделе VIII «Отпуск» один и тот же период отпуска отображается несколькими строками. Чаще всего это происходит, если отпуск начинается в одном месяце, а заканчивается в другом (так называемый «переходящий» отпуск). Разберем подробно, почему так происходит, и какие способы решения существуют для данной проблемы.
Для начала проанализируем ситуацию: почему система решает разделить одну запись на несколько. В программе 1С:ЗУП данные для раздела VIII отчета Т-2 не собираются напрямую из документов Отпуск, а извлекаются из специального регистра сведений — Регистр отпусков.
Разберем механизм записи в этот регистр. В старых релизах конфигурации (например, в ветке 3.1.5) логика системы была настроена таким образом, чтобы дробить записи по границам календарных месяцев. Это было необходимо для:
Таким образом, если сотрудник уходит в отпуск с 25 июня по 8 июля, документ Отпуск делает две записи в Регистр отпусков: одну за июнь (6 дней) и одну за июль (8 дней). Отчет Т-2 в старых версиях программы просто выводил все записи регистра «как есть», не пытаясь их объединить обратно в один период.
Проанализируем техническую сторону вопроса в современных релизах. Начиная с версии 3.1.10 и выше (включая актуальные ветки 3.1.27/3.1.30), разработчики 1С пересмотрели логику построения отчета Т-2.
В новых версиях в системе компоновки данных (СКД), на которой построен отчет, изменен алгоритм запроса. Теперь программа выполняет автоматическую группировку записей по следующим полям:
Если вы используете релиз 3.1.5.481, самым эффективным решением будет обновление до актуального релиза. После обновления отчет Т-2 начнет «схлопывать» переходящие периоды в одну строку автоматически, даже если в регистре они по-прежнему хранятся раздельно.
Если по каким-то причинам оперативное обновление конфигурации невозможно (например, база сильно доработана и требует длительного тестирования), рассмотрим вариант с подключением внешней печатной формы.
На специализированных ресурсах для разработчиков существуют доработанные версии личной карточки Т-2. В коде такой формы запрос к базе данных модифицирован. Посмотрим на упрощенный пример того, как логически выглядит исправление в коде запроса:
ВЫБРАТЬ
РегистрОтпусков.Сотрудник,
РегистрОтпусков.ВидОтпуска,
МИНИМУМ(РегистрОтпусков.ДатаНачала) КАК ДатаНачала,
МАКСИМУМ(РегистрОтпусков.ДатаОкончания) КАК ДатаОкончания,
СУММА(РегистрОтпусков.КоличествоДней) КАК КоличествоДней,
РегистрОтпусков.ДокументОснование
ИЗ
РегистрСведений.РегистрОтпусков КАК РегистрОтпусков
СГРУППИРОВАТЬ ПО
РегистрОтпусков.Сотрудник,
РегистрОтпусков.ВидОтпуска,
РегистрОтпусков.ДокументОснование
При использовании внешней формы вам не нужно менять типовую конфигурацию. Достаточно добавить её через раздел Администрирование — Печатные формы, отчеты и обработки.
Выясним, можно ли исправить данные непосредственно в базе. Существует документ Перенос данных, который позволяет вносить правки в любые регистры.
Внимание: Этот метод является рискованным и трудоемким. Если вы решите объединить записи вручную в регистре Регистр отпусков, это может привести к расхождениям в расчете остатков отпусков или в отчетах по резервам. Рассмотрим этот вариант только как крайнюю меру, если ошибка возникла в единичном случае и только в одном периоде. Мы рекомендуем воздержаться от массовых правок регистров вручную.
Если отчет нужен «здесь и сейчас» и количество таких сотрудников невелико, воспользуемся стандартной возможностью 1С по редактированию печатных форм:
Помните, что этот способ не исправляет данные в базе, и при повторном формировании отчета деление по периодам появится снова.
Мы выяснили, что разделение отпуска в Т-2 — это не случайная ошибка, а следствие технической реализации учета в старых версиях ЗУП 3.1. Для окончательного решения проблемы проанализируйте возможность обновления программы до версии 3.1.10 или выше. Если обновление недоступно, оптимальным выбором станет использование внешней печатной формы с исправленным алгоритмом группировки данных.