Как скрыть одну колонку общих итогов по ресурсу в таблице СКД?

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

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

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

Анализ типовых заблуждений при настройке итогов СКД

Прежде чем перейти к рабочим решениям, выясним причину, по которой стандартные приемы часто не срабатывают:

  1. Колонка «Рассчитывать по...» на вкладке «Ресурсы»: если ограничить расчет ресурса только определенными группировками (исключив общий итог), платформа не удаляет колонку из структуры таблицы. Вместо этого в итоговой колонке выводятся пустые ячейки (NULL), сохраняя саму сетку таблицы неизменной.
  2. Условное оформление и минимальная ширина ячейки: установка текста в пустую строку скрывает значение, но оставляет пустую колонку. Установка ширины в значение 0.01 может вызывать визуальные артефакты, некорректное поведение границ ячеек и сбои при экспорте отчета в Excel.

Способ 1. Формирование выборочного итога через структуру колонок (штатный метод)

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

  1. Перейдем на вкладку «Настройки» схемы компоновки данных и выделим таблицу отчета.
  2. В свойствах таблицы (или в параметрах группировки колонок) отключим автоматический вывод общего итога: установим параметр «Расположение общих итогов по горизонтали» в значение «Нет».
  3. В структуру колонок таблицы, параллельно группировке по полю ДатаМесяца, добавим новую группировку без указания полей — «<Детальные записи>».
  4. Выделим созданную пустую группировку колонок и перейдем на ее вкладку «Выбранные поля».
  5. Снимем флажок с элемента «Авто», чтобы отменить наследование всех ресурсов отчета, и добавим вручную только тот ресурс, по которому нужен итог (например, Количество).
  6. На вкладке «Другие настройки» этой группировки в поле «Заголовок» укажем текст Итого.

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

Способ 2. Использование собственных макетов СКД

Если требуется сохранить сложную верстку шапки или настроить индивидуальное визуальное оформление, воспользуемся вкладкой «Макеты».

Рассмотрим особенности назначения макетов для колоночных итогов в таблице:

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

Способ 3. Программное удаление колонки в постобработке

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

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


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

КонецПроцедуры

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

← На главную