Как добавить значение из регистра сведений в отчеты СКД без изменения всех отчетов в 1С:ЗУП 3

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

При внедрении управленческого учета в конфигурации 1С:Зарплата и управление персоналом 3 часто возникает потребность закрепить за сотрудниками управленческие подразделения и выводить эти данные во все типовые кадровые и расчетные отчеты. Переписывать схемы компоновки данных десятков типовых отчетов вручную нерационально, так как это усложнит последующие обновления конфигурации. Рассмотрим архитектурные подходы и штатные механизмы платформы, которые позволяют решить задачу централизованно.

Анализ требований к данным и отображению иерархии

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

  1. Необходимость ведения истории: если управленческое подразделение меняется во времени, требуется периодический регистр сведений. Если же сотруднику назначается подразделение единожды на весь период работы (или требуется хранить только актуальное значение), регистр сведений является избыточной сущностью.
  2. Отображение иерархии: СКД умеет автоматически строить древовидную группировку (режимы Иерархия и Только иерархия) только для ссылочных полей, указывающих на иерархический справочник (например, справочник подразделений). Если данные хранятся в виде строки или ссылки на плоский список, иерархическое дерево без дополнительных настроек построено не будет.

Решение 1. Использование штатных дополнительных реквизитов БСП

Если для управленческого подразделения не требуется вести периодическую кадровую историю, самым чистым решением является использование подсистемы Свойства (дополнительные реквизиты) Библиотеки стандартных подсистем. Разберем по шагам, как это работает:

  1. Перейдем в раздел Администрирование — Общие настройки — Дополнительные реквизиты и сведения.
  2. Для справочника Сотрудники добавим новый дополнительный реквизит, указав в качестве типа значения ссылку на справочник подразделений (или отдельный иерархический справочник управленческих структур).
  3. Заполним созданный реквизит в карточках сотрудников.

Преимущество этого метода заключается в том, что платформа и СКД автоматически включают дополнительные реквизиты во все отчеты, где присутствует поле Сотрудник. В пользовательских настройках любого отчета пользователь может раскрыть сотрудника «плюсиком» и выбрать поле Сотрудник.[УправленческоеПодразделение] как для вывода в колонки, так и для группировки строк с типом Иерархия. При этом конфигурация остается полностью типовой и не требует программных доработок.

Решение 2. Подключение к механизму представлений ЗУП 3

Если управленческое подразделение меняется со временем и данные обязательно должны храниться в периодическом регистре сведений, штатные допреквизиты не подойдут. В конфигурации 1С:ЗУП 3 большинство зарплатных и кадровых отчетов формируются не прямыми обращениями к физическим таблицам базы данных, а через специальный механизм представлений.

Выясним принцип работы этого механизма. В схемах компоновки данных типовых отчетов вместо реальных таблиц запросы обращаются к виртуальным таблицам-заглушкам. Перед компоновкой макета в общем модуле ЗарплатаКадрыОбщиеНаборыДанных вызывается процедура ЗаполнитьОбщиеИсточникиДанныхОтчета, которая подменяет заглушки текстами реальных запросов и заполняет временные таблицы (в частности, ВТКадровыеДанныеСотрудников).

Чтобы добавить данные из собственного регистра во все отчеты, использующие кадровый срез, выполним доработку в расширении конфигурации:

  1. В расширении подключим функцию общего модуля КадровыйУчетБазовый.ЗапросВТКадровыеДанныеСотрудников с аннотацией &ИзменениеИКонтроль.
  2. В текст формируемого запроса добавим левое соединение со срезом последних нашего регистра сведений по сотруднику на расчетную дату отчета:
    
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УпрПодразделенияСотрудников.СрезПоследних(&ПериодФормирования, ) КАК УпрПодразделения
    ПО ВТСотрудники.Сотрудник = УпрПодразделения.Сотрудник
    
  3. В список полей выборки временной таблицы добавим ресурс регистра: УпрПодразделения.УпрПодразделение КАК УпрПодразделение.

При таком подходе данные управленческого подразделения централизованно попадают во временные таблицы кадровых данных отчетов системы на нужный срез дат.

Решение 3. Программная модификация СКД на лету

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

Разберем реализацию этого механизма:

  1. В расширении перехватим процедуру ПриСозданииНаСервере общей формы ОбщаяФорма.ФормаОтчета (или подсистемы вариантов отчетов БСП).
  2. Проанализируем коллекцию полей схемы компоновки отчета Отчет.СхемаКомпоновкиДанных.
  3. Если среди доступных полей присутствует поле Сотрудник, программно добавим в набор данных новое поле или вычисляемое поле УпрПодразделение.
  4. Укажем для добавленного поля тип значения ссылочного иерархического справочника, чтобы СКД предоставила стандартные варианты вывода иерархии в группировках.

Посмотрим на пример программного добавления поля в набор данных схемы компоновки:


НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Найти("НаборДанных1");
Если НаборДанных <> Неопределено Тогда
    ПолеСотрудник = НаборДанных.Поля.Найти("Сотрудник");
    Если ПолеСотрудник <> Неопределено И НаборДанных.Поля.Найти("УпрПодразделение") = Неопределено Тогда
        НовоеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
        НовоеПоле.Поле = "УпрПодразделение";
        НовоеПоле.ПутьКДанным = "УпрПодразделение";
        НовоеПоле.Заголовок = "Упр. подразделение";
    КонецЕсли;
КонецЕсли;

Совместное использование механизма представлений для выборки данных и программного расширения схем через общую форму отчетов позволяет централизованно внедрить управленческий разрез во все кадровые отчеты 1С:ЗУП 3 без снятия типовой конфигурации с поддержки.

← На главную