В типовой конфигурации «1С:Зарплата и управление персоналом 3.1» отчет «Резервы отпусков по сотрудникам» (или «Справка-расчет резервов отпусков») предоставляет подробную информацию о накопленных обязательствах. Однако пользователи часто сталкиваются с проблемой: в данном отчете отсутствует возможность группировки или фильтрации по Подразделениям. Это связано с тем, что данные о резервах хранятся в регистре накопления ОценочныеОбязательстваПоСотрудникам, где измерение «Подразделение» попросту отсутствует.
В этой статье мы подробно разберем, как модифицировать отчет, чтобы получить данные в разрезе структуры предприятия, какие регистры использовать и как правильно настроить систему компоновки данных (СКД), чтобы итоги считались корректно.
Для начала проанализируем, откуда программа берет данные для отчета. Основным источником является регистр накопления ОценочныеОбязательстваПоСотрудникам. Он содержит сведения о суммах резервов, страховых взносах и количестве дней отпуска в разрезе сотрудников и организаций.
Чтобы добавить в отчет Подразделение, нам необходимо обратиться к другому источнику — регистру сведений КадроваяИсторияСотрудников (или его интервальному аналогу). Сложность заключается в том, что сотрудник может перемещаться между подразделениями в течение периода. Поэтому простое соединение «Сотрудник — Подразделение» без учета даты может привести к искажению данных.
Если вы не хотите вносить изменения в основную конфигурацию, первым шагом будет создание копии отчета. Рассмотрим, как это сделать:
РезервыОтпусковПоСотрудникам или СправкаРасчетРезервыОтпусков.Важно: Типовые отчеты в ЗУП 3.1 активно используют механизмы Библиотеки стандартных подсистем (БСП). При сохранении как внешний, отчет может потерять связь с общими модулями конфигурации, которые динамически достраивают запрос. Если при запуске внешнего отчета возникают ошибки, логику придется переносить внутрь схемы компоновки данных (СКД) вручную.
Разберем, как изменить текст запроса, чтобы «прикрутить» подразделение к данным о резервах. Нам необходимо выполнить левое соединение основной таблицы резервов с кадровыми данными. Рассмотрим примерный алгоритм изменения запроса:
В наборе данных СКД мы должны добавить соединение с виртуальной таблицей СрезПоследних регистра КадроваяИсторияСотрудников или использовать временную таблицу, подготовленную процедурами ЗУП.
ВЫБРАТЬ
Резервы.Сотрудник КАК Сотрудник,
Резервы.Организация КАК Организация,
Резервы.СуммаРезерваОстаток КАК СуммаРезерва,
КадровыеДанные.Подразделение КАК Подразделение
ИЗ
РегистрНакопления.ОценочныеОбязательстваПоСотрудникам.Остатки(&Период, ) КАК Резервы
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&Период, ) КАК КадровыеДанные
ПО Резервы.Сотрудник = КадровыеДанные.Сотрудник
Проанализируем ситуацию: использование СрезПоследних подходит для получения остатков на конкретную дату. Если же вам нужны обороты за период, ситуация усложняется. В этом случае рекомендуется использовать «псевдо-вьюшки» ЗУП или программный интерфейс для получения кадровых данных на каждую дату записи регистра.
Для более продвинутой разработки в ЗУП 3.1 лучше использовать встроенную функцию ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета. Это позволит использовать виртуальные таблицы кадровой истории, которые система сама наполнит актуальными данными на даты движений.
Рассмотрим, как профессиональные разработчики рекомендуют получать подразделение. Вместо прямого обращения к регистрам, можно использовать временную таблицу ВТКадроваяИсторияСотрудников. Это гарантирует, что временные переводы и изменения подразделений в течение месяца будут учтены корректно.
После того как поле Подразделение появилось в списке доступных полей, необходимо правильно настроить схему, чтобы программа считала суммы по группам. Выясним причину, почему итоги могут не отображаться:
Сумма(...).Подразделение на закладке «Наборы данных» проверьте роль. Оно не должно быть обязательным измерением, если отчет строится по остаткам, но должно корректно участвовать в иерархии.Подразделение, а внутрь нее поместите группировку по полю Сотрудник.Если после добавления группировки суммы «двоятся» или исчезают, проверьте параметры соединения в запросе. Обычно это происходит, если на одну дату по сотруднику в кадровой истории найдено более одной записи (например, изменение должности и подразделения в один день).
Проанализируем важный методологический нюанс. В ЗУП 3.1 учет резервов ведется по сотруднику в целом в рамках организации. Если сотрудник в середине года перешел из «Отдела продаж» в «Администрацию», накопленный резерв в регистре не переносится автоматически между подразделениями (так как там нет такого измерения).
Поэтому при формировании отчета за период (с оборотами) вы можете увидеть странную картину: списание резерва может произойти в новом подразделении, хотя накоплен он был в старом. Наиболее достоверным вариантом отчета в разрезе подразделений является отчет на точку времени (Остатки), который показывает, в каком подразделении числится сотрудник «сейчас» и какая сумма резерва за ним закреплена.
Если же требуется строгий учет затрат по подразделениям, рекомендуется обратить внимание на документ «Начисление оценочных обязательств по отпускам». На закладке «Расчет обязательств» подразделения заполняются в момент расчета документа. Это может служить альтернативным источником данных для построения аналитики.
Таким образом, мы разобрали основные пути модификации отчета: от простого изменения настроек СКД во внешнем отчете до использования сложных запросов к кадровой истории. Выбор метода зависит от ваших требований к точности данных при кадровых переводах.