Почему после обновления 1С:Управление торговлей 11.4 перестала работать сортировка в отчетах СКД

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При переходе с релиза 11.4.11.106 на 11.4.12.71 многие разработчики столкнулись с неприятной особенностью: отчеты, построенные на Системе компоновки данных (СКД), которые годами работали корректно, внезапно перестали соблюдать заданный порядок сортировки. Данные выводятся хаотично, а стандартные манипуляции в пользовательском режиме не приносят результата. Проанализируем эту ситуацию, разберем причины и найдем способы восстановления работоспособности отчетов.

Первичная диагностика: исключаем простые факторы

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

  1. Очистка кэша конфигурации. Это «золотое правило» при любых странностях после обновления. Часто платформа хранит старые описания метаданных, что приводит к конфликтам. Удалим базу из списка и добавим заново или очистим папки %AppData%\1C\1Cv8 вручную.
  2. Сброс пользовательских настроек. В версии 11.4.12 изменились механизмы хранения настроек БСП. Попробуем зайти в «Настройки» отчета, нажать «Стандартные настройки» или полностью удалить текущий вариант отчета и создать его заново из конфигурации.
  3. Проверка сортировки по наименованию. Попробуем принудительно установить сортировку по полю Номенклатура.Наименование вместо самой ссылки. Если это помогает, значит, проблема кроется в обращении к полям через точку или в механизме автоматического упорядочивания.

Если эти шаги не помогли, переходим к техническому анализу изменений платформы и логики СКД.

Изменение режима совместимости и оптимизация запросов

С выходом новых релизов УТ повышаются требования к версии платформы 1С:Предприятие (обычно до 8.3.16 и выше). В этих версиях были существенно переработаны алгоритмы оптимизации запросов СКД. Разберем, как это влияет на сортировку.

Проанализируем настройку «Автоупорядочивание». В СКД на закладке «Наборы данных» для каждого поля есть флаг «Автоупорядочивание». Если он снят, платформа может игнорировать порядок, если считает его избыточным для текущего плана запроса. Чтобы вернуть контроль, проверим следующее:

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

Проблемы иерархических справочников и группировок

Если ваш отчет использует иерархию (например, по номенклатуре или группам финансового учета), механизм сортировки в версии 11.4.12 работает иначе. Рассмотрим ситуацию подробнее:

При использовании типа группировки «Иерархия» приоритет автоматической сортировки стал выше пользовательской. Система сначала пытается выстроить дерево по внутренним идентификаторам (ссылкам), а уже потом применяет правила внутри узла. Чтобы исправить это, проанализируем настройки конкретной группировки:

  1. Зайдем в настройки группировки.
  2. Перейдем на закладку «Сортировка».
  3. Снимем флаг «Использовать настройки родителя» (если он стоит).
  4. Явно укажем поле сортировки.

Влияние вычисляемых полей и типов данных

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

Посмотрим на пример выражения, которое может вызывать проблемы:


Выбор
    Когда СуммаОстаток > 0 Тогда "В наличии"
    Иначе NULL
Конец

В данном случае, если система встречает NULL, алгоритм сортировки может сбросить порядок к исходному (по ссылке). Рекомендуется всегда приводить значения к единому типу, например:


Выбор
    Когда СуммаОстаток > 0 Тогда "В наличии"
    Иначе ""
Конец

Программное вмешательство в модуле объекта

В нетиповых отчетах или отчетах, созданных на базе типовых, часто используется переопределение настроек в модуле объекта. Выясним, не затираются ли ваши настройки кодом. Проанализируем процедуру ПриКомпоновкеРезультата:


Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
    
    // Стандартная обработка часто вызывает механизмы БСП
    // которые могут сбрасывать сортировку при определенных условиях
    СтандартнаяОбработка = Ложь;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
    
    // Здесь важно проверить, какой объект настроек передается в макет
    // Если используется КомпоновщикНастроек.Настройки, проверьте их перед выполнением
    
КонецПроцедуры

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

Особенности работы с характеристиками

Если отчет строится по справочнику с включенными характеристиками (дополнительными реквизитами), в 11.4.12 механизм их получения претерпел изменения. Динамическое построение запроса СКД может «терять» связи во временных таблицах, из-за чего итоговая выборка лишается корректного порядка.

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

Редкая ошибка параметра «Рассчитывать суммы»

Существует специфический баг платформы, связанный с расчетом итогов. При включенной настройке «Рассчитывать суммы» в ресурсах по определенным полям, компоновщик перестраивает запрос таким образом, что оператор ORDER BY оказывается внутри вложенного запроса, а внешний запрос выводит данные без определенного порядка.

Разберем решение: попробуйте принудительно установить сортировку на самом верхнем уровне настроек (в корне элемента «Отчет»), а не только внутри отдельных группировок. Это заставит СКД добавить финальную сортировку к итоговому результату выборки.

Таким образом, проблема с сортировкой в УТ 11.4.12 чаще всего решается либо через явное указание полей в «Выбранных полях», либо через отключение автоматического упорядочивания и ручную настройку сортировки на каждом уровне группировки.

← На главную