Как в отчете СКД вывести реквизиты номенклатуры справа от динамических колонок с ценами?

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

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

Анализ проблемы и ограничений СКД

Рассмотрим, почему стандартные инструменты СКД не всегда подходят для данной задачи:

  1. Ресурсы: Вывод полей через Ресурсы с настройкой расположения После всех колонок часто нарушает визуальную структуру отчета, так как система пытается агрегировать данные, что может привести к неверному отображению или дублированию заголовков.
  2. Группировки: Добавление полей в иерархию группировок приводит к созданию дополнительных уровней вложенности, что визуально дробит таблицу на части, не соответствующих требованию пользователя.
  3. Макеты: Использование Макетов оформления является трудоемким процессом. При изменении количества динамических колонок (например, добавлении новых видов цен) статичный макет перестает соответствовать реальной структуре данных, требуя постоянной ручной корректировки.

Решение задачи через программную доработку табличного документа

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

Разберем процесс по шагам на примере перемещения колонки:

  1. Сформируем отчет средствами СКД обычным образом.
  2. Определим область, которую необходимо переместить (в нашем примере это колонки с реквизитами).
  3. Используем методы объекта ТабличныйДокумент, такие как ВставитьОбласть и УдалитьОбласть, для изменения структуры документа перед выводом пользователю.

Пример программного перемещения колонок

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


// Предположим, ТаблицаПрайса — это наш сформированный табличный документ
// Вычисляем область для перемещения
КолонкаИз = ТаблицаПрайса.Область("C4:C5");

// Вычисляем позицию назначения с учетом количества динамических колонок (видов цен)
НомерКолонкиВставки = 8 + ВидыЦен.Количество();
КолонкаВ = ТаблицаПрайса.Область("C" + Число(НомерКолонкиВставки) + ":C" + Число(НомерКолонкиВставки + 1));

// Перемещаем область (вставляем в новое место)
ТаблицаПрайса.ВставитьОбласть(КолонкаИз, КолонкаВ, ТипСмещенияТабличногоДокумента.ПоГоризонтали);

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

Важные рекомендации при реализации

При использовании данного метода необходимо учитывать несколько технических аспектов:

Использование данного подхода позволяет добиться требуемого бизнес-результата без глубокого «взлома» логики СКД, сохраняя при этом гибкость в настройке внешнего вида отчета для конечного пользователя. Это стандартная практика для сложных печатных форм, когда стандартные возможности компоновки исчерпаны.

← На главную