helpf.pro
Регистрация
 +19 
Распечатать

1С 7.x : Битая ссылка, <Объект не найден>, Уникальный Идентификатор, GUID

Когда кто-то удаляет данные из базы без проверки ссылок на эти объекты, то везде где этот объект использовался появляется сообщение вида: <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824) .
title
В данной статье я опишу пример быстрого восстановления данных.

Для пользователя:
Скачиваете эту обработку восстановления объектов по GUID :
Для 1С 8.1:
здесь или Скачивать файлы может только зарегистрированный пользователь!
Для 1С 8.2:
Скачивать файлы может только зарегистрированный пользователь!

!!! Новая Версия!!! 8.2 и 8.3 - Скачивать файлы может только зарегистрированный пользователь! Подробное описание: Объект не найден в 1С или про Битые ссылки 1С

и открываете ее в программе:
1. Копируем фразу <Объект не найден... и вставляем в поле Объект не найден, жмем на кнопку GUID -> и получаем 05dbe824-a4c6-11dd-bf56-00145e3710ab
title

2. Если Вы знаете что удалили, то можете сразу нажать кнопку Создать Объект Из GUID - Пункт 4.
3. Если Вы не знаете что удалили, тогда вам нужно поднять архивную копию базы, открыть там обработку и вставить полученный GUID в поле GUID.
далее нажать Ссылку -> и в правом поле отобразится необходимый Вам объект(в моем случае Попов Роман Владимирович).
Открыв его, узнаем что это справочник Сотрудники и всю содержащуюся в справочнике информацию. Возвращаемся в базу, где необходимо восстановить объект и жмем кнопку Создать Объект Из GUID
title
4. Из открывшегося списка выбираем Справочник Сотрудники, в открывшейся форме заполняем все поля данными из архивной базы и жмем OK. Все, данный объект восстановлен.

Для быстрого поиска всех <Объект не найден> используйте Поиск в базе битых ссылок - "объект не найден"



Для программиста:
Для получения уникального идентификатора объекта, используйте код вида:
Код 1C v 8.х
  ГУИДССЫЛКИ	= СсылкаНаОбъект.УникальныйИдентификатор();    


Для того чтобы преобразовать <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824) в УникальныйИдентификатор (GUID)
Код 1C v 8.х
 	// ГУИДУдОбъкта =  <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824)
ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъкта,"<Объект не найден> (","");
ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,")","");
ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,"0x","");
ГУИДУдОбъктаСтр = Сред(ГУИДУдОбъктаСтр, Найти(ГУИДУдОбъктаСтр,":")+1, СтрДлина(ГУИДУдОбъктаСтр));
// Преобразуем GUID
ГУИД = Сред(ГУИДУдОбъктаСтр,25,8)+"-"+Сред(ГУИДУдОбъктаСтр,21,4)+"-"+Сред(ГУИДУдОбъктаСтр,17,4)+"-"+Сред(ГУИДУдОбъктаСтр,1,4)+"-"+Сред(ГУИДУдОбъктаСтр,5,12); //и получаем ГУИД = 05dbe824-a4c6-11dd-bf56-00145e3710ab


Для получения ссылки по уникальному идентификатору, используйте код:
Код 1C v 8.х
  	// ГУИД = 05dbe824-a4c6-11dd-bf56-00145e3710ab  
