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

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

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

Рассмотрим подробнее причины возникновения этой проблемы и разберем по шагам доступные способы ее решения.

Выясним причину блокировки поля

Проанализируем ситуацию на уровне платформы 1С и СУБД. Главная причина, по которой поле упорядочивания становится неактивным, — тип данных этого поля. Если реквизит имеет тип Строка неограниченной длины (или тип Составной, включающий неограниченную строку), платформа автоматически блокирует возможность сортировки и группировки.

Это связано со следующими техническими ограничениями СУБД:

  1. Ограничения баз данных: Поля неограниченной длины хранятся в базах данных (MS SQL Server, PostgreSQL) в виде LOB-типов (Large Object). Реляционные СУБД на аппаратном уровне не поддерживают конструкции ORDER BY и GROUP BY для таких типов данных из-за специфики работы с буферами памяти.
  2. Защита от ошибок выполнения: Платформа 1С при анализе схемы компоновки данных заранее предотвращает отправку некорректного SQL-запроса, чтобы избежать аварийного завершения отчета на сервере СУБД.

Способ 1. Использование оператора ВЫРАЗИТЬ в тексте запроса

Наиболее эффективный и распространенный способ сделать поле доступным для сортировки — привести его к строке ограниченной длины непосредственно в тексте запроса набора данных. Для этого применяется конструкция ВЫРАЗИТЬ.

Разберем по шагам пример запроса:


ВЫБРАТЬ
    Ссылка КАК Документ,
    ВЫРАЗИТЬ(Комментарий КАК СТРОКА(1000)) КАК Комментарий
ИЗ
    Документ.РеализацияТоваровУслуг

После явного приведения типа к СТРОКА(1000) платформа 1С распознает поле как ограниченную строку, и колонка Ограничение упорядочивания на закладке Наборы данных становится активной.

Способ 2. Использование колонки «Выражение упорядочивания» в СКД

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

В этом случае выполним следующие настройки в схеме компоновки данных:

  1. Перейдем на закладку Наборы данных.
  2. Найдем нужное поле и найдем колонку Выражение упорядочивания.
  3. Укажем выражение ограничения длины, например: ПОДСТРОКА(Комментарий, 1, 250).

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

Способ 3. Создание вычисляемого поля

Другим удобным решением является добавление отдельного вычисляемого поля специально для сортировки.

Рассмотрим последовательность действий:

  1. Перейдем на закладку Вычисляемые поля в СКД.
  2. Добавим новое поле, например КомментарийДляСортировки.
  3. В колонке Выражение укажем: ПОДСТРОКА(Комментарий, 1, 250).
  4. На закладке Настройки предоставим пользователю возможность настраивать сортировку по полю КомментарийДляСортировки, оставив в выбранных полях отчета исходный Комментарий.

Способ 4. Изменение длины реквизита в метаданных

Если отчет разрабатывается для собственного объекта конфигурации и бизнес-логика не требует ввода длинных текстов (более 1000 символов), целесообразно изменить тип реквизита в Конфигураторе.

Указание фиксированной длины строки (например, 150 или 250 символов) в свойствах реквизита справочника или документа автоматически снимет все ограничения на сортировку и группировку во всех отчетах системы без необходимости править запросы СКД.

Важные нюансы и производительность

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

  1. Ограничение группировок: Вместе с ограничением сортировки у неограниченных строк заблокировано и поле Ограничение группировки. Все описанные выше методы автоматически разрешают использовать поле и в группировках отчета.
  2. Точность сортировки: При обрезке строки до N символов сортировка выполняется только по этим первым символам. Если два длинных текста полностью совпадают в первых 250 символах, их порядок относительно друг друга будет случайным.
  3. Оптимизация длины: Не рекомендуется без необходимости задавать слишком большую длину при использовании приведения типов (например, СТРОКА(10000)). Чем больше указанная длина, тем больше ресурсов СУБД требуется для обработки и сортировки данных. Оптимальный размер — от 150 до 1000 символов.
← На главную