Разработчики, приступающие к доработке типовых отчетов в конфигурации «1С:Зарплата и управление персоналом 3» (ЗУП 3), часто сталкиваются с неожиданным поведением системы компоновки данных (СКД). При попытке скрыть параметры или отборы через стандартные настройки схемы компоновки, например, отключая флаги в КомпоновщикНастроек.Настройки.ПараметрыВывода, отчет все равно продолжает выводить шапку с организацией, периодом и другими фильтрами.
В этой статье мы подробно разберем, почему стандартные механизмы СКД игнорируются в ЗУП 3, как устроена архитектура вывода отчетов в этой конфигурации и какие существуют практические способы решения этой задачи.
Дело в том, что в конфигурациях, построенных на базе Библиотеки Стандартных Подсистем (БСП) — к которым относится и ЗУП 3, — выводом заголовков, параметров, структуры и отборов управляет не «чистый» процессор вывода СКД, а специализированная подсистема «Варианты отчетов» совместно с общим модулем ЗарплатаКадрыОтчеты.
Когда пользователь нажимает кнопку «Сформировать», в модуле объекта отчета вызывается предопределенная процедура ПриКомпоновкеРезультата. Внутри этой процедуры стандартный механизм вывода платформы принудительно отключается с помощью оператора:
СтандартнаяОбработка = Ложь;
После этого управление передается процедурам общего модуля:
ЗарплатаКадрыОтчеты.ПриКомпоновкеРезультатаВТабличныйДокумент(ЭтотОбъект, ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка);
Именно этот общий модуль программно генерирует и выводит шапку отчета, форматирует периоды и добавляет таблицы отборов, задействуя собственные макеты оформления БСП. Из-за этого изменения, внесенные напрямую в параметры вывода компоновщика СКД, игнорируются программным кодом БСП.
Давайте разберем по шагам несколько эффективных способов решения этой проблемы, в зависимости от ваших конечных целей.
Если вам необходимо полностью убрать вывод шапки с фильтрами и параметрами программным путем, делать это нужно до того, как управление будет передано общему модулю вывода. Для управления логикой формирования БСП использует дополнительные свойства настроек компоновщика.
Мы можем вставить специальные флаги в структуру дополнительных свойств в модуле объекта отчета внутри процедуры ПриКомпоновкеРезультата:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Отключаем вывод отборов БСП
КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВыводитьОтборы", Ложь);
// Отключаем вывод стандартного заголовка отчета
КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВыводитьЗаголовок", Ложь);
// Вызываем типовой механизм формирования отчета БСП
ЗарплатаКадрыОтчеты.ПриКомпоновкеРезультатаВТабличныйДокумент(ЭтотОбъект, ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка);
КонецПроцедуры
Этот способ позволяет чисто и безболезненно отключить вывод лишней информации, оставив вывод тела самого отчета нетронутым.
Довольно часто разработчики сталкиваются с тем, что при формировании отчета «Полный свод начислений и удержаний» за произвольный период (например, с 1 по 15 января) в шапку все равно выводится текст «Январь» как за целый месяц. Это связано с тем, что данный отчет ориентирован на период регистрации (месяц начисления), а не на интервал дат.
Чтобы заставить отчет выводить точный период в формате «с 01.01.2026 по 15.01.2026», выполните следующие действия в настройках структуры отчета:
Входящее сальдо периода, а «Сальдо по итогам расчетов за месяц» — на Сальдо по итогам расчетов за период.После изменения структуры данных БСП автоматически перестроит алгоритм формирования текстового представления периода и выведет его в формате диапазона дат.
Что делать, если вам нужно не просто скрыть параметры, а изменить их оформление? Например, вместо краткого наименования организации вывести полное юридическое наименование, или сформировать кастомную строку периода в виде «с 1 по 15 января 2026 года».
В этом случае проще всего использовать метод пост-обработки результирующего табличного документа. Суть метода заключается в том, что мы позволяем БСП полностью сформировать отчет в ДокументРезультат, после чего программно находим нужные ячейки по тексту и заменяем их значения на наши собственные.
Рассмотрим пример реализации такого алгоритма в процедуре ПриКомпоновкеРезультата:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// 1. Формируем отчет стандартным методом БСП
ЗарплатаКадрыОтчеты.ПриКомпоновкеРезультатаВТабличныйДокумент(ЭтотОбъект, ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка);
// 2. Выполняем поиск и замену значений в полученном табличном документе
// Ищем ячейку с текстом заголовка организации
ОбластьОрганизации = ДокументРезультат.НайтиТекст("Организация:");
Если ОбластьОрганизации <> Неопределено Тогда
// Получаем ячейку, которая находится правее найденной метки
ЯчейкаЗначенияОрг = ДокументРезультат.Область(ОбластьОрганизации.Верх, ОбластьОрганизации.Лево + 1);
// Получаем объект организации по краткому наименованию и берем его полное имя
КраткоеИмя = ЯчейкаЗначенияОрг.Текст;
ПолноеНаименование = ПолучитьПолноеНаименованиеОрганизации(КраткоеИмя);
Если ЗначениеЗаполнено(ПолноеНаименование) Тогда
ЯчейкаЗначенияОрг.Текст = ПолноеНаименование;
КонецЕсли;
КонецЕсли;
// Аналогично корректируем представление периода
ОбластьПериода = ДокументРезультат.НайтиТекст("Период:");
Если ОбластьПериода <> Неопределено Тогда
ЯчейкаЗначенияПериода = ДокументРезультат.Область(ОбластьПериода.Верх, ОбластьПериода.Лево + 1);
// Допустим, мы хотим принудительно задать красивый формат
ЯчейкаЗначенияПериода.Текст = "с 01 по 15 января 2026 г.";
КонецЕсли;
КонецПроцедуры
Функция ПолучитьПолноеНаименованиеОрганизации(КраткоеНаименование) Экспорт
// Логика получения полного наименования организации из базы данных
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Организации.НаименованиеПолное
|ИЗ
| Справочник.Организации КАК Организации
|ГДЕ
| Организации.Наименование = &Наименование";
Запрос.УстановитьПараметр("Наименование", КраткоеНаименование);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.НаименованиеПолное;
КонецЕсли;
Возврат "";
КонецФункции
Этот подход избавляет вас от необходимости детально разбираться в сложных внутренних механизмах БСП и переопределять макеты компоновщика. Мы работаем напрямую с готовым визуальным отображением отчета.
Если вам необходимо кардинально переделать внешний вид шапки отчета, рекомендуется использовать макеты компоновки данных:
ИмяМоейШапки.ИмяМоейШапки.С помощью этого метода вы добьетесь идеального визуального оформления шапки отчета, полностью контролируя каждую выводимую ячейку на уровне макета СКД.
Проанализировав все методы, вы можете выбрать наиболее подходящий под ваши задачи. Для быстрого скрытия используйте дополнительные свойства компоновщика, для изменения текста «на лету» — пост-обработку табличного документа, а для полной переработки дизайна — собственные макеты СКД.