При работе с типовыми конфигурациями на платформе 1С:Предприятие 8.3, такими как Управление торговлей 11, ERP или Комплексная автоматизация, пользователи часто сталкиваются с механизмом дополнительных реквизитов. Этот механизм позволяет добавлять новые поля в справочники и документы без изменения структуры метаданных в конфигураторе. Однако при попытке вывести такой реквизит в список или установить по нему отбор может возникнуть неприятная ошибка: «Поле не найдено "Ссылка.[ИмяРеквизита]"».
В этой статье мы подробно разберем причины возникновения этой ситуации и пошагово рассмотрим способы ее решения, чтобы ваши динамические списки работали корректно и стабильно.
Для начала проанализируем ситуацию с технической точки зрения. Дополнительные реквизиты в 1С не являются реальными полями таблиц базы данных в привычном понимании (как, например, Код или Наименование). Они хранятся в подчиненной табличной части ДополнительныеРеквизиты объекта метаданных. Когда мы видим эти поля в динамическом списке, платформа выполняет сложную работу по «подмешиванию» этих данных в запрос списка в режиме реального времени.
Ошибка обращения через точку от Ссылка чаще всего свидетельствует о том, что механизм динамического формирования запроса не смог сопоставить визуальное поле в форме с реальными данными в базе. Рассмотрим основные факторы, влияющие на это:
Рассмотрим самый важный аспект настройки. Чтобы платформа могла однозначно идентифицировать дополнительный реквизит в программных запросах и отборах динамического списка, у него должно быть заполнено техническое имя. Разберем по шагам, как это сделать:
Справочник "Партнеры") и откроем карточку нашего реквизита.AnalitikaPostavschika.После установки технического имени платформа сможет корректно построить путь к данным Ссылка.[ИмяДляРазработчика], и ошибка должна исчезнуть.
Даже если мы правильно задали имя реквизита, ошибка может сохраняться из-за того, что 1С хранит пользовательские настройки формы. Проанализируем ситуацию: пользователь уже открывал список, настраивал колонки или отборы, и эти параметры сохранились в системных таблицах. Выясним, как это исправить:
Способ А: Сброс через интерфейс
В форме списка партнеров нажмем кнопку Еще — Установить стандартные настройки. Это действие заставит платформу полностью перечитать структуру динамического списка и заново инициализировать дополнительные поля.
Способ Б: Полное удаление настроек
Если стандартный сброс не помог, воспользуемся административным инструментом:
Партнеры и удалим ее настройки.Иногда нам требуется работать с этими данными не через интерфейс, а программно. Посмотрим на пример кода, который позволяет найти значение дополнительного реквизита в объекте. Рассмотрим ситуацию, когда нам нужно программно получить значение свойства «ID на сайте»:
// 1. Находим ссылку на само свойство (план видов характеристик)
СвойствоСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ID на сайте (Общие)", Истина);
// 2. Ищем строку в табличной части объекта
СтрокаСвойства = ОбъектПартнер.ДополнительныеРеквизиты.Найти(СвойствоСсылка, "Свойство");
Если СтрокаСвойства <> Неопределено Тогда
ЗначениеРеквизита = СтрокаСвойства.Значение;
// Дальнейшая логика обработки значения
КонецЕсли;
Если же вы создаете новый элемент и хотите сразу заполнить дополнительный реквизит, проанализируем следующий пример:
НовыйПартнер = Справочники.Партнеры.СоздатьЭлемент();
// ... заполнение основных реквизитов ...
ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Аналитика поставщика");
// Добавляем новую строку в табличную часть доп. реквизитов
НоваяСтрока = НовыйПартнер.ДополнительныеРеквизиты.Добавить();
НоваяСтрока.Свойство = ДопРеквизитСсылка;
НоваяСтрока.Значение = "Значение аналитики";
НовыйПартнер.Записать();
Если вышеперечисленные методы не помогают, стоит проверить более глубокие настройки системы. Разберем два важных момента:
Ограничение прав доступа (RLS): Если в системе включено разграничение прав на уровне записей, пользователь может иметь доступ к самому партнеру, но не иметь прав на чтение данных из ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения. В этом случае динамический список не сможет вытащить описание свойства, и возникнет ошибка обращения к полю. Попробуйте выполнить действие под пользователем с полными правами — если ошибка исчезла, дело в правах доступа.
Функциональные опции: Убедимся, что в программе включена сама возможность использования дополнительных реквизитов. Проверим путь: НСИ и администрирование — Общие настройки — Дополнительные реквизиты и сведения. Если флаг был снят и заново установлен, это могло вызвать временный сбой в кэше метаданных, который лечится очисткой серверного кэша или перезагрузкой службы 1C:Enterprise.
Подводя итог, отметим, что в 90% случаев проблема «Поле не найдено» решается именно комбинацией двух действий: установкой Имени для разработчика и сбросом настроек формы до стандартных. Это гарантирует, что платформа корректно свяжет визуальный элемент списка с данными в табличной части объекта.