При работе с Системой компоновки данных (СКД) разработчики часто сталкиваются с тем, что колонки в кросс-таблицах упорядочиваются по алфавиту. Это стандартное поведение системы, которое не всегда удобно. Например, если в колонках выводятся типы цен, статусы заказов или этапы производства, нам может потребоваться строго определенный порядок (например, чтобы «Акция» всегда была в конце, а «Оптовая цена» — в начале).
В этой статье мы подробно разберем, как управлять порядком вывода колонок, рассмотрим несколько методов решения задачи — от простых настроек в компоновщике до манипуляций в схеме компоновки данных.
Этот способ является наиболее универсальным и часто используемым. Суть заключается в том, чтобы добавить в набор данных числовое поле, которое будет определять «вес» каждой колонки.
Проанализируем ситуацию на примере. Допустим, у нас есть поле ТипЦен со значениями: «ТипЦен А», «Тип цен Б», «ТипЦен Ц» и «АКЦИЯ». Нам нужно, чтобы «АКЦИЯ» шла последней.
Шаг 1: Подготовка запроса. В тексте запроса набора данных создадим поле, которое будет присваивать числовой порядок нашим значениям:
ВЫБРАТЬ
Продажи.ТипЦен КАК ТипЦен,
ВЫБОР
КОГДА Продажи.ТипЦен.Наименование = "ТипЦен А" ТОГДА 1
КОГДА Продажи.ТипЦен.Наименование = "Тип цен Б" ТОГДА 2
КОГДА Продажи.ТипЦен.Наименование = "ТипЦен Ц" ТОГДА 3
КОГДА Продажи.ТипЦен.Наименование = "АКЦИЯ" ТОГДА 4
ИНАЧЕ 5
КОНЕЦ КАК ПорядокСортировки,
Продажи.СуммаОборот КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты КАК Продажи
Шаг 2: Настройка группировки. Переходим на закладку «Настройки» в СКД. В группировке колонок (где выбрано поле ТипЦен) необходимо добавить наше новое поле ПорядокСортировки. Важно понимать: чтобы сортировка сработала, поле должно присутствовать в составе группировки.
Шаг 3: Настройка сортировки. На уровне группировки колонок перейдем на закладку «Сортировка». Укажем там поле ПорядокСортировки (по возрастанию). Поле Авто можно оставить ниже или удалить.
Шаг 4: Скрытие служебного поля. Рассмотрим подробнее, как сделать так, чтобы поле ПорядокСортировки не отображалось в заголовках отчета, но при этом продолжало влиять на порядок. Выясним причину, по которой простое снятие флага в «Выбранных полях» иногда не помогает:
Авто, развернем его (нажав правой кнопкой мыши — «Развернуть»).ПорядокСортировки и снимем с него флаг использования.Теперь система будет учитывать это поле для построения структуры и сортировки, но не выведет его в визуальную часть отчета.
Разберем более изящный метод, который не требует добавления лишних полей в настройки группировок. Этот метод настраивается непосредственно в схеме на закладке «Наборы данных».
Проанализируем возможности колонки «Выражение упорядочивания»:
ТипЦен.ВЫБОР КОГДА ТипЦен = "АКЦИЯ" ТОГДА 1 ИНАЧЕ 0 КОНЕЦ.Преимущество этого метода в том, что где бы вы ни использовали поле ТипЦен (в строках, колонках или детальных записях), СКД всегда будет применять это правило сортировки автоматически. Вам не придется вручную добавлять скрытые поля в каждом варианте отчета.
Если список колонок заранее известен и ограничен, можно использовать временную таблицу для задания жесткого порядка. Посмотрим на пример реализации в запросе:
ВЫБРАТЬ "ТипЦен А" КАК Имя, 1 КАК Порядок ПОМЕСТИТЬ ВТ_Порядок
ОБЪЕДИНИТЬ ВЫБРАТЬ "Тип цен Б", 2
ОБЪЕДИНИТЬ ВЫБРАТЬ "ТипЦен Ц", 3
ОБЪЕДИНИТЬ ВЫБРАТЬ "АКЦИЯ", 4;
ВЫБРАТЬ
Продажи.ТипЦен,
ВТ_Порядок.Порядок
ИЗ
ДанныеПродаж КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Порядок КАК ВТ_Порядок
ПО Продажи.ТипЦен.Наименование = ВТ_Порядок.Имя
Такой подход удобен, когда логика сортировки сложная или задается внешним алгоритмом на этапе формирования текста запроса.
Если поле, по которому строится группировка колонок, является ссылкой на справочник (например, СправочникСсылка.ТипыЦен), мы можем использовать естественный порядок этого справочника.
Рассмотрим по шагам:
ТипЦен.В этом случае 1С будет выводить колонки в том порядке, в котором элементы расположены в иерархическом дереве справочника в режиме «1С:Предприятие». Вы можете просто переместить «Акцию» вниз списка в самом справочнике, и отчет подхватит изменения без редактирования схемы.
Разберем несколько критических моментов, которые могут помешать правильной сортировке:
Влияние ресурсов: Если в настройках сортировки группировки выбрано поле, которое является ресурсом (например, Сумма), то колонки будут выстраиваться по значению показателей (от большего к меньшему или наоборот). Проверьте, чтобы в списке сортировки не было лишних полей, перекрывающих ваш пользовательский порядок.
Вложенные группировки: Если у вас в колонках используется несколько уровней (например, сначала Валюта, а внутри нее Тип цен), помните, что настройки сортировки для каждого уровня независимы. Чтобы отсортировать типы цен внутри валют, нужно зайти в настройки вложенной группировки и задать правила там.
Системное поле «Порядок»: В некоторых случаях СКД позволяет использовать системное поле Порядок, если в запросе для объектов метаданных (справочников) настроена стандартная сортировка. Однако для кросс-таблиц надежнее использовать явное поле «Веса» или «Порядкового номера».
Если ваш отчет формируется программно, вы можете динамически управлять порядком колонок. Это полезно, когда приоритет колонок зависит от прав пользователя или параметров сеанса.
// Пример программной настройки сортировки для группировки колонок
ГруппировкаКолонки = КомпоновщикНастроек.Настройки.Структура[0].Колонки[0];
ПолеСортировки = ГруппировкаКолонки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
ПолеСортировки.Поле = Новый ПолеКомпоновкиДанных("ПорядокСортировки");
ПолеСортировки.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
ПолеСортировки.Использование = Истина;
Используя предложенные методы, вы сможете добиться идеального расположения данных в кросс-таблицах, делая отчеты максимально читаемыми и профессиональными.