Как скрыть заголовки объединенных полей в СКД 1С без вывода пустых строк?

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

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

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

Способ 1. Использование условного оформления для скрытия текста

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

Разберем этот метод по шагам:

  1. Откроем схему компоновки данных и перейдем на вкладку «Настройки».
  2. В нижней части окна выберем вкладку «Условное оформление» и добавим новый элемент.
  3. В поле «Оформление» найдем параметр «Текст». Установим его значение в виде одного пробела или оставим пустым, если платформа позволяет это сделать.
  4. В качестве параметра «Высота строки» можно попробовать задать значение -1 или минимально возможное, однако ключевым действием будет управление видимостью текста.
  5. В списке «Оформляемые поля» выберем именно те вложенные поля нашей группы, заголовки которых мы хотим скрыть.
  6. Самый важный шаг: перейдем на вкладку «Область использования» условного оформления. Снимем все галочки, кроме флажка «В заголовке полей». Если мы забудем это сделать, то пустые значения выведутся и в самих строках отчета с данными.

Проанализируем особенности этого метода. Хотя мы убрали текст заголовков, сама строка под общей шапкой физически может остаться (в виде тонкой пустой полосы). Если этот результат нас не устраивает и нам требуется абсолютно монолитная шапка, перейдем к более надежным инструментам.

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

Использование собственных макетов — это наиболее гибкий и профессиональный подход, знание которого проверяется на экзамене «1С:Специалист». С его помощью мы полностью переопределяем отрисовку шапки силами платформы.

Рассмотрим подробнее процесс настройки макета:

  1. В схеме компоновки данных перейдем на вкладку «Макеты».
  2. Нажмем кнопку «Добавить макет» и выберем пункт «Добавить макет заголовка группировки».
  3. В появившемся поле укажем имя нашей группировки, для которой настраивается шапка.
  4. В табличном документе макета вручную нарисуем желаемую область шапки. Например, объединим верхнюю и нижнюю ячейки по вертикали для тех колонок, где не должно быть подчиненных заголовков.
  5. Выделим область ячеек, которая будет служить шапкой, и нажмем «Назначить имя» (зададим имя области, например, ШапкаТаблицы).
  6. В свойствах ячеек макета свяжем параметры с реальными полями СКД. Для объединенных ячеек укажем заполнение типа Параметр и впишем туда соответствующие имена полей компоновки.

Этот способ позволяет получить идеальный внешний вид таблицы. Единственным его минусом является то, что при динамическом изменении состава колонок пользователем (через настройки отчета) жестко заданный макет может отображаться некорректно. Используйте его тогда, когда структура колонок отчета статична.

Способ 3. Изменение свойства «Расположение» группы полей

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

Выполним следующие действия:

  1. Перейдем на вкладку «Настройки», затем выберем вкладку «Выбранные поля».
  2. Найдем нашу группу объединенных полей.
  3. В окне свойств этой группы (в правом нижнем углу конструктора) найдем свойство «Расположение».
  4. Изменим его значение со стандартного на «Вместе».

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

Способ 4. Программная постобработка табличного документа

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

Для реализации этого подхода переопределим процедуру ПриКомпоновкеРезультата в модуле объекта отчета. Посмотрим на пример кода:


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

Теперь разберем вспомогательную процедуру ОбъединитьШапкуТаблицы, которая будет выполнять непосредственный обход ячеек и их слияние:


Процедура ОбъединитьШапкуТаблицы(ТабличныйДокумент)
    
    // Определяем границы шапки. Как правило, шапка находится в первых строках документа.
    // Для надежности можно искать ячейки по тексту или свойствам.
    КоличествоСтрок = ТабличныйДокумент.ВысотаТаблицы;
    КоличествоКолонок = ТабличныйДокумент.ШиринаТаблицы;
    
    Для НомерКолонки = 1 По КоличествоКолонок Цикл
        
        // Анализируем верхние строки (например, 1-ю и 2-ю строки шапки)
        ЯчейкаВерхняя = ТабличныйДокумент.Область(1, НомерКолонки);
        ЯчейкаНижняя = ТабличныйДокумент.Область(2, НомерКолонки);
        
        // Если в нижней ячейке находится ненужный нам дублирующий заголовок
        Если ЗначениеЗаполнено(ЯчейкаВерхняя.Текст) И ЯчейкаНижняя.Текст = "СкрываемоеПоле" Тогда
            
            // Очищаем текст нижней ячейки
            ЯчейкаНижняя.Текст = "";
            
            // Получаем область для объединения двух строк по вертикали
            ОбластьОбъединения = ТабличныйДокумент.Область(1, НомерКолонки, 2, НомерКолонки);
            ОбластьОбъединения.Объединить();
            
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры

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

Резюме

Мы рассмотрели различные варианты решения проблемы вывода лишних заголовков. Выбор конкретного метода зависит от архитектуры вашего отчета:

← На главную