Как использовать ЗначениеЗаполнено для <объект не найден>? #704537


#0 by ИС-2
Загрузка данных от поставщика. Какой код Справочники.Контрагенты.ПолучитьСсылку(Новый УникальныйИдентификатор(ГУИДКонтрагента)); функция ЗначениеЗаполнено для <оюъект не найден> возвращает истину. Какие есть нормальные способы, чтобы обрабатывались, только действительно заполненные контрагенты? Как определить, что существует ссылка с этим ГУИДом или нет? Проверять по заполнению кода/наименования не хочу, по наличию текста <объект не найден> тоже
#1 by Heckfy
ПустаяСсылка ??
#2 by Heckfy
ЕСТЬ NULL ??
#3 by Зойч
в типовых на бсп есть функция ОбъектСуществует
#4 by Fram
ПолучитьОбъект = Неопределено
#5 by ИС-2
<объект не найден> = .пустаяссылка и ВасяПукин = .пустаяссылка вернет одно и тоже значение речь по код, а не запрос скиньте, пжс, код доооолго будет работать
#6 by Maxus43
запрос, не изобретай велосипед. Такой запрос быстро отработает
#7 by х86
У ссылки смотри пометку удаления
#8 by Maxus43
всмысле "Выбрать Ссылка Из Справочник.Контрагенты Где Ссылка = &ТвойОбъектНеНайден"
#9 by Зойч
КонецФункции
#10 by Зойч
#11 by ИС-2
и какое преимущество у запроса перед ЗначениеЗаполнено(Контр.Код) она всегда будет равна ложь
#12 by ИС-2
спасибо. Только это что из пушки по мухам бить или как там...
#13 by х86
п2. уверен?
#14 by Vladuha
еще не было?
#15 by banco
Контр.Код = пусто еще не означает что объект не существует. нормальный вариант в
#16 by Kyon8
Контр.Код подтянет и закеширует все реквизиты объекта, так что в БСП всё правильно. Плюс контрагент может быть без кода (через обмен данными криво загрузился, например).
#17 by Torquader
Нет, а что такого страшного в битых ссылках ? Просто в одной таблице есть запись, которой нет в другой таблице - для самой базы данных это не критично. И проверить ссылку на небитость можно только обращением в основную таблицу объекта - нужно, всего лишь, узнать - есть ли там запись с таким UID или нет. Так что в всё просто и понятно написано - можно, конечно, выбирать не ссылку, а количество записей, чтобы не было никаких потугов с загрузкой представления для ссылки (но оно-то всё равно будет загружено ещё до начала исполнения запроса, так как ссылка у нас).
#18 by Юрий Юрьевич
Найти(Строка(ЗначениеДляКоторогоОбъектНеНайден),"Объект не найден")<>0
#19 by Юрий Юрьевич
Даже если не хочется, придется себя заставить
#20 by Maxus43
за такое сама фирма 1с при аудите кода бъёт по филейной части авторов
#21 by oleg_km
А что, сама 1С предусмотрела однозначный механизм выявления таких ссылок? Т.е. есть константа, функция или метод, с помощью который документированным способом определить, что это ссылка на объект, который отсутствует в базе? Так 1С сама хороша в таком случае. Я бы ее тоже бы приложил за такое.
#22 by H A D G E H O G s
Как бы сделал ты?
#23 by oleg_km
На месте 1С? Я же написал: сделал бы или литерал или функцию глобального контекста, либо метод ссылки или менеджера. А как сделала 1С? Может мне прост неведомо сакральное знание и где-то в методичках есть рекомендованный 1С способ?
#24 by Леша1с
У 1С не существует такого объекта "объект не найден". Поэтому она его и не обрабатывает никак. Нет сущности - нет проблемы.
#25 by Адинэснег
зачем искать оптимальные способы поиска битых ссылок? Они неслучайно там появились, лучше уделите время выяснения причины, каким образом в вашей системе нарушается ссылочная целостность
#26 by H A D G E H O G s
Зачем? Есть же запрос.
#27 by Адинэснег
соедини с таблицей, в которой ищешь битые ссылки и будет один запрос.
#28 by Адинэснег
типа     РеализацияТоваровУслуг.ДоговорКонтрагента ИЗ ГДЕ     ДоговорыКонтрагентов.Ссылка ЕСТЬ NULL
#29 by Torquader
Вопрос в том, что битая ссылка определяется только в момент, когда её читаем, так как ни 1С ни SQL вообще не знает о том, что там с объектом в его основной таблицы.
#30 by H A D G E H O G s
В SQL есть foreign key для контроля этого дела, другой вопрос в том, что 1С это не использует, ибо, например, при загрузке из XML все встанет раком.
#31 by Torquader
Ну, foreign key просто ставится в ноль, если удаляется основная запись. Раком, конечно, не встанет, но всю загрузку нужно будет делать в одной транзакции. И, очень печальный случай - загрузка двух объектов, ссылающихся друг на друга - если делать честно, то сначала грузим объекты с пустыми ссылками, а потом добавляем к ним ссылки.
#32 by H A D G E H O G s
Насколько я помню, sql генерирует исключение при попытке удаления основной записи
#33 by Torquader
Это как настроишь - можно и CASCADE (то есть удалить и дочерние автоматом), а можно их просто в Null сбросить.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С