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

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

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

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

4 Comments

  1. warenic

    Другой способ — просто создать недостающий объект. В сообщении <объект не найден> имеется его внутренний код в 10-ичном виде, нужно перевести в 36-ричный. А Чтобы полностью восстановить значения всех реквизитов нужна архивная копия, где этот элемент имеется. Вот инструментик для расшифровки кода.

    В файл выгружается в удобочитаемом виде типа Документ.ПоступлениеТоваров;00000001;30.11.11;Контрагент, можно найти ручками документ и от него достучаться до потерянного объекта. Программа так и делает в итоге: выделяет вид. номер, дату, ищет… Но проще ведь

    ЗначениеВстрокуВнутр(Док.ПолучитьАтрибут(Рекв.Идентификатор))

    Тогда регистрация для выгрузки

    Что=ЗначениеИзСтрокиВнутр(Строка);
    ТВ = ТипЗначениястр(Что)+».»+Что.Вид();
    

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

    (ПустоеЗначение(Док.ПолучитьАтрибут(Рекв.Идентификатор)=0) и
    (Док.ПолучитьАтрибут(Рекв.Идентификатор).Выбран()=0)

    , т.е. если ссылка не пустая, а реквизит не выбран. Это мое скромное мнение.

    К стати, если не охота возиться с dbf-файлами или SQL, то подобным методом (УРБД) можно перекинуть удаленные объекты и из архивной копии в рабочую. Если настроить обе базы как периферийные и тем самым не нарушить авторских прав 1С 🙂

    Reply
  2. roms6

    (1) warenic,

    По поводу «ЗначениеВстрокуВнутр(Док.ПолучитьАтрибут(Рекв.Идентификатор))». Сначала так и хотел делать, но вот остановился на расшифровке кода. Когда то уже находил расшифровку, а как понадобилась, не было под рукой. Решил, что быстрее сохранить путь к реквизиту, где битая ссылка, чем искать расшифровку.

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

    К стати, если не охота возиться с dbf-файлами или SQL, то подобным методом (УРБД) можно перекинуть удаленные объекты и из архивной копии в рабочую.

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

    Reply
  3. warenic

    (2)

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

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

    можно перекинуть удаленные объекты и из архивной копии в рабочую.

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

    С УРБД я в свое время много работал. Кое-какие мысли в статьях изложил, обработок понаписал. Теперь это все медленно уходит в прошлое.

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

    Я так же делаю, спасибо за обработку.

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

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *