Почему возникает ошибка «Объект не найден» при создании контрагента в УТ 11 на платформе 8.3.24?

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

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

Суть проблемы и симптомы

Ситуация выглядит следующим образом: пользователь заполняет карточку создания нового контрагента (или использует «Помощник регистрации нового партнера»), нажимает кнопку «Готово» (или «Записать и закрыть»), но вместо ожидаемого открытия созданной карточки получает сообщение системы: «Объект не найден» (или «<Объект не найден>...»).

При этом:

Этап 1: Правильная диагностика отладчиком

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

Чтобы поймать момент возникновения ошибки, необходимо использовать режим «Остановка по ошибке». Рассмотрим, как это сделать:

  1. Откройте конфигуратор и запустите отладку.
  2. В меню выберите Отладка — Остановка по ошибке....
  3. Установите флаг Останавливаться по ошибке. Это заставит конфигуратор остановить исполнение кода именно в той строке, где генерируется исключение или происходит отказ в доступе, даже если это происходит в глубоких модулях БСП (Библиотеки Стандартных Подсистем).

Зачастую ошибка вылетает не в момент obj.Записать(), а в момент выполнения запроса или при обращении к ссылке: Ссылка.ПолучитьОбъект(), когда транзакция записи уже завершена, но данные еще не доступны в контексте прав доступа.

Этап 2: Проблема с RLS (Ограничение прав доступа)

Это наиболее вероятная причина поведения на платформе 8.3.24 в связке с УТ 11. В современных конфигурациях используется механизм отложенного обновления ключей доступа (RLS).

Как это работает:

  1. Пользователь записывает нового контрагента.
  2. Объект попадает в базу данных.
  3. Система должна рассчитать запись в регистре сведений, отвечающем за права доступа (разрешить этому пользователю видеть этого контрагента). В целях производительности это часто делается фоновым заданием или в отдельной транзакции.
  4. Форма пытается перечитать объект сразу после записи, чтобы отобразить его пользователю.

Что идет не так: На новой платформе скорость выполнения операций или порядок фиксации транзакций может измениться. Если форма пытается прочитать объект до того, как механизм RLS успел записать разрешение на чтение, платформа честно сообщает: «Я не вижу такого объекта» (для текущего пользователя его не существует), выдавая «Объект не найден».

Решение:

Проверить состояние регламентных заданий. Попробуйте вручную запустить регламентное задание «Обновление доступа на уровне записей» (или аналогичное название в зависимости от версии БСП).

Также можно воспользоваться обработкой «Инструменты разработчика: Обновление вспомогательных данных», чтобы пересчитать права. Если после пересчета прав карточка начинает открываться — проблема точно в задержке RLS.

Этап 3: Конфликт в расширениях конфигурации

Платформа 8.3.24 стала строже относиться к методам, переопределяемым в расширениях. Если у вас установлены расширения, которые модифицируют справочник Контрагенты или Партнеры, особенно события записи, необходимо их проверить.

Обратите внимание на аннотации:


&После("ПриЗаписи")
Процедура Расш1_ПриЗаписи(Отказ)
    // Ваш код
КонецПроцедуры

Если внутри расширения происходит неявная ошибка, или расширение пытается обратиться к данным, которые еще не закоммичены в основной транзакции (из-за изменений в работе транзакций на новой платформе), это может привести к «битой» ссылке в интерфейсе.

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

Этап 4: Кэш метаданных и сеансовые данные

При переходе на новую версию платформы (особенно с изменением мажорной версии или под версии, как 8.3.24) структура кэша может меняться. Старый кэш может конфликтовать с новыми механизмами работы СУБД.

Обязательно выполните полную очистку кэша:

  1. Очистка локального кэша пользователя (папки Roaming\1C\1cv8 и Local\1C\1cv8).
  2. Если используется клиент-серверный вариант — рекомендуется остановить службу агента сервера 1С и очистить папку сеансовых данных snccntx в каталоге кластера (делать это нужно только при полной остановке службы!).

Этап 5: Особенность «Партнер» vs «Контрагент»

В УТ 11 существует разделение на управленческую сущность (Партнер) и юридическую (Контрагент). Помощник создания создает сразу два объекта. Если между ними нарушается ссылочная целостность в момент записи (например, Партнер создался, а Контрагент — нет, или наоборот, но форма пытается открыть несуществующую связку), возникнет ошибка «Объект не найден».

Проверьте через «Функции для технического специалиста» (ранее «Все функции»):

  1. Откройте справочник Партнеры. Найдите созданную запись.
  2. Откройте справочник Контрагенты. Найдите запись.
  3. Если оба объекта есть, попробуйте открыть их оттуда. Если открываются — проблема исключительно в механизме открытия формы после записи (см. пункт про RLS).

Резюме

Ошибка «Объект не найден» при создании данных на новой платформе 8.3.24 чаще всего связана не с физическим отсутствием данных, а с правами доступа (RLS) или некорректной работой кэша/расширений.

План действий для исправления:

  1. Включите в конфигураторе «Остановку по ошибке» и проследите стек вызова.
  2. Проверьте, создается ли объект физически через «Функции для технического специалиста».
  3. Очистите кэш 1С (клиентский и серверный).
  4. Запустите регламентные задания по обновлению прав доступа (RLS).
  5. Временно отключите расширения конфигурации для локализации проблемы.
← На главную