gifts2017

Поиск объектов типа <Объект не найден...>. Теперь на управляемых формах

Опубликовал ediks (ediks) в раздел Администрирование - Поиск данных

Универсальная обработка для поиска битых ссылок, представленных строкой типа <Объект не найден...>. Теперь на управляемых формах.

 

Обработка "Поиск объектов по GUID"

Обработка предназначена для поиска и формирования списка ссылок выбранного типа из строк типа ". Обработка запускается в базе, содержащей искомые "битые" ссылки, например, в резервной копии. В отличие от других обработок, найденных на просторах интернета и Инфостарта позволяет обрабатывать список "битых" ссылок.

Алгоритм преобразования строки в объект УникальныйИдентификатор показан на скриншоте.

Тестировалась на конфигурации БП 1.6, платформа 8.2.

Обработка понадобилась после того как удалил "лишние"Smile элементы справочника "Подразделения организаций". Соответственно на всех счетах с субконто "Подразделения" появились битые ссылки. Пришлось срочно восстанавливать из резервной копии.

Типовой порядок действий 

  1. Скопировать в поле табличного документа список "битых" ссылок.
  2. Нажать кнопку Найти ссылки. При этом заполнится табличная часть найденными ссылками. При этом в табличной части заполняются дополнительные реквизиты, например, Номер и Дата для документов.
  3. Вывести список найденных ссылок в табличный документ и перенести объекты в "поврежденную" базу с помощью типовых обработок переноса данных.

Похожие публикации на Инфостарте и в сети Интернет:

http://infostart.ru/public/73983/

http://help1c.com/faq/view/483.html

Наверняка, есть еще Smile

Версия 1.0.2 от 06.04.2011

1) Добавлен поиск типа объекта по номеру таблицы в строковом представлении объекта, за что спасибо пользователям Широкий и ilya2184.

2) Косметические исправления

Версия 1.0.3 от 05.08.2011

1) Добавлена возможность работы в режиме управляемых форм.

2) Исправлена ошибка, указанная пользователем kosmo0.

Скачать файлы

Наименование Файл Версия Размер
Поиск объекта по GUID 686
.epf 25,37Kb
08.01.12
686
.epf 25,37Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Вадим Никонов (V.Nikonov) 30.03.11 19:31
А отчего же сохранили обработку под 8.2? Обратная конвертация не работает!!!
2. ediks (ediks) 30.03.11 21:18
(1) Потому, что в 8.2 для реквизита GUID можно задать тип УникальныйИдентификатор, которого в 8.1 нет. Не хочется делать лишних телодвижений в условиях цейтнота, да и работаю я под 8.2.
3. Nazarov Vadim (NazaroV74) 31.03.11 10:32
Огромное спасибо)) Вещь нужная
4. Роман Зиновьев (Широкий) 31.03.11 11:46
Ну и зачем нужно тип объекта выбирать?
В представлении битой ссылки эта инфа и так есть
5. ediks (ediks) 31.03.11 11:54
(4) А Вы знаете, как из строкового представления извлечь тип объекта? Я бы вставил этот алгоритм в обработку.
6. Роман Романов (romansun) 31.03.11 12:23
(5)
писал пару месяцев назад на схожую тему
http://infostart.ru/public/80438/
7. ediks (ediks) 31.03.11 13:00
(6) все равно это не решает проблемы. Вам заранее известен тип объекта для восстановления (поиска). Или что-то я не так понял?

НовЭл = Справочники.БюджетныеЦентры.СоздатьЭлемент();

НовЭл.УстановитьСсылкуНового(ЗначениеИзСтрокиВнутр("{""#"",54c3544f-651b-4887-ae3a-2df362efbacb,9659:ab2b001b78e134e011dfec0814418025}"));
8. Роман Зиновьев (Широкий) 31.03.11 13:57
Перем ТаблицаТипов;
//--------------------------------------------------------------------//
Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)
	СтрокаПоиска=ТаблицаТипов.Найти("1216","НомерТаблицы");
	Если СтрокаПоиска=Неопределено Тогда
		Сообщить("Не определена таблица хранения");
		Возврат;
	КонецЕсли; 
	
	Сообщить(СтрокаПоиска.ТипОбъекта);
КонецПроцедуры

