Как в СКД добавить статические колонки после группировки по периодам в кросс-таблице?

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

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

Метод 1: Использование параллельных группировок колонок

Наиболее надежный и правильный с точки зрения архитектуры СКД способ — это создание нескольких группировок на одном уровне иерархии в колонках таблицы. Рассмотрим этот процесс по шагам:

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

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

Метод 2: Вариант использования «Дополнительная информация»

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

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

Метод 3: Группировка по константе для корректного расчета итогов

Чтобы обойти ограничение с итогами и визуально отделить статические данные, выполним следующие действия:

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

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

Программная фиксация колонок (Номенклатура)

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

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


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

Тонкая настройка оформления

Чтобы отчет выглядел профессионально, разберем еще несколько нюансов оформления:

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

← На главную