При разработке отчетов в 1С разработчики часто сталкиваются с ситуацией, когда добавление секции УПОРЯДОЧИТЬ ПО не приводит к ожидаемой сортировке контрагентов или организаций по алфавиту. Разберем по шагам, почему возникает эта проблема и как правильно настроить порядок вывода данных.
Проанализируем исходный запрос. В нем предложение упорядочивания заключено в фигурные скобки:
{УПОРЯДОЧИТЬ ПО
ЗапросДвижения.Организация.Наименование,
ЗапросДвижения.Контрагент.Наименование,
Договор.*}
Конструкции в фигурных скобках {...} являются расширением языка запросов 1С и используются механизмом Построителя отчета или Системы компоновки данных (СКД). Они выполняют особую роль:
Запрос через Запрос.Выполнить(), платформа полностью игнорирует содержимое фигурных скобок. В результате сортировка вообще не применяется.{УПОРЯДОЧИТЬ ПО ...} не задает жесткий порядок вывода по умолчанию. Он лишь описывает список полей, по которым построителю разрешено сортировать данные. Если порядок не передан в настройки Построителя явно, вывод останется неотсортированным.Если отчет формируется простым запросом без использования механизмов построителя, необходимо убрать фигурные скобки из секции сортировки. Укажем явное упорядочивание по наименованию объектов:
УПОРЯДОЧИТЬ ПО
ЗапросДвижения.Организация.Наименование,
ЗапросДвижения.Контрагент.Наименование
Обратите внимание, что обращение к реквизиту .Наименование гарантирует алфавитный порядок, тогда как упорядочивание по самой ссылке (без обращения к наименованию) выполняет сортировку по внутреннему идентификатору (GUID) объекта.
Рассмотрим случай, когда в запросе рассчитываются итоги (используется конструкция ИТОГИ ПО). В таких запросах эффективным решением является добавление предложения АВТОУПОРЯДОЧИВАНИЕ в самый конец текста запроса:
ИТОГИ ПО
ВидЗадолженности,
Организация,
Контрагент,
Договор
АВТОУПОРЯДОЧИВАНИЕ
Ключевое слово АВТОУПОРЯДОЧИВАНИЕ заставляет платформу 1С автоматически отсортировать все итоговые и детальные записи по их основному представлению (наименованию для справочников) с учетом иерархии групп и элементов.
Выясним, как настроить порядок, если отчет построен на СКД или Построителе отчетов:
Организация.Наименование Возр и Контрагент.Наименование Возр.
ПостроительОтчета.Порядок.Добавить("Организация.Наименование");
ПостроительОтчета.Порядок.Добавить("Контрагент.Наименование");
Если контрагенты не выводятся по алфавиту, первым делом проверьте, как именно формируется отчет. В простых запросах достаточно удалить фигурные скобки или добавить АВТОУПОРЯДОЧИВАНИЕ, а в отчетах на СКД или Построителе отчета необходимо задавать правила сортировки в соответствующих настройках отчета.