При разработке отчетов на системе компоновки данных (СКД) часто возникает ситуация, когда необходимо передать в запрос служебный параметр. Мы устанавливаем его значение программно, но при формировании отчета 1С автоматически выводит этот параметр в шапку вместе с пользовательскими настройками. Это загромождает интерфейс и путает пользователя, так как параметр является техническим. Разберем подробно, какими способами можно скрыть конкретный параметр, оставив остальные видимыми.
Многие начинающие разработчики пробуют решить задачу через «Прочие настройки» варианта отчета. Если в конфигураторе на закладке «Настройки» выбрать пункт «Выводить параметры» и установить значение «Не выводить», то из шапки исчезнут абсолютно все параметры. Это не всегда подходит, так как пользователю может быть важно видеть, например, период отчета или организацию. Проанализируем ситуацию: нам нужно точечное управление видимостью. Рассмотрим по шагам возможные варианты реализации.
Это самый простой и правильный с точки зрения архитектуры СКД метод. Если параметр не должен редактироваться пользователем и не должен отображаться, выполним следующие действия:
Важный нюанс: если вы устанавливаете значение этого параметра программно через КомпоновщикНастроек.Настройки.ПараметрыДанных, система все равно может решить вывести его в заголовок, так как он считается «используемым». В этом случае перейдем к следующим методам.
Если ваша конфигурация построена на базе БСП (например, УТ 11, ERP, БП 3.0), то управление видимостью параметров реализовано на уровне стандартов разработки. Рассмотрим, как это сделать через модуль менеджера отчета.
В модуле менеджера отчета найдем или создадим процедуру ОпределитьНастройкиОтчета. В ней мы можем заполнить массив скрытых параметров, которые система не будет выводить в шапку.
Процедура ОпределитьНастройкиОтчета(Настройки) Экспорт
// Скрываем конкретные параметры из заголовка отчета
Настройки.ПараметрыОтчета.СкрытыеПараметры.Добавить("МойСлужебныйПараметр");
// Также можно управлять общим выводом настроек
Настройки.ПараметрыОтчета.ВыводитьПараметры = "ТолькоИзмененные";
КонецПроцедуры
Этот метод является наиболее «чистым» для современных конфигураций 1С, так как он не ломает логику компоновки и корректно обрабатывается стандартными механизмами вывода отчетов.
Как было отмечено в обсуждении на форуме, иногда стандартные методы не срабатывают или отчет имеет сложную структуру макетов. В этом случае можно прибегнуть к хитрости с оформлением. Выясним, как это работает:
Мы можем создать элемент условного оформления для области, где выводится параметр, и установить его размеры в минимально возможные значения. Рассмотрим алгоритм:
1 или даже 0.1 (если платформа позволяет).Хотя этот метод помог автору темы, мы рекомендуем использовать его с осторожностью, так как в табличном документе могут остаться едва заметные пустые области или «схлопнутые» ячейки.
Если отчет формируется программно в модуле объекта (процедура ПриКомпоновкеРезультата), мы имеем полный контроль над итоговым ТабличныйДокумент. Разберем ситуацию, когда мы хотим найти текст параметра в уже сформированном заголовке и удалить эту строку.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Выполняем стандартную компоновку
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
// Теперь ищем и удаляем ненужный параметр из шапки
Область = ДокументРезультат.НайтиТекст("ИмяМоегоПараметра");
Если Область <> Неопределено Тогда
// Удаляем строку, в которой найден текст
НомерСтроки = Область.Верх;
ДокументРезультат.УдалитьОбласть(ДокументРезультат.Область(НомерСтроки, , НомерСтроки, ), ТипЗаполненияОбластиТабличногоДокумента.ПовторятьПрямоугольник);
КонецЕсли;
КонецПроцедуры
Этот метод гарантирует результат, но требует написания кода вывода отчета вручную. Мы проанализировали этот код и видим, что он позволяет точечно «подчистить» результат перед показом пользователю. Для освоения ручной компоновки данных пригодятся примеры программной работы со схемами СКД и процессорами вывода.
Посмотрим на свойство «Выводить параметры» в настройках варианта еще раз. Кроме значений «Включать» и «Не выводить», там есть опция «Только измененные». Это очень мощный инструмент.
Если в самой схеме (в конфигураторе) вы установите для параметра какое-то значение по умолчанию, и при программной установке вы будете присваивать точно такое же значение, то СКД посчитает параметр не измененным. В режиме «Только измененные» такой параметр не будет выведен в шапку. Это позволяет скрывать программно заполняемые константы или значения, которые не меняются в процессе работы отчета.
Подводя итог, выберем оптимальную стратегию:
СкрытыеПараметры в модуле менеджера.ТабличныйДокумент только в самых крайних случаях, когда нужно скрыть параметр, который обязательно должен быть «используемым» и «измененным» с точки зрения СКД.Проанализировав все способы, мы видим, что система 1С предоставляет достаточно гибкости для того, чтобы сделать отчет удобным для конечного пользователя, скрыв всю внутреннюю «кухню» программных расчетов.