Можно ли настроить сложный макет отчета в СКД только с помощью настроек компоновки данных?

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

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

Ограничения стандартного генератора макетов СКД

Прежде всего проанализируем, как СКД формирует итоговый табличный документ. Стандартный генератор макета не выполняет физического объединения ячеек по вертикали. Даже если поле группировки выводится один раз на весь блок подчиненных строк, в структуре табличного документа каждая строка остается отдельной ячейкой.

Тем не менее, построить эстетичный отчет с выносом группировки сбоку и визуальным эффектом объединения ячеек можно исключительно средствами настроек СКД без создания отчета «вручную».

Настройка вывода группировки сбоку и отключение лишних шапок

Рассмотрим, как настроить структуру отчета в конструкторе схемы компоновки данных, чтобы группирующее поле отображалось сбоку, а не в отдельных промежуточных строках-шапках:

  1. Расположение полей группировки: В окне настроек отчета (или конкретной группировки) перейдем на вкладку Другие настройки. Найдем параметр Расположение полей группировок и установим значение Отдельно или Отдельно и только в итогах. Это позволит вынести поле группировки в отдельную левую колонку.
  2. Отключение дублирующих итогов: Чтобы избавиться от лишних строк с промежуточными итогами по группе, установим параметр Расположение итогов в значение Нет.
  3. Скрытие заголовков группировки: Чтобы платформа не выводила повторяющиеся заголовки над блоками данных, зададим параметр Выводить заголовки группировок = Не выводить.
  4. Настройка выбранных полей: Для каждой конкретной группировки на вкладке Выбранные поля укажем только те поля, которые действительно должны выводиться в данной секции.

Визуальное объединение ячеек через условное оформление

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

  1. Управление границами ячеек: В условном оформлении отчета или группировки добавим оформляемое поле (например, поле группировки). В параметрах оформления отключим отображение нижней границы ячейки или установим ее цвет равным цвету фона. В результате зрительная граница между строками внутри одной группы исчезнет.
  2. Выравнивание текста по центру: Для поля группировки зададим параметр Вертикальное выравнивание = Центр.
  3. Скрытие дублирующего текста: Чтобы текст группировки выводился только в первой строке группы, настроим условное оформление с отбором по условию СистемныеПоля.НомерПоПорядкуВГруппе > 1. Для совпадающих строк установим цвет текста равным цвету фона или зададим параметр Текст = "".

Использование вкладки «Макеты» в СКД

Если возможностей вкладки Настройки недостаточно для формирования специфической шапки, не обязательно полностью отказываться от СКД. Рассмотрим использование встроенного конструктора макетов. В схеме компоновки данных на вкладке Макеты можно переопределить макет конкретного элемента:

  1. Добавить Макет группировки для выбранного поля;
  2. Добавить Макет заголовка группировки и нарисовать произвольную шапку таблицы;
  3. Добавить Макет полей или Макет ресурсов.

Этот подход позволяет гибко вручную верстать только отдельные элементы или шапку отчета, оставляя вывод и расчет данных на откуп автоматическому генератору СКД.

Программная пост-обработка (физическое объединение ячеек)

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


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

Таким образом, комбинируя параметры расположения группировок, условное оформление и встроенные макеты, можно реализовать большинство сложных визуальных схем оформления отчетов полностью средствами СКД.

← На главную