Как объединить значения контрагентов в шапке отчета СКД?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Настройка иерархии группировок

Самая распространенная ошибка при решении данной задачи — попытка настроить объединение через Выбранные поля. Однако в СКД визуальная структура отчета управляется непосредственно через Группировки. Разберем по шагам, как добиться нужного результата без написания программного кода:

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

Тонкая настройка отображения

Если стандартная иерархия выводится, но визуально отчет кажется «некрасивым», проанализируем параметры оформления группировки:

Когда стоит прибегать к программной обработке?

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

Для программного объединения необходимо использовать модуль объекта отчета и процедуру ПриКомпоновкеРезультата. В этой процедуре мы получаем сформированный документ и используем метод Объединить().


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

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

← На главную