При работе в конфигурации 1С:Розница 2.3 (особенно на последних релизах) пользователи часто сталкиваются с критической ошибкой при попытке открыть панель обмена с ЕГАИС или при выполнении операций с транспортными накладными. Проблема проявляется исключительно у пользователей с ограниченными правами (например, у кассиров), в то время как пользователи с полными правами или профилем «Управляющий» работают без сбоев. В этой статье мы подробно разберем причины возникновения этой ошибки и рассмотрим эффективные способы её решения.
Рассмотрим текст ошибки подробнее. Система сообщает: {(93, 15)}: Поле не найдено "Т.ТорговыйОбъект". Это происходит в момент выполнения запроса к базе данных, когда система пытается применить механизм RLS (Row Level Security) — ограничение доступа на уровне записей. Выясним причину: в конфигурации «Розница 2.3» для многих документов используется унифицированный шаблон ограничения доступа «По магазинам». Этот шаблон ожидает, что в таблице документа присутствует поле, отвечающее за привязку к магазину. В стандартных шаблонах оно часто именуется как ТорговыйОбъект.
Однако в документах подсистемы ЕГАИС, таких как Документ.ТранспортнаяНакладнаяЕГАИС, физического реквизита с именем ТорговыйОбъект не существует. Там может быть Магазин или связь идет через ОрганизациюЕГАИС. Когда платформа пытается применить ограничение к алиасу таблицы Т, она не находит указанное поле, что и приводит к аварийному завершению запроса. Ситуация усугубляется при использовании производительного режима RLS, так как в этом случае система строит сложные вспомогательные таблицы прав, и любая нестыковка в метаданных шаблона становится фатальной.
Проанализируем наиболее быстрый и эффективный способ решения, который позволяет обойти проверку прав RLS именно в момент формирования списков документов в панели ЕГАИС. Нам потребуется создать расширение конфигурации и перехватить процедуру выполнения пакета запросов в общем модуле ИнтеграцияИС.
Разберем по шагам реализацию этого метода:
ИнтеграцияИС.&Вместо для функции ВыполнитьПакетЗапросов.Пример программного кода для расширения:
&Вместо("ВыполнитьПакетЗапросов")
Функция ИСПР_ВыполнитьПакетЗапросов(Запрос, ТекстыЗапроса, ВыгрузитьРезультат)
// Устанавливаем привилегированный режим, чтобы обойти RLS на уровне сервера
УстановитьПривилегированныйРежим(Истина);
// Выполняем стандартный вызов функции
Результат = ПродолжитьВызов(Запрос, ТекстыЗапроса, ВыгрузитьРезультат);
Возврат Результат;
КонецФункции
Почему это работает? Когда мы устанавливаем УстановитьПривилегированныйРежим(Истина), система игнорирует ограничения RLS для текущего потока выполнения кода. Поскольку панель ЕГАИС собирает данные из множества таблиц, такой подход позволяет избежать ошибки поиска несуществующего поля в любой из них.
Если использование привилегированного режима по каким-то причинам нежелательно, рассмотрим альтернативный вариант — изменение структуры прав. Заметим, что у профиля «Управляющий» ошибка не возникает. Это связано с тем, что в данном профиле для объектов ЕГАИС могут быть назначены роли, не содержащие ограничений RLS, либо имеющие права на чтение без условий.
Посмотрим на список ролей, которые могут вызывать проблему:
Чтение документов ЕГАИС РТДобавление изменение документов ЕГАИС РТЧтение транспортных накладных ЕГАИСПопробуем следующий алгоритм действий:
Кассир.ЧтениеТранспортныхНакладныхЕГАИС.Документ.ТранспортнаяНакладнаяЕГАИС удалим текст ограничения доступа (RLS) для права Чтение.Важный нюанс: В «Рознице 2.3» фильтрация документов ЕГАИС по магазинам часто дублируется программно на уровне форм. Снятие RLS на уровне базы данных для этих объектов обычно не приводит к тому, что кассир увидит чужие документы в интерфейсе, так как сработают программные фильтры по текущему магазину пользователя.
Иногда корень проблемы кроется в некорректном заполнении справочников КлючиДоступа или ГруппыДоступаЖурналаДокументов после обновления программы. Проанализируем шаги по очистке и обновлению данных механизмов управления доступом:
/С ЗапуститьОбновлениеИнформационнойБазы.Для стабильной работы интеграции с ЕГАИС в условиях включенного RLS рекомендуем придерживаться следующих правил:
Во-первых, своевременно устанавливайте официальные патчи (исправления) от фирмы «1С». Данная проблема неоднократно фиксировалась в баг-трекере, и для релизов ветки 2.3.10+ выпускались специфические исправления (например, расширения типа EF_00_xxxxxx), которые корректируют логику запросов в модуле ИнтеграцияИС.
Во-вторых, при настройке профилей групп доступа для кассиров старайтесь не перегружать их избыточными ролями, дублирующими чтение одних и тех же объектов ЕГАИС. Часто конфликт возникает, когда две разные роли накладывают на один документ разные шаблоны RLS (один — по магазину, другой — по организации).
В-третьих, если предприятие имеет простую структуру (один магазин — одна база), рассмотрите возможность полного отключения Ограничения доступа на уровне записей в настройках прав. Это значительно повысит производительность системы и избавит от подобных технических ошибок метаданных.