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