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

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

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

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

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

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

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

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

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

Способ 2. Оформление заголовка «Итого» для искусственной группировки

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

Вариант с вычисляемым или пользовательским полем:

  1. На вкладке Вычисляемые поля схемы компоновки данных добавляем новое поле с именем ЗаголовокИтого.
  2. В колонке Выражение указываем строковый литерал "Итого" или "Общий итог".
  3. В структуре колонок таблицы вместо детальных записей создаем группировку по нашему полю ЗаголовокИтого.
  4. На вкладке Выбранные поля этой группировки отключаем Автополе и добавляем нужные итоговые ресурсы. В шапке отчета над ресурсами появится заданная надпись.

Вариант через макет группировки:

  1. В настройках структуры отчета для искусственной группировки колонок указываем уникальное имя в свойстве Имя (например, КолонкаИтогов).
  2. Переходим на вкладку Макеты в схеме компоновки данных.
  3. Нажимаем Добавить макет и выбираем Макет группировки.
  4. В поле Группировка выбираем имя КолонкаИтогов, а в поле Тип макета указываем Заголовок.
  5. В появившейся области макета оформляем шапку, объединяем ячейки по ширине выводимых ресурсов и пишем необходимый текст заголовка.

Способ 3. Программное удаление лишней колонки из результирующего табличного документа

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

Посмотрим на пример программного формирования отчета и последующей модификации ТабличныйДокумент:


// Выполняем стандартную компоновку данных
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки());

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

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

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

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

← На главную