gifts2017

Поиск и восстановление битых ссылок (объект не найден) в реквизитах документов с помощью УРБД 1с 7.7

Опубликовал roms r (roms6) в раздел Администрирование - Распределенная БД (УРИБ, УРБД)

Данная обработка выполняет два действия:
1. Ищет в реквизитах документов битые ссылки по фразе "<Объект не найден>" и записывает результаты в файл LostIn1c.txt на диск D.
2. С помощью данных в сохраненном файле в связанной через УРБД базе (предполагается, что в этой базе с данными все нормально) находит эти реквизиты и регистрирует их на выгрузку.
Ну а дальше достаточно сделать обмен в УРБД между базами, чтобы ссылки восстановились.

Обрабатываются значения только типа документ и справочник.
Поиск производится только в реквизитах документов.
Проверка на область распространения объекта в УРБД не производится.

Если есть другой метод поиска и восстановления данных киньте в меня ссылкой. Не было времени долго искать, а другого не придумал.

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

Наименование Файл Версия Размер
ВосстановлениеПотерянныхРеквизитовДокументов.ert 81
.ert 8,50Kb
19.02.13
81
.ert 8,50Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Валерий (warenic) 30.11.11 16:41
Другой способ - просто создать недостающий объект. В сообщении <объект не найден> имеется его внутренний код в 10-ичном виде, нужно перевести в 36-ричный. А Чтобы полностью восстановить значения всех реквизитов нужна архивная копия, где этот элемент имеется. Вот инструментик для расшифровки кода.
В файл выгружается в удобочитаемом виде типа Документ.ПоступлениеТоваров;00000001;30.11.11;Контрагент, можно найти ручками документ и от него достучаться до потерянного объекта. Программа так и делает в итоге: выделяет вид. номер, дату, ищет... Но проще ведь
ЗначениеВстрокуВнутр(Док.ПолучитьАтрибут(Рекв.Идентификатор))

Тогда регистрация для выгрузки
Что=ЗначениеИзСтрокиВнутр(Строка);
ТВ = ТипЗначениястр(Что)+"."+Что.Вид();

и далее по тексту. И файл для записи/чтения лучше бы пользователю указать самостоятельно (диск D подразумевает очень много нюансов). А битую ссылку методически правильно искать так:
(ПустоеЗначение(Док.ПолучитьАтрибут(Рекв.Идентификатор)=0) и
(Док.ПолучитьАтрибут(Рекв.Идентификатор).Выбран()=0)

, т.е. если ссылка не пустая, а реквизит не выбран. Это мое скромное мнение.
К стати, если не охота возиться с dbf-файлами или SQL, то подобным методом (УРБД) можно перекинуть удаленные объекты и из архивной копии в рабочую. Если настроить обе базы как периферийные и тем самым не нарушить авторских прав 1С :)
2. roms r (roms6) 01.12.11 14:50
(1) warenic,
По поводу "ЗначениеВстрокуВнутр(Док.ПолучитьАтрибут(Рекв.Идентификатор))". Сначала так и хотел делать, но вот остановился на расшифровке кода. Когда то уже находил расшифровку, а как понадобилась, не было под рукой. Решил, что быстрее сохранить путь к реквизиту, где битая ссылка, чем искать расшифровку.

Для выбора каталога сохранения данных тоже время зажал :).

К стати, если не охота возиться с dbf-файлами или SQL, то подобным методом (УРБД) можно перекинуть удаленные объекты и из архивной копии в рабочую.
- я ж вроде для этого обработку и сделал. Не понял только, почему обе базы периферийные должны быть.
3. Валерий (warenic) 01.12.11 18:48
(2) roms6,
- я ж вроде для этого обработку и сделал. Не понял только, почему обе базы периферийные должны быть.

Это на случай, если нет УРБД, а битые ссылки есть. И их можно "штатно" перенести из копии. Вот же:
можно перекинуть удаленные объекты и из архивной копии в рабочую.

Мы просто настраиваем УРБД без центрального узла (там пару таблиц подрихтовать нужно, вот пример http://warenic.narod.ru/doc15.html/, только там обратное преобразование). Ибо ЦБ для своей работы защищенную DLL-ку требует, а это - нарушение авторских прав.
С УРБД я в свое время много работал. Кое-какие мысли в статьях изложил, обработок понаписал. Теперь это все медленно уходит в прошлое.
4. Владимир Саблин (emptyteam) 09.02.12 08:50
Мы просто настраиваем УРБД без центрального узла (там пару таблиц подрихтовать нужно, вот пример http://warenic.narod.ru/doc15.html/, только там обратное преобразование). Ибо ЦБ для своей работы защищенную DLL-ку требует, а это - нарушение авторских прав.

Я так же делаю, спасибо за обработку.
Немного подправлю её, чтобы была более универсальной. Например возможность выбора пути для сохранение файла.