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