Обработка для восстановления из резервной копии базы удаленных (без проверки ссылок) или потерянных объектов (1С 8.1, 8.2).

Администрирование - Тестирование и исправление

105
Часто после повреждений информационной базы теряются некоторые элементы и остаются только ссылки на них, например, в регистрах, а эти элементы довольно старые, их можно достать из предыдущей или даже старой копии базы. Данная обработка позволяет это сделать в автоматическом режиме.

Суть работы в том, что после тестирования поврежденной базы теряются некоторые объекты и в регистрах (или в документах, справочниках и др.) образуются строки с записями типа "(216:83120025225c84d211e080e2d2bd38d0)". Эти записи, конечно, можно удалить тестированием, поставив опции "удалять объекты" и "очищать ссылки", но тогда из учета окончательно потеряются изменения, внесенные этими объектами, а это опасно. Часто это объекты, которые существуют в ИБ давно, и они есть в старых копиях ИБ. Обработка сделана т.о., что можно ее запустить в оттестированной базе, вставить в первое текстовое окно протокол тестирования, который был в конфигураторе в служебных сообщениях, она выберет ГУИД'ы потерянных объектов. Далее нужно указать ей путь к старой копии базы, в которой не было этих ошибок, она попытается найти там эти потерянные объекты и найденные перенесет в рабочую базу, чтоб восстановить ссылочную целостность ИБ.

После поиска список нигде не найденных объектов возвращается кнопкой "

Замечание при работе:

Если объект при переносе в текущую базу не может записаться (например, в копии этот объект был с незаполненными обязательными полями), то после того как он найдется, обработка откроет основную форму объекта для ручной корректировки. Еще бывают случаи, когда в тестировании появляются сообщения, которые не содержат информации по потерянному объекту, например, "Объект, на который ссылается значение, отсутствует", соответственно не понятно, что искать в копии. Для решения этой проблемы открываем указанный в протоколе тестирования объект (документ, регистр и др.) и копируем оттуда через буфер обмена строку "". Если потерянных объектов много (например, в регистрах или табличных частях документов), то можно правой кнопкой -> вывести в список -> и потом в списке выделить все, скопировать, затем вставить в первое поле обработки и кнопкой ">" выбрать все ГУИДы.

С помощью этой простенькой обработки удавалось восстанавливать, казалось бы, совсем убитые базы, главное чтоб было побольше копий.

Не забывайте эксперименты проводить на копии! И вообще чаще их делать! Удачи!

P.S. cпасибо Spacer за подсказку касаемо оптимизации скорости поиска. Поэтому добавил фильтр по объектам поиска,теперь, если примерно известно какого типа объект, поиск будет идти быстрее. Также возможность отключать поиск в текущей ИБ, тоже для ускорения. В результирующей таблице теперь можно после восстановления сразу открывать найденные объекты двойным щелчком в последнем столбце "Объект".

105

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

Наименование Файл Версия Размер
ВосстановлениеЭлементовДанных.epf
.epf 13,86Kb
12.03.17
529
.epf 13,86Kb 529 Скачать

См. также

Комментарии
Избранное Подписка Сортировка: Древо
1. Angeros 23.09.11 06:27 Сейчас в теме
Идея классная. хорошо подойдет для небольших баз ;)
2. anig99 2643 23.09.11 08:02 Сейчас в теме
А соединение и перенос по какой технологии происходят?
23. JohnySC 178 28.09.11 20:00 Сейчас в теме
(2) anig99, малость переделал, чтоб быстрее работала, сериализацию в XML сделал не через временный файл, а через простую текстовую переменную.
3. JohnySC 178 23.09.11 10:08 Сейчас в теме
Соединение идет через COM с копией базы, из копии выгружается объект с помощью сериализации во временный файл, и в рабочей базе этот объект из файла XML загружается. В принципе все просто и довольно универсально :-)
4. arjunasoft 7 23.09.11 18:20 Сейчас в теме
Интересная идея, не встречал подобного.
5. glinmn 23.09.11 21:21 Сейчас в теме
Если смог бы скачать, у большим удовольствием проверил бы. А то самописная база на v8.0 в 50G теряет не предсказуемо любые объекты и в непредсказуемое время. Только копии спасают, но теряем ссылки
6. r00t 24.09.11 13:24 Сейчас в теме
Все настолько просто, что обидно да же, почему ни написал подобного сам, когда была необходимость =)
Автору очевидный +
7. andrei.k 24.09.11 20:59 Сейчас в теме
Плюс однозначно. Очень хорошая идея. Конечно лучше бы не пригодилась :) но в набор обработок точно попадет.
8. lyubashonka 25.09.11 17:41 Сейчас в теме
Спасибо большое за обработку!
9. mr.Kot 25.09.11 19:07 Сейчас в теме
Да... мне как раз сейчас что-то подобное и нужно. Делаю свертку, а в базе просто тысячи тысяч старых объектов (конфа - УТ). Было решено некоторые доки удалять без проверки ссылок на них, чтобы быстрее закончить свертку. Вот теперь, если что и восстановить можно будет.
10. reboot234 26.09.11 11:52 Сейчас в теме
А будет возможность работы через сервер 1с? , т.к. разворачивать большие базы в файловый вариант не представляется возможным.
11. JohnySC 178 26.09.11 12:50 Сейчас в теме
(10) reboot234, сам не пробовал, необходимости не было, но думаю без проблем должно работать, только строку подключения к базе надо изменить в соответствии с мануалом тут или тут
12. Spacer 283 26.09.11 16:08 Сейчас в теме
Хорошая и нужная вещь. Как раз сейчас мне нужна.
Уже начал сам писать такую, склеив из двух других обработок.
Но раз уж есть готовая, попробую использовать ее.
Надеюсь что проблем не будет.:)
13. JohnySC 178 26.09.11 20:35 Сейчас в теме
(12) Spacer, ну посмотрите код, может где-то можете что-то лучше или оптимальнее предложить, моя написана "на коленке" второпях, народ я думаю, будет рад оптимизации
14. Spacer 283 27.09.11 02:51 Сейчас в теме
(13) Посмотрю обязательно.
Хочу свою все же тоже дописать и выложить. Моего там впрочем будет мало.
Это будет скорее комбинация того что нашел в разных источниках.
Одну полезную часть кода уже взял себе на заметку - как использовать при COM соединении конструктор объекта с параметрами.:)
15. Spacer 283 27.09.11 02:54 Сейчас в теме
(13) так, навскидку - оптимальнее там можно сделать следующее:
в функции ПолучитьСсылкуПоГУИД() идет поиск ссылки перебором по нескольким менеджерам.
Это можно не делать если заранее известен тип ссылки.
22. JohnySC 178 28.09.11 19:58 Сейчас в теме
(15) Spacer, спасибо, дополнил обработку фильтрами, отредактировал статью, еще немного оптимизировал скорость работы
16. Sparda 27.09.11 09:39 Сейчас в теме
надо бы попробовать, а то иногда клиенты косячат с архивами..надеюсь поможет..
17. jour 9 28.09.11 12:30 Сейчас в теме
Очень пригодилась.. прошлый админ базу свернул не адекватно.
18. JRG 28.09.11 16:52 Сейчас в теме
Интересная идея... плюс автору
19. zhleonid8 28.09.11 17:01 Сейчас в теме
А почему они теряются????????????
21. JohnySC 178 28.09.11 17:34 Сейчас в теме
(19) zhleonid8, не понял сути вопроса... базы могут повреждаться по разным причинам, например при отключении электричества, глюках железа, неосторожного удаления без проверки ссылок и многих других причин.
20. zhleonid8 28.09.11 17:01 Сейчас в теме
Часто после повреждений информационной базы, как они повреждаютя в 8,2
24. JohnySC 178 30.09.11 07:31 Сейчас в теме
Внимание! Файл обновил, интересующиеся, перекачайте!
25. f_fobos 30.09.11 19:29 Сейчас в теме
zhleonid8 пишет:
Часто после повреждений информационной базы, как они повреждаютя в 8,2

РЕь идет о каком релизе 8.2? Пока не замечал подобных проблем на 14.519
26. JohnySC 178 30.09.11 20:49 Сейчас в теме
(25) f_fobos, (20) zhleonid8, речь идет о любом релизе 1с8, это не от релиза зависит, а от повреждений файловой системы, например, или битой оперативки.
27. Spacer 283 30.09.11 21:09 Сейчас в теме
Spacer пишет:
Хочу свою все же тоже дописать и выложить.

Как и обещал, выложил свой вариант обработки:
http://infostart.ru/public/92259/
28. WKBAPKA 193 01.10.11 14:43 Сейчас в теме
29. Alexey55 07.10.11 10:07 Сейчас в теме
Очень полезная вещь! автору спасибо!
самое главное чтобы были копии)
30. SanyaGrek 07.10.11 11:36 Сейчас в теме
Качаю.
Сейчас не надо, но бывали случаи, когда пригодилось бы! +
31. KuponcheG 07.10.11 15:15 Сейчас в теме
32. zabaikalka 19.10.11 17:37 Сейчас в теме
ПОМОГИТЕ восстановить базу 82. Госпредприятие.
33. orsprog 20.10.11 08:42 Сейчас в теме
обязательно добавлю в набор обработок...но лучше бы не пригодилось...
34. Kochevnic 21.10.11 12:12 Сейчас в теме
Хорошая разработка. Помогла спасти данные. спасибо!
35. Twirus 21.10.11 19:30 Сейчас в теме
Вот спасибо, такая прога пока не нужна, но обязательно скачаю, пускай будет.
36. FLYYY1986 08.12.11 10:20 Сейчас в теме
Спасибо большое за обработку, пригодилась! Однозначно плюс!
37. a4a 15.12.11 14:37 Сейчас в теме
Тема, которая встала остро и срочно. Не могу сделать обмен 8.1 бухгалтерия на 1.6, а выгрузить надо в не пустую 8.2 , причем в 2.0, и только остатки на начало прошлого перида. А база большая, не тестируется из конфигуратора, а при попытке выгрузки в XML гонит битые ссылки. Надеюсь, обработка поможет. Проблема еще и в отсутствии архивов за последний период
38. petrovaUL 18.01.12 08:55 Сейчас в теме
Спасибо. Ранее была подобная - утерял. Обязательно добавлю в набор обработок. Плюс.
39. Alexei_fox 41 18.01.12 08:59 Сейчас в теме
40. rc.d 19.01.12 11:13 Сейчас в теме
К сожалению, не запустилась под 1С 8.2 Комплексная автоматизация 1.1
А жаль, сейчас верчу обработку товарища Spacer'a, вроде помогает.
41. JohnySC 178 19.01.12 12:24 Сейчас в теме
(40) rc.d, попробовал сейчас - запускается, может конвертировать под 8.2 забыли?
46. Motor24 25.01.13 14:01 Сейчас в теме
(40) Конвертировал - на БП 8.2 10.3 пошло просто замечательно.

Спасибо за обработку.
42. rc.d 19.01.12 15:17 Сейчас в теме
Да, виноват, забыл. Держите плюс)
47. swimdog 571 30.05.14 22:13 Сейчас в теме
При получении ГУИДа есть ошибка. Если код таблицы не двухзначный, а 3 или 4-значный, то ГУИД получается обрезанным, что и вызывает ошибку при выполнении

Процедура ВыбратьСтрокиНажатие(Элемент)
//Выборка из текста отчета строк с ГУИД'ами потерянных объектов
Текст = ТекстТиИ;
ТаблУИД.Очистить();
Для НомерСтроки = 1 По СтрЧислоСтрок(Текст) Цикл
СтрокаТекста = СтрПолучитьСтроку(Текст,НомерСтроки);
Поз = Найти(СтрокаТекста,"<Объект не найден> (");
Если Поз>0 Тогда
СтрИД = Сред(СтрокаТекста, Поз+20);//, 36);
СтрИД2 = Сред(СтрИД, Найти(СтрИД,":")+1);//, СтрДлина(СтрИД));// Преобразуем GUID
48. swimdog 571 30.05.14 22:16 Сейчас в теме
COM-коннектор в обработке 8.1, это уже не актуально. Надо или 8.2 или 8.3.
49. JohnySC 178 04.06.14 04:00 Сейчас в теме
Сколько лет, сколько зим... Конечно неактуально... На основе этой, и других обработок, есть более свежие, а я уж давно ей не занимался
Оставьте свое сообщение