|   |   | 
| 
 | Справочники.Номенклатура.ПолучитьСсылку - как понять что не пусто? | ☑ | ||
|---|---|---|---|---|
| 0
    
        Double_Medved 29.11.21✎ 11:59 | 
        Добрый день.
 Заполняю список номенклатуры, по уидам. Как правильно обработать ошибку, если по иуду ничего нет, не тратя время на получение обьекта? Номен=Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СтруктураАтрибутов.ref)); Спр=Номен.ПолучитьОбъект(); Если Спр НЕ=Неопределено Тогда Список.Добавить(Спр); КонецЕсли; Ну то есть что выдаст Номен=Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СтруктураАтрибутов.ref) если нет ничего там? Неопределено, пустую ссылку? Как это корректно обработать? | |||
| 1
    
        ДенисЧ 29.11.21✎ 12:02 | 
        Номен.Пустая() пробовал?     | |||
| 2
    
        Ёпрст гуру 29.11.21✎ 12:03 | 
        = Справочники.Номенклатура.ПустаяССылка()     | |||
| 3
    
        youalex 29.11.21✎ 12:04 | 
        ОбщегоНазначения.СсылкаСуществует()     | |||
| 4
    
        ДедМорроз 29.11.21✎ 12:04 | 
        Там не пустая ссылка а битая - запросить из базы ссылку при условии ссылки самый простой вариант.     | |||
| 5
    
        VitaliyTokarev 29.11.21✎ 12:09 | 
        (3) Может проще получить объект и проверить на неопределено?
 Функция СсылкаСуществует(ПроверяемаяСсылка) Экспорт ТекстЗапроса = " |ВЫБРАТЬ ПЕРВЫЕ 1 | 1 |ИЗ | [ИмяТаблицы] |ГДЕ | Ссылка = &Ссылка |"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяТаблицы]", ИмяТаблицыПоСсылке(ПроверяемаяСсылка)); Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("Ссылка", ПроверяемаяСсылка); УстановитьПривилегированныйРежим(Истина); Возврат НЕ Запрос.Выполнить().Пустой(); КонецФункции | |||
| 6
    
        Double_Medved 29.11.21✎ 12:11 | 
        (1)(2) И так и так вроде срабатывает, спасибо     | |||
| 7
    
        Галахад гуру 29.11.21✎ 12:12 | 
        (6) Не должно же.     | |||
| 8
    
        Kassern 29.11.21✎ 12:13 | 
        (5) и при этом вы скинули внутрянку функции СсылкаСуществует))     | |||
| 9
    
        youalex 29.11.21✎ 12:32 | 
        (5) "получить объект" потащит из БД все данные объекта,включая ТЧ,  это избыточно в данном случае.     | |||
| 10
    
        VladZ 29.11.21✎ 12:34 | 
        (0) ЗначениеЗаполнено()     | |||
| 11
    
        Галахад гуру 29.11.21✎ 12:36 | 
        (10) Не сработает.     | |||
| 12
    
        Ёпрст гуру 29.11.21✎ 12:38 | 
        (4) Да, тип того надо
 
 | |||
| 13
    
        mistеr 29.11.21✎ 13:47 | 
        (0) Понять, есть объект в базе или нет, можно только поискав его в базе. :) От этого никуда не деться.
 Ускорить это можно только сделав один запрос для списка ссылок. | |||
| 14
    
        VladZ 29.11.21✎ 14:54 | 
        (11) Номен=Справочники.Номенклатура.ПолучитьСсылку(Новый УникальныйИдентификатор(СтруктураАтрибутов.ref));
 Если Не ЗначениеЗаполнено(Номен) Тогда // нет такой КонецЕсли; Почему не сработает? | |||
| 15
    
        pechkin 29.11.21✎ 14:55 | 
        (14) битая ссылка она заполнена     | |||
| 16
    
        lodger 29.11.21✎ 15:45 | 
        (5) нет, не проще. эти МНОГАСТРОКОДА отработают в сотни раз быстрее, чем получить объект = неопределено.
 а если завернуть это в один большой запрос (когда много ссылок надо проверить), тогда разница производительности достигнет тысяч раз. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |