В процессе работы с программами на платформе 1С:Предприятие бухгалтеры могут столкнуться со следующей проблемой: при попытке провести документ «Авансовый отчет» система внезапно выдает ошибку «Владелец не найден», и проведение прерывается. При детальном анализе через редакторы объектов выясняется, что в полях партий или связанных аналитик вместо названий товаров отображаются непонятные буквенно-цифровые строки вида <Объект не найден> (81e100155d012f03...).
В этой статье мы подробно разберем, почему возникает данная ошибка, проанализируем её техническую суть и рассмотрим эффективные методы её исправления и профилактики.
Для начала давайте разберем физический смысл этой ошибки. В типовых конфигурациях 1С (например, 1С:Бухгалтерия или 1С:Комплексная автоматизация) учет материально-производственных запасов ведется в разрезе партий. Для этого используется подчиненный справочник (например, Партии номенклатуры). У каждого элемента этого справочника есть обязательный реквизит — Владелец, которым выступает конкретная позиция из справочника Номенклатура.
Если пользователь или внешняя обработка физически удаляет элемент номенклатуры из базы данных, но при этом в базе остаются подчиненные ему элементы партий или движения в регистрах, возникает нарушение ссылочной целостности. Ссылка на владельца превращается в так называемую «битую ссылку» — уникальный идентификатор (GUID) в базе данных остается, но самого объекта, на который он указывает, больше нет. При проведении авансового отчета система пытается получить реквизиты владельца партии для отражения движений по счетам учета и, не находя его, выбрасывает исключение.
Рассмотрим основные причины появления таких «оторванных» GUID:
Удаление помеченных объектов (который перед удалением проверяет все связи в базе).Если битых ссылок в базе много, ручной поиск займет слишком много времени. Проанализируем наиболее простой и безопасный способ исправления ссылочной целостности средствами конфигуратора. Этот метод позволяет автоматически создать «заглушки» для всех удаленных элементов-владельцев.
Выполним следующие шаги:
.1cd или выгрузку .dt).Что произойдет? Платформа найдет все битые ссылки и автоматически создаст для них пустые элементы в соответствующих справочниках (например, в справочнике Номенклатура) с теми же самыми GUID. После этого в пользовательском режиме вместо строки <Объект не найден> появится пустая карточка номенклатуры. Бухгалтеру останется лишь переименовать её и заполнить необходимые реквизиты, после чего авансовый отчет успешно проведется.
Если вам известен конкретный GUID отсутствующего владельца (его можно скопировать из сообщения об ошибке или просмотреть через встроенный редактор объекта), мы можем воссоздать именно этот утерянный элемент с помощью простого программного кода.
Рассмотрим пример кода, который можно запустить через групповую обработку или внешнюю обработку в режиме «1С:Предприятие»:
// Задаем строковое представление GUID, который отображается как битая ссылка
СтрокаGUID = "5fb8db7c-47bc-11ee-80d5-00155d011f03"; // Замените на ваш GUID
Попытка
УникальныйИд = Новый УникальныйИдентификатор(СтрокаGUID);
СсылкаНаНоменклатуру = Справочники.Номенклатура.ПолучитьСсылка(УникальныйИд);
// Проверим, действительно ли объект отсутствует в базе данных
Если СсылкаНаНоменклатуру.ПолучитьОбъект() = Неопределено Тогда
// Создаем новый элемент справочника
НовыйОбъект = Справочники.Номенклатура.СоздатьЭлемент();
// Принудительно назначаем ему нужный GUID
НовыйОбъект.УстановитьСсылкуНового(СсылкаНаНоменклатуру);
// Заполняем минимально необходимые реквизиты
НовыйОбъект.Наименование = "Восстановленный товар (проверьте реквизиты)";
НовыйОбъект.Услуга = Ложь;
// Записываем объект в базу данных
НовыйОбъект.Записать();
Сообщить("Элемент успешно воссоздан. Теперь вы можете переименовать его в интерфейсе.");
Иначе
Сообщить("Объект с данным GUID уже существует в базе данных!");
КонецЕсли;
Исключение
Сообщить("Произошла ошибка при восстановлении: " + ОписаниеОшибки());
КонецПопытки;
После выполнения этого кода битая ссылка в партии мгновенно превратится в реальный элемент справочника Номенклатура. Вы сможете зайти в карточку этой номенклатуры, указать правильное наименование, ставку НДС, счета учета и без проблем провести проблемный авансовый отчет.
Если у вас нет навыков программирования, или масштаб проблемы требует массового анализа базы, воспользуемся готовыми инструментами для администраторов 1С. На порталах технической поддержки и профессиональных сообществах (например, Инфостарт) доступны специализированные обработки для поиска битых ссылок.
Посмотрим, как работать с такими инструментами:
Файл - Открыть специализированную обработку (например, универсальный поиск и замену дублей или инструменты работы с GUID).<Объект не найден>. Такие обработки сканируют не только табличные части документов, но и движения по регистрам сведений и накопления.Если ваша компания использует обмен данными между различными конфигурациями (например, Управление торговлей и Бухгалтерия предприятия), то корни проблемы могут лежать в регистрах сопоставления объектов.
Проанализируем этот аспект по шагам:
Публичные идентификаторы синхронизируемых объектов.Чтобы бухгалтерам больше не приходилось сталкиваться с остановкой проведения документов из-за отсутствующих владельцев, рекомендуем внедрить следующие меры профилактики:
Интерактивное удаление). Все удаление должно происходить исключительно через пометку на удаление и последующий регламентный контроль ссылок администратором системы.Применяя описанные методы, вы сможете оперативно восстановить работоспособность базы данных, успешно провести заблокированные авансовые отчеты и не допускать подобных сбоев в будущем.