// Ссылка будет установлена в переменную СсылкаНаОбъектГуид
УникальныйИдентификатор = Новый УникальныйИдентификатор(ГУИД)
// все объекты по которым можно получить ссылку
Если ПолучитьСсылкуНоМенеджеруОбъекта(Справочники,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(Документы,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(ПланыВидовХарактеристик,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(ПланыСчетов,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(ПланыОбмена,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(БизнесПроцессы,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(Задачи,УникальныйИдентификатор) Тогда
КонецЕсли;

// ПолучитьСсылкуНоМенеджеруОбъекта()
Функция ПолучитьСсылкуНоМенеджеруОбъекта(ОбъектыМенеджер,УникальныйИдентификатор)
Для Каждого Менеджер Из ОбъектыМенеджер Цикл
СсылкаНаОбъектГуид = Менеджер.ПолучитьСсылку(УникальныйИдентификатор);

Если СсылкаНаОбъектГуид.ПолучитьОбъект() <> Неопределено Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции


Создать объект документ или справочник и установить ему свой Уникальный идентификатор
Код 1C v 8.х
 	// ТекGUID = 05dbe824-a4c6-11dd-bf56-00145e3710ab 
Попытка
УникальныйИд = Новый УникальныйИдентификатор(ТекGUID);
Исключение
Возврат;
КонецПопытки;
КартинкаСпр=БиблиотекаКартинок.Справочник;
КартинкаДок=БиблиотекаКартинок.Документ;
СписокВыбора = Новый СписокЗначений;
СписокВыбора.Добавить(null,"СПРАВОЧНИКИ");
Для каждого ЭлементМетаданных Из Метаданные.Справочники Цикл
Структурка=Новый Структура;
Структурка.Вставить("Имя",ЭлементМетаданных.Имя);
Структурка.Вставить("Тип",1);
СписокВыбора.Добавить(Структурка,ЭлементМетаданных.Синоним,,КартинкаСпр);
КонецЦикла;
СписокВыбора.Добавить(null,"ДОКУМЕНТЫ");
Для каждого ЭлементМетаданных Из Метаданные.Документы Цикл
Структурка=Новый Структура;
Структурка.Вставить("Имя",ЭлементМетаданных.Имя);
Структурка.Вставить("Тип",2);
СписокВыбора.Добавить(Структурка,ЭлементМетаданных.Синоним,,КартинкаДок);
КонецЦикла;
Результат=СписокВыбора.ВыбратьЭлемент("Выберите тип ссылки");
Если Результат=Неопределено Тогда
Возврат;
КонецЕсли;
Структурка=Результат.Значение;
Если Структурка=null Тогда
Возврат;
КонецЕсли;

НовыйОбъект=Неопределено;
Если Структурка.Тип=1 Тогда
Объект=Справочники[Структурка.Имя].СоздатьЭлемент();
Объект.ОбменДанными.Загрузка=Истина;
Объект.УстановитьСсылкуНового(Справочники[Структурка.Имя].ПолучитьСсылку(УникальныйИд));
Иначе
Объект=Документы[Структурка.Имя].СоздатьДокумент();
Объект.ОбменДанными.Загрузка=Истина;
Объект.УстановитьСсылкуНового(Документы[Структурка.Имя].ПолучитьСсылку(УникальныйИд));
КонецЕсли;

Форма=Объект.ПолучитьФорму();
Форма.Открыть();


Для 1С 7.7 смотрите:
Технология восстановления удаленных объектов или элементов в 1С 7.7

еще можно получить ИдентификаторДокумента при OLE доступе:
Код 1C v 7.x
 Если Док_Источник.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода) = 1 Тогда
Пока Док_Источник.ПолучитьДокумент() = 1 Цикл
Объект = БазаОле.ЗначениеВстрокуВнутр(Док_Источник.ТекущийДокумент());
ИдентификаторДокумента = СокрЛП(ПолучитьИД(Объект));

// Для примера Объект возвращает {"O","0","0","3114","0","0"," 258156CB "},
// а ПолучитьИД(объект) = 258156CB
КонецЦикла;


Еще посмотрите метод:
ЗначениеВСтрокуВнутр(<?>);
Синтаксис:
ЗначениеВСтрокуВнутр(<Объект>)
Назначение:
Преобразование значения объекта агрегатного типа в строковое системное представление.
Возвращает: представление значения объекта в строковом системном виде.
Параметры:
<Объект> - значение объекта агрегатного типа данных которое нужно преобразовать.
Подробнее см. в документации, глава ''Системные процедуры и функции''
Разместил:   Версии: | 7.x | 8.x | 8.2 УП |  Дата:   Прочитано: 105410
 +19 
Распечатать
Возможно, вас также заинтересует
1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 2
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р,...
1С Предприятие что это? 6
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который...
COM-подключение к базе 7.7 из 8.2 1С 4
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе="...
v7plus.dll - отсутствует CLSID либо отсутствует интерфейс llnitDone 0
При выгрузке отчетности в 1С 7.7 программа ругается на v7plus.dll и указывает, что отсутствует интерфейс llritDone. Что делать? 1) Поудалять нафиг все v7plus.dll из каталогов ИБ и папок пользователей 2) Оставить только в bin каталоге и...
Автоматическая установка ширины колонки табличного документа. 0
Процедура, которая " примерно" делает автоширину колонок (навроде, как если бы выделить все колонки и дважды щелкнуть мышкой по границе заголовка колонки). Привожу текст, работает неахти, но лучше чем ничего: Процедура...
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.