Процедура ДобавитьДанныеВТаблицуТипов(ТаблицаТипов,КоллекцияМетаданных,КоллекцияОбъектов)
	Для Каждого ОбъектМетаданных Из КоллекцияМетаданных Цикл
		ПустаяСсылка=КоллекцияОбъектов[ОбъектМетаданных.Имя].ПустаяСсылка();
		
		МСтроки=СтрЗаменить(ЗначениеВСтрокуВнутр(ПустаяСсылка),",",Символы.ПС);
		
		Для сч=1 По СтрЧислоСтрок(МСтроки) Цикл
			МСтрока=СтрПолучитьСтроку(МСтроки,сч);
			
			ПозицияРазделителя=Найти(МСтрока,":");
			Если Не ПозицияРазделителя Тогда
				Продолжить;
			КонецЕсли; 
			
			НоваяСтрока=ТаблицаТипов.Добавить();
			НоваяСтрока.НомерТаблицы=Лев(МСтрока,ПозицияРазделителя-1);
			НоваяСтрока.ТипОбъекта=ТипЗнч(ПустаяСсылка);
		КонецЦикла; 
	КонецЦикла;   
КонецПроцедуры

Процедура ИнициализацияПеременных()
	ТаблицаТипов=Новый ТаблицаЗначений;
	ТаблицаТипов.Колонки.Добавить("НомерТаблицы");
	ТаблицаТипов.Колонки.Добавить("ТипОбъекта");

    ДобавитьДанныеВТаблицуТипов(ТаблицаТипов,Метаданные.Справочники,Справочники);
	
	ДобавитьДанныеВТаблицуТипов(ТаблицаТипов,Метаданные.Документы,Документы);
	
	ДобавитьДанныеВТаблицуТипов(ТаблицаТипов,Метаданные.ПланыВидовХарактеристик,ПланыВидовХарактеристик);
	
	ДобавитьДанныеВТаблицуТипов(ТаблицаТипов,Метаданные.ПланыОбмена,ПланыОбмена);
	
	ДобавитьДанныеВТаблицуТипов(ТаблицаТипов,Метаданные.Задачи,Задачи);
	
	ДобавитьДанныеВТаблицуТипов(ТаблицаТипов,Метаданные.БизнесПроцессы,БизнесПроцессы);
КонецПроцедуры
 
ИнициализацияПеременных();
...Показать Скрыть
9. ediks (ediks) 31.03.11 14:37
(8) ОК, спасибо. Действительно, достаточно просто.
10. Илья Кочетков (ilya2184) 01.04.11 13:38
Ну и я свой вклад внесу - у меня тоже есть подобная обработка, плодить не буду
У меня есть кнопка создания объекта...

Это понятно:
Стр1 = СтрЗаменить(ИсходнаяСтрока,"<Объект не найден> (","");
СтрокаНомерТипа = Лев(Стр1,Найти(Стр1,":")-1);
Идентификатор = Сред(СтрЗаменить(Стр1, СтрокаНомерТипа+":",""),1,32);
СтрокаИд = Прав(Идентификатор,8)+"-"
+Сред(Идентификатор,21,4)+"-"
+Сред(Идентификатор,17,4)+"-"
+Лев(Идентификатор,4)+"-"
+Сред(Идентификатор,5,12);
Гуид = Новый УникальныйИдентификатор(СтрокаИд);

//Моя таблица типов содержит колонки НомерТипа(Строка), МенеджерТипа(СправочникМенеджер, ДокментМенеджер), ИмяТипа
//например "1123", Справочники, "Номенклатура"
СтрокаТЗ = мТаблицаТипов.Найти(СтрокаНомерТипа, "СтрокаНомерТипа")
//тут проверка нашли или нет - нет - плохо - была серьёзная реструктуризация - надо поднимать бэкапы.
СсылкаНаОбъект = СтрокаТЗ.МенеджерТипа[СтрокаТЗ.ИмяТипа].ПолучитьСсылку(Гуид);

