Как найти и отредактировать запрос в отчете «Личные данные сотрудников» в ЗУП 3.1?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При работе с программным продуктом 1С:Зарплата и управление персоналом 3.1 программисты часто сталкиваются с необходимостью кастомизации типовых отчетов. Одной из самых востребованных задач является изменение логики формирования данных в отчете «Личные данные сотрудников». Сложность заключается в том, что в этой конфигурации большинство кадровых отчетов не являются отдельными объектами метаданных, а строятся на базе универсальных механизмов. Разберем пошагово, как добраться до "сердца" этого отчета — его запроса и схемы компоновки данных.

Особенности архитектуры отчетов в ЗУП 3.1

Прежде всего, проанализируем структуру конфигурации. Если вы попытаетесь найти в дереве метаданных объект с именем ЛичныеДанныеСотрудников, то потерпите неудачу. В ЗУП 3.1 реализован принцип консолидации: множество кадровых отчетов (таких как «Штатные сотрудники», «Личные данные», «Уволенные сотрудники») объединены в один универсальный объект.

Выясним, где именно искать нужные данные. Основным объектом, отвечающим за вывод кадровой информации, является отчет «ОтчетыПоСотрудникам». Именно он содержит в себе десятки вариантов настроек, которые пользователь видит в интерфейсе как отдельные пункты меню. Это сделано для унификации программного кода и упрощения поддержки системы.

Поиск отчета в конфигураторе

Рассмотрим процесс поиска и открытия нужного объекта в режиме «Конфигуратор»:

  1. Откройте дерево метаданных и перейдите в ветку Отчеты.
  2. Найдите объект с идентификатором ОтчетыПоСотрудникам.
  3. Внутри этого объекта расположена основная Схема компоновки данных (СКД). Однако, важно понимать, что простое открытие СКД может не дать полной картины. В ЗУП 3.1 запросы часто формируются динамически в модуле менеджера или модуле объекта.

Разбор динамического формирования запроса

Проанализируем ситуацию: почему недостаточно просто изменить текст запроса в макете СКД? Дело в том, что при формировании отчета система использует общие механизмы, расположенные в модуле менеджера. Зачастую в СКД прописаны только базовые поля, а финальный текст запроса со всеми временными таблицами (например, по стажам, гражданству или образованию) собирается программно.

Для детального изучения логики нам необходимо обратить внимание на следующие методы:

Решение проблемы с фильтрацией по гражданству

Рассмотрим конкретный технический кейс: пользователь жалуется, что при выборе страны «Россия» в отборах отчет выводит всех сотрудников без исключения, тогда как по другим странам фильтр работает корректно. Выясним причину такого поведения.

В системе 1С:ЗУП 3.1 данные о гражданстве хранятся в регистре сведений ГражданствоФизическихЛиц. Существует важный нюанс: если у сотрудника не заполнено гражданство, система по умолчанию считает его гражданином РФ. Программный код отчета часто использует ЛЕВОЕ СОЕДИНЕНИЕ с этим регистром.

Если запрос написан без учета пустых значений, условие фильтра может выглядеть так:


ГДЕ
    ГражданствоФизическихЛиц.Страна = &СтранаРоссия

Однако, так как у многих сотрудников запись в регистре может отсутствовать (что для системы равносильно гражданству РФ), они отсекаются этим фильтром. Для исправления логики в запросе необходимо использовать функцию ЕСТЬNULL. Посмотрим на правильный пример реализации условия:


ГДЕ
    ЕСТЬNULL(ГражданствоФизическихЛиц.Страна, ЗНАЧЕНИЕ(Справочник.СтраныМира.Россия)) = &ВыбраннаяСтрана

Такой подход гарантирует, что сотрудники с незаполненным гражданством будут корректно соотнесены с Россией при фильтрации.

Как увидеть итоговый запрос без отладчика?

Если "копаться" в программном коде слишком долго, проанализируем более быстрый способ получения текста запроса. Для этого нам понадобится внешняя обработка «Консоль системы компоновки данных».

Рассмотрим алгоритм действий:

  1. В режиме конфигуратора найдите отчет ОтчетыПоСотрудникам и сохраните его основную схему (СКД) в файл .xml.
  2. Откройте «Консоль СКД» в пользовательском режиме.
  3. Загрузите сохраненный файл схемы.
  4. Настройте параметры и отборы точно так же, как они установлены в проблемном отчете.
  5. Нажмите кнопку «Выполнить» или «Сформировать запрос». Консоль покажет вам "чистый" SQL-подобный запрос, который 1С отправляет к СУБД. Именно в этом тексте вы сможете увидеть все реальные соединения (JOIN) и условия (WHERE), которые мешают правильной работе отчета.

Редактирование через пользовательские настройки

Перед тем как вносить изменения в код конфигурации (что крайне нежелательно, так как это затруднит будущие обновления), попробуем решить задачу через Изменение варианта отчета.

Выполним следующие шаги:

  1. В окне отчета нажмите кнопку Настройки, затем переключитесь в режим Расширенный.
  2. Перейдите на закладку Отборы.
  3. Проверьте, какое именно поле используется для фильтрации. В ЗУП часто доступно два поля: Гражданство (ссылка на страну) и Гражданство (текст).
  4. Если стандартное «Равно» не работает для России, попробуйте изменить вид сравнения на «В списке» и добавьте туда два значения: «Россия» и «Пустое значение» (незаполненная ссылка). В ряде случаев это позволяет обойти проблему без программирования.

Создание внешнего отчета как лучший способ редактирования

Поскольку ОтчетыПоСотрудникам — это сложный объект, активно обновляемый вендором, внесение правок напрямую в конфигурацию может привести к конфликтам при обновлении. Правильнее будет создать внешний отчет.

Проанализируем, как это сделать правильно:

  1. Скопируйте объект ОтчетыПоСотрудникам во внешнюю обработку.
  2. Чтобы отчет продолжал работать и использовать системные функции ЗУП, вам придется сохранить связи с общими модулями.
  3. Найдите в коде внешнего отчета место, где формируется текст запроса (обычно это функция, возвращающая ТекстЗапроса), и внесите свои корректировки.
  4. Подключите полученный отчет через раздел Печатные формы, отчеты и обработки.

Подводя итог, отметим, что отчет «Личные данные сотрудников» — это лишь верхушка айсберга мощной системы кадровой отчетности. Понимание того, что данные собираются через объект ОтчетыПоСотрудникам и знание специфики хранения гражданства в регистре, позволяет быстро локализовать и устранить любые ошибки в отображении данных.

← На главную