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

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

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

Способ 1. Отключение автоматической позиции ресурсов

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

  1. Откроем схему компоновки данных и перейдем на вкладку «Настройки».
  2. Выберем нужный вариант отчета или конкретный уровень группировки в дереве настроек.
  3. Перейдем на закладку «Другие настройки» (внизу справа).
  4. Найдем параметр Авто позиция ресурсов.
  5. Установим значение «Не использовать».

Проанализируем ситуацию: когда этот параметр включен (стоит «Авто» или «Использовать»), система сама решает, куда поставить колонки ресурсов. Обычно она выводит их после группировок строк, но внутри группировок колонок. Установка значения «Не использовать» позволяет системе придерживаться того порядка, который задан пользователем в списке «Выбранные поля».

Способ 2. Управление порядком в «Выбранных полях»

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

В настройках отчета на вкладке «Выбранные поля» порядок элементов должен быть строго выверен. Если поле Заказ должно быть последним, оно должно находиться в самом низу списка. Однако, если отчет представляет собой кросс-таблицу, ресурсы всегда будут стремиться «прижаться» к группировкам колонок. Проверьте, не включено ли Автополе в составе выбранных полей конкретной группировки. Если оно там есть, лучше удалить его и добавить все необходимые поля вручную в нужном вам порядке.

Способ 3. Использование фиктивных группировок колонок

Если отчет имеет структуру кросс-таблицы (есть группировки строк и группировки колонок), и нам нужно вывести поле «Заказ» один раз в самом конце (после всех динамических колонок), воспользуемся методом отдельной группировки.

Рассмотрим алгоритм настройки:

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

Таким образом, система сначала выведет все колонки основной группировки, а затем добавит еще одну колонку, которая логически не привязана к измерениям кросс-таблицы, и она окажется в самом конце.

Способ 4. Настройка расположения общих итогов

Часто поле, которое должно быть в конце, является расчетным итогом. Посмотрим на параметры управления итогами в «Других настройках»:

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

Способ 5. Создание собственного макета

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

Проанализируем шаги по созданию макета:

  1. Перейдем на закладку «Макеты» в схеме компоновки.
  2. Нажмем «Добавить макет группировки».
  3. Укажем имя группировки колонок и тип макета (например, «Заголовок»).
  4. В появившемся окне редактора табличного документа нарисуем нужную шапку, расположив ячейку с текстом «Заказ» в крайнем правом положении.
  5. Аналогично создадим «Макет области» для самих данных, чтобы значения поля выводились ровно под созданным заголовком.

Использование макетов гарантирует, что порядок колонок не изменится независимо от того, какие данные придут из информационной базы. Это трудоемкий процесс, но он незаменим для регламентированной отчетности.

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

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


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

Программный метод позволяет обойти любые ограничения визуального конструктора. Мы можем найти область ячеек по имени или содержимому и физически переместить её в крайнюю правую позицию ТабличногоДокумента.

Резюме

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

← На главную