Как исправить ошибку «Поле не найдено Т.ТорговыйОбъект» при обмене с ЕГАИС в 1С:Розница 2.3

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

При работе в конфигурации 1С:Розница 2.3 (особенно на последних релизах) пользователи часто сталкиваются с критической ошибкой при попытке открыть панель обмена с ЕГАИС или при выполнении операций с транспортными накладными. Проблема проявляется исключительно у пользователей с ограниченными правами (например, у кассиров), в то время как пользователи с полными правами или профилем «Управляющий» работают без сбоев. В этой статье мы подробно разберем причины возникновения этой ошибки и рассмотрим эффективные способы её решения.

Анализ причины ошибки

Рассмотрим текст ошибки подробнее. Система сообщает: {(93, 15)}: Поле не найдено "Т.ТорговыйОбъект". Это происходит в момент выполнения запроса к базе данных, когда система пытается применить механизм RLS (Row Level Security) — ограничение доступа на уровне записей. Выясним причину: в конфигурации «Розница 2.3» для многих документов используется унифицированный шаблон ограничения доступа «По магазинам». Этот шаблон ожидает, что в таблице документа присутствует поле, отвечающее за привязку к магазину. В стандартных шаблонах оно часто именуется как ТорговыйОбъект.

Однако в документах подсистемы ЕГАИС, таких как Документ.ТранспортнаяНакладнаяЕГАИС, физического реквизита с именем ТорговыйОбъект не существует. Там может быть Магазин или связь идет через ОрганизациюЕГАИС. Когда платформа пытается применить ограничение к алиасу таблицы Т, она не находит указанное поле, что и приводит к аварийному завершению запроса. Ситуация усугубляется при использовании производительного режима RLS, так как в этом случае система строит сложные вспомогательные таблицы прав, и любая нестыковка в метаданных шаблона становится фатальной.

Способ 1: Использование привилегированного режима через расширение

Проанализируем наиболее быстрый и эффективный способ решения, который позволяет обойти проверку прав RLS именно в момент формирования списков документов в панели ЕГАИС. Нам потребуется создать расширение конфигурации и перехватить процедуру выполнения пакета запросов в общем модуле ИнтеграцияИС.

Разберем по шагам реализацию этого метода:

  1. Создадим новое расширение (или используем существующее).
  2. Добавим в расширение общий модуль ИнтеграцияИС.
  3. Создадим в расширении функцию-перехватчик с аннотацией &Вместо для функции ВыполнитьПакетЗапросов.

Пример программного кода для расширения:


&Вместо("ВыполнитьПакетЗапросов")
Функция ИСПР_ВыполнитьПакетЗапросов(Запрос, ТекстыЗапроса, ВыгрузитьРезультат)
    
    // Устанавливаем привилегированный режим, чтобы обойти RLS на уровне сервера
    УстановитьПривилегированныйРежим(Истина);
    
    // Выполняем стандартный вызов функции
    Результат = ПродолжитьВызов(Запрос, ТекстыЗапроса, ВыгрузитьРезультат);
    
    Возврат Результат;
    
КонецФункции

Почему это работает? Когда мы устанавливаем УстановитьПривилегированныйРежим(Истина), система игнорирует ограничения RLS для текущего потока выполнения кода. Поскольку панель ЕГАИС собирает данные из множества таблиц, такой подход позволяет избежать ошибки поиска несуществующего поля в любой из них.

Способ 2: Корректировка ролей и профилей доступа

Если использование привилегированного режима по каким-то причинам нежелательно, рассмотрим альтернативный вариант — изменение структуры прав. Заметим, что у профиля «Управляющий» ошибка не возникает. Это связано с тем, что в данном профиле для объектов ЕГАИС могут быть назначены роли, не содержащие ограничений RLS, либо имеющие права на чтение без условий.

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

Попробуем следующий алгоритм действий:

  1. Создадим копию профиля Кассир.
  2. В расширении модифицируем роль ЧтениеТранспортныхНакладныхЕГАИС.
  3. Для этой роли в таблице Документ.ТранспортнаяНакладнаяЕГАИС удалим текст ограничения доступа (RLS) для права Чтение.

Важный нюанс: В «Рознице 2.3» фильтрация документов ЕГАИС по магазинам часто дублируется программно на уровне форм. Снятие RLS на уровне базы данных для этих объектов обычно не приводит к тому, что кассир увидит чужие документы в интерфейсе, так как сработают программные фильтры по текущему магазину пользователя.

Способ 3: Обновление таблиц доступа и очистка кэша

Иногда корень проблемы кроется в некорректном заполнении справочников КлючиДоступа или ГруппыДоступаЖурналаДокументов после обновления программы. Проанализируем шаги по очистке и обновлению данных механизмов управления доступом:

  1. Перейдем в раздел Администрирование — Настройки пользователей и прав — Управление доступом.
  2. Выполним регламентное задание Обновление прав доступа.
  3. Если используется «Производительный режим», попробуйте временно переключить его в «Стандартный» и проверить работоспособность. Если ошибка исчезла, значит, проблема в кэшированных таблицах прав.
  4. Для полного пересчета прав можно воспользоваться обработкой «Обновление вспомогательных данных» из состава БСП или запустить 1С с параметром /С ЗапуститьОбновлениеИнформационнойБазы.

Рекомендации по предотвращению проблемы

Для стабильной работы интеграции с ЕГАИС в условиях включенного RLS рекомендуем придерживаться следующих правил:

Во-первых, своевременно устанавливайте официальные патчи (исправления) от фирмы «1С». Данная проблема неоднократно фиксировалась в баг-трекере, и для релизов ветки 2.3.10+ выпускались специфические исправления (например, расширения типа EF_00_xxxxxx), которые корректируют логику запросов в модуле ИнтеграцияИС.

Во-вторых, при настройке профилей групп доступа для кассиров старайтесь не перегружать их избыточными ролями, дублирующими чтение одних и тех же объектов ЕГАИС. Часто конфликт возникает, когда две разные роли накладывают на один документ разные шаблоны RLS (один — по магазину, другой — по организации).

В-третьих, если предприятие имеет простую структуру (один магазин — одна база), рассмотрите возможность полного отключения Ограничения доступа на уровне записей в настройках прав. Это значительно повысит производительность системы и избавит от подобных технических ошибок метаданных.

← На главную