Данная обработка позволяет найти такие ссылки и восстановить их в автоматическом режиме (при наличии копии информационной базы).
Битые ссылки появляются в базе как правило после непосредственного удаления объектов (без контроля ссылок на них).
Когда объект был удален непосредственно, то все ссылки на него в справочниках, в документах, в регистрах стали битыми и отображаются следующим образом:
(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
Обработка включает как обычные, так и управляемые формы.
Портирование обработки выполнено Андреем Торопчиным.
Плюсовать пока не буду, качал аналогичную обработку, сейчас попробую воспользоаться данной. По итогам работы плюсану 🙂
При нажатии на «Восстановить» появляется сообщение:
{Форма.Форма.Форма(567)}: Преобразование значения к типу Булево не может быть выполнено
Если СкопироватьОбъектИзСОМ(ПодключеннаяИБ, сАрхив.ГУИД_Объекта) Тогда
Конфа Альфа-Авто.
(2) xavi, Да, была ошибочка…
Подправил, перезалил.
А где для 8.1?
Написано же что обработка для 8.1/8.2
(4) echo77, Будет и для 8.1. Сегодня вечером выложу.
пока не пробовал, но ПЛЮС за отличное описание проблемы, за анализ других обработок. Грамотно и честно.Спасибо
(4) echo77, Добавил вариант для версии 1С 8.1.
Спасибо!
Полезная обработка.
Замечательно. Очень нужный инструмент.
Очень хорошее описание, очень рад что встречаются авторы которые не леняться писать описание, а не только код 🙂
http://infostart.ru/public/88389/ , так что удивительно что этот бесплатный.
http://infostart.ru/public/58058/ — Поиск битых ссылок с отбором типа
http://infostart.ru/public/80438/ — Восстановление битых ссылок в 1С
Кстати есть аналогичный но ПЛАТНЫЙ продукт
Насчет ссылок дам еще:
Вроде они в статье не упомянуты
уже несколько таких набралось обработок,но эта тоже хорошая,зачет
Спасибо! Нужная обработка!
Спасибо!
Полезная обработка.
Спасибо, нужная и полезная штука. Очень пригодилась.
полезно
очень пригодилась!!!! Браво автор и огромное СПАСИБО
все идеи и принципы ясны, более того — расписаны «первоисточники» (с ними тоже ознакомился, очень интересно)
самое же главное в полезности этой обработки — даже если ты понимаешь «как можно сделать» — в момент «катастрофы» просто нет возможности спокойно и детально все сделать и мозг зачумлен клиентом-владельцем базы данных — «нужно все-все-все восстановить и немедленно!»
и тут… СПАСЕНИЕ
спасибо огромное, Владимир
(16) shatshat, Очень рад что вам пригодилось.:)
Здравствуйте!
А в «Комплексной автоматизации» работает? У меня почему-то не получается подключиться к архивной копии.
(18) Nadegda_P, Теоретически должно работать. А почему не получается подключиться? Что пишет?
Отличная обработка, большое спасибо автору!
В процессе поиска битых ссылок по всей конфигурации появляется сообщение об ошибке:
Ошибка при вызове метода контекста (Выполнить): {(7, 9)}: Поле не найдено «Об.Валюта»
ГДЕ Об.<<?>>Валюта ССЫЛКА Справочник.Валюты И ВЫРАЗИТЬ(Об.Валюта КАК Справочник.Валюты).Ссылка есть null И Об.Валюта <> Значение(Справочник.Валюты.ПустаяСсылка) ИнформацияОбОшибке
В процессе поиска битых ссылок по всей конфигурации появляется сообщение об ошибке:
Ошибка при вызове метода контекста (Выполнить): {(7, 9)}: Поле не найдено «Об.Валюта»
ГДЕ Об.<<?>>Валюта ССЫЛКА Справочник.Валюты И ВЫРАЗИТЬ(Об.Валюта КАК Справочник.Валюты).Ссылка есть null И Об.Валюта <> Значение(Справочник.Валюты.ПустаяСсылка) ИнформацияОбОшибке
Да, есть такое дело. Сам сталкивался. Только руки еще не дошли подправить.
Может быть на выходные подправлю.
В процессе поиска битых ссылок по всей конфигурации появляется сообщение об ошибке
Ошибка исправлена. Обновил файлы обработки.
Спасибо! Отличная обработка.
Битые ссылки это давно известная проблема, и тема знакома каждому программисту. Вещь интересная нужна наверно практически в любой базе, спасибо автору.
хорошая обработка, только у меня возникла ситуация, когда «некорректное удаление» было проведено несколько раз… пришлось последовательно брать НЕСКОЛЬКО бекапов…, с учетом того что база была на 80 гигов, занятие это было весьма не быстрым… но справился
Встала проблема: перенести остатки на начало прошлого года из Бухгалтерии 1.6 под 8.1 в 2.0 под 8.2, в которой уже ведется учет. Пытаюсь через Универсальный обмен в формате XML. Выгрузка не проходит — вылетают битые ссылки. Пытаюсь бороться через тестирование и исправление ИБ — не проходит, вылетает ошибка.
Проблема новая для меня — тупик просто.Читаю описание — очень надеюсь на вашу обработку!
За идею плюс , конечно!
Под 8.1 не сработала — жаль!
Вещь. Помогла. Плюс.
У меня возникла небольшая ошибка с COMConnector. Помогла перерегистрация dll
C:Program Files1cv828.2.13.202incomcntr.dll
Хорошая обработочка, пригодилась в «трудную минуту»
Создал образ подчинённой базы по плану обмена по Организациям. Получил много битых ссылок. Эта обработка очень помогла.
Спасибо что бесплатно, будем пробывать!
спасибо
Плюс. Скачаю, попробую. Спасибо, пригодится.
Пригодилась в ЗУП, спасибо
Качаю! Спасибо!
(0) Было бы хорошо еще проваливаться в объект-источник. Тем более для этого нужна только кнопка открытия в колонке.
Спасибо 🙂 Сейчас скачаю, буду тестить.
Вот то что именно сейчас и требуется
очень удобно
Спасибо, сначала находил «первоисточники» и вот нашел итоговую обработку.
Очень выручила.
Спасибо, обработка очень нужная восстановил с помощью нее затертые дынные из архивной копии, вернул большой объем работы проделанный пользователями и случайно уничтоженный.
Класс, как раз сегодня в обоих а точнее в четырех база: 2 пары риб бух и зуп, обноружил битые ссылки.
Плюсую
Очень важный для меня вопрос!
Такие битые ссылки появляются еще в каких нибудь случаях?
В случае с обменом РИБ они появляются только тогда когда в одной из баз выполняешь удаление объектов?
Очень жду ответа, спасибо
Подписался на ответы по этой теме
(45) materiy_boec, да нет, вроде все случаи описаны.
Ну, разве что еще физическая порча базы может быть причиной.
Но в этом случае последствия будут уже сильнее чем просто битые ссылки.
Что касается случая РИБ, то теоретически при полном обмене информацией между базами здесь проблем быть не должно, т.к. все базы имеют одинаковые данные и контроль ссылок перед непосредственным удалением объекта выдаст ошибку.
Проблемы могут возникать только когда между базами осуществляется частичный обмен информацией.
В результате может оказаться так что в одной базе объект удален корректно, а в другой на него имеются ссылки.
(47) у меня полный обмен риб, и никто последние 2 недели не выполнял удаление помеченных объектов.
Процедуру УдалитьОбъект(Объект, Истина). я поправил, поставил Ложь. Буду наблюдать.
Благодарю, обработка очень помогла, только после смены базы для подключения перестает давать выбор пользователя для подключения, соответственно и не подключается, но это мелочи.
спасибо, вот и мне пригодилась ваша обработка
спасибо большое за обработку, я её недели 2 искал. очень помогает. однозначно +
При выборе информационной базы появляется ошибка:
{Форма.Форма.Форма(388)}:Ошибка при вызове конструктора (COMОбъекта): Не найден указанный модуль.: Не найден указанный модуль.
Почему возникает данная ошибка? как её избежать?
вылечил бяку сам, добавив новую компоненту «Приложения COM+»
Просто мега штука! Спасибо автору!
Отличная обработка 🙂
Кстати никто не замечал — работает нормально только когда версии конфигураций копии и рабочей баз совпадают?
У меня были ошибки разбора XML при восстановлении. Решилось обновлением копии.
Под ут11 Подойдет?
(56) 1977, Должно подойти.
Алгоритмы обработки универсальные и на конкретную конфигурацию не завязаны.
В Управляемых формах?
(58) 1977, Нет, управляемых форм нет.
Спасибо автору за обработку.
Просьба пояснить, какой должна быть архивная копия базы?
Подойдет файл «1cv8.1CD»?
У меня в тестовой базе при запуске обработки возникло сообщение «Файл 1cv8.1CD поврежден!».
После чего база автоматически закрылась.
Пришлось из рабочей базы брать файл «1cv8.1CD» и заменять аналогичный файл тестовой базы.
Попробую запустить вашу обработку, не обновляя конфигурацию в тестовой базе, может поможет.
Спасибо! Скачала. Пока очень нравится… Все так замечательно начинается… Неужели…
У меня выдает служебное сообщение: Ошибка при вызове метода контекста (Выполнить) ИнформацияОбОшибке
много раз, но работать продолжает…
(62) НатальяАлекс, А что еще сообщает об ошибке?
Номер строки модуля и т.д.?
Вот, сегодня беда. Приходится хоть что нибудь написать чтоб имел возможность скачать эту замечательную обработку. Спасибо автору за свой труд.
(63) Я же написала, он продолжает работу… У меня нетиповая БП. Сильно нетиповая. В данный момент уже идет восстановление.
-восстановление ссылок-
При восстановлении выдает ошибку:
{Форма.Форма.Форма(501)}: Ошибка при вызове метода контекста (ПрочитатьXML)
ПолучОбъект = ПрочитатьXML(ЧтениеХМЛ);
по причине:
Ошибка преобразования данных XML: [12,20]
Я просто снимаю галочку для восстановления, потом разберусь почему.
Не поддерживается платформой 8.2 и очень не хватает регистров бухгалтерии. В принципе, для себя докостылил, но за державу обидно.
Почему не поддерживается? У меня все отлично работает. Регистры бухгалтерии, кстати, проверяются (причем они нетиповые). Зря Вы так… Все очень здорово.
На 1С:Предприятие 8.2 (8.2.15.319).
Спасибо, все просто и удобно.
21. LordTime (файл скачал) 10.11.11 14:35
В процессе поиска битых ссылок по всей конфигурации появляется сообщение об ошибке:
Ошибка при вызове метода контекста (Выполнить): {(7, 9)}: Поле не найдено «Об.Валюта»
ГДЕ Об.<<?>>Валюта ССЫЛКА Справочник.Валюты И ВЫРАЗИТЬ(Об.Валюта КАК Справочник.Валюты).Ссылка есть null И Об.Валюта <> Значение(Справочник.Валюты.ПустаяСсылка) ИнформацияОбОшибке
Тоже такая ошибка. Это из-за неподходящей конфигурации?
(72) irishen, Да, возможно у вас какая-то не типовая конфигурация.
(68) Niten, платформой 8.2 в режиме обычного приложения поддерживается.
Может быть вы имели в виду управляемое приложение?
Спасибо, попробую
Вопрос: можно ли с использование данной обработки восстановить объекты на основе других объектов из той же базы данных?
Например: у меня был затерт пользователь, случайно. Хочу просто заменить его на другого пользователя из этой же базы данных.
Эта функция была бы полезна в данной обработке. Как Вы считаете?
Получается, что данная обработка не ищет удаленных объектов в независимых реквизитах регистров сведений — полностью отсутствует код.
Хочу предложить Автору доработать данный код. Считаю, что необходимо предупреждать пользователей о данном ограничении.
Самостоятельно доработал эту обработку — теперь ищет в независимых регистрах сведений.
{Форма.Форма(501)}: Ошибка при вызове метода контекста (ПрочитатьXML): Ошибка преобразования данных XML: [47,30]
ПолучОбъект = ПрочитатьXML(ЧтениеХМЛ);
по причине:
Ошибка преобразования данных XML: [47,30]
Выдало такую ошибку в чем может быть проблемма
(79) Simon14, Ошибка происходит во время копирования удаленного объекта из резервной копии в основную базу.
Вероятно конфигурации баз у вас чем-то отличаются.
Ошибка в обработке «тип не определен(Справочник)»
У меня данная обработка исправила справочники, но вот с документом проблема, ошибка:
Ошибка при вызове метода контекста (ПолучитьОбъект)
Если СсылкаНаОбъектГУИД.ПолучитьОбъект() <> Неопределено Тогда
по причине:
Произошла исключительная ситуация (1C:Enterprise 8.2.17.153): {Документ.Квитанция(480,30)}: Переменная не определена (глТекущийПользователь). Что то не пойму в чем причина, может кто подскажет?? База не типовая.
(82) Алексей87, Ну в этом наверное и дело что база не типовая.
В типовых конфигурациях есть глобальная переменная «глТекущийПользователь».
Наверное в вашей конфигурации нет этой переменной.
Посмотрите какой код у вас в модуле документа «Квитанция» в строке 480.
глобальная переменная есть такая, в строке 480:
Перерасчет.Ответственный = глТекущийПользователь;
Перерасчет это документ создаваемый при проведении квитанции.
(83)
глобальная переменная есть такая, в строке 480:
Перерасчет.Ответственный = глТекущийПользователь;
Перерасчет это документ создаваемый при проведении квитанции.
Комментирую в модуле копии строки где встречается глТекущийПользователь и все норм))) в чем прикол не пойму
Архивная копия, выбираю рабочую, архивную базу на сервере.
Требуется авторизация:
Пользователи архивной копии не выбираются, набираю себя в ручную, ввожу пароль
Идентификация пользователя не выполнена. Неправильное имя пользователя или пароль.
***
В чем может быть ошибка?
Может имя пользователя надо писать хитро? Указывать имя сервера, БД?
Второй файл для 8.2 появился недавно?
Когда скачивал был в выборе только 1. Есть смысл скачать повторно?
(87) TVA_11, да. пользователи архивной копии не выбираются. т.к. подключение к архивной копии делается через
com-соединение. Нужно вводить имя пользователя вручную.
Если имя пользователя и пароль введены правильно, то авторизация должна проходить нормально.
(88) TVA_11, нет, пользователь пишется точно так же как он выводится в списке выбора пользователей.
(89) TVA_11, да нет, он уже давно есть.
Там основное отличие в обработке выбора базы из списка.
В 8.1 и в 8.2 информация о списке баз получается разными способами.
Проверю, как я мог пароль неправильно ввести!?
Ответ: картинка ввода другая ).
Нет, пароль правильный и логин правильный.
Придется вспомнить, что тоже программист, отпишусь.
Буде что интересно.
Спасибо! Отличная обработка! Очень спасла….
Пример подключения к файловой базе file=’C:1CФУФЛО’; usr=’Администратор’; pwd=’111111′;
обработка отличная!
единственное, нет поиска битых ссылок в значениях субконто регистра бухгалтерии
+1, Отличная обработка. Для управляемых форм тоже сделайте, вдруг понадобиться.
(48) materiy_boec,
Поделитесь результатами наблюдений. Постоянно при обмене в формате РИБ появляются битые ссылки <Объект не найден>
(53) commo, а подскажите как ее подключить? У меня вываливается ошибка «Ошибка при вызове конструктора (СОМобъект,)… недопустимая строка с указанием класса…. помогите пожалуйста… поподробнее что делать нужно :'(