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