При работе в программе 1С:Бухгалтерия 8 (редакция 3.0) пользователи иногда сталкиваются с ситуацией, когда в справочнике Договоры в поле Организация отображается надпись <Объект не найден>. Это означает, что в базе образовалась битая ссылка — ссылка на элемент справочника Организации, который был удален или потерян при обмене данными.
Рассмотрим причины возникновения такой проблемы, а также эффективные способы поиска и массовой замены битых ссылок на корректную организацию.
Выясним основные причины, из-за которых возникают битые ссылки в информационной базе:
Организации был удален напрямую без проверки ссылочной целостности (например, программно или обработкой). В результате во всех связанных договорах остался уникальный идентификатор (GUID) несуществующего элемента.<Объект не найден> появляется из-за того, что объект существует, но у пользователя нет прав на его чтение на уровне записей.Самый простой и быстрый способ исправить битую ссылку в режиме «1С:Предприятие» без написания кода — использовать типовой инструмент администрирования.
Разберем процесс по шагам:
Договоры.Организация (укажем отбор по битой ссылке или сформируем список договоров, требующих исправления).Организация, устанавливаем флажок и выбираем единственно правильную организацию.Если требуется найти все договоры с битыми ссылками программно или сформировать список элементов для последующей обработки, проанализируем специальный запрос на языке 1С.
Посмотрим на пример запроса, который выбирает все элементы справочника Договоры, у которых ссылка на организацию не является пустой, но ссылается на несуществующий объект (получается значение NULL при проверке таблицы организаций):
ВЫБРАТЬ
Спр.Ссылка КАК Договор
ИЗ
Справочник.Договоры КАК Спр
ГДЕ
Спр.Организация <> ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
И Спр.Организация.Ссылка ЕСТЬ NULL
После получения выборки элементов можно в цикле обходить найденные договоры и перезаписывать реквизит Организация на нужное значение.
При программной замене реквизитов в коде рекомендуется отключать логику проверок перед записью с помощью свойства ОбменДанными.Загрузка = Истина, чтобы избежать ошибок и блокировок:
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДоговорОбъект = Выборка.Договор.ПолучитьОбъект();
ДоговорОбъект.Организация = ПравильнаяОрганизация;
ДоговорОбъект.ОбменДанными.Загрузка = Истина;
ДоговорОбъект.Записать();
КонецЦикла;
Ещё один системный вариант решения проблемы — использование встроенного механизма тестирования информационной базы в Конфигураторе.
Рассмотрим порядок действий:
Важный нюанс: при изменении организации в договорах следует помнить, что битые ссылки могли попасть и в движения уже проведенных документов. В таких случаях может потребоваться перепроведение документов или корректировка записей регистров накопления и сведений.