Для того чтобы преобразовать <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824) в УникальныйИдентификатор (GUID), можно воспользоваться кодом:
Код 1C v 8.х
ГУИДУдОбъктаСтр = СтрЗаменить( ГУИДУдОбъкта, "<Объект не найден> (" , "" ) ;
ГУИДУдОбъктаСтр = СтрЗаменить( ГУИДУдОбъктаСтр, ")" , "" ) ;
ГУИДУдОбъктаСтр = СтрЗаменить( ГУИДУдОбъктаСтр, "0x" , "" ) ;
ГУИДУдОбъктаСтр = Сред( ГУИДУдОбъктаСтр, Найти( ГУИДУдОбъктаСтр, ":" ) + 1 , СтрДлина( ГУИДУдОбъктаСтр) ) ;
ГУИД = Сред( ГУИДУдОбъктаСтр, 25 , 8 ) + "-" + Сред( ГУИДУдОбъктаСтр, 21 , 4 ) + "-" + Сред( ГУИДУдОбъктаСтр, 17 , 4 ) + "-" + Сред( ГУИДУдОбъктаСтр, 1 , 4 ) + "-" + Сред( ГУИДУдОбъктаСтр, 5 , 12 ) ;
Когда кто-то удаляет данные из базы без проверки ссылок на эти объекты, то везде где этот объект использовался появляется сообщение вида: <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824) .
В данной статье я опишу пример быстрого восстановления данных.
Для пользователя:
Скачиваете эту обработку восстановления объектов по GUID :
Для 1С 8.1:
здесь или
Скачивать файлы может только зарегистрированный пользователь!
Для 1С 8.2:
Скачивать файлы может только зарегистрированный пользователь!
!!! Новая Версия!!! 8.2 и 8.3 -
Скачивать файлы может только зарегистрированный пользователь! Подробное описание:
Объект не найден в 1С или про Битые ссылки 1С
и открываете ее в программе:
1. Копируем фразу <Объект не найден... и вставляем в поле Объект не найден, жмем на кнопку GUID -> и получаем 05dbe824-a4c6-11dd-bf56-00145e3710ab
2. Если Вы знаете что удалили, то можете сразу нажать кнопку Создать Объект Из GUID - Пункт 4.
3. Если Вы не знаете что удалили, тогда вам нужно поднять архивную копию базы, открыть там обработку и вставить полученный GUID в поле GUID.
далее нажать Ссылку -> и в правом поле отобразится необходимый Вам объект(в моем случае Попов Роман Владимирович).
Открыв его, узнаем что это справочник Сотрудники и всю содержащуюся в справочнике информацию. Возвращаемся в базу, где необходимо восстановить объект и жмем кнопку Создать Объект Из GUID
4. Из открывшегося списка выбираем Справочник Сотрудники, в открывшейся форме заполняем все поля данными из архивной базы и жмем OK. Все, данный объект восстановлен.
Для быстрого поиска всех <Объект не найден> используйте
Поиск в базе битых ссылок - "объект не найден"
Для программиста:
Для получения уникального идентификатора объекта, используйте код вида:
Код 1C v 8.х ГУИДССЫЛКИ = СсылкаНаОбъект. УникальныйИдентификатор( ) ;
Для того чтобы преобразовать <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824) в УникальныйИдентификатор (GUID)
Код 1C v 8.х
ГУИДУдОбъктаСтр = СтрЗаменить( ГУИДУдОбъкта, "<Объект не найден> (" , "" ) ;
ГУИДУдОбъктаСтр = СтрЗаменить( ГУИДУдОбъктаСтр, ")" , "" ) ;
ГУИДУдОбъктаСтр = СтрЗаменить( ГУИДУдОбъктаСтр, "0x" , "" ) ;
ГУИДУдОбъктаСтр = Сред( ГУИДУдОбъктаСтр, Найти( ГУИДУдОбъктаСтр, ":" ) + 1 , СтрДлина( ГУИДУдОбъктаСтр) ) ;
ГУИД = Сред( ГУИДУдОбъктаСтр, 25 , 8 ) + "-" + Сред( ГУИДУдОбъктаСтр, 21 , 4 ) + "-" + Сред( ГУИДУдОбъктаСтр, 17 , 4 ) + "-" + Сред( ГУИДУдОбъктаСтр, 1 , 4 ) + "-" + Сред( ГУИДУдОбъктаСтр, 5 , 12 ) ;
Для получения ссылки по уникальному идентификатору, используйте код:
Код 1C v 8.х
УникальныйИдентификатор = Новый УникальныйИдентификатор( ГУИД)
Если ПолучитьСсылкуНоМенеджеруОбъекта( Справочники, УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта( Документы, УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта( ПланыВидовХарактеристик, УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта( ПланыСчетов, УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта( ПланыОбмена, УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта( БизнесПроцессы, УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта( Задачи, УникальныйИдентификатор) Тогда
КонецЕсли ;
Функция ПолучитьСсылкуНоМенеджеруОбъекта(ОбъектыМенеджер,УникальныйИдентификатор)
Для Каждого Менеджер Из ОбъектыМенеджер Цикл
СсылкаНаОбъектГуид = Менеджер. ПолучитьСсылку( УникальныйИдентификатор) ;
Если СсылкаНаОбъектГуид. ПолучитьОбъект( ) < > Неопределено Тогда
Возврат Истина ;
КонецЕсли ;
КонецЦикла ;
Возврат Ложь ;
КонецФункции
Создать объект документ или справочник и установить ему свой Уникальный идентификатор
Код 1C v 8.х
Попытка
УникальныйИд = Новый УникальныйИдентификатор( ТекGUID) ;
Исключение
Возврат ;
КонецПопытки ;
КартинкаСпр= БиблиотекаКартинок. Справочник;
КартинкаДок= БиблиотекаКартинок. Документ;
СписокВыбора = Новый СписокЗначений;
СписокВыбора. Добавить( null , "СПРАВОЧНИКИ" ) ;
Для каждого ЭлементМетаданных Из Метаданные. Справочники Цикл
Структурка= Новый Структура;
Структурка. Вставить( "Имя" , ЭлементМетаданных. Имя) ;
Структурка. Вставить( "Тип" , 1 ) ;
СписокВыбора. Добавить( Структурка, ЭлементМетаданных. Синоним, , КартинкаСпр) ;
КонецЦикла ;
СписокВыбора. Добавить( null , "ДОКУМЕНТЫ" ) ;
Для каждого ЭлементМетаданных Из Метаданные. Документы Цикл
Структурка= Новый Структура;
Структурка. Вставить( "Имя" , ЭлементМетаданных. Имя) ;
Структурка. Вставить( "Тип" , 2 ) ;
СписокВыбора. Добавить( Структурка, ЭлементМетаданных. Синоним, , КартинкаДок) ;
КонецЦикла ;
Результат= СписокВыбора. ВыбратьЭлемент( "Выберите тип ссылки" ) ;
Если Результат= Неопределено Тогда
Возврат ;
КонецЕсли ;
Структурка= Результат. Значение;
Если Структурка= null Тогда
Возврат ;
КонецЕсли ;
НовыйОбъект= Неопределено ;
Если Структурка. Тип= 1 Тогда
Объект= Справочники[Структурка. Имя]. СоздатьЭлемент( ) ;
Объект. ОбменДанными. Загрузка= Истина ;
Объект. УстановитьСсылкуНового( Справочники[Структурка. Имя]. ПолучитьСсылку( УникальныйИд) ) ;
Иначе
Объект= Документы[Структурка. Имя]. СоздатьДокумент( ) ;
Объект. ОбменДанными. Загрузка= Истина ;
Объект. УстановитьСсылкуНового( Документы[Структурка. Имя]. ПолучитьСсылку( УникальныйИд) ) ;
КонецЕсли ;
Форма= Объект. ПолучитьФорму( ) ;
Форма. Открыть( ) ;
Для 1С 7.7 смотрите:
Технология восстановления удаленных объектов или элементов в 1С 7.7
еще можно получить ИдентификаторДокумента при OLE доступе:
Код 1C v 7.x Если Док_Источник. ВыбратьДокументы( ВыбНачПериода, ВыбКонПериода) = 1 Тогда
Пока Док_Источник. ПолучитьДокумент( ) = 1 Цикл
Объект = БазаОле. ЗначениеВстрокуВнутр( Док_Источник. ТекущийДокумент( ) ) ;
ИдентификаторДокумента = СокрЛП( ПолучитьИД( Объект) ) ;
КонецЦикла ;
Еще посмотрите метод:
ЗначениеВСтрокуВнутр(<?>);
Синтаксис:
ЗначениеВСтрокуВнутр(<Объект>)
Назначение:
Преобразование значения объекта агрегатного типа в строковое системное представление.
Возвращает: представление значения объекта в строковом системном виде.
Параметры:
<Объект> - значение объекта агрегатного типа данных которое нужно преобразовать.
Подробнее см. в документации, глава ''Системные процедуры и функции''