|
Справочники.Номенклатура.ПолучитьСсылку - как понять что не пусто? | ☑ | ||
---|---|---|---|---|
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) нет, не проще. эти МНОГАСТРОКОДА отработают в сотни раз быстрее, чем получить объект = неопределено.
а если завернуть это в один большой запрос (когда много ссылок надо проверить), тогда разница производительности достигнет тысяч раз. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |