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

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

При работе с типовыми конфигурациями на платформе 1С:Предприятие 8.3, такими как Управление торговлей 11, ERP или Комплексная автоматизация, пользователи часто сталкиваются с механизмом дополнительных реквизитов. Этот механизм позволяет добавлять новые поля в справочники и документы без изменения структуры метаданных в конфигураторе. Однако при попытке вывести такой реквизит в список или установить по нему отбор может возникнуть неприятная ошибка: «Поле не найдено "Ссылка.[ИмяРеквизита]"».

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

Выясним причину возникновения ошибки

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

Ошибка обращения через точку от Ссылка чаще всего свидетельствует о том, что механизм динамического формирования запроса не смог сопоставить визуальное поле в форме с реальными данными в базе. Рассмотрим основные факторы, влияющие на это:

  1. Отсутствие внутреннего идентификатора: Платформа не понимает, по какому имени обращаться к свойству в тексте запроса.
  2. Кэширование настроек: Старые настройки формы «помнят» структуру списка до того, как реквизит был корректно настроен.
  3. Особенности динамического списка: Отключенное автозаполнение или специфические расширения могут блокировать работу виртуальных полей.

Решение 1: Заполнение «Имени для разработчика»

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

  1. Перейдем в раздел Администрирование — Общие настройки — Дополнительные реквизиты и сведения.
  2. Найдем в списке нужный набор свойств (например, Справочник "Партнеры") и откроем карточку нашего реквизита.
  3. В карточке реквизита найдем поле «Имя» (в некоторых редакциях оно называется «Имя для разработчика»).
  4. Важно: Это поле должно быть заполнено латиницей, без пробелов и спецсимволов. Например, вместо «Аналитика поставщика» напишем AnalitikaPostavschika.
  5. Запишем изменения и обязательно перезапустим сеанс работы пользователя.

После установки технического имени платформа сможет корректно построить путь к данным Ссылка.[ИмяДляРазработчика], и ошибка должна исчезнуть.

Решение 2: Сброс настроек формы и очистка кэша

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

Способ А: Сброс через интерфейс

В форме списка партнеров нажмем кнопку Еще — Установить стандартные настройки. Это действие заставит платформу полностью перечитать структуру динамического списка и заново инициализировать дополнительные поля.

Способ Б: Полное удаление настроек

Если стандартный сброс не помог, воспользуемся административным инструментом:

  1. Перейдем в Администрирование — Обслуживание — Управление настройками пользователей.
  2. Выберем нужного пользователя и перейдем в раздел Настройки внешнего вида.
  3. Найдем в списке форму списка справочника Партнеры и удалим ее настройки.

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

Иногда нам требуется работать с этими данными не через интерфейс, а программно. Посмотрим на пример кода, который позволяет найти значение дополнительного реквизита в объекте. Рассмотрим ситуацию, когда нам нужно программно получить значение свойства «ID на сайте»:


// 1. Находим ссылку на само свойство (план видов характеристик)
СвойствоСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ID на сайте (Общие)", Истина);

// 2. Ищем строку в табличной части объекта
СтрокаСвойства = ОбъектПартнер.ДополнительныеРеквизиты.Найти(СвойствоСсылка, "Свойство");

Если СтрокаСвойства <> Неопределено Тогда
    ЗначениеРеквизита = СтрокаСвойства.Значение;
    // Дальнейшая логика обработки значения
КонецЕсли;

Если же вы создаете новый элемент и хотите сразу заполнить дополнительный реквизит, проанализируем следующий пример:


НовыйПартнер = Справочники.Партнеры.СоздатьЭлемент();
// ... заполнение основных реквизитов ...

ДопРеквизитСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Аналитика поставщика");

// Добавляем новую строку в табличную часть доп. реквизитов
НоваяСтрока = НовыйПартнер.ДополнительныеРеквизиты.Добавить();
НоваяСтрока.Свойство = ДопРеквизитСсылка;
НоваяСтрока.Значение = "Значение аналитики";

НовыйПартнер.Записать();

Дополнительные проверки: RLS и функциональные опции

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

Ограничение прав доступа (RLS): Если в системе включено разграничение прав на уровне записей, пользователь может иметь доступ к самому партнеру, но не иметь прав на чтение данных из ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения. В этом случае динамический список не сможет вытащить описание свойства, и возникнет ошибка обращения к полю. Попробуйте выполнить действие под пользователем с полными правами — если ошибка исчезла, дело в правах доступа.

Функциональные опции: Убедимся, что в программе включена сама возможность использования дополнительных реквизитов. Проверим путь: НСИ и администрирование — Общие настройки — Дополнительные реквизиты и сведения. Если флаг был снят и заново установлен, это могло вызвать временный сбой в кэше метаданных, который лечится очисткой серверного кэша или перезагрузкой службы 1C:Enterprise.

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

← На главную