Почему не работает сортировка контрагентов в отчете 1С и как это исправить

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

При разработке отчетов в 1С разработчики часто сталкиваются с ситуацией, когда добавление секции УПОРЯДОЧИТЬ ПО не приводит к ожидаемой сортировке контрагентов или организаций по алфавиту. Разберем по шагам, почему возникает эта проблема и как правильно настроить порядок вывода данных.

Анализ причины: роль фигурных скобок в запросе

Проанализируем исходный запрос. В нем предложение упорядочивания заключено в фигурные скобки:


{УПОРЯДОЧИТЬ ПО
    ЗапросДвижения.Организация.Наименование,
    ЗапросДвижения.Контрагент.Наименование,
    Договор.*}

Конструкции в фигурных скобках {...} являются расширением языка запросов 1С и используются механизмом Построителя отчета или Системы компоновки данных (СКД). Они выполняют особую роль:

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

Способ 1. Удаление фигурных скобок (для обычного запроса)

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


УПОРЯДОЧИТЬ ПО
    ЗапросДвижения.Организация.Наименование,
    ЗапросДвижения.Контрагент.Наименование

Обратите внимание, что обращение к реквизиту .Наименование гарантирует алфавитный порядок, тогда как упорядочивание по самой ссылке (без обращения к наименованию) выполняет сортировку по внутреннему идентификатору (GUID) объекта.

Способ 2. Использование ключевого слова АВТОУПОРЯДОЧИВАНИЕ

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


ИТОГИ ПО
    ВидЗадолженности,
    Организация,
    Контрагент,
    Договор
АВТОУПОРЯДОЧИВАНИЕ

Ключевое слово АВТОУПОРЯДОЧИВАНИЕ заставляет платформу 1С автоматически отсортировать все итоговые и детальные записи по их основному представлению (наименованию для справочников) с учетом иерархии групп и элементов.

Способ 3. Настройка сортировки в СКД или Построителе отчета

Выясним, как настроить порядок, если отчет построен на СКД или Построителе отчетов:

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

ПостроительОтчета.Порядок.Добавить("Организация.Наименование");
ПостроительОтчета.Порядок.Добавить("Контрагент.Наименование");

Резюме

Если контрагенты не выводятся по алфавиту, первым делом проверьте, как именно формируется отчет. В простых запросах достаточно удалить фигурные скобки или добавить АВТОУПОРЯДОЧИВАНИЕ, а в отчетах на СКД или Построителе отчета необходимо задавать правила сортировки в соответствующих настройках отчета.

← На главную