//и полезная кнопка.
УдаленныйОбъект = СсылкаНаОбъект.ПолучитьОбъект();
Если УдаленныйОбъект = Неопределено Тогда
Если СтрокаТЗ.МенеджерТипа = Документы Тогда
УдаленныйОбъект = СтрокаТЗ.МенеджерТипа.СоздатьДокумент();
ИначеЕсли СтрокаТЗ.МенеджерТипа = ПланыСчетов Тогда
УдаленныйОбъект = СтруктураОбУдаленном.Менеджер.СоздатСчет();
Иначе
УдаленныйОбъект = СтрокаТЗ.МенеджерТипа.СоздатьЭлемент();
КонецЕсли;
УдаленныйОбъект.УстановитьСсылкуНового(СсылкаНаОбъект);
КонецЕсли;
//заполним и запишем по памяти...
УдаленныйОбъект.ПолучитьФорму().ОткрытьМодально();
11. Николай Крылов (Nikola23) 06.04.11 00:35
А чтоб не мучатся с восстановлением убитых ссылок (при наличии резервной копии) можно попробовать использовать обработку ВыгрузкаЗагрузкаДанныхXML. Выгружаем объекты из резервной копии, загружаем в рабочую. Соответствие объектов рабочей базы и копии устанавливается по внутр идентификаторам. В результате выполнения потерянные объекты будут восстановлены.
12. ediks (ediks) 06.04.11 14:08
(11) Вот только осталось в резервной копии определить, какие объекты выгружать. Для этого и создавалась эта обработка. А (10) приведен как пример поиска и восстановления убитой ссылки в текущей базе.
13. Иван Иванов (kosmo0) 17.06.11 13:45
В процедуре РазобратьСтрокиОбъектНеНайден() строку Счетчик = Счетчик + 1; стоит поднять выше условия, иначе если строку не удастся разобрать будет зацикливание.
14. ediks (ediks) 05.08.11 18:54
(13) Исправил. Спасибо за наводку.
15. toshka (toshka) 15.09.11 13:30
Спасибо! Очень помогла обработка!
16. Сергей Захаров (zse) 15.09.11 13:41
Не понятно зачем все это.
Главное определить порушенный объект (справочник такой-то). А далее делаем
выгрузку объекта из копии и подгружаем в поломанную базу.
И не забываем еще раз проверить права на удаление объектов... :D
17. ediks (ediks) 16.09.11 08:16
(16)
1) Как Вы определяете тип объекта? Тип битой ссылки может быть составного типа. К примеру, документ расчетов на 60 или 62 счете...
2) А как Вы определяете объект, который необходимо выгрузить из копии???
3) Почитайте всю ветку - я уже объяснял для чего нужна эта обработка.
18. Vyacheslav Kulikov (ELInfinito) 23.09.11 07:11
Спасибо. Все отлично работает.
19. Evgeny Sc (JohnySC) 23.09.11 07:28
На основании этой и других идей с этого сайта, получилась вот такая моя обработка:
http://infostart.ru/public/91438/
Она делает примерно то же, только еще и переносит объекты сразу из нужной копии в рабочую базу
20. 1 (shomo) 05.10.11 15:33
Замечательно. Можно восстанавливать утраченные объекты. Огромное спасибо.
21. toshka (toshka) 12.10.11 12:19
Спасибо за обработку! Очень нужная вещь!
22. Наталья (zabaikalka) 19.10.11 16:03
ПОМОГИТЕ, у меня беда!!!! Бэккапов нет, а вот таблица не найдена! Очень надо!!!
23. Илья (ILYA1C) 24.10.11 06:50
нашла все битые ссылки)))
24. Дмитрий Титов (dtitov) 28.11.11 12:54
Вполне приличная обработка, для моего конкретного случая подошла весьма, т.к. самому некогда было заморачиваться. С удовольствием плюсую!!
25. vit59 (vit59) 10.12.11 15:39
автоматом можно сделать, чтобы по битым ссылкам по ГУИДу сам переносил объект по типам из архива ?
26. ediks (ediks) 10.12.11 19:42
(25) читайте (19) - уже все сделано
27. Владимир Насыров (Spacer) 10.01.12 14:01
(7) ediks, "Вам заранее известен тип объекта для восстановления (поиска). Или что-то я не так понял?"
Если тип объекта для восстановления не известен заранее, то его всегда можно получить перебором.
Это используется во многих обработках подобного рода, например в этой:
http://infostart.ru/public/92259/
Просто если он известен заранее то можно обойтись без дополнительных телодвижений.
28. ediks (ediks) 10.01.12 16:18
(27) 1) Мне кажется, что вопрос решен, благодаря подсказке - тип объекта хранится в представлении битой ссылки.
2) Перебирать каждый объект метаданных для каждой битой ссылки мне кажется неразумным. Количество итераций получается велико - туча битых ссылок, помноженная на сотни объектов метаданных.
29. Николай Гончаров (JohnConnor) 10.04.15 19:14
30. ediks (ediks) 10.04.15 20:51
(29) Какую ошибку выдала обработка?