Как настроить произвольную сортировку колонок в кросс-таблице СКД?

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

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

В этой статье мы подробно разберем, как управлять порядком вывода колонок, рассмотрим несколько методов решения задачи — от простых настроек в компоновщике до манипуляций в схеме компоновки данных.

Способ 1: Использование вспомогательного поля сортировки (Метод форума)

Этот способ является наиболее универсальным и часто используемым. Суть заключается в том, чтобы добавить в набор данных числовое поле, которое будет определять «вес» каждой колонки.

Проанализируем ситуацию на примере. Допустим, у нас есть поле ТипЦен со значениями: «ТипЦен А», «Тип цен Б», «ТипЦен Ц» и «АКЦИЯ». Нам нужно, чтобы «АКЦИЯ» шла последней.

Шаг 1: Подготовка запроса. В тексте запроса набора данных создадим поле, которое будет присваивать числовой порядок нашим значениям:


ВЫБРАТЬ
    Продажи.ТипЦен КАК ТипЦен,
    ВЫБОР
        КОГДА Продажи.ТипЦен.Наименование = "ТипЦен А" ТОГДА 1
        КОГДА Продажи.ТипЦен.Наименование = "Тип цен Б" ТОГДА 2
        КОГДА Продажи.ТипЦен.Наименование = "ТипЦен Ц" ТОГДА 3
        КОГДА Продажи.ТипЦен.Наименование = "АКЦИЯ" ТОГДА 4
        ИНАЧЕ 5
    КОНЕЦ КАК ПорядокСортировки,
    Продажи.СуммаОборот КАК Сумма
ИЗ
    РегистрНакопления.Продажи.Обороты КАК Продажи

Шаг 2: Настройка группировки. Переходим на закладку «Настройки» в СКД. В группировке колонок (где выбрано поле ТипЦен) необходимо добавить наше новое поле ПорядокСортировки. Важно понимать: чтобы сортировка сработала, поле должно присутствовать в составе группировки.

Шаг 3: Настройка сортировки. На уровне группировки колонок перейдем на закладку «Сортировка». Укажем там поле ПорядокСортировки (по возрастанию). Поле Авто можно оставить ниже или удалить.

Шаг 4: Скрытие служебного поля. Рассмотрим подробнее, как сделать так, чтобы поле ПорядокСортировки не отображалось в заголовках отчета, но при этом продолжало влиять на порядок. Выясним причину, по которой простое снятие флага в «Выбранных полях» иногда не помогает:

  1. Зайдем в настройки конкретной группировки колонок.
  2. Перейдем на закладку «Выбранные поля».
  3. Если там стоит флаг Авто, развернем его (нажав правой кнопкой мыши — «Развернуть»).
  4. В появившемся списке полей найдем наше поле ПорядокСортировки и снимем с него флаг использования.

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

Способ 2: Настройка «Выражения упорядочивания» в схеме

Разберем более изящный метод, который не требует добавления лишних полей в настройки группировок. Этот метод настраивается непосредственно в схеме на закладке «Наборы данных».

Проанализируем возможности колонки «Выражение упорядочивания»:

  1. Найдем в списке полей набора данных наше поле ТипЦен.
  2. В колонке «Выражение упорядочивания» нажмем на кнопку выбора.
  3. Пропишем выражение, по которому СКД должна сортировать это поле по умолчанию. Например: ВЫБОР КОГДА ТипЦен = "АКЦИЯ" ТОГДА 1 ИНАЧЕ 0 КОНЕЦ.

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

Способ 3: Принудительный порядок через фиксированные значения в запросе

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


ВЫБРАТЬ "ТипЦен А" КАК Имя, 1 КАК Порядок ПОМЕСТИТЬ ВТ_Порядок
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тип цен Б", 2
ОБЪЕДИНИТЬ ВЫБРАТЬ "ТипЦен Ц", 3
ОБЪЕДИНИТЬ ВЫБРАТЬ "АКЦИЯ", 4;

ВЫБРАТЬ
    Продажи.ТипЦен,
    ВТ_Порядок.Порядок
ИЗ
    ДанныеПродаж КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Порядок КАК ВТ_Порядок
    ПО Продажи.ТипЦен.Наименование = ВТ_Порядок.Имя

Такой подход удобен, когда логика сортировки сложная или задается внешним алгоритмом на этапе формирования текста запроса.

Способ 4: Сортировка по иерархии справочника

Если поле, по которому строится группировка колонок, является ссылкой на справочник (например, СправочникСсылка.ТипыЦен), мы можем использовать естественный порядок этого справочника.

Рассмотрим по шагам:

  1. В настройках группировки на закладке «Сортировка» добавим поле ТипЦен.
  2. В колонке «Тип сортировки» выберем «Иерархия».

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

Важные нюансы при работе с кросс-таблицами

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

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

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

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

Программная установка сортировки

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


// Пример программной настройки сортировки для группировки колонок
ГруппировкаКолонки = КомпоновщикНастроек.Настройки.Структура[0].Колонки[0];
ПолеСортировки = ГруппировкаКолонки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
ПолеСортировки.Поле = Новый ПолеКомпоновкиДанных("ПорядокСортировки");
ПолеСортировки.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
ПолеСортировки.Использование = Истина;

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

← На главную