В процессе работы с отчетами на базе Системы компоновки данных (СКД) часто возникает ситуация, когда стандартная алфавитная сортировка не удовлетворяет требованиям бизнеса. Например, в отчете по остаткам товаров склады должны располагаться в определенной логической последовательности: сначала «Основной склад», затем «Склад ПД», и только потом вспомогательные помещения. Рассмотрим подробнее, как реализовать произвольный порядок вывода колонок или строк в 1С, особенно в конфигурациях на обычных формах, таких как УПП 1.3.
Проанализируем самый надежный и простой в реализации способ — добавление числового реквизита непосредственно в справочник Склады. Этот метод требует изменения конфигурации, но он наиболее производителен и понятен для конечного пользователя.
Склады.ПорядокВОтчетах с типом Число (длина 3, точность 0).ПорядокВОтчетах в выбранные поля или просто убедимся, что оно доступно в наборе данных.Склад) и на вкладке Сортировка укажем наше новое поле Склад.ПорядокВОтчетах по возрастанию.Разберем ситуацию, когда мы не хотим менять структуру самого справочника. В этом случае на помощь приходят механизмы расширения данных без изменения метаданных.
В типовых конфигурациях, таких как Управление производственным предприятием, реализован механизм дополнительных свойств. Это позволяет добавить поле «Порядок» без внесения изменений в конфигурацию. Рассмотрим, как подключить эти данные в отчет.
Выясним причину, по которой свойства часто не видны в СКД «из коробки». Обычно это связано с тем, что в запросе СКД отсутствует связь с регистром сведений ЗначенияСвойствОбъектов. Чтобы это исправить, нам нужно выполнить ЛЕВОЕ СОЕДИНЕНИЕ в конструкторе запроса:
ВЫБРАТЬ
Склады.Ссылка КАК Склад,
ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, 100) КАК ПорядокСортировки
ИЗ
Справочник.Склады КАК Склады
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ПО ЗначенияСвойствОбъектов.Объект = Склады.Ссылка
И ЗначенияСвойствОбъектов.Свойство = &СвойствоПорядок
После добавления такой связи мы сможем использовать поле ПорядокСортировки для управления расположением колонок. Важно помнить, что в параметрах СКД необходимо будет передать ссылку на соответствующий элемент плана видов характеристик СвойстваОбъектов.
Посмотрим на более изящный способ интеграции дополнительных сведений. В СКД существует специальная закладка Характеристики, которая позволяет динамически «подмешивать» свойства объектов в список доступных полей без прямого редактирования текста запроса.
Для настройки выполним следующие шаги:
СправочникСсылка.Склады.Результат: пользователь в режиме 1С:Предприятие сможет зайти в «Настройки» -> «Сортировка» и увидеть там все созданные свойства склада, включая наш «Порядок», как если бы это был обычный реквизит.
Иногда нужно жестко закрепить порядок в коде отчета, не полагаясь на заполнение реквизитов пользователями. В СКД на закладке Наборы данных для поля Склад можно задать Выражение упорядочивания. Проанализируем пример такого выражения:
ВЫБОР
КОГДА Склад.Наименование ПОДОБНО "Основной%" ТОГДА 1
КОГДА Склад.Наименование = "Склад деталей" ТОГДА 2
КОГДА Склад.Наименование = "Склад ПД" ТОГДА 3
ИНАЧЕ 4
КОНЕЦ
Такой подход позволяет реализовать сложную логику без добавления новых полей в базу. Однако помните, что при переименовании склада в пользовательском режиме сортировка может «сломаться», так как она завязана на строковое наименование.
Рассмотрим нюанс, связанный с иерархией. Если ваши склады сгруппированы по папкам, стандартная сортировка по умолчанию будет работать внутри каждой группы. Если вам нужно, чтобы склады выстроились в ряд, игнорируя вложенность (например, для горизонтальных колонок), в настройках сортировки СКД следует изменить Тип упорядочивания на Абсолютный.
При использовании абсолютного упорядочивания система сначала выстроит все элементы согласно весу (числовому значению), а только потом применит правила группировки, если это возможно.
Как справедливо заметили участники обсуждения, самый быстрый (хотя и не самый эстетичный) способ — использование кодов справочника или префиксов в наименовании. Если изменить название на 01. Основной склад, 02. Склад готовой продукции, то алфавитная сортировка автоматически выстроит их правильно. Этот метод хорош тем, что не требует участия программиста, но плох тем, что технические индексы будут видны во всех печатных формах и документах системы.
Мы рекомендуем использовать Метод 1 (реквизит), если у вас есть доступ к конфигурации, или Метод 3 (характеристики), если вы работаете в рамках типовой УПП и хотите сохранить конфигурацию на поддержке.