Имя: Пароль:
1C
 
V7 выбран() или пустоеЗначение()
0 OnCheck
 
27.12.06
08:53
V7 выбран() или пустоеЗначение(), что быстрее?
1 Фокусник
 
27.12.06
08:54
(0) а в цикл загнать и проверить? (:
2 OnCheck
 
27.12.06
08:58
(1) писать надо.... а мне много еще писать. Хочу решить, что правильнее будет ставить в модуле проведения

Если ПустоеЗначение(Объект)=0 тогда

или

Если Объект.Выбран()=0 тогда
3 orefkov
 
27.12.06
08:59
ПустоеЗначение быстрее гораздо.
4 Guk
 
27.12.06
08:59
(2) ПустоеЗначение. имхо...
5 OnCheck
 
27.12.06
09:00
(4) Ок, спасибо.
6 mikecool
 
27.12.06
09:01
(3,4) на чем основываетесь?
или выбран() делает запрос а пустоезначение проверяет только ссылку?
7 orefkov
 
27.12.06
09:10
(6)
Ну, как бы тебе объяснить...
Основываюсь во-первых на практике, во-вторых, на следующем:
Для работы метода ПустоеЗначение достаточно у CValue проверить type, и если он не 0, а допустим 12 (справочник), проверить еще ObjID, что он нулевой.
А для работы метода "Выбран" сначала необходимо из CValue получить CBLContext (тк вызов методов возможен только для них). Для этого к ссылке на справочник применятся LinkContext, в котором, если контекст не закэширован, произойдет обращение к базе, чтобы подчитать атрибуты. Затем в этом CBLContext'е надо найти метод "Выбран", проверить его количество параметров, убедится, что это функция, а не процедура, и вызвать его. А уж он в-свою очередь проверит ObjID на ненулевое значение.
Вот примерно как-то так.
8 mikecool
 
27.12.06
09:12
(7) спасибо, объяснил - так объяснил
9 Guk
 
27.12.06
09:14
(8) Я красивых слов как в (7) говорить не умею, скажу проще. Хотя бы для того, чтобы исключить ситуацию, при которой метод Выбран у Объекта отсутствует...
10 smaharbA
 
27.12.06
09:23
Наколешься на пустоезначение
11 Deon
 
27.12.06
09:29
(10) как?
12 OnCheck
 
27.12.06
09:30
(10) Поподробнее
13 orefkov
 
27.12.06
09:30
(9)
+1
Когда-то давно по этой причине я и стал юзать ПустоеЗначение
14 Chieftain
 
27.12.06
09:31
Бывает гадость с битыми ссылками - ПустоеЗначение()<>0,Выбран()=0
15 Chieftain
 
27.12.06
09:31
(14) Особенно на чужих базах
16 GrayT
 
27.12.06
09:32
(7)Блеск :) День прожит не зря
17 orefkov
 
27.12.06
09:39
В базе с битыми ссылками можно еще и не так наколоться...
18 smaharbA
 
27.12.06
09:48
(11)

Спр=СоздатьОбъект("Справочник");
Спр.Вид("Номенклатура");
Спр.НайтиПоНаименованию("СП-120",0,0);
Сообщить(ПустоеЗначение(Спр));//Дурь конечно, но вот тут и наколется
Сообщить(Спр.Выбран());
Сообщить(Спр.ТекущийЭлемент());
19 mishaPH
 
27.12.06
09:53
Проводил опыты с данными методами. ПустоеЗначение в 15 раз оказалось быстрее в моем случае. После Выбран() использую редко крайне и то только для одиночных реквизитов.
20 Лефмихалыч
 
27.12.06
09:54
(18) это нормально, просто ПустоеЗначение нужно применять к ТекущийЭлемент(), а не к чему попало
21 mishaPH
 
27.12.06
09:55
+19 в 15 раз на СКЛ версии
22 Guk
 
27.12.06
10:02
(18) Это не наколка, это "Дурь конечно"...
23 dk
 
27.12.06
10:10
(18)+
Док = 0;
Сообщить(ПустоеЗначение(Док));
Док = СоздатьОбъект("Документ.ПКО");
Док.Новый();
Сообщить(ПустоеЗначение(Док));
-----
ЗЫ не проверял, но накалывался на подобной ситуации
24 Эльниньо
 
27.12.06
10:15
(14)
Если Лев(Строка(Док.Серия),18) = "<Объект не найден>" Тогда
25 Chieftain
 
27.12.06
10:34
(24) А попробуй это сделать на типовых обработках выгрузки и загрузки через XML)))
26 Эльниньо
 
27.12.06
10:41
(25) Не лублу я эксимель.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший