Поиск ссылок на объект ошибка

Как такое может быть. Поиск ссылок показывает документ, запрос нет

Я
   zladenuw

01.02.13 — 04:40

Открываю этот документ. ищу там эту карточку нету.

Что за глюк ?

   ZanderZ

1 — 01.02.13 — 04:41

пятница…

   Cube

2 — 01.02.13 — 04:41

(0) Поток мыслей. Никакой связи.

   zladenuw

3 — 01.02.13 — 04:42

(2) Сам поток. Делаю запрос к этому документу по определеному элементу. в запросе пусто. в поиске выдает ссылки на документы. а в них нету этой карточки.

   Godofsin

4 — 01.02.13 — 04:43

(2) +1 за поток мыслей

   zladenuw

5 — 01.02.13 — 04:44

(4) еще 1.

поиск ссылок на объект. вызываю через операции.

   Godofsin

6 — 01.02.13 — 04:45

(5) Ну так расскажи подробнее. Делаешь поиск ссылок на объект (какой?), видишь там документ, а его на самом деле не существует? Или чо?

   zladenuw

7 — 01.02.13 — 04:48

(6) Товар. в поиске есть. пробую в запросе, пусто.

   Cube

8 — 01.02.13 — 04:49

(3) «Делаю запрос к этому документу по определеному элементу»

Жги ищо!))

Давай скрины. Разговаривать ты не умеешь.

   zladenuw

9 — 01.02.13 — 04:53

(8)

          «ВЫБРАТЬ

|    ПриходнаяЗЧТабЗЧ.Ссылка

|ИЗ

|    Документ.ПриходнаяЗЧ.ТабЗЧ КАК ПриходнаяЗЧТабЗЧ

|ГДЕ

|    ПриходнаяЗЧТабЗЧ.ЗЧ = &ЗЧ»

   Cube

10 — 01.02.13 — 04:55

(9) Клевый скрин. Теперь всё понятно. Молодец.

   Wobland

11 — 01.02.13 — 04:57

(10) ПриходнаяЗЧТабЗЧ.ЗЧ = &ЗЧ

по-моему, понятно

   Wobland

12 — 01.02.13 — 04:58

(11) что ни хрена не понятно

   Godofsin

13 — 01.02.13 — 04:59

(10) Фото в личке ТС полностью отображает его проблему непонятно изъясняться =)

   Godofsin

14 — 01.02.13 — 05:00

(9) чтио в переменной ЗЧ?

   zladenuw

15 — 01.02.13 — 05:01

Поиск ссылок на объект который в 1с по определенной ссылке зч показывает ссылки на документы, запрос в консоле к этому документу с условием где   ПриходнаяЗЧТабЗЧ.ЗЧ = &ЗЧ. возвращает пусто.

   Cube

16 — 01.02.13 — 05:03

Посоны, я после (15), кажется начал понимать его))))

(15) Запрос тебе показывает, что в документе нет строк в табличной части, а не то, что ты хотел… :)

   zladenuw

17 — 01.02.13 — 05:04

(16) вообще ссылку на документ. так что садись 2

   zladenuw

18 — 01.02.13 — 05:05

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

   Cube

19 — 01.02.13 — 05:13

(17) Иди букварь читай!

То, что ты выбираешь ссылку на документ из строк ТЧ этого документа, это не значит, что ты выбираешь ссылку на документ. Запрос тебе вернет столько строк с сылкной на документ, сколько строк в ТЧ этого документа.

Ты сравниваешь попу с пальцем, удивляешься, почему они не походи, а у нас спрашиваешь, почем семечки на рынке… То есть вообще белиберда у тебя в голове полная.

   SeraFim

20 — 01.02.13 — 05:18

&ЗЧ точно-точно не пустая?)

Если я не ошибаюсь — поиск ссылок на объект ищет еще и в регистрах, по которым документ делает движения. То есть в документе может и не быть чего-то, а регистре — есть.

   Godofsin

21 — 01.02.13 — 05:20

(20) он бы и показывал регистр, а не документ

   zladenuw

22 — 01.02.13 — 05:22

