Имя: Пароль:
1C
 
Восстановление удаленного объекта
0 Невский Александр
 
19.01.09
15:20
Пытаюсь разобраться с написанием обработки по восстановлению удаленных объектов. В Интернете нашел:



Процедура ПередОткрытиемФормыДокумента(Форма, Отказ, СтандартнаяОбработка) Экспорт
//Установить ссылку для связи для работы с формой справочника в


//связанных формах и подчиненных элементах



   Если Форма.ЭтоНовый() Тогда
       Если РольДоступна("Администратор") И Константы.РежимВосстановленияДанных.Получить() Тогда
           ВосстанавливаемыйUID = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
           Если ВвестиСтроку(ВосстанавливаемыйUID, "Восстанавливаемый UID") Тогда
           Если Найти(ВосстанавливаемыйUID, "-") = 0 Тогда
               ВосстанавливаемыйUID = Сред(ВосстанавливаемыйUID, 25,8)
               + "-"
               + Сред(ВосстанавливаемыйUID, 21,4)
               + "-"
               + Сред(ВосстанавливаемыйUID, 17,4)
               + "-"
               + Сред(ВосстанавливаемыйUID, 1,4)
               + "-"
               + Сред(ВосстанавливаемыйUID, 5,12);
           КонецЕсли;
СсылкаНового = Документы[Форма.ДокументОбъект.Метаданные().Имя]
.ПолучитьСсылку(Новый УникальныйИдентификатор(ВосстанавливаемыйUID));

Иначе

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


Переписал немного по-своему, в виде внешней обработки:



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

   СсылкаНовогоД = Документы[ИскомыйОбъект.Объект.Имя];
   ВосстанавливаемыйUID = UID;
       
Если Найти(ВосстанавливаемыйUID, "-") = 0 Тогда
   ВосстанавливаемыйUID = Сред(ВосстанавливаемыйUID, 25,8)
   + "-"
   + Сред(ВосстанавливаемыйUID, 21,4)
   + "-"
   + Сред(ВосстанавливаемыйUID, 17,4)
       + "-"
   + Сред(ВосстанавливаемыйUID, 1,4)
   + "-"
   + Сред(ВосстанавливаемыйUID, 5,12);
КонецЕсли;

Идент =  Новый УникальныйИдентификатор(ВосстанавливаемыйUID);
СсылкаНового = СсылкаНовогоД.ПолучитьСсылку(Идент);
НовДок.УстановитьСсылкуНового(СсылкаНового);

потом открываю форму документа - документ пустой. Почему?
1 butterbean
 
19.01.09
15:23
(0) а тебе какой надо??
2 Невский Александр
 
19.01.09
15:25
я создаю новый документ - передаю в него ссылку удаленного объекта - мне нужен документ, заполненный значениями реквизитов и табличной частью удаленного
3 Невский Александр
 
19.01.09
15:26
меня этот вопрос заинтересовал - автор, у которого взял этот блок кода - пишет, что восстановить объект возможно
4 Defender aka LINN
 
19.01.09
15:29
(2) Дык записи-то грохнули, откуда ты что восстановить хочешь?
5 Невский Александр
 
19.01.09
15:37
... он описывает эту ситуацию и приводит код :))) вот я и пытаюсь это сделать, посмотреть
6 AiR
 
19.01.09
15:47
Здесь имеется ввиду подмена УИДа нового документа УИДом потерянного, это не совсем восстановление, это больше похоже на избавление от "Объект не найден..."
реквизиты документа все равно брать откуда-то придется, а если их не знаешь, то как тогда?
7 Serg_1960
 
19.01.09
15:47
Восстановить то, что уже удалили? Ну Вы и оригинал. Автор кода "восстанавливал" объект, обращаясь к базе архива, где этот объект еще не был удален :)
8 Serg_1960
 
19.01.09
15:49
Можно ссылку привести: где, что "нарыли" в инете?
9 Невский Александр
 
19.01.09
16:00
в клубе Профессионалов 1С - Александр Чернышев
10 Serg_1960
 
19.01.09
16:03
(9) Ыыы... Я же ссылку хотел - а не описание к ней :(
11 MMF
 
19.01.09
16:22
ветку нужно переименовать в "ностальгия по DBF + F9"
12 Serg_1960
 
19.01.09
16:23
По журналу посмотреть когда было удаление и:
- можно "восстановить" удаленный объект в подчиненном узле РИБ-базы. Если удаление было после обмена сообщениями - достаточно изменить объект в главном узле и отправить его с очередным обменом;
- можно в SQL - если бэкап "правильно" настроен, - откат возможно сделать на любой момент времени;
- можно из выгрузки(архива копий) базы, сделанной до удаления;

Вроде-бы все, какие знаю, методы "без гемороя" перечислил
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс