Как в СКД вывести произвольное поле в макете и убрать служебные надписи отбора

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

При разработке отчетов на схеме компоновки данных (СКД) часто возникает необходимость вывода параметров или пользовательских полей (например, ФИО сотрудника или организации) в шапку отчета. При этом стандартная системная таблица отборов добавляет служебный текст со словами Отбор, Равно, В списке, что делает внешний вид отчета громоздким. Разберем, почему поле может не отображаться в произвольном макете СКД и как аккуратно вывести нужные данные без лишней системной информации.

Причины, по которым поле не отображается в произвольном макете СКД

Выясним основные технические причины, из-за которых значения полей не выводятся в ячейках макета:

  1. Не настроено выражение в таблице «Параметры макета». Если ячейке макета присвоен тип заполнения Параметр или Шаблон (например, [ФИО]), платформе требуется явно указать, откуда брать значение. Без заполненой строки в нижней таблице параметров ячейка останется пустой.
  2. Использование отбора вместо параметра данных. Значения из стандартной коллекции Отбор напрямую недоступны в языке выражений макета через ПараметрыДанных. Если пользователь устанавливает значение через панель отборов, макет заголовка не сможет подтянуть его автоматической формулой.
  3. Рассогласование имен группировок. Если макет создается как заголовок группировки, имя группировки на вкладке Настройки должно полностью совпадать с именем, указанным на вкладке Макеты.
  4. Влияние стандартного макета оформления. Если у группировки или отчета включен стандартный макет оформления, платформа может перекрывать произвольные области собственными стилями.

Способ 1. Настройка вывода через параметры схемы и отключение системного отбора

Рассмотрим наименее трудоемкий вариант решения задачи средствами конфигуратора без написания кода.

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

  1. Переведем условие в параметры данных. Если значение должно выбираться пользователем, создадим соответствующий параметр на вкладке Параметры (например, ФИО) и сделаем его доступным для ввода.
  2. Отключим стандартный вывод отбора. Перейдем на вкладку Настройки, откроем раздел Другие настройки и установим параметр Выводить отбор в значение Не выводить. Это полностью уберет системную таблицу со словами Отбор и Равно.
  3. Создадим пустую группировку для шапки. На вкладке Настройки добавим верхнюю группировку без указания полей (пустая группировка). Зададим ей имя, например ШапкаОтчета, а параметр Макет оформления установим в значение Без оформления.
  4. Оформим произвольный макет. На вкладке Макеты добавим Макет группировки для имени ШапкаОтчета с типом Заголовок.
  5. Настроим ячейку макета. В ячейке укажем текст вида ФИО: [ФИОПользователя] и установим тип заполнения Шаблон. В нижней таблице Параметры макета для параметра ФИОПользователя пропишем выражение Представление(ПараметрыДанных.ФИО).

Способ 2. Программирование вывода отбора в событии ПриКомпоновкеРезультата

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

Разберем пример кода в обработчике события ПриКомпоновкеРезультата:


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

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

← На главную