(20) вот вот. да я и в документе искал самом. по коду и наименованию. пусто.

   zladenuw

23 — 01.02.13 — 05:22

(22) к (21)

   Cube

24 — 01.02.13 — 05:26

(22) У тебя в документе может и другой реквизит содержать ссылку на искомый объект, вообще-то…

   SeraFim

25 — 01.02.13 — 05:26

(22) а ты по регистрам всё-таки проверь, на всякий случай)

  

zladenuw

26 — 01.02.13 — 05:43

(24) понял. спасибо

Когда кто-то удаляет данные из базы без проверки ссылок на эти объекты, то везде где этот объект использовался появляется сообщение вида: <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824) .
title
В данной статье я опишу пример быстрого восстановления данных.

Для пользователя:
Скачиваете эту обработку восстановления объектов по GUID :
Для 1С 8.1:
здесь или Скачивать файлы может только зарегистрированный пользователь!
Для 1С 8.2:
Скачивать файлы может только зарегистрированный пользователь!


!!! Новая Версия!!! 8.2 и 8.3 — Скачивать файлы может только зарегистрированный пользователь! Подробное описание: Объект не найден в 1С или про Битые ссылки 1С


и открываете ее в программе:
1. Копируем фразу <Объект не найден… и вставляем в поле Объект не найден, жмем на кнопку GUID -> и получаем 05dbe824-a4c6-11dd-bf56-00145e3710ab
title

2. Если Вы знаете что удалили, то можете сразу нажать кнопку Создать Объект Из GUID — Пункт 4.
3. Если Вы не знаете что удалили, тогда вам нужно поднять архивную копию базы, открыть там обработку и вставить полученный GUID в поле GUID.
далее нажать Ссылку -> и в правом поле отобразится необходимый Вам объект(в моем случае Попов Роман Владимирович).
Открыв его, узнаем что это справочник Сотрудники и всю содержащуюся в справочнике информацию. Возвращаемся в базу, где необходимо восстановить объект и жмем кнопку Создать Объект Из GUID
title
4. Из открывшегося списка выбираем Справочник Сотрудники, в открывшейся форме заполняем все поля данными из архивной базы и жмем OK. Все, данный объект восстановлен.

Для быстрого поиска всех <Объект не найден> используйте Поиск в базе битых ссылок — «объект не найден»


Для программиста:
Для получения уникального идентификатора объекта, используйте код вида:

Код 1C v 8.х

  ГУИДССЫЛКИ	= СсылкаНаОбъект.УникальныйИдентификатор();    

Для того чтобы преобразовать <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824) в УникальныйИдентификатор (GUID)

Код 1C v 8.х

 	// ГУИДУдОбъкта =  <Объект не найден> (84:bf5600145e3710ab11dda4c605dbe824)
ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъкта,"<Объект не найден> (","");
ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,")","");
ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,"0x","");
ГУИДУдОбъктаСтр = Сред(ГУИДУдОбъктаСтр, Найти(ГУИДУдОбъктаСтр,":")+1, СтрДлина(ГУИДУдОбъктаСтр));
// Преобразуем GUID
ГУИД = Сред(ГУИДУдОбъктаСтр,25,8)+"-"+Сред(ГУИДУдОбъктаСтр,21,4)+"-"+Сред(ГУИДУдОбъктаСтр,17,4)+"-"+Сред(ГУИДУдОбъктаСтр,1,4)+"-"+Сред(ГУИДУдОбъктаСтр,5,12); //и получаем ГУИД = 05dbe824-a4c6-11dd-bf56-00145e3710ab

Для получения ссылки по уникальному идентификатору, используйте код:

Код 1C v 8.х

  	// ГУИД = 05dbe824-a4c6-11dd-bf56-00145e3710ab  
// Ссылка будет установлена в переменную СсылкаНаОбъектГуид
УникальныйИдентификатор = Новый УникальныйИдентификатор(ГУИД)
// все объекты по которым можно получить ссылку
Если ПолучитьСсылкуНоМенеджеруОбъекта(Справочники,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(Документы,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(ПланыВидовХарактеристик,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(ПланыСчетов,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(ПланыОбмена,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(БизнесПроцессы,УникальныйИдентификатор) Тогда
ИначеЕсли ПолучитьСсылкуНоМенеджеруОбъекта(Задачи,УникальныйИдентификатор) Тогда
КонецЕсли;

// ПолучитьСсылкуНоМенеджеруОбъекта()
Функция ПолучитьСсылкуНоМенеджеруОбъекта(ОбъектыМенеджер,УникальныйИдентификатор)
Для Каждого Менеджер Из ОбъектыМенеджер Цикл
СсылкаНаОбъектГуид = Менеджер.ПолучитьСсылку(УникальныйИдентификатор);

Если СсылкаНаОбъектГуид.ПолучитьОбъект() <> Неопределено Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции

Создать объект документ или справочник и установить ему свой Уникальный идентификатор

Код 1C v 8.х

 	// ТекGUID = 05dbe824-a4c6-11dd-bf56-00145e3710ab 
Попытка
УникальныйИд = Новый УникальныйИдентификатор(ТекGUID);
Исключение
Возврат;
КонецПопытки;
КартинкаСпр=БиблиотекаКартинок.Справочник;
КартинкаДок=БиблиотекаКартинок.Документ;
СписокВыбора = Новый СписокЗначений;
СписокВыбора.Добавить(null,"СПРАВОЧНИКИ");
Для каждого ЭлементМетаданных Из Метаданные.Справочники Цикл
Структурка=Новый Структура;
Структурка.Вставить("Имя",ЭлементМетаданных.Имя);
Структурка.Вставить("Тип",1);
СписокВыбора.Добавить(Структурка,ЭлементМетаданных.Синоним,,КартинкаСпр);
КонецЦикла;
СписокВыбора.Добавить(null,"ДОКУМЕНТЫ");
Для каждого ЭлементМетаданных Из Метаданные.Документы Цикл
Структурка=Новый Структура;
Структурка.Вставить("Имя",ЭлементМетаданных.Имя);
Структурка.Вставить("Тип",2);
СписокВыбора.Добавить(Структурка,ЭлементМетаданных.Синоним,,КартинкаДок);
КонецЦикла;
Результат=СписокВыбора.ВыбратьЭлемент("Выберите тип ссылки");
Если Результат=Неопределено Тогда
Возврат;
КонецЕсли;
Структурка=Результат.Значение;
Если Структурка=null Тогда
Возврат;
КонецЕсли;

НовыйОбъект=Неопределено;
Если Структурка.Тип=1 Тогда
Объект=Справочники[Структурка.Имя].СоздатьЭлемент();
Объект.ОбменДанными.Загрузка=Истина;
Объект.УстановитьСсылкуНового(Справочники[Структурка.Имя].ПолучитьСсылку(УникальныйИд));
Иначе
Объект=Документы[Структурка.Имя].СоздатьДокумент();
Объект.ОбменДанными.Загрузка=Истина;
Объект.УстановитьСсылкуНового(Документы[Структурка.Имя].ПолучитьСсылку(УникальныйИд));
КонецЕсли;

Форма=Объект.ПолучитьФорму();
Форма.Открыть();

Для 1С 7.7 смотрите:
Технология восстановления удаленных объектов или элементов в 1С 7.7

еще можно получить ИдентификаторДокумента при OLE доступе:
Код 1C v 7.x

 Если Док_Источник.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода) = 1 Тогда
Пока Док_Источник.ПолучитьДокумент() = 1 Цикл
Объект = БазаОле.ЗначениеВстрокуВнутр(Док_Источник.ТекущийДокумент());
ИдентификаторДокумента = СокрЛП(ПолучитьИД(Объект));

// Для примера Объект возвращает {"O","0","0","3114","0","0"," 258156CB "},
// а ПолучитьИД(объект) = 258156CB
КонецЦикла;

Еще посмотрите метод:
ЗначениеВСтрокуВнутр(<?>);
Синтаксис:
ЗначениеВСтрокуВнутр(<Объект>)
Назначение:
Преобразование значения объекта агрегатного типа в строковое системное представление.
Возвращает: представление значения объекта в строковом системном виде.
Параметры:
<Объект> — значение объекта агрегатного типа данных которое нужно преобразовать.
Подробнее см. в документации, глава »Системные процедуры и функции»

Содержание:

  1. Выборка объектов с помощью запроса
  2. Использование объектной модели
  3. Поиск подстроки 1С «Объект не найден» в представлении ссылки

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

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

Существуют несколько способов выявления «битых» ссылок в 1С в таблицах информационной базы.  

1.    Выборка объектов с помощью запроса

Первый способ: выборка объектов информационной базы с «битыми» ссылками в 1С с помощью запроса.

ТекстЗапроса =

    «ВЫБРАТЬ

    |       ПеремещениеТоваров.Ссылка КАК Ссылка

    |ИЗ

    |       Документ.ПеремещениеТоваров КАК ПеремещениеТоваров

    |ГДЕ

    |       НЕ ПеремещениеТоваров.СкладОтравитель ЕСТЬ NULL

    |       И ПеремещениеТоваров.СкладОтравитель.Ссылка ЕСТЬ NULL».

В данном случае мы с помощью запроса производим поиск документов «Перемещение товаров», у которых «битая» ссылка на склад-отправитель. Для этого в условии отбора убеждаемся, что ссылка на склад-отправитель в принципе не пустая(часть условия «ГДЕ»: «НЕ ПеремещениеТоваров.СкладОтравитель ЕСТЬ NULL») и, если это так, то проверяем ссылку на «битость»(часть условия «ГДЕ»: «ПеремещениеТоваров.СкладОтравитель.Ссылка ЕСТЬ NULL»).

Во второй части условия «ГДЕ» («ПеремещениеТоваров.СкладОтравитель.Ссылка ЕСТЬ NULL») вместо «Ссылка» можно использовать другие реквизиты склада-отправителя, например, «Код» («ПеремещениеТоваров.СкладОтравитель.Код ЕСТЬ NULL») – в таком случае мы также сможем отобрать перемещения с «битыми» ссылками на склад-отправитель.

Следует оговорить ситуацию, когда нужно произвести выборку объектов с битыми ссылками в 1С, но при этом поле объекта, в котором возможна «битая» ссылка, имеет составной тип, а нам требуется найти «битые» ссылки только определенного типа. Например, если в нашем случае склад-отправитель имеет составной тип «Склады» + «Подразделения организаций», а нам нужно отобрать только перемещения с «битыми» складами-отправителями типа «Подразделения организаций», в текст нашего запроса в условие «ГДЕ» добавится часть «ПеремещениеТоваров.СкладОтравитель ССЫЛКА Справочник.ПодрадзделенияОрганизаций». Запрос примет следующий вид:

«ВЫБРАТЬ

    |       ПеремещениеТоваров.Ссылка КАК Ссылка

    |ИЗ

    |       Документ.ПеремещениеТоваров КАК ПеремещениеТоваров

    |ГДЕ

    |       ПеремещениеТоваров.СкладОтравитель ССЫЛКА Справочник.ПодрадзделенияОрганизаций

    |       И НЕ ПеремещениеТоваров.СкладОтравитель ЕСТЬ NULL

    |       И ПеремещениеТоваров.СкладОтравитель.Ссылка ЕСТЬ NULL».  

2.    Использование объектной модели

Второй способ: определение «битой» ссылки с использованием объектной модели данных 1С.

При данном способе для поиска «битых» ссылок используется метод ПолучитьОбъект() платформы 1С по ссылке на объект информационной базы, который возвращает «Неопределено» в случаях с «битыми» ссылками:

Если ЗначениеЗаполнено(ДокументПеремещения.СкладОтправитель) И (ДокументПеремещения.СкладОтправитель.ПолучитьОбъект() = Неопределено) Тогда

// Здесь выполняется требуемый код обработки найденного объекта с «битой» ссылкой.

КонецЕсли;

Если поле с «битой» ссылкой имеет составной тип, и нам необходимо выявлять только битые ссылки определенного типа, тогда, как и при первом случае, мы соответствующим способом модифицируем условие:

Если (ТипЗнч(Объект.СкладОтравитель) = Тип(«СправочникСсылка.ПодрадзделенияОрганизаций»)) И ЗначениеЗаполнено(ДокументПеремещения.СкладОтправитель) И (ДокументПеремещения.СкладОтправитель.ПолучитьОбъект() = Неопределено) Тогда

        // Здесь выполняется требуемый код обработки найденного объекта с «битой» ссылкой.

    КонецЕсли.  

3.    Поиск подстроки «Объект не найден» в представлении ссылки

Третий способ: поиск подстроки «Объект не найден» в представлении ссылки.

    Если СтрНайти(ДокументПеремещения.СкладОтправитель, «Объект не найден») > 0 Тогда

        // Здесь выполняется требуемый код обработки найденного объекта с «битой» ссылкой.

    КонецЕсли;

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

При это нужно быть аккуратным – используя в коде поиск «битых» ссылок по подстроке «Объект не найден», нужно учитывать, что подстрока «Объект не найден» в представлении «битой» ссылки может изменяться в зависимости от языка, используемого в «региональных установках информационной базы».

Специалист компании «Кодерлайн»

Аскер Жансуев

Иногда в ИБ можно встретить ссылки на объекты <Объект не найден> (75:a353ac9e17b7bc7111e60238e0dc59c6), это ссылки на удаленные объекты. Получаются такие ссылки в ходе сбоев ИБ, РИБ(Распределенных Информационных Баз) или других механизмов создающих ссылки не записанных объектов(разбирал здесь).

Поиск "Объект не найден" в регистре и удаление

В любом случае — это не есть хорошо, будем исправлять! Разберем пример поиска таких ссылок в регистре сведений «Данные для обработки» некой конфигурации, регистр имеет одно измерение «Номенклатура«, тип Справочник.Номенклатура.

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

Поиск ссылок <Объект не найден>

Сама ссылка считается валидной, а вот если обратиться к ее реквизиту в запросе, то получим NULL. Из этого пишем запрос получающий наименование из ссылки в измерении «номенклатура» регистра сведений «Данные для обработки» и отбираем записи у которых значение запрашиваемого реквизита равно NULL. Если измерений по которым необходимо производить поиск больше одного, то объединяем условия через ИЛИ.

А для удаления таких записей просто создадим наборы записей указав отборы и запишем.

&НаСервере
Процедура УдалитьПлохиеЗаписиДанныхДляОбработки()

	// Найдем записи с <Объект не найден>
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ДанныеДляОбработки.Номенклатура КАК Номенклатура
	|ИЗ
	|	РегистрСведений.ДанныеДляОбработки КАК ДанныеДляОбработки
	|ГДЕ
	|	ДанныеДляОбработки.Номенклатура.Наименование ЕСТЬ NULL";
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	// Удаление записей с <Объект не найден>
	Пока Выборка.Следующий() Цикл 
		
		НаборЗаписей = РегистрыСведений.ДанныеДляОбработки.СоздатьНаборЗаписей();
		
		НаборЗаписей.Отбор.Номенклатура.Установить(Выборка.Номенклатура);
		
		НаборЗаписей.Записывать = Истина;
		НаборЗаписей.Записать(Истина);	
				
	КонецЦикла;
	
КонецПроцедуры

После выполнения данного кода из регистра сведений будут удалены все записи со ссылками <Объект не найден>.

1C. Поиск «Объект не найден» в регистре и удаление

Иногда в ИБ можно встретить ссылки на объекты <Объект не найден> (75:a353ac9e17b7bc7111e60238e0dc59c6), это ссылки на удаленные объекты. Получаются такие ссылки в ходе сбоев ИБ, РИБ(Распределенных Информационных Баз) или других механизмов создающих ссылки не записанных объектов(разбирал здесь).

Поиск "Объект не найден" в регистре и удаление

В любом случае — это не есть хорошо, будем исправлять! Разберем пример поиска таких ссылок в регистре сведений «Данные для обработки» некой конфигурации, регистр имеет одно измерение «Номенклатура«, тип Справочник.Номенклатура.

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

Поиск ссылок <Объект не найден>

Сама ссылка считается валидной, а вот если обратиться к ее реквизиту в запросе, то получим NULL. Из этого пишем запрос получающий наименование из ссылки в измерении «номенклатура» регистра сведений «Данные для обработки» и отбираем записи у которых значение запрашиваемого реквизита равно NULL. Если измерений по которым необходимо производить поиск больше одного, то объединяем условия через ИЛИ.

А для удаления таких записей просто создадим наборы записей указав отборы и запишем.

После выполнения данного кода из регистра сведений будут удалены все записи со ссылками <Объект не найден>.

В статье рассмотрим вопрос как исправляются те ситуации в программе, когда можно увидеть ошибку Объект на найден. Рассмотрим на примере конфигурации 1С:Бухгалтерия 3., но материал также будет актуален и для других программных продуктов фирмы 1С. Как показывает практика , ошибка, объект не найден в 1С не редкость и можеи возникать вследствие, к примеру, повреждения информационной базы или удаления объектов информационной базы и пр. Перед выполнением всех действий рекомендуется сделать архивную копию информационной базы.

Для начала приведем пример как может выглядеть данная ошибка в 1С. Как видим вместо номенклатуры в строке табличной части присутствует “объект на найден”.

Как исправить ошибку - объект на найден в 1С

Также ошибку Объект не найден в 1С можно увидеть в каком-либо сформированном отчете, в котором будем выведен список документов-регистраторов. Вместо конкретного документа может строка с “объект не найден”. При этом по данному документу может отображаться сумма в отчете.

Какие возможны пути решения во втором случае с документом. Можно попробовать произвести тестирование и исправление. Для этого открываем информационную базу в режиме конфигуратора и далее раскрываем раздел “Администрирование”. После этого выбираем пункт “Тестирование и исправление”.

Как исправить ошибку - объект на найден в 1С

Далее программа предложит перед выполнением сделать резервную копию. Лучше воспользоваться данной рекомендацией. В окне устанавливаем следующие галочки и нажимаем “Выполнить”.

Как исправить ошибку - объект на найден в 1С

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

В том случае если имело место удаление без пометки на удаление и контроля ссылочной цельности, то восстановить удаленный объект в этой базе уже нельзя. Для решения проблемы, при наличии свежей резервной копии можно восстановить ее и работать в ней.

Если мы знаем какой объект был удален, то можно прибегнуть к помощи обработки “Выгрузка и загрузка данных XML”. Найти ее можно на просторах интернета или скачать с сайта ИТС. Битые ссылки заменятся нужным объектом из развернутой копии. В нашем примере в документа была удалена номенклатура конфеты “Белочка”.

Открываем обработку в архивной копии и нас будет интересовать закладка “Выгрузка”. Далее переходим на закладку “Дополнительные объекты для выгрузки”. Добавляем интересующую нас номенклатуру в табличную часть и ниже указываем путь, куда будет сохранен выгружаемый xml файл. После чего нажимаем “Выгрузить”.

Как исправить ошибку - объект на найден в 1С

Далее открываем данную обработку в той базе, где объект не найден и переходим на закладку “Загрузка”. Выбираем наш сохраненный файл выгрузки и нажимаем “Загрузить данные”.

Как исправить ошибку - объект на найден в 1С

После загрузки проверяем наш документ и видим вместо объект не найдем стоит нужная номенклатура “Белочка”.

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

  • PoiskSsilok.PNG

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

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

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

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

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

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

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

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

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

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

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

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

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

Найти удаленный объект в архивной копии базы можно при помощи этой обработки: //infostart.ru/public/14655/

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

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

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

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

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

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

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

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

Like this post? Please share to your friends:
  • Поиск слова в строке с ошибкой
  • Поиск сервера расчетной палаты microsoft ошибка
  • Поиск с ошибками и шаблоном
  • Поиск с исправлением ошибок битрикс
  • Поиск решения непредвиденная внутренняя ошибка или достигнут предел