|
Как расово верно проверить реквизит ссылочного типа на заполненность? 🠗 (Волшебник 27.06.2017 14:40) | ☑ | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0
1dvd
27.06.17
✎
12:52
|
Вариант 1
Если НЕ пАктСверкиВзаиморасчетов.Ссылка.Пустая() Тогда Вариант 2 Если ЗначениеЗаполнено(пАктСверкиВзаиморасчетов.Ссылка) Тогда |
|||||||||||||||||||
1
Волшебник
модератор
27.06.17
✎
12:53
|
1-й вариант не сработает для реквизитов составного типа
Вариант 2 |
|||||||||||||||||||
2
Волшебник
модератор
27.06.17
✎
12:53
|
Если ЗначениеЗаполнено(пАктСверкиВзаиморасчетов) Тогда
Свой ответ |
|||||||||||||||||||
3
Господин ПЖ
27.06.17
✎
12:54
|
.
КГ/АМ |
|||||||||||||||||||
4
Ц_У
27.06.17
✎
12:54
|
ЗначениеЗаполнено служит для проверки заполнения объектов составного типа, для простых типов быстрее будет сравнить с пустым значением того же типа.
|
|||||||||||||||||||
5
Вафель
27.06.17
✎
12:55
|
(4) насколько быстрее?
|
|||||||||||||||||||
6
Ц_У
27.06.17
✎
12:56
|
(5) не знаю насколько, наверное зависит от железяки пока она все типы перелопатит и сравнит
|
|||||||||||||||||||
7
1dvd
27.06.17
✎
12:58
|
(6) т.е. в некоторых случаях значительно?
|
|||||||||||||||||||
8
Ц_У
27.06.17
✎
12:59
|
(7) думаю это может быть узким местом в производительности
|
|||||||||||||||||||
9
k_aleks80
27.06.17
✎
13:08
|
Пользуйся.
Если обЗначениеНеЗаполнено(пАктСверкиВзаиморасчетов.Ссылка) Тогда Функция обЗначениеНеЗаполнено(Значение) Результат = Ложь; Попытка Результат = Не ЗначениеЗаполнено(Значение) Исключение // Мутабельные типы (Объекты) Результат = Ложь КонецПопытки; Возврат Результат; КонецФункции Свой ответ |
|||||||||||||||||||
10
Мыш
27.06.17
✎
13:17
|
(8) Я проверял. Для несоставных типов ".Пустая()" выполняется на треть дольше, чем "ЗначениеЗаполнено()"
Вариант 2 |
|||||||||||||||||||
11
Buster007
27.06.17
✎
13:19
|
неужели в алгоритме узкое место - это проверка на заполненность?
|
|||||||||||||||||||
12
Мыш
27.06.17
✎
13:21
|
(11) Красивый бантик сверху. Ну а что внутри - оставим археологам )
|
|||||||||||||||||||
13
Ц_У
27.06.17
✎
13:23
|
(10) приду проверю
|
|||||||||||||||||||
14
Мыш
27.06.17
✎
13:33
|
(13) На слово тут не верят ) На производительность не повлияет ни тот ни другой вариант, кстати. По времени выполнения оба варианта сравнимы с каким-нибудь "КонецЕсли"
|
|||||||||||||||||||
15
Ц_У
27.06.17
✎
14:05
|
(14) уболтал, чертяка языкатый, не буду проверять :)
|
|||||||||||||||||||
16
Мыш
27.06.17
✎
14:10
|
(15) Ща мне карта попрёт! )
|
|||||||||||||||||||
17
arsik
гуру
27.06.17
✎
14:17
|
(10) А вот так?
МояПустаяССылка = Документы.АктыВзаимозачетов.ПустаяСсылка();
|
|||||||||||||||||||
18
Мыш
27.06.17
✎
14:23
|
(17) А ты хитрый!
Быстрее, ага. На ту же треть ) |
|||||||||||||||||||
19
Ц_У
27.06.17
✎
14:26
|
(18) надо было проверить, да?
|
|||||||||||||||||||
20
Ц_У
27.06.17
✎
14:27
|
(18) из (4) "быстрее будет сравнить с пустым значением того же типа"
надо проверять как в (17) а не просто Пустая() = Истина |
|||||||||||||||||||
21
Мыш
27.06.17
✎
14:39
|
(20) ".Пустая() = Истина" дольше чем ".Пустая()"
Но это пустые споры. На производительность влияние пренебрежительно мало. Говорю же, обычные операторы выполняются со сравнимой скоростью. |
|||||||||||||||||||
22
vde69
модератор
27.06.17
✎
14:42
|
(17) а если тип составной и в пАктСверкиВзаиморасчетов лежит значение "Неопределено" ?
|
|||||||||||||||||||
23
arsik
гуру
27.06.17
✎
14:54
|
(22) Конечно работать не будет, но в теме это не раскрывается. Я лишь предлагаю варианты.
|
|||||||||||||||||||
24
1dvd
28.06.17
✎
09:50
|
написано же "Реквизит ссылочного типа", не может быть там неопределено
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |