Как убрать название ресурса из шапки отчета СКД, сохранив данные в строках

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

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

Метод 1. Программная обработка итогового документа

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

Рассмотрим вариант с использованием метода НайтиТекст. Проанализируем пример кода, который позволяет скрыть строку, содержащую заголовок:


// В модуле объекта отчета или в форме при выводе результата
Область = ДокументРезультат.НайтиТекст("Цена");
Если Область <> Неопределено Тогда
    // Устанавливаем видимость строки в Ложь
    ДокументРезультат.Область(Область.Верх, , Область.Низ, ).Видимость = Ложь;
КонецЕсли;

Однако стоит учитывать, что простое скрытие строки может привести к визуальному дефекту — так называемой «ступеньке» в оформлении, когда фон соседних ячеек не совпадает. Чтобы этого избежать, разберем более продвинутый алгоритм. Мы можем не просто скрывать строку, а объединять ячейки заголовков, которые находятся выше, с освободившимся пространством. Для решения этой задачи отлично подойдет методика объединения ячеек заголовков группировок по вертикали и горизонтали.


// Пример объединения ячеек для устранения пустот
ОбластьЗаголовка = ДокументРезультат.НайтиТекст("Цена");
Если ОбластьЗаголовка <> Неопределено Тогда
    Верх = ОбластьЗаголовка.Верх;
    Лево = ОбластьЗаголовка.Лево;
    // Объединяем ячейку выше с текущей, чтобы «поглотить» заголовок ресурса
    ОбластьВыше = ДокументРезультат.Область(Верх - 1, Лево, Верх, Лево);
    ОбластьВыше.Объединить();
    ОбластьЗаголовка.Текст = ""; // Очищаем текст, если объединение не перекрыло его
КонецЕсли;

Метод 2. Использование условного оформления

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

  1. Перейдем на закладку Настройки, выберем нужную группировку или весь отчет.
  2. Вкладка Условное оформление — добавим новый элемент.
  3. В поле Оформление установим параметр Текст как пустую строку (или один пробел).
  4. В поле Условие можно ничего не указывать (если нужно скрыть всегда).
  5. В поле Оформляемые поля выберем наш ресурс Цена.

Важный нюанс: Чтобы избежать «пустой дырки» в шапке, которая сохраняет цвет фона или границы, в оформлении дополнительно установим МинимальнаяВысота в значение 0.1 и выберем тип линии границ Нет линии. Это позволит ячейке максимально «схлопнуться».

Метод 3. Собственные макеты оформления (наиболее надежный способ)

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

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

  1. В схеме компоновки перейдем на закладку Макеты.
  2. Нажмем Добавить макет заголовка поля.
  3. Выберем поле Цена.
  4. В области макета выделим одну или несколько ячеек. Если мы оставим их пустыми и зададим им минимальную высоту, СКД при генерации выведет именно этот «пустой» блок вместо стандартного заголовка.

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

Метод 4. Тонкая настройка через группы выбранных полей

Посмотрим на структуру выбранных полей. Иногда заголовок ресурса дублируется из-за того, что он находится внутри авто-группировки. Попробуем следующий прием:

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

Метод 5. Профессиональный подход: Процессор вывода

Если мы хотим полностью контролировать процесс и исключить появление ячеек еще на этапе формирования, следует использовать программный вывод отчета через ПроцессорКомпоновкиДанных и ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.

В цикле вывода элементов мы можем анализировать тип элемента. Если это Заголовок, мы можем программно изменить его параметры до того, как он попадет в итоговый документ:


ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

ПроцессорВывода.НачатьВывод();
Пока Истина Цикл
    ЭлементРезультата = ПроцессорКомпоновки.Следующий();
    Если ЭлементРезультата = Неопределено Тогда
        Прервать;
    КонецЕсли;
    
    // Здесь можно перехватить вывод заголовка
    Если ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда
        // Логика анализа и модификации элемента
    КонецЕсли;

    ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();

Как бороться со «ступеньками» и цветом?

Выясним причину возникновения визуальных дефектов при скрытии заголовков. Когда мы устанавливаем Видимость = Ложь для части ячеек, 1С может продолжать отрисовывать границы соседних областей. Чтобы шапка выглядела монолитной, рекомендуется:

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

← На главную