Почему возникает ошибка «Нельзя упорядочить список по колонке... Поле не найдено» в динамическом списке 1С и как ее исправить?

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

При работе с динамическими списками на платформе 1С:Предприятие 8.3 разработчики иногда сталкиваются с ситуацией, когда попытка отсортировать данные по ссылочному полю или реквизиту формы завершается критической ошибкой вида: «Нельзя упорядочить список по колонке "%ИмяКолонки%"! Выберите другую колонку для упорядочивания. по причине: Поле не найдено "%ИмяКолонки%"».

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

Причина возникновения ошибки при сортировке

Проанализируем механику работы динамического списка. Платформа 1С автоматически генерирует SQL-запросы к базе данных на основе схемы запроса динамического списка, настроек компоновки данных и действий пользователя в интерфейсе (установка фильтров, группировок и сортировок).

Если текст запроса динамического списка содержит конструкцию ОБЪЕДИНЕНИЕ или ОБЪЕДИНЕНИЕ ВСЕ, платформа не всегда может корректно сопоставить имя колонки из пользовательского интерфейса с полями выбираемых таблиц. При попытке выполнить сортировку по полю ссылочного типа (например, СправочникСсылка) оптимизатор динамического списка пытаются применить инструкцию ORDER BY к полю, которое отсутствует во внешней секции ВЫБРАТЬ одной из частей объединения, что и вызывает ошибку «Поле не найдено».

Основное решение: Оборачивание запроса во вложенный

Выясним, как правильно построить запрос динамического списка, чтобы платформа могла свободно применять интерактивную сортировку. Наиболее надежный способ — поместить исходный запрос с объединением во вложенный запрос, а во внешнем запросе явно выбрать все необходимые поля с четко заданными псевдонимами.

Разберем по шагам создание правильной структуры запроса:

  1. Откроем свойства динамического списка в конфигураторе и перейдем к редактированию текста запроса.
  2. Поместим весь имеющийся запрос с конструкцией ОБЪЕДИНЕНИЕ в скобки подзапроса.
  3. Во внешнем запросе выберем требуемые колонки и зададим для них псевдонимы, к которым будет обращаться платформа.

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


ВЫБРАТЬ
	ВложенныйЗапрос.Ссылка КАК Ссылка,
	ВложенныйЗапрос.Код КАК Код,
	ВложенныйЗапрос.Наименование КАК Наименование
ИЗ
	(ВЫБРАТЬ
		ПерваяТаблица.Ссылка КАК Ссылка,
		ПерваяТаблица.Код КАК Код,
		ПерваяТаблица.Наименование КАК Наименование
	ИЗ
		Справочник.Номенклатура КАК ПерваяТаблица

	ОБЪЕДИНЕНИЕ ВСЕ

	ВЫБРАТЬ
		ВтораяТаблица.Ссылка КАК Ссылка,
		ВтораяТаблица.Код КАК Код,
		ВтораяТаблица.Наименование КАК Наименование
	ИЗ
		Справочник.Услуги КАК ВтораяТаблица) КАК ВложенныйЗапрос

Благодаря такому подходу платформа формирует итоговый SQL-запрос поверх единой виртуальной таблицы ВложенныйЗапрос, и обращение к полю Ссылка при интерактивной сортировке отрабатывает без ошибок.

Дополнительные варианты решения и настройки

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

  1. Включение флага «Использовать всегда»: В палитре свойств реквизита динамического списка найдем нужное поле и установим для него свойство Использовать всегда в значение Истина. Это исключит оптимизацию, при которой платформа вырезает неиспользуемые колонки из результирующего SQL-запроса.
  2. Проверка свойства «Основная таблица»: Если динамический список строится по одному объекту базы данных, убедимся, что в свойствах списка заполнено поле Основная таблица. Это позволит платформе автоматически определять типы и типы ссылок для построения корректных предложений упорядочивания.
  3. Сброс пользовательских настроек: Иногда ошибка возникает из-за кэширования старой структуры колонок. В режиме «1С:Предприятие» откроем форму, перейдем в меню Ещё — Установить стандартные настройки для сброса сохраненного пользовательского пользовательского порядка колонок.
← На главную