Как исправить ошибку Поле не найдено Ссылка.ДополнительныйРеквизит при отборе в динамическом списке 1С

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

При работе со стандартными конфигурациями «1С:Предприятие 8.3» (такими как «Управление торговлей», «ERP Управление предприятием» или «Комплексная автоматизация») пользователи часто сталкиваются со следующей проблемой. После добавления нового дополнительного реквизита для справочника (например, «Аналитика поставщика» для справочника Справочники.Партнеры) при попытке установить по нему отбор в форме списка система выдает критическую ошибку:

«Поле не найдено "Ссылка.[Аналитика поставщика]"» или «Поле не найдено "Ссылка.[ИмяРеквизита]"».

Синтаксис обращения к данным с использованием квадратных скобок вида Ссылка.[ИмяРеквизита] — это стандартный платформенный механизм работы с характеристиками. Ошибка указывает на то, что система компоновки данных (СКД), отвечающая за построение динамического списка, по какой-то причине теряет связь с таблицей характеристик этого справочника. В этой статье мы подробно разберем причины этой проблемы и пошагово выясним, как её устранить.

Причина 1: Сброшено свойство «Основная таблица» динамического списка

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

Проанализируем, как это происходит:

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

Решение:

  1. Откроем конфигуратор и найдем форму списка, в которой возникает ошибка.
  2. Перейдем к свойствам реквизита формы Список (имеющего тип ДинамическийСписок).
  3. Найдем свойство «Основная таблица» (Main Table) и убедимся, что там выбран соответствующий справочник (например, Справочник.Партнеры).
  4. Если поле пустое — укажем его вручную и сохраним конфигурацию базы данных.

Причина 2: Программная подмена запроса в коде формы

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

В модуле формы (чаще всего в обработчике события ПриСозданииНаСервере) или в общих модулях механизма БСП программно переопределяется текст запроса списка. Например, динамически добавляются новые условия «ГДЕ» или происходит полное замещение текста свойства Список.ТекстЗапроса.

Если в процессе программной сборки запроса теряется исходная структура или СКД лишается возможности сопоставить поля, связь с механизмом дополнительных реквизитов рвется. Также такое случается, если итоговый запрос превращается во вложенный запрос или использует оператор ОБЪЕДИНИТЬ без четкого сопоставления типов в первом запросе пакета.

Выясним причину программной ошибки с помощью отладки:

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


// Получаем исполняемую схему компоновки данных динамического списка
ИсполняемаяСхема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();

// Создадим объект записи XML для выгрузки схемы во внешний файл
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\temp\DynamicListSchema.xml");
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ИсполняемаяСхема);
ЗаписьXML.Закрыть();

Проанализировав полученный XML-файл схемы, мы сможем увидеть, присутствует ли в ней секция <characteristics> (Характеристики). Если этой секции нет, значит, программная модификация запроса нарушает логику интеграции дополнительных реквизитов БСП.

Причина 3: Некорректное описание характеристик в метаданных справочника

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

Разберем, как проверить эти настройки в конфигураторе:

  1. Откроем свойства справочника (например, Справочник.Партнеры).
  2. Перейдем на вкладку «Данные».
  3. В нижней части окна нажмем кнопку «Характеристики...».
  4. Убедимся, что в открывшемся окне корректно заданы правила получения характеристик:
    • Указан правильный вид характеристик (обычно это План видов характеристик ДополнительныеРеквизитыИСведения).
    • Задана таблица для получения значений (табличная часть справочника или регистр сведений ДополнительныеРеквизитыИСведения).
    • Корректно сопоставлены ключевые поля: «Ключ объекта», «Свойство», «Значение».

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

Причина 4: Конфликт кэша и сохраненных пользовательских настроек

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

Выполним по шагам очистку настроек:

  1. Попробуем сбросить настройки формы непосредственно в пользовательском режиме. Для этого в форме списка нажмем кнопку «Ещё» -> «Установить стандартные настройки».
  2. Если это не помогло, очистим настройки формы через административное меню: перейдем в Администрирование -> Настройки пользователей и прав -> Очистка настроек, выберем нужного пользователя и удалим сохраненные настройки для формы списка партнеров.
  3. В крайнем случае очистим локальный кэш конфигурации на рабочем компьютере пользователя, запустив систему с параметром командной строки /ClearCache.

Резюме

При возникновении ошибки «Поле не найдено 'Ссылка.[ИмяРеквизита]'» в динамических списках 1С последовательно проверяйте:

← На главную