Ситуация, когда из справочника случайно удаляется важный элемент (например, контрагент), знакома многим администраторам и разработчикам 1С. Основная сложность заключается не просто в повторном создании карточки с тем же наименованием, а в сохранении ссылочной целостности базы данных. Если элемент был удален, во всех документах, где он участвовал, вместо названия появится надпись «Объект не найден» с длинным идентификатором в скобках. Разберем подробно, как вернуть удаленный элемент и «склеить» его со всеми существующими документами.
Это самый простой и надежный способ, если у вас есть актуальная резервная копия базы данных, в которой этот элемент еще существует. Типовая обработка ВыгрузкаЗагрузкаДанныхXML позволяет перенести объект из одной базы в другую с полным сохранением его внутреннего идентификатора (GUID).
Рассмотрим по шагам, как правильно настроить фильтр, чтобы не выгружать весь справочник целиком:
ВыгрузкаЗагрузкаДанныхXML.Ссылка, вид сравнения Равно. В значении выберем того самого контрагента, которого нужно вернуть в рабочую базу.После завершения загрузки объект появится в базе. Поскольку 1С при обмене XML сохраняет внутренние идентификаторы, все «битые» ссылки в документах автоматически заменятся на восстановленного контрагента.
Если по каким-то причинам вы не можете воспользоваться выгрузкой XML (например, версия метаданных в копии сильно отличается), можно прибегнуть к программному созданию элемента. Для этого нам понадобится уникальный идентификатор (GUID) удаленного объекта. Его можно скопировать прямо из текста «Объект не найден (84:bf1ab527...)» в любом битом документе.
Проанализируем технический нюанс: GUID в представлении 1С и в строке «Объект не найден» может иметь разный порядок групп символов. Текст в скобках после «Объект не найден» обычно содержит идентификатор в формате внутреннего представления. Его нужно преобразовать в стандартный вид GUID (например, 9b7ab911-9a8a-42d8-bf1a-b527e9f6b6d0).
Выясним, как правильно создать объект кодом, чтобы он занял место удаленного:
// Определяем GUID удаленного объекта (берем из битой ссылки)
НужныйGUID = "9b7ab911-9a8a-42d8-bf1a-b527e9f6b6d0";
УИД = Новый УникальныйИдентификатор(НужныйGUID);
// Создаем ссылку на основе этого идентификатора
НоваяСсылка = Справочники.Контрагенты.ПолучитьСсылку(УИД);
// Пытаемся создать новый объект
НовыйОбъект = Справочники.Контрагенты.СоздатьЭлемент();
// КРИТИЧЕСКИ ВАЖНО: устанавливаем ссылку до записи объекта
НовыйОбъект.УстановитьСсылкуНового(НоваяСсылка);
// Заполняем реквизиты данными из копии (вручную или программно)
НовыйОбъект.Наименование = "Восстановленный Контрагент";
НовыйОбъект.ИНН = "7701234567";
// Записываем объект
НовыйОбъект.Записать();
Использование метода УстановитьСсылкуНового() гарантирует, что созданный элемент получит именно тот GUID, который мы указали. После выполнения этого кода все документы «узнают» нового контрагента как старого знакомого.
Если стандартная загрузка кажется неудобной, разберем альтернативный инструмент — v8Exch82.epf (Универсальный обмен данными). Она часто входит в состав дистрибутивов или библиотек стандартных подсистем.
В этой обработке есть полезный режим — «Выгрузка по ссылке». Нам не нужно писать сложные правила обмена (XML-схемы). Достаточно выбрать объект в копии базы, и программа сама определит все зависимости и выгрузит данные в компактном виде. При загрузке в основную базу программа сопоставит объекты по идентификаторам и восстановит удаленную запись.
Если ваша конфигурация работает на платформе 8.3.11 и выше, и для справочника была включена стандартная функция История данных, то восстановление возможно даже без бэкапа. Проанализируем эту возможность:
Система хранит предыдущие версии объектов в специальных таблицах. Даже если сам объект удален, записи в истории могут сохраниться. Программным методом можно извлечь последнюю версию данных из истории и воссоздать объект с тем же идентификатором, который хранится в метаданных версии.
После того как элемент возвращен в базу, рекомендуем выполнить следующие действия:
КонтактнаяИнформация. При обычном переносе XML они могут не попасть в файл, если не настроена выгрузка связанных данных. Обязательно проверьте вкладку «Адреса и телефоны».Тестирование и исправление (ТиИ) в конфигураторе. В режиме «Ссылочная целостность» выберите пункт «Ничего не изменять», чтобы просто убедиться, что битых ссылок больше нет.Рассмотренные методы позволяют эффективно решать проблему случайного удаления данных, минимизируя риск потери связи между объектами системы. Самым безопасным способом остается использование ВыгрузкаЗагрузкаДанныхXML с четко настроенным отбором по ссылке.