Данная обработка выполняет два действия:
1. Ищет в реквизитах документов битые ссылки по фразе "<Объект не найден>" и записывает результаты в файл LostIn1c.txt на диск D.
2. С помощью данных в сохраненном файле в связанной через УРБД базе (предполагается, что в этой базе с данными все нормально) находит эти реквизиты и регистрирует их на выгрузку.
Ну а дальше достаточно сделать обмен в УРБД между базами, чтобы ссылки восстановились.
1. Ищет в реквизитах документов битые ссылки по фразе "<Объект не найден>" и записывает результаты в файл LostIn1c.txt на диск D.
2. С помощью данных в сохраненном файле в связанной через УРБД базе (предполагается, что в этой базе с данными все нормально) находит эти реквизиты и регистрирует их на выгрузку.
Ну а дальше достаточно сделать обмен в УРБД между базами, чтобы ссылки восстановились.
Обрабатываются значения только типа документ и справочник.
Поиск производится только в реквизитах документов.
Проверка на область распространения объекта в УРБД не производится.
Если есть другой метод поиска и восстановления данных киньте в меня ссылкой. Не было времени долго искать, а другого не придумал.
Другой способ — просто создать недостающий объект. В сообщении <объект не найден> имеется его внутренний код в 10-ичном виде, нужно перевести в 36-ричный. А Чтобы полностью восстановить значения всех реквизитов нужна архивная копия, где этот элемент имеется. Вотинструментик для расшифровки кода.
В файл выгружается в удобочитаемом виде типа Документ.ПоступлениеТоваров;00000001;30.11.11;Контрагент, можно найти ручками документ и от него достучаться до потерянного объекта. Программа так и делает в итоге: выделяет вид. номер, дату, ищет… Но проще ведь
Тогда регистрация для выгрузки
и далее по тексту. И файл для записи/чтения лучше бы пользователю указать самостоятельно (диск D подразумевает очень много нюансов). А битую ссылку методически правильно искать так:
, т.е. если ссылка не пустая, а реквизит не выбран. Это мое скромное мнение.
К стати, если не охота возиться с dbf-файлами или SQL, то подобным методом (УРБД) можно перекинуть удаленные объекты и из архивной копии в рабочую. Если настроить обе базы как периферийные и тем самым не нарушить авторских прав 1С 🙂
(1) warenic,
По поводу «ЗначениеВстрокуВнутр(Док.ПолучитьАтрибут(Рекв.Идентификатор))». Сначала так и хотел делать, но вот остановился на расшифровке кода. Когда то уже находил расшифровку, а как понадобилась, не было под рукой. Решил, что быстрее сохранить путь к реквизиту, где битая ссылка, чем искать расшифровку.
Для выбора каталога сохранения данных тоже время зажал :).
— я ж вроде для этого обработку и сделал. Не понял только, почему обе базы периферийные должны быть.
(2)
Это на случай, если нет УРБД, а битые ссылки есть. И их можно «штатно» перенести из копии. Вот же:
Мы просто настраиваем УРБД без центрального узла (там пару таблиц подрихтовать нужно, вот примерhttp://warenic.narod.ru/doc15.html/ , только там обратное преобразование). Ибо ЦБ для своей работы защищенную DLL-ку требует, а это — нарушение авторских прав.
С УРБД я в свое время много работал. Кое-какие мысли в статьях изложил, обработок понаписал. Теперь это все медленно уходит в прошлое.
Я так же делаю, спасибо за обработку.
Немного подправлю её, чтобы была более универсальной. Например возможность выбора пути для сохранение файла.