Почему в журнале документов возникает ошибка «Поле объекта не обнаружено (Ссылка)» и как её исправить?

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

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

ОбщийМодуль.УправлениеПечатьюКлиентСервер.Модуль: Поле объекта не обнаружено (Ссылка)

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

Причины исчезновения поля «Ссылка» из динамического списка

Проанализируем цепочку событий, которая приводит к падению формы в момент открытия:

  1. Модификация запроса подсистемой RLS: Для пользователей с неполными правами подсистема управления доступом на сервере динамически перехватывает исходный текст запроса динамического списка и достраивает условия ограничения на уровне записей (RLS). Для этого платформа и механизмы БСП разбирают запрос на составляющие.
  2. Потеря неявных псевдонимов (алиасов): Если в тексте произвольного запроса динамического списка поля выборки указаны напрямую без явного ключевого слова КАК (например, просто Документ.Ссылка, Документ.Дата, Документ.Номер), синтаксический анализатор при трансформации текста запроса и обратной сборке может присвоить полям внутренние системные имена или англоязычные идентификаторы. В результате исходное поле Ссылка перестает существовать в результирующей структуре строки динамического списка.
  3. Изменение алгоритмов платформы при смене режима совместимости: Отключение или повышение режима совместимости меняет правила трансляции неявно именованных полей в объекте СхемаЗапроса и компоновщике данных. В режиме совместимости с более старыми версиями платформа могла сохранять имена по умолчанию, а при переходе на новые механизмы поведение меняется, обнажая скрытую проблему в запросе формы.
  4. Обращение общих модулей к строке списка: В событиях инициализации формы (между обработчиками чтения настроек и открытием) вызываются процедуры подсистем печати или подключаемых команд, которые рассчитывают найти в структуре текущей строки обязательное поле Ссылка. Не обнаружив его, система аварийно завершает работу.

Способ 1. Явное назначение псевдонимов в запросе динамического списка (Основное решение)

Рассмотрим основной и самый надежный способ исправления ошибки в форме журнала:

  1. Откроем форму журнала документов в конфигураторе и перейдем на закладку Реквизиты.
  2. Найдем основной реквизит динамического списка (обычно Список) и откроем свойство Настройка списка (или текст произвольного запроса).
  3. Откроем текст запроса через Конструктор запроса либо вручную отредактируем секцию ВЫБРАТЬ.
  4. Убедимся, что для каждого выбираемого поля, особенно для системных реквизитов и полей составных типов в операторах ОБЪЕДИНИТЬ ВСЕ, явно задан русскоязычный псевдоним через ключевое слово КАК:
    
    ВЫБРАТЬ
        ДокументПоступление.Ссылка КАК Ссылка,
        ДокументПоступление.ПометкаУдаления КАК ПометкаУдаления,
        ДокументПоступление.Номер КАК Номер,
        ДокументПоступление.Дата КАК Дата,
        ДокументПоступление.Проведен КАК Проведен,
        ДокументПоступление.СуммаДокумента КАК СуммаДокумента
    ИЗ
        Документ.ПоступлениеБезналичныхДенежныхСредств КАК ДокументПоступление
    
  5. Если используется конструктор запроса, достаточно открыть его, проверить вкладку Объединения/Псевдонимы и нажать ОК: конструктор автоматически подставит псевдонимы для всех колонок.
  6. После сохранения текста запроса проверим таблицу формы. Перепривяжем пути к данным (свойство ПутьКДанным) у элементов колонок таблицы, если при переименовании привязка сбросилась.
  7. Убедимся, что в колонке реквизита Ссылка динамического списка установлен признак Использовать всегда.

Способ 2. Исправление через расширение конфигурации без снятия с поддержки

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

  1. Добавим расширение конфигурации и заимствуем в него форму проблемного журнала документов.
  2. В модуле формы расширения добавим обработчик события ПриСозданииНаСервере с директивой &Вместо или &После:
    
    &После("ПриСозданииНаСервере")
    Процедура Расш_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
        
        // Получаем текущий текст запроса списка
        ТекстЗапроса = Список.ТекстЗапроса;
        
        // При необходимости модифицируем текст, явно задавая псевдонимы ключевых полей
        Список.ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Документ.Ссылка,", "Документ.Ссылка КАК Ссылка,");
        
    КонецПроцедуры
    
  3. Либо полностью заменим текст свойства Список.ТекстЗапроса на корректно отформатированный запрос с явными псевдонимами для всех полей выборки.

Способ 3. Программная работа с объектом «СхемаЗапроса»

Если в конфигурации или расширении используется программное конструирование запросов для динамических списков, выясним важную особенность объекта СхемаЗапроса. При разборе запросов компоновщика данных без указания специального режима секции условий {ГДЕ ...} и псевдонимы могут искажаться.

Посмотрим на пример правильной инициализации схемы запроса:


СхемаЗапроса = Новый СхемаЗапроса;
// Обязательно включаем режим компоновки данных перед передачей текста
СхемаЗапроса.РежимКомпоновкиДанных = Истина;
СхемаЗапроса.УстановитьТекстЗапроса(Список.ТекстЗапроса);

// Выполняем необходимые программные модификации
// ...

Список.ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();

Проверка прав доступа к объектам метаданных

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

  1. Проверка прав на все источники запроса: Если в динамическом списке объединены несколько видов документов (например, поступление и списание безналичных ДС), у роли пользователя должны быть установлены права не только на Чтение, но и на Просмотр для всех типов документов и связанных с ними реквизитов. При отсутствии права просмотра на один из типов поле Ссылка для строк этого типа может быть исключено платформой из выборки.
  2. Проверка прав на таблицы соединений: Проанализируем левые соединения в запросе. Если в тексте присутствуют обращения к регистрам сведений, справочникам или вспомогательным таблицам, на которые у роли нет прав чтения, запрос вернет ошибку или отсечет поля выборки. В таких случаях необходимо добавить в начало секции ВЫБРАТЬ директиву РАЗРЕШЕННЫЕ.
  3. Очистка кэша и обновление вспомогательных данных: После корректировки прав и структуры списка рекомендуется выполнить запуск базы с параметром /ClearCache и при необходимости запустить обновление вспомогательных данных доступа через процедуры БСП.

Следуя этим шагам, мы гарантируем корректную инициализацию динамического списка, правильную работу механизмов RLS и стабильное открытие журналов документов под любыми пользовательскими ролями.

← На главную