1с как определить битую ссылку
Перейти к содержимому

1с как определить битую ссылку

  • автор:

Как определить программно ссылка битая или нет ?

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

По теме из базы знаний

  • Программные перечисления, ч.2: приемы кэширования при разработке
  • Как формируется GUID?
  • Как стать матерым штурмовиком, или истории из жизни
  • WEB-интерфейсы как механизм сбора и контроля данных в розничной сети. Инструменты и наработки
  • Мастер-класс SonarQube. В омут с головой
  • Дата
  • Дата
  • Рейтинг всех уровней
  • Рейтинг 1-го уровня
  • Древо развёрнутое
  • Древо свернутое

Свернуть все
9. Поручик 4661 29.08.12 11:01 Сейчас в теме

(1) В БСП есть функция

// Проверяет физическое наличие записи в информационной базе данных о переданном значении ссылки // // Параметры: // ЛюбаяСсылка - значение любой ссылки информационной базы данных // // Возвращаемое значение: // Истина - ссылка физически существует; // Ложь - ссылка физически не существует // Функция СсылкаСуществует(ЛюбаяСсылка) Экспорт ТекстЗапроса = " |ВЫБРАТЬ | Ссылка |ИЗ | [ИмяТаблицы] |ГДЕ | Ссылка = &Ссылка |"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяТаблицы]", ИмяТаблицыПоСсылке(ЛюбаяСсылка)); Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("Ссылка", ЛюбаяСсылка); УстановитьПривилегированныйРежим(Истина); Возврат НЕ Запрос.Выполнить().Пустой(); КонецФункции

Рамзес; hityay; FilatovRA; exclusive; syurev; user1716460; ghostaz; sumpavig; Andy_NTG; akocur; alsegor; pioneeer; jobkostya1c_ERP; simuljakr; Student1C; Gendelf; Merkalov; vv2; LordKim; Lacoste4life; RomanKod; Sarkikker; Andrei_Ivanov; houpl; user1232941; Fales; v3n7; unknown181538; GonziK_KIV; malikov_pro; Jivchic; ram3; TeMochkiN; maxunov95; improg; kimskiysanya; mickey.1cx; Batman; zfr475; user659168_xec8787; anchovy; 7OH; treedo; McLer; Alien_job; 1v7; rusmil; adhocprog; serezhenko; Gladkov_Anton; azazana; gaspard; alex-l19041; Патриот; Kesak; HEKPOH; Dr.ZIG; keypax; + 58 – Ответить

10. nodalt 9 29.08.12 11:13 Сейчас в теме

(9) Вопрос . ИмяТаблицыПоСсылке(ЛюбаяСсылка) — это что за функция? Каким образом она возвращает имя таблицы? Это же не встроенная процедура или функция.

11. ksb 29.08.12 11:15 Сейчас в теме

// Возвращает полное имя объекта метаданных по переданному значению ссылки // Например, // "Справочник.Номенклатура"; // "Документ.ПриходнаяНакладная" // // Параметры: // Ссылка - ЛюбаяСсылка - значение ссылки, для которого необходимо получить имя таблицы ИБ // // Возвращаемое значение: // Строка - полное имя объекта метаданных для указанного значения ссылки // Функция ИмяТаблицыПоСсылке(Ссылка) Экспорт Возврат Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).ПолноеИмя(); КонецФункции

user1716460; sumpavig; jobkostya1c_ERP; RomanKod; maxunov95; zfr475; drygina; McLer; 1v7; adhocprog; rayastar; Патриот; nodalt; + 13 – Ответить

29. improg 539 31.08.19 12:20 Сейчас в теме
(9) Да быстрее чем получитьОбъект().
2. Ntari 29.08.12 07:34 Сейчас в теме
если ссылка.ПолучитьОбъект()=неопределено тогда
simuljakr; RomanKod; Meson; vlm88; olololeg; Rustavelli; Hamsik; Восьмой; adhocprog; + 9 – Ответить
3. Rudakov_D 222 29.08.12 07:34 Сейчас в теме

Похоже ничего лучше чем

Если БИТАЯССЫЛКА.ПолучитьОбъект() = Неопределено тогда

chemezov; RomanKod; + 2 – Ответить
5. Ntari 29.08.12 07:51 Сейчас в теме

(3) Arch_1,

Похоже ничего лучше чем

Если БИТАЯССЫЛКА.ПолучитьОбъект() = Неопределено тогда

уже не найти.

в любом случае, чтобы определить битая ссылка или нет необходимо попытаться «пройти» по этой ссылке

4. ksb 29.08.12 07:35 Сейчас в теме

Думаю как вариант банально анализировать представление формируемое платформой 1С

Ссылка = Реквизит1.Родитель; Если Найти(Строка(Ссылка), " (" ) <> 0 тогда Сообщить("Ссылка битая"); Иначе Сообщить("Ссылка НЕ битая"); КонецЕсли;

simuljakr; DoctorRoot; magiceagle; user1502168; adhocprog; _OVEN_; pbahushevich; + 7 – 1 Ответить
13. for_sale 956 14.10.16 20:43 Сейчас в теме

(4) ksb, just for lulz:

НовЭл = Справочники.Справочник.СоздатьЭлемент(); НовЭл.Наименование = "Сейчас мы ( поломаем систему"; НовЭл.Записать(); Ссылка = НовЭл.Ссылка; Если Найти(Строка(Ссылка), " (" ) <> 0 тогда Сообщить("Ссылка битая"); Иначе Сообщить("Эта ветка нам не понадобится, можно её удалить"); КонецЕсли;

Lacoste4life; TreeDogNight; Brawler; leaguener; CnupT; fst; CyberCerber; 7OH; adhocprog; temdj; + 10 – 2 Ответить

15. &rew 49 05.11.16 21:11 Сейчас в теме

(13) Блин, хоть ветка старая, но. Чуваки и чувихи, которые ищут объекты не найденные скорее всего это делают относительно не часто, и вряд ли им попадется маньяк, который так будет делать. Понимаю что учитывать надо, но ровно с той же вероятностью, даже кстати меньшей, чем то что конфа будет в режиме совместимости с 8.3.5 и ниже. «Найти» там, вся фигня.

sinichenko_alex; insurgut; + 2 – Ответить
42. MegasXXX 2 02.11.22 18:47 Сейчас в теме
(4)
Найти дольше чем простейшее, для документов:

Лев(Ссылка, 1) = "

Для справочников лучше брать больше 1 символа, вдруг кто наименование напишет "" 43. user1863362 02.11.22 20:35 Сейчас в теме

(42) Открой уже для себя существование ОбработкаПолученияПредставления для того же документа. После открытия подумай еще раз над своим предложением.

6. Rudakov_D 222 29.08.12 08:22 Сейчас в теме Еще есть вариант запроса, и он будет вероятно быстрее работать. 7. Ntari 29.08.12 09:03 Сейчас в теме

(6) Arch_1,

Еще есть вариант запроса, и он будет вероятно быстрее работать.

наврядли..одинаково отработают. но запрос или ПолучитьОБъект() это уже на выбор автора))

8. andrewks 1365 29.08.12 10:54 Сейчас в теме (7) AntonBaikal,
наврядли..одинаково отработают

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

12. Ntari 29.08.12 11:28 Сейчас в теме (8) andrewks, про документы как то не подумал) 22. Hobbit_Jedi 13.11.17 16:56 Сейчас в теме

(12) Простите, что "оживляю" мертвую ветку.
Только что наступил на еще одну граблю в пользу запроса (из функции СсылкаСуществует) против Ссылка.ПолучитьОбъект() = Неопределено.
Получение объекта, кроме зачитывания из БД кучи табличных частей и движений документа, еще и выполняет код инициализации модуля объекта. А некоторые доброжелатели (из разработчиков типовых конфигураций) там ТАКИХ сюрпризов наоставлять могут, что вся производительность в ноль уйдет.

Windsor77; TreeDogNight; hawkmax; jobkostya1c_ERP; + 4 – 1 Ответить 14. maks_20 163 21.10.16 19:57 Сейчас в теме В запросе условием что-то типа такого: Где Номенклатура.Ссылка ЕСТЬ NULL 16. EMelihoff 07.11.16 12:40 Сейчас в теме Я ищу запросом:
Ссылка.Код IS NULL

rad1st; kivals; kokstik; + 3 – Ответить
17. PlatonStepan 38 09.11.16 18:59 Сейчас в теме

Извиняюсь за некропост, но с некоторой версии платформы появился встроенный реквизит ссылочного объекта "ВерсияДанных", который заполняется системой в момент записи объекта. Значит если объекта нет, то это значение будет не заполнено.

ЭтоБитаяСсылка = ПустаяСтрока(Ссылка.ВерсияДанных);

Igor_Ryaboff; kladovoy; user892471; kabantus; marku; pvlunegov; TreeDogNight; zhuntovda; Jivchic; anchovy; Enya_06; falsepilot; + 12 – Ответить

18. корум 287 10.11.16 10:12 Сейчас в теме
(17) некро это полгода, год, три. 🙂
19. for_sale 956 05.12.16 14:51 Сейчас в теме

(17), с тем же успехом можно проверить любой другой реквизит Ссылки.

И ПустаяСтрока - это не комильфо, НЕ ЗначениеЗаполнено работает быстрее.

20. fromtomike 49 05.12.16 15:27 Сейчас в теме

А почему не так ?

Для документа: Если СокрЛП(Ссылка.Номер) = "" Тогда . КонецЕсли; Для справочника (если длина кода в конфигураторе <> 0): Если СокрЛП(Ссылка.Номер) = "" Тогда . КонецЕсли;

23. Hobbit_Jedi 13.11.17 22:21 Сейчас в теме

(20) Замеры показывают, что Ссылка.ВерсияДанных, Ссылка.Номер, Ссылка.ЛюбойРеквизит - выполняются по времени соизмеримо с Ссылка.ПолучитьОбъект().
И это правильно, т.к. если вспоминать мат. часть, то выяснится, что для получения реквизита через точку, платформа зачитывает в память весь объект, со всеми табличными частями и движениями (если это документ), и получает от него реквизит. И кстати, сам объект какое-то время висит в кэш-памяти - на случай, если надо будет от него через точку еще какие-нибудь реквизиты получать.
Посему вывод: функция СсылкаСуществует - самый быстрый способ проверки (особенно если еще и саму функцию в кэшируемый модуль поместить).

kirinalex; PlatonStepan; + 2 – 1 Ответить
21. aap290680 05.12.16 15:45 Сейчас в теме

в запросе однозначно лучше всего и проверено, например проверить документы с битой ссылкой на контрагент: Документ.Контрагент.Ссылка ЕСТЬ NULL обязательно надо добавлять .Ссылка чтобы там NULL получился у битой ссылке.

24. jobkostya1c_ERP 100 09.01.18 09:56 Сейчас в теме

А не подскажете как проверить что по COM-соединению битая ссылка? Чтоб оптимально было. Столкнулся например что группа справочника в базе-источнике это битая ссылка

25. Xershi 1442 09.01.18 10:13 Сейчас в теме
(24) запросом в стиле ком.
jobkostya1c_ERP; + 1 – Ответить
26. jobkostya1c_ERP 100 09.01.18 10:22 Сейчас в теме
(25)Спасибо, туплю в первый день. Там же и проверять по КОМ.
27. Омский Домовой 408 25.08.19 22:03 Сейчас в теме

Как выяснилось эксперементальным путем для проверки на "Объект не найден" быстрее работает конструкция

Отказ = СтрНайти(Строка(БитаяСсылка),"") > 0;
Отказ = БитаяСсылка.ПолучитьОбъект() = Неопределено;

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

Через COM такой подход тоже будет работать только типа

СтрНайти(Соединение.Строка(БитаяСсылка),"")

ANF-BR; user686589_sev_s; + 2 – Ответить
28. Xershi 1442 25.08.19 22:16 Сейчас в теме

(27) конечно быстрее. Получить объект это тяжелая операция, а сравнение строки легкая. Но тяжелая операция гарантированный результат. А поиск по строке с вероятностью не даст результат. Как поломать этот алгоритм уже писали.

37. ANF-BR 05.09.22 06:50 Сейчас в теме
Отказ = СтрНайти(Строка(БитаяСсылка),"<Объект не найден>") > 0;
38. SlavaKron 05.09.22 10:47 Сейчас в теме

(37) Это не самое оптимальное решение.
Очевидно же, что единственный нативный способ проверить существование объекта – это запрос:

Запрос = Новый Запрос("ВЫБРАТЬ NULL ИЗ Справочник.МойСправочник ГДЕ Ссылка = &Ссылка"); Запрос.УстановитьПараметр("Ссылка", БитаяСсылка); СсылкаБитая = Запрос.Выполнить().Пустой();

Ничего быстрее вы не придумаете.
40. ANF-BR 05.09.22 13:21 Сейчас в теме

(39)
(38)
Мне кажется простое сравнение строки гораздо быстрее любой выборки, ну ладно, попробую ради эксперимента

41. Fox-trot 153 05.09.22 14:52 Сейчас в теме
(40) таки да, но ведь в нашем случае сравнение не "простое"
39. Fox-trot 153 05.09.22 12:31 Сейчас в теме

(37) для продвинутых

30. mialord 18.03.20 18:50 Сейчас в теме

Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Документ, "Ссылка") = Неопределено Тогда // сгенерирована ссылка без описания объекта ТекстСообщения = СтрШаблон(НСтр("ru = 'Не обработана строка фабрики XDTO ReturnFlow: |Не обнаружена заявка на закупку с идентификатором %1'"), UUID); ВызватьИсключение ТекстСообщения; КонецЕсли;

31. user645820_victor80vh 05.06.20 00:41 Сейчас в теме

// Проверка существует ли объект по ссылке Функция СсылкаСуществует(СсылкаНаОбъект) Запрос = Новый Запрос("Выбрать Таб.Ссылка ИЗ "+СтрЗаменить(СериализаторXDTO.XMLТипЗнч(СсылкаНаОбъект).ИмяТипа,"Ref.",".") +" КАК Таб ГДЕ Таб.Ссылка = &СсылкаНаОбъект"); Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект); Результат = Запрос.Выполнить(); Возврат НЕ Результат.Пустой(); КонецФункции

vv2; japopov; akkorn; + 3 – Ответить
33. akkorn 23.07.21 09:37 Сейчас в теме

Запрос = Новый Запрос("Выбрать Таб.Ссылка ИЗ "+СтрЗаменить(СериализаторXDTO.XMLТипЗнч(СсылкаНаОбъект).ИмяТипа,"Ref.",".") +" КАК Таб ГДЕ Таб.Ссылка = &СсылкаНаОбъект");

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

Замерил, - это примерно 10 раз медленнее чем XMLТипЗнч() (на цикле в 10000).
Проверить может каждый. Замер времени делал просто - обернул код вызова ТекущаяУниверсальнаяДатаВМиллисекундах() и узнал разницу.

Да, XMLТипЗнч() изменяет описание объекта. Вместо "Справочник.Номенклатура" она возвращает "CatalogRef.Номенклатура", поэтому приходится использовать дополнительно СтрЗаменить(). Для запроса не играет роли как мы обзываем тип объекта, - "Catalog." или "Справочник.".

Поэтому переписал функцию. Мне же потом и пригодится. Помещу здесь новый вариант:

&НаСервере Функция СсылкаСуществует(ЛюбаяСсылка) Экспорт //ИмяТаблицы = Метаданные.НайтиПоТипу(ТипЗнч(ЛюбаяСсылка)).ПолноеИмя(); // взять Метаданные() в 10 раз медленнее чем XMLТипЗнч(..) ИмяТаблицы = СтрЗаменить(СериализаторXDTO.XMLТипЗнч(ЛюбаяСсылка).ИмяТипа, "Ref.", "."); ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ Ссылка ИЗ [ИмяТаблицы] ГДЕ Ссылка = &Ссылка"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяТаблицы]", ИмяТаблицы); Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("Ссылка", ЛюбаяСсылка); УстановитьПривилегированныйРежим(Истина); Результ = НЕ Запрос.Выполнить().Пустой(); УстановитьПривилегированныйРежим(Ложь); Возврат Результ; КонецФункции

zlexuzz; evgaid; vv2; AndrewKop; mc1c; salbey; user1233797; eufes; EvgeTrofi; japopov; + 10 – Ответить

1с как определить битую ссылку

Хотел бы к статье из книги знаний Книга знаний: v8: Пустые ссылки добавить свою функцию определения битой ссылки http://infostart.ru/blogs/1241/

способ определения битой ссылки через Ссылка.ПолучитьОбъект() очень медленный;

через Найти(Строка(Ссылка),"") <> 0 - некорректный (на мой взгляд),

поэтому представляю на Ваш суд функцию, позволяющую быстро определить битая ссылка или нет.

Функция ОбъектБДСуществует(ТестоваяСсылка) Экспорт

МД = Метаданные.НайтиПоТипу(ТипЗнч(ТестоваяСсылка));
ИмяОбъекта = МД.Имя;
ПолноеИмяОбъекта = МД.ПолноеИмя();

Запрос = новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| " + ИмяОбъекта + ".Ссылка КАК СсылкаБД
|ИЗ
| " + ПолноеИмяОбъекта + " КАК " + ИмяОбъекта + "
|ГДЕ
| " + ИмяОбъекта + ".Ссылка = &Cсылка";
Запрос.УстановитьПараметр("Cсылка", ТестоваяСсылка);
РезультатЗапроса = Запрос.Выполнить();

Возврат Не РезультатЗапроса.Пустой();

При желании можно добавить какой-нибудь кеш для текстов запросов по полному имени объекта, но не думаю,

что это сильно ускорит работу данной функции, она и без того быстро отрабатывает.

Как в запросе отобрать битые ссылки, поиск Битых Ссылок

Когда объект был удален непосредственно, то все ссылки на него в справочниках, в документах, в регистрах стали битыми и отображаются следующим образом: (16:bca8000c6efdd52111d8eaba7c9706eb)
Битая ссылка не является пустой. Т.е. метод Пустая() возвращает Ложь. Определить, что ссылка битая можно так:
Код 1C v 8.х

 Если Ссылка.ПолучитьОбъект() = Неопределено Тогда 
//битая ссылка
КонецЕсли;
// или так (НО ненадежно):
Если Лев(СокрЛП(Ссылка),18) = "" Тогда

Код 1C v 8.х

 // Еще вариант (действует для обьектов, которые имеют ссылку) 
Попытка
обьект=Ссылка.Ссылка;
Исключение
сообщить("битая");
КонецПопытки;

И последний вариант для проверки в запросах:
ГДЕ Объект.РеквизитОбъекта ЕСТЬ NULL И Не Объект=&ПустаяСсылкаОбъекта

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

 Процедура УдалениеБитыхСсылок(ИмяРегистра,ТипРегистра,ТипРегистраЗ) 
МенеджерРегистра = ТипРегистра[ИмяРегистра];

Запрос = Новый Запрос("
|ВЫБРАТЬ Регистратор
|ИЗ "+ТипРегистраЗ+"."+ИмяРегистра+"
|ГДЕ Регистратор.Ссылка ЕСТЬ NULL И НЕ Регистратор = &ПустаяСсылкаДокумента");
Запрос.УстановитьПараметр("ПустаяСсылкаДокумента",Неопределено);

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Набор = ТипРегистра[ИмяРегистра].СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
Набор.Записать();
ОбработкаПрерыванияПользователя();
Состояние(""+ТипРегистра+" "+ИмяРегистра);
КонецЦикла;
КонецПроцедуры


Процедура КнопкаВыполнитьНажатие(Кнопка)

Для Каждого пРегистр из Метаданные.РегистрыСведений Цикл
Подчинен = (пРегистр.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору);
Если Подчинен Тогда
УдалениеБитыхСсылок(пРегистр.Имя,РегистрыСведений,"РегистрСведений")
КонецЕсли;
КонецЦикла;

Для Каждого пРегистр из Метаданные.РегистрыБухгалтерии Цикл
УдалениеБитыхСсылок(пРегистр.Имя,РегистрыБухгалтерии,"РегистрБухгалтерии")
КонецЦикла;

Для Каждого пРегистр из Метаданные.РегистрыРасчета Цикл
УдалениеБитыхСсылок(пРегистр.Имя,РегистрыРасчета,"РегистрРасчета")
КонецЦикла;

Для Каждого пРегистр из Метаданные.РегистрыНакопления Цикл
УдалениеБитыхСсылок(пРегистр.Имя,РегистрыНакопления,"РегистрНакопления")
КонецЦикла;

КонецПроцедуры

Поиск битых ссылок

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

Битые ссылки глазами пользователя

В режиме предприятия битые ссылки выглядят так:

Пример битой ссылки 1С

Внимание!

Следует учесть, что такую же «картинку» пользователь может увидеть и в случае некорректно настроенных ролей.

Ниже описано несколько способов поиска некорректных ссылок на объекты.

Сервис «Тестирование и исправление информационной базы»

Для открытия окна настройки проверки необходимо в конфигураторе выбрать пункт меню Администрирование > Тестирование и исправление.

Запуск проверки ссылочной целостности 1С

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

Далее выбираем что необходимо сделать при обнаружении битых ссылок:

  • Только тестирование — после анализа будет отображен перечень некорректных ссылок;
  • Тестирование и исправление — можно не только получить перечень некорректных ссылок, но и исправить их: очистить некорректную ссылку или создать объект, соответствующий некорректной ссылке.

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

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

Программный поиск битых ссылок

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

Фирма 1С не предоставляет какой-то универсальной обработки для поиска битых ссылок в пользовательском режиме, поэтому придется «творить» самому. Вот несколько подходов, которые можно использовать:

  • Получение в запросе подчиненного реквизита и сравнение его с NULL . В качестве подчиненного реквизита наиболее рационально использовать ссылку — она есть у всех объектов. В запросе также необходимо учесть, что подчиненный реквизит от пустой ссылки также возвращает NULL .
  • Получение объекта от ссылки при помощи метода ПолучитьОбъект () . Если ссылка битая, то будет возвращено значение Неопределено .
  • Получение представления ссылочного типа и сравнение его со строкой «» .

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

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

// ***** Определение корректности ссылки путем анализа представления *****
Если Найти ( Строка ( Док . Контрагент ), "" ) > 0 Тогда
// Значение реквизита Контрагент - битая ссылка
КонецЕсли;

Добавить комментарий

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