При обновлении платформы 1С:Предприятие до релиза 8.3.24 многие пользователи и разработчики сталкиваются с неочевидным поведением системы. Одной из таких проблем является ошибка «Объект не найден», возникающая сразу после создания нового элемента справочника (например, Контрагента или Партнера) в конфигурации «Управление торговлей 11». При этом, если проверить список справочника позже, элемент может присутствовать. Давайте разберем причины этого поведения, методы диагностики и способы устранения проблемы.
Ситуация выглядит следующим образом: пользователь заполняет карточку создания нового контрагента (или использует «Помощник регистрации нового партнера»), нажимает кнопку «Готово» (или «Записать и закрыть»), но вместо ожидаемого открытия созданной карточки получает сообщение системы: «Объект не найден» (или «<Объект не найден>...»).
При этом:
ПриЗаписи не показывает ошибок, так как запись проходит успешно.В теме на форуме автор совершил распространенную ошибку: поставил точку останова в процедуре ПриЗаписи, убедился, что код выполняется, и сделал вывод, что ошибка происходит «где-то потом». Проблема в том, что сообщение «Объект не найден» часто генерируется платформой при попытке открытия формы созданного объекта или при попытке сервера передать данные на клиент, если у текущего пользователя нет прав на чтение этого объекта в данный момент времени.
Чтобы поймать момент возникновения ошибки, необходимо использовать режим «Остановка по ошибке». Рассмотрим, как это сделать:
Зачастую ошибка вылетает не в момент obj.Записать(), а в момент выполнения запроса или при обращении к ссылке: Ссылка.ПолучитьОбъект(), когда транзакция записи уже завершена, но данные еще не доступны в контексте прав доступа.
Это наиболее вероятная причина поведения на платформе 8.3.24 в связке с УТ 11. В современных конфигурациях используется механизм отложенного обновления ключей доступа (RLS).
Как это работает:
Что идет не так: На новой платформе скорость выполнения операций или порядок фиксации транзакций может измениться. Если форма пытается прочитать объект до того, как механизм RLS успел записать разрешение на чтение, платформа честно сообщает: «Я не вижу такого объекта» (для текущего пользователя его не существует), выдавая «Объект не найден».
Решение:
Проверить состояние регламентных заданий. Попробуйте вручную запустить регламентное задание «Обновление доступа на уровне записей» (или аналогичное название в зависимости от версии БСП).
Также можно воспользоваться обработкой «Инструменты разработчика: Обновление вспомогательных данных», чтобы пересчитать права. Если после пересчета прав карточка начинает открываться — проблема точно в задержке RLS.
Платформа 8.3.24 стала строже относиться к методам, переопределяемым в расширениях. Если у вас установлены расширения, которые модифицируют справочник Контрагенты или Партнеры, особенно события записи, необходимо их проверить.
Обратите внимание на аннотации:
&После("ПриЗаписи")
Процедура Расш1_ПриЗаписи(Отказ)
// Ваш код
КонецПроцедуры
Если внутри расширения происходит неявная ошибка, или расширение пытается обратиться к данным, которые еще не закоммичены в основной транзакции (из-за изменений в работе транзакций на новой платформе), это может привести к «битой» ссылке в интерфейсе.
Рекомендация: Временно отключите все расширения и проверьте воспроизведение ошибки. Если ошибка исчезла — включайте расширения по одному, чтобы найти виновника.
При переходе на новую версию платформы (особенно с изменением мажорной версии или под версии, как 8.3.24) структура кэша может меняться. Старый кэш может конфликтовать с новыми механизмами работы СУБД.
Обязательно выполните полную очистку кэша:
Roaming\1C\1cv8 и Local\1C\1cv8).snccntx в каталоге кластера (делать это нужно только при полной остановке службы!).В УТ 11 существует разделение на управленческую сущность (Партнер) и юридическую (Контрагент). Помощник создания создает сразу два объекта. Если между ними нарушается ссылочная целостность в момент записи (например, Партнер создался, а Контрагент — нет, или наоборот, но форма пытается открыть несуществующую связку), возникнет ошибка «Объект не найден».
Проверьте через «Функции для технического специалиста» (ранее «Все функции»):
Партнеры. Найдите созданную запись.Контрагенты. Найдите запись.Ошибка «Объект не найден» при создании данных на новой платформе 8.3.24 чаще всего связана не с физическим отсутствием данных, а с правами доступа (RLS) или некорректной работой кэша/расширений.
План действий для исправления: