Поиск и восстановление битых ссылок (объект не найден)

Часто после повреждений информационной базы теряются некоторые объекты и остаются только "битые" ссылки на них, имеющие примерно такой вид: "<Объект не найден> (77:805f000c291e652311e0ad237dea6181)".
Данная обработка позволяет найти такие ссылки и восстановить их в автоматическом режиме (при наличии копии информационной базы).

Битые ссылки появляются в базе как правило после непосредственного удаления объектов (без контроля ссылок на них).

Когда объект был удален непосредственно, то все ссылки на него в справочниках, в документах, в регистрах стали битыми и отображаются следующим образом: 

(77:805f000c291e652311e0ad237dea6181)

Такие ссылки могут возникать:

1. В результате действий пользователей имеющих право непосредственного удаления объектов, без пометки на удаление и контроля ссылочной целостности перед удалением. Поэтому такие права у пользователей желательно забрать;

2. При выполнении обработки некорректно удаляющей объекты;

3. При выполнении обмена между информационными базами в варианте РИБ или обмен по правилам обмена между отличающимися базами.

Бывает так, что пользователь в одной базе участвующей в обмене, вполне корректно удалил объект т.к. ссылок на него в этой базе не было. Информация об удалении объекта передается в другую базу, где на него есть ссылки. В типовых конфигурациях объект при этом удаляется непосредственно, и возникают «битые» ссылки. Как пример — процедура УдалитьОбъектПоСсылке() в модуле обработки ОбменДаннымиXML. В конце этой процедуры вызывается процедура УдалитьОбъект(Объект, Истина). Вторым параметром в этой процедуре является признак непосредственного удаления объекта. Необходимо заменить его на Ложь;

Битые ссылки можно обнаружить при выполнении тестирования и исправления, включив опцию «Проверка ссылочной целостности информационной базы». А также их можно увидеть при работе с базой в режиме 1С:Предприятие, открыв форму объекта содержащего в одном из реквизитов «битую» ссылку.

Как с этим бороться?. Ну во первых ограничить права пользователей на непосредственное удаление объектов и поправить проблемные участки кода в конфигурации создающие предпосылки для возникновения таких ссылок. А также не забывать делать архивные копии базы.

Эти записи, конечно, можно исправить при тестировании, поставив опцию «Создавать объекты» или «Очищать ссылки». В таком случае мы избавимся от битых ссылок, но это не поможет нам восстановить исходное состояние базы. Тогда из учета окончательно потеряются изменения, внесенные этими объектами, а это опасно.

Если имеется достаточно свежая архивная копия базы, то можно попробовать восстановить эти ссылки.

Для этих целей в интернете можно найти достаточно много обработок.

Например вот эта: http://help1c.com/faq/view/1128.html «Поиск в базе битых ссылок — «объект не найден», которая позволяет найти битые ссылки в режиме 1С:Предприятия, без запуска конфигуратора 1С и выполнения «тестирования и справления».

Найти удаленный объект в архивной копии базы можно при помощи этой обработки: http://help1c.com/faq/view/483.html

Таким образом, мы можем вручную восстановить «битые» ссылки по архивной копии. При этом важно чтобы вновь созданный объект имел такой же уникальный идентификатор (GUID), каким он был раньше. Для этого можно воспользоваться например этой обработкой: //infostart.ru/public/14655/

Однако, заниматься этим вручную — это утомительная и малопроизводительная трата времени. Гораздо эффективнее поручить эту работу самой же 1С.

На Инфостарте уже публиковались обработки позволяющие сделать это автоматически.

Например вот эта обработка: //infostart.ru/public/91438/

И хотя цели у моей и этой обработки одинаковые — восстановление «битых» ссылок по архивной копии, подход к решению этих целей у нас разный.

Основное отличие моей обработки состоит в следующем:

Не используется протокол тестирования полученный в конфигураторе. Битые ссылки ищутся непосредственно в режиме 1С:Предприятия. При этом можно ограничивать поиск определенным типом объектов, например искать только ссылки с типом «Справочник.ДоговорыКонтрагентов».

Для удобства подключения к архивной копии базы использована обработка //infostart.ru/public/16628/ которая позволяет выбирать нужную базу из списка аналогичного списку баз 1С и подключаться к ней.

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

Вовремя сделанная архивная копия может избавить вас от многих проблем. Удачи!

 

P.S. Добавлена версия портированная на управляемые формы — файл Poisk Objekt ne najden_82UF.epf

Обработка включает как обычные, так и управляемые формы.

Портирование обработки выполнено Андреем Торопчиным.

99 Comments

  1. mr.Kot

    Плюсовать пока не буду, качал аналогичную обработку, сейчас попробую воспользоаться данной. По итогам работы плюсану 🙂

    Reply
  2. xavi

    При нажатии на «Восстановить» появляется сообщение:

    {Форма.Форма.Форма(567)}: Преобразование значения к типу Булево не может быть выполнено

    Если СкопироватьОбъектИзСОМ(ПодключеннаяИБ, сАрхив.ГУИД_Объекта) Тогда

    Конфа Альфа-Авто.

    Reply
  3. Spacer

    (2) xavi, Да, была ошибочка…

    Подправил, перезалил.

    Reply
  4. echo77

    А где для 8.1?

    Написано же что обработка для 8.1/8.2

    Reply
  5. Spacer

    (4) echo77, Будет и для 8.1. Сегодня вечером выложу.

    Reply
  6. mart-sha

    пока не пробовал, но ПЛЮС за отличное описание проблемы, за анализ других обработок. Грамотно и честно.Спасибо

    Reply
  7. Spacer

    (4) echo77, Добавил вариант для версии 1С 8.1.

    Reply
  8. andru_dv

    Спасибо!

    Полезная обработка.

    Reply
  9. shomo

    Замечательно. Очень нужный инструмент.

    Reply
  10. CaSH_2004

    Очень хорошее описание, очень рад что встречаются авторы которые не леняться писать описание, а не только код 🙂

    Кстати есть аналогичный но ПЛАТНЫЙ продукт http://infostart.ru/public/88389/, так что удивительно что этот бесплатный.

    Насчет ссылок дам еще:

    http://infostart.ru/public/58058/ — Поиск битых ссылок с отбором типа

    http://infostart.ru/public/80438/ — Восстановление битых ссылок в 1С

    Вроде они в статье не упомянуты

    Reply
  11. accnt

    уже несколько таких набралось обработок,но эта тоже хорошая,зачет

    Reply
  12. leon111

    Спасибо! Нужная обработка!

    Reply
  13. JamilRG

    Спасибо!

    Полезная обработка.

    Reply
  14. StasssiK

    Спасибо, нужная и полезная штука. Очень пригодилась.

    Reply
  15. Deniz200

    полезно

    Reply
  16. shatshat

    очень пригодилась!!!! Браво автор и огромное СПАСИБО

    все идеи и принципы ясны, более того — расписаны «первоисточники» (с ними тоже ознакомился, очень интересно)

    самое же главное в полезности этой обработки — даже если ты понимаешь «как можно сделать» — в момент «катастрофы» просто нет возможности спокойно и детально все сделать и мозг зачумлен клиентом-владельцем базы данных — «нужно все-все-все восстановить и немедленно!»

    и тут… СПАСЕНИЕ

    спасибо огромное, Владимир

    Reply
  17. Spacer

    (16) shatshat, Очень рад что вам пригодилось.:)

    Reply
  18. Nadegda_P

    Здравствуйте!

    А в «Комплексной автоматизации» работает? У меня почему-то не получается подключиться к архивной копии.

    Reply
  19. Spacer

    (18) Nadegda_P, Теоретически должно работать. А почему не получается подключиться? Что пишет?

    Reply
  20. eagle89

    Отличная обработка, большое спасибо автору!

    Reply
  21. VBod

    В процессе поиска битых ссылок по всей конфигурации появляется сообщение об ошибке:

    Ошибка при вызове метода контекста (Выполнить): {(7, 9)}: Поле не найдено «Об.Валюта»

    ГДЕ Об.<<?>>Валюта ССЫЛКА Справочник.Валюты И ВЫРАЗИТЬ(Об.Валюта КАК Справочник.Валюты).Ссылка есть null И Об.Валюта <> Значение(Справочник.Валюты.ПустаяСсылка) ИнформацияОбОшибке

    Reply
  22. Spacer
    LordTime пишет:

    В процессе поиска битых ссылок по всей конфигурации появляется сообщение об ошибке:

    Ошибка при вызове метода контекста (Выполнить): {(7, 9)}: Поле не найдено «Об.Валюта»

    ГДЕ Об.<<?>>Валюта ССЫЛКА Справочник.Валюты И ВЫРАЗИТЬ(Об.Валюта КАК Справочник.Валюты).Ссылка есть null И Об.Валюта <> Значение(Справочник.Валюты.ПустаяСсылка) ИнформацияОбОшибке

    Да, есть такое дело. Сам сталкивался. Только руки еще не дошли подправить.

    Может быть на выходные подправлю.

    Reply
  23. Spacer
    LordTime пишет:

    В процессе поиска битых ссылок по всей конфигурации появляется сообщение об ошибке

    Ошибка исправлена. Обновил файлы обработки.

    Reply
  24. camomile

    Спасибо! Отличная обработка.

    Reply
  25. Sairys

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

    Reply
  26. Slach

    хорошая обработка, только у меня возникла ситуация, когда «некорректное удаление» было проведено несколько раз… пришлось последовательно брать НЕСКОЛЬКО бекапов…, с учетом того что база была на 80 гигов, занятие это было весьма не быстрым… но справился

    Reply
  27. a4a

    Встала проблема: перенести остатки на начало прошлого года из Бухгалтерии 1.6 под 8.1 в 2.0 под 8.2, в которой уже ведется учет. Пытаюсь через Универсальный обмен в формате XML. Выгрузка не проходит — вылетают битые ссылки. Пытаюсь бороться через тестирование и исправление ИБ — не проходит, вылетает ошибка.

    Проблема новая для меня — тупик просто.Читаю описание — очень надеюсь на вашу обработку!

    Reply
  28. a4a

    За идею плюс , конечно!

    Под 8.1 не сработала — жаль!

    Reply
  29. vik77

    Вещь. Помогла. Плюс.

    У меня возникла небольшая ошибка с COMConnector. Помогла перерегистрация dll

    C:Program Files1cv828.2.13.202incomcntr.dll

    Reply
  30. vishenka

    Хорошая обработочка, пригодилась в «трудную минуту»

    Reply
  31. Victorman

    Создал образ подчинённой базы по плану обмена по Организациям. Получил много битых ссылок. Эта обработка очень помогла.

    Reply
  32. v_id

    Спасибо что бесплатно, будем пробывать!

    Reply
  33. belichenko66

    спасибо

    Reply
  34. petrovaUL

    Плюс. Скачаю, попробую. Спасибо, пригодится.

    Reply
  35. yegorZ

    Пригодилась в ЗУП, спасибо

    Reply
  36. QWer666

    Качаю! Спасибо!

    Reply
  37. Istur

    (0) Было бы хорошо еще проваливаться в объект-источник. Тем более для этого нужна только кнопка открытия в колонке.

    Reply
  38. goodman12

    Спасибо 🙂 Сейчас скачаю, буду тестить.

    Reply
  39. idemousi

    Вот то что именно сейчас и требуется

    Reply
  40. tulaka

    очень удобно

    Reply
  41. Jacky

    Спасибо, сначала находил «первоисточники» и вот нашел итоговую обработку.

    Очень выручила.

    Reply
  42. alekckuc

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

    Reply
  43. materiy_boec

    Класс, как раз сегодня в обоих а точнее в четырех база: 2 пары риб бух и зуп, обноружил битые ссылки.

    Плюсую

    Reply
  44. materiy_boec

    Очень важный для меня вопрос!

    Такие битые ссылки появляются еще в каких нибудь случаях?

    В случае с обменом РИБ они появляются только тогда когда в одной из баз выполняешь удаление объектов?

    Очень жду ответа, спасибо

    Reply
  45. materiy_boec

    Подписался на ответы по этой теме

    Reply
  46. Spacer

    (45) materiy_boec, да нет, вроде все случаи описаны.

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

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

    Что касается случая РИБ, то теоретически при полном обмене информацией между базами здесь проблем быть не должно, т.к. все базы имеют одинаковые данные и контроль ссылок перед непосредственным удалением объекта выдаст ошибку.

    Проблемы могут возникать только когда между базами осуществляется частичный обмен информацией.

    В результате может оказаться так что в одной базе объект удален корректно, а в другой на него имеются ссылки.

    Reply
  47. materiy_boec

    (47) у меня полный обмен риб, и никто последние 2 недели не выполнял удаление помеченных объектов.

    Процедуру УдалитьОбъект(Объект, Истина). я поправил, поставил Ложь. Буду наблюдать.

    Reply
  48. tireal

    Благодарю, обработка очень помогла, только после смены базы для подключения перестает давать выбор пользователя для подключения, соответственно и не подключается, но это мелочи.

    Reply
  49. kostik_love

    спасибо, вот и мне пригодилась ваша обработка

    Reply
  50. commo

    спасибо большое за обработку, я её недели 2 искал. очень помогает. однозначно +

    Reply
  51. commo

    При выборе информационной базы появляется ошибка:

    {Форма.Форма.Форма(388)}:Ошибка при вызове конструктора (COMОбъекта): Не найден указанный модуль.: Не найден указанный модуль.

    Почему возникает данная ошибка? как её избежать?

    Reply
  52. commo

    вылечил бяку сам, добавив новую компоненту «Приложения COM+»

    Reply
  53. DikSer

    Просто мега штука! Спасибо автору!

    Reply
  54. sherbv

    Отличная обработка 🙂

    Кстати никто не замечал — работает нормально только когда версии конфигураций копии и рабочей баз совпадают?

    У меня были ошибки разбора XML при восстановлении. Решилось обновлением копии.

    Reply
  55. 1977

    Под ут11 Подойдет?

    Reply
  56. Spacer

    (56) 1977, Должно подойти.

    Алгоритмы обработки универсальные и на конкретную конфигурацию не завязаны.

    Reply
  57. 1977

    В Управляемых формах?

    Reply
  58. Spacer

    (58) 1977, Нет, управляемых форм нет.

    Reply
  59. pvlunegov

    Спасибо автору за обработку.

    Просьба пояснить, какой должна быть архивная копия базы?

    Подойдет файл «1cv8.1CD»?

    У меня в тестовой базе при запуске обработки возникло сообщение «Файл 1cv8.1CD поврежден!».

    После чего база автоматически закрылась.

    Пришлось из рабочей базы брать файл «1cv8.1CD» и заменять аналогичный файл тестовой базы.

    Попробую запустить вашу обработку, не обновляя конфигурацию в тестовой базе, может поможет.

    Reply
  60. НатальяАлекс

    Спасибо! Скачала. Пока очень нравится… Все так замечательно начинается… Неужели…

    Reply
  61. НатальяАлекс

    У меня выдает служебное сообщение: Ошибка при вызове метода контекста (Выполнить) ИнформацияОбОшибке

    много раз, но работать продолжает…

    Reply
  62. Spacer

    (62) НатальяАлекс, А что еще сообщает об ошибке?

    Номер строки модуля и т.д.?

    Reply
  63. madmpro

    Вот, сегодня беда. Приходится хоть что нибудь написать чтоб имел возможность скачать эту замечательную обработку. Спасибо автору за свой труд.

    Reply
  64. НатальяАлекс

    (63) Я же написала, он продолжает работу… У меня нетиповая БП. Сильно нетиповая. В данный момент уже идет восстановление.

    Reply
  65. НатальяАлекс

    -восстановление ссылок-

    Reply
  66. НатальяАлекс

    При восстановлении выдает ошибку:

    {Форма.Форма.Форма(501)}: Ошибка при вызове метода контекста (ПрочитатьXML)

    ПолучОбъект = ПрочитатьXML(ЧтениеХМЛ);

    по причине:

    Ошибка преобразования данных XML: [12,20]

    Я просто снимаю галочку для восстановления, потом разберусь почему.

    Reply
  67. NittenRenegade

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

    Reply
  68. НатальяАлекс

    Почему не поддерживается? У меня все отлично работает. Регистры бухгалтерии, кстати, проверяются (причем они нетиповые). Зря Вы так… Все очень здорово.

    Reply
  69. НатальяАлекс

    На 1С:Предприятие 8.2 (8.2.15.319).

    Reply
  70. pnvnatali

    Спасибо, все просто и удобно.

    Reply
  71. irishen

    21. LordTime (файл скачал) 10.11.11 14:35

    В процессе поиска битых ссылок по всей конфигурации появляется сообщение об ошибке:

    Ошибка при вызове метода контекста (Выполнить): {(7, 9)}: Поле не найдено «Об.Валюта»

    ГДЕ Об.<<?>>Валюта ССЫЛКА Справочник.Валюты И ВЫРАЗИТЬ(Об.Валюта КАК Справочник.Валюты).Ссылка есть null И Об.Валюта <> Значение(Справочник.Валюты.ПустаяСсылка) ИнформацияОбОшибке

    Тоже такая ошибка. Это из-за неподходящей конфигурации?

    Reply
  72. Spacer

    (72) irishen, Да, возможно у вас какая-то не типовая конфигурация.

    Reply
  73. Spacer

    (68) Niten, платформой 8.2 в режиме обычного приложения поддерживается.

    Может быть вы имели в виду управляемое приложение?

    Reply
  74. Motor24

    Спасибо, попробую

    Reply
  75. BoryaMbi

    Вопрос: можно ли с использование данной обработки восстановить объекты на основе других объектов из той же базы данных?

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

    Эта функция была бы полезна в данной обработке. Как Вы считаете?

    Reply
  76. BoryaMbi

    Получается, что данная обработка не ищет удаленных объектов в независимых реквизитах регистров сведений — полностью отсутствует код.

      Если ОбъектМетаданных.РежимЗаписи = НезависимыйРежимЗаписи Тогда
    //АнализСвойствРегистраСведений(ОбъектМетаданных, ОбъектМетаданных.Измерения, ИмяТаблицы);
    //АнализСвойствРегистраСведений(ОбъектМетаданных, ОбъектМетаданных.Ресурсы, ИмяТаблицы);
    //АнализСвойствРегистраСведений(ОбъектМетаданных, ОбъектМетаданных.Реквизиты, ИмяТаблицы);
    Возврат;
    КонецЕсли;
    

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

    Reply
  77. BoryaMbi

    Самостоятельно доработал эту обработку — теперь ищет в независимых регистрах сведений.

    Reply
  78. Simon14

    {Форма.Форма(501)}: Ошибка при вызове метода контекста (ПрочитатьXML): Ошибка преобразования данных XML: [47,30]

    ПолучОбъект = ПрочитатьXML(ЧтениеХМЛ);

    по причине:

    Ошибка преобразования данных XML: [47,30]

    Выдало такую ошибку в чем может быть проблемма

    Reply
  79. Spacer

    (79) Simon14, Ошибка происходит во время копирования удаленного объекта из резервной копии в основную базу.

    Вероятно конфигурации баз у вас чем-то отличаются.

    Reply
  80. NatalyaVP

    Ошибка в обработке «тип не определен(Справочник)»

    Reply
  81. Алексей87

    У меня данная обработка исправила справочники, но вот с документом проблема, ошибка:

    Ошибка при вызове метода контекста (ПолучитьОбъект)

    Если СсылкаНаОбъектГУИД.ПолучитьОбъект() <> Неопределено Тогда

    по причине:

    Произошла исключительная ситуация (1C:Enterprise 8.2.17.153): {Документ.Квитанция(480,30)}: Переменная не определена (глТекущийПользователь). Что то не пойму в чем причина, может кто подскажет?? База не типовая.

    Reply
  82. Spacer

    (82) Алексей87, Ну в этом наверное и дело что база не типовая.

    В типовых конфигурациях есть глобальная переменная «глТекущийПользователь».

    Наверное в вашей конфигурации нет этой переменной.

    Посмотрите какой код у вас в модуле документа «Квитанция» в строке 480.

    Reply
  83. Алексей87

    глобальная переменная есть такая, в строке 480:

    Перерасчет.Ответственный = глТекущийПользователь;

    Перерасчет это документ создаваемый при проведении квитанции.

    Reply
  84. Алексей87

    (83)

    глобальная переменная есть такая, в строке 480:

    Перерасчет.Ответственный = глТекущийПользователь;

    Перерасчет это документ создаваемый при проведении квитанции.

    Reply
  85. Алексей87

    Комментирую в модуле копии строки где встречается глТекущийПользователь и все норм))) в чем прикол не пойму

    Reply
  86. TVA_11

    Архивная копия, выбираю рабочую, архивную базу на сервере.

    Требуется авторизация:

    Пользователи архивной копии не выбираются, набираю себя в ручную, ввожу пароль

    Идентификация пользователя не выполнена. Неправильное имя пользователя или пароль.

    ***

    В чем может быть ошибка?

    Reply
  87. TVA_11

    Может имя пользователя надо писать хитро? Указывать имя сервера, БД?

    Reply
  88. TVA_11

    Второй файл для 8.2 появился недавно?

    Когда скачивал был в выборе только 1. Есть смысл скачать повторно?

    Reply
  89. Spacer

    (87) TVA_11, да. пользователи архивной копии не выбираются. т.к. подключение к архивной копии делается через

    com-соединение. Нужно вводить имя пользователя вручную.

    Если имя пользователя и пароль введены правильно, то авторизация должна проходить нормально.

    Reply
  90. Spacer

    (88) TVA_11, нет, пользователь пишется точно так же как он выводится в списке выбора пользователей.

    Reply
  91. Spacer

    (89) TVA_11, да нет, он уже давно есть.

    Там основное отличие в обработке выбора базы из списка.

    В 8.1 и в 8.2 информация о списке баз получается разными способами.

    Reply
  92. TVA_11

    Проверю, как я мог пароль неправильно ввести!?

    Ответ: картинка ввода другая ).

    Reply
  93. TVA_11

    Нет, пароль правильный и логин правильный.

    Придется вспомнить, что тоже программист, отпишусь.

    Буде что интересно.

    Reply
  94. Tanis

    Спасибо! Отличная обработка! Очень спасла….

    Reply
  95. rhtr

    Пример подключения к файловой базе file=’C:1CФУФЛО’; usr=’Администратор’; pwd=’111111′;

    Reply
  96. alfaret

    обработка отличная!

    единственное, нет поиска битых ссылок в значениях субконто регистра бухгалтерии

    Reply
  97. Andruykha

    +1, Отличная обработка. Для управляемых форм тоже сделайте, вдруг понадобиться.

    Reply
  98. 1cnick8

    (48) materiy_boec,

    Процедуру УдалитьОбъект(Объект, Истина). я поправил, поставил Ложь. Буду наблюдать.

    Поделитесь результатами наблюдений. Постоянно при обмене в формате РИБ появляются битые ссылки <Объект не найден>

    Reply
  99. Anyu-n

    (53) commo, а подскажите как ее подключить? У меня вываливается ошибка «Ошибка при вызове конструктора (СОМобъект,)… недопустимая строка с указанием класса…. помогите пожалуйста… поподробнее что делать нужно :'(

    Reply

Leave a Comment

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