При работе в конфигурации «1С:Управление торговлей» (редакция 11) или других типовых решениях на базе Библиотеки стандартных подсистем (БСП) разработчики нередко сталкиваются с ситуацией, когда при открытии журнала документов (например, «Безналичные платежи») у пользователей с ограниченными правами возникает исключение:
ОбщийМодуль.УправлениеПечатьюКлиентСервер.Модуль: Поле объекта не обнаружено (Ссылка)
При этом под полными административными правами журнал открывается корректно. Ошибка часто проявляется после изменения режима совместимости конфигурации (например, при попытке снять режим совместимости для подключения расширений) или после обновления платформы. Разберем по шагам природу этого поведения и подробно рассмотрим способы его устранения.
Проанализируем цепочку событий, которая приводит к падению формы в момент открытия:
КАК (например, просто Документ.Ссылка, Документ.Дата, Документ.Номер), синтаксический анализатор при трансформации текста запроса и обратной сборке может присвоить полям внутренние системные имена или англоязычные идентификаторы. В результате исходное поле Ссылка перестает существовать в результирующей структуре строки динамического списка.СхемаЗапроса и компоновщике данных. В режиме совместимости с более старыми версиями платформа могла сохранять имена по умолчанию, а при переходе на новые механизмы поведение меняется, обнажая скрытую проблему в запросе формы.Ссылка. Не обнаружив его, система аварийно завершает работу.Рассмотрим основной и самый надежный способ исправления ошибки в форме журнала:
Список) и откроем свойство Настройка списка (или текст произвольного запроса).ВЫБРАТЬ.ОБЪЕДИНИТЬ ВСЕ, явно задан русскоязычный псевдоним через ключевое слово КАК:
ВЫБРАТЬ
ДокументПоступление.Ссылка КАК Ссылка,
ДокументПоступление.ПометкаУдаления КАК ПометкаУдаления,
ДокументПоступление.Номер КАК Номер,
ДокументПоступление.Дата КАК Дата,
ДокументПоступление.Проведен КАК Проведен,
ДокументПоступление.СуммаДокумента КАК СуммаДокумента
ИЗ
Документ.ПоступлениеБезналичныхДенежныхСредств КАК ДокументПоступление
ПутьКДанным) у элементов колонок таблицы, если при переименовании привязка сбросилась.Ссылка динамического списка установлен признак Использовать всегда.Если основная конфигурация находится на типовой поддержке и редактирование исходных объектов нежелательно, применим исправление через механизм расширений. Рассмотрим, как переопределить запрос динамического списка программно:
ПриСозданииНаСервере с директивой &Вместо или &После:
&После("ПриСозданииНаСервере")
Процедура Расш_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Получаем текущий текст запроса списка
ТекстЗапроса = Список.ТекстЗапроса;
// При необходимости модифицируем текст, явно задавая псевдонимы ключевых полей
Список.ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Документ.Ссылка,", "Документ.Ссылка КАК Ссылка,");
КонецПроцедуры
Список.ТекстЗапроса на корректно отформатированный запрос с явными псевдонимами для всех полей выборки.Если в конфигурации или расширении используется программное конструирование запросов для динамических списков, выясним важную особенность объекта СхемаЗапроса. При разборе запросов компоновщика данных без указания специального режима секции условий {ГДЕ ...} и псевдонимы могут искажаться.
Посмотрим на пример правильной инициализации схемы запроса:
СхемаЗапроса = Новый СхемаЗапроса;
// Обязательно включаем режим компоновки данных перед передачей текста
СхемаЗапроса.РежимКомпоновкиДанных = Истина;
СхемаЗапроса.УстановитьТекстЗапроса(Список.ТекстЗапроса);
// Выполняем необходимые программные модификации
// ...
Список.ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
Если после прописывания алиасов поле все еще не появляется у пользователя, выполним дополнительную диагностику прав:
Ссылка для строк этого типа может быть исключено платформой из выборки.ВЫБРАТЬ директиву РАЗРЕШЕННЫЕ./ClearCache и при необходимости запустить обновление вспомогательных данных доступа через процедуры БСП.Следуя этим шагам, мы гарантируем корректную инициализацию динамического списка, правильную работу механизмов RLS и стабильное открытие журналов документов под любыми пользовательскими ролями.