При работе со стандартными конфигурациями «1С:Предприятие 8.3» (такими как «Управление торговлей», «ERP Управление предприятием» или «Комплексная автоматизация») пользователи часто сталкиваются со следующей проблемой. После добавления нового дополнительного реквизита для справочника (например, «Аналитика поставщика» для справочника Справочники.Партнеры) при попытке установить по нему отбор в форме списка система выдает критическую ошибку:
«Поле не найдено "Ссылка.[Аналитика поставщика]"» или «Поле не найдено "Ссылка.[ИмяРеквизита]"».
Синтаксис обращения к данным с использованием квадратных скобок вида Ссылка.[ИмяРеквизита] — это стандартный платформенный механизм работы с характеристиками. Ошибка указывает на то, что система компоновки данных (СКД), отвечающая за построение динамического списка, по какой-то причине теряет связь с таблицей характеристик этого справочника. В этой статье мы подробно разберем причины этой проблемы и пошагово выясним, как её устранить.
Это самая распространенная техническая причина возникновения ошибки. Платформа 1С автоматически подключает механизм характеристик (включая дополнительные реквизиты БСП) к динамическому списку только в том случае, если у этого списка в конфигураторе жестко задано свойство «Основная таблица».
Проанализируем, как это происходит:
ОсновнаяТаблица может сброситься в значение «Не указана».Решение:
Список (имеющего тип ДинамическийСписок).Справочник.Партнеры).Даже если в конфигураторе динамический список настроен абсолютно корректно, разработчики типовых решений часто прибегают к динамической модификации запросов. Посмотрим на поведение системы при создании формы:
В модуле формы (чаще всего в обработчике события ПриСозданииНаСервере) или в общих модулях механизма БСП программно переопределяется текст запроса списка. Например, динамически добавляются новые условия «ГДЕ» или происходит полное замещение текста свойства Список.ТекстЗапроса.
Если в процессе программной сборки запроса теряется исходная структура или СКД лишается возможности сопоставить поля, связь с механизмом дополнительных реквизитов рвется. Также такое случается, если итоговый запрос превращается во вложенный запрос или использует оператор ОБЪЕДИНИТЬ без четкого сопоставления типов в первом запросе пакета.
Выясним причину программной ошибки с помощью отладки:
Для детального анализа исполняемой схемы динамического списка мы можем программно перехватить его состояние в момент вызова. Нам помогут методы таблицы формы. Рассмотрим следующий отладочный код, который можно временно разместить в конце процедуры ПриСозданииНаСервере:
// Получаем исполняемую схему компоновки данных динамического списка
ИсполняемаяСхема = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
// Создадим объект записи XML для выгрузки схемы во внешний файл
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\temp\DynamicListSchema.xml");
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ИсполняемаяСхема);
ЗаписьXML.Закрыть();
Проанализировав полученный XML-файл схемы, мы сможем увидеть, присутствует ли в ней секция <characteristics> (Характеристики). Если этой секции нет, значит, программная модификация запроса нарушает логику интеграции дополнительных реквизитов БСП.
Если справочник подвергался кастомизации, переносился через расширение или обновлялся нетиповым способом, могли повредиться настройки характеристик на уровне самого объекта метаданных.
Разберем, как проверить эти настройки в конфигураторе:
Справочник.Партнеры).ДополнительныеРеквизитыИСведения).ДополнительныеРеквизитыИСведения).Если настройки сброшены, платформа не сможет связать динамический список с базой данных дополнительных свойств, что гарантированно приведет к ошибке отсутствия поля при попытке отбора.
Иногда ошибка «Поле не найдено» возникает локально у определенных пользователей после обновления конфигурации или добавления нового свойства. Причиной этого является устаревший кэш или сохраненные ранее настройки формы (компоновки данных), которые входят в конфликт с обновленной структурой метаданных.
Выполним по шагам очистку настроек:
/ClearCache.При возникновении ошибки «Поле не найдено 'Ссылка.[ИмяРеквизита]'» в динамических списках 1С последовательно проверяйте:
Список.ТекстЗапроса в коде управляемой формы.