Имя: Пароль:
1C
 
Смысл функции "ПустоеЗначение"
0 kalinin
 
12.01.10
02:36
Доброй ночи!
Вроде все ясно сразу. В описании к функции сказано, что, в частности, для справочника функция работает аналогично методу Выбран().

Проверил.
Ном - реквизит формы, элемент выбран

   сообщить(Строка(Ном.Выбран()));                   //1
   сообщить(Строка(ПустоеЗначение(Ном)));            //0
   фыва = СоздатьОбъект("Справочник.Номенклатура");
   фыва.найтипокоду("98764   ");
   сообщить(Строка(фыва.Выбран()));                  //1
   сообщить(Строка(ПустоеЗначение(фыва)));           //1 ?!

Вопрос: почему 1 в последнем комментарии? или "ПустоеЗначение" корректно проверяет только значения на форме? как-то сомнительно :)
1 KRV
 
12.01.10
02:48
сие шаманство было послано свыше Нуралиеву и самим не понято, но донесено до смердов...
2 kalinin
 
12.01.10
03:03
:)
успел найти в форуме что
ПустоеЗначение(фыва.ТекущийЭлемент())=0

и действительно так
3 Stillcat
 
12.01.10
05:08
Не используй
ПустоеЗначение()
для объектов,созданных функцией
СоздатьОбъект()
для них она не работает
4 DenLaDen
 
12.01.10
06:55
(3) да что вы говорите? А если использовать ТекущийЭлемент(), ТекущийДокумент() ?
(0) Попробуй сообщить(Строка(ПустоеЗначение( фыва.ТекущийЭлемент() )));
5 big
 
12.01.10
07:07
(3) Фигасе!! А мужики-то не знали! (с)  :))))
6 Chai Nic
 
12.01.10
07:10
Для справочника использовать метод Выбран можно только если вы хотите специально замедлить программу, по какой-то причине он на порядок медленнее работает, чем функция ПустоЗначение.
7 los_hooliganos
 
12.01.10
07:43
(6) потому что выбран() вытягивает всю запись из базы, в отличие от пустоезначение()
8 los_hooliganos
 
12.01.10
07:45
ну и вообще, то чем (0) занимается как-то непонятно.
9 vcv
 
12.01.10
08:08
Выбран() тянет запись из базы данных и возвращает 1, если она физически существует. А ПустоеЗначение() проверяет, является ли значение пустой ссылкой (для справочников и документов), или нет. Если в базе есть неразрешенные ссылки (кто-нибудь непосредственным удалением побаловался), Выбран() для них вернет 0, потому что запись физически не существует, а ПустоеЗначение() - 1, потому что не пустая ссылка.
10 Chai Nic
 
12.01.10
08:12
(9) Понятно, ну, проектировать алгоритмы в расчете на висячие ссылки вряд ли имеет смысл. :)
11 vcv
 
12.01.10
09:08
(10) С другой стороны, зачем ты зачастую проверяешь на пустое значение? Наверное, что бы, если "не пустое", начать вытягивать реквизиты из реквизита-справочника. То есть все равно произойдет чтение записи. И выигрыша от использования ПустоеЗначение вместо Выбран не получится. А Выбран надежнее в том смысле, что проверяет физическое наличие записи. Хотя алгоритмы всякие бывают...
12 hhhh
 
12.01.10
09:10
(11) зато выигрыш получится, если пустое.
13 Aleksey_3
 
12.01.10
09:11
Зачем мне данные, если я просто проверяю заполнение всех реквизитов в документе?
14 vcv
 
12.01.10
09:17
(13) А ты проверь ради интереса замером производительности. Значения этих реквизитов в дальнейшем используются наверное? Вполне может оказаться, что замена ПустоеЗначение на Выбран просто перенесет накладные расходы по чтению записи из одного места в другое :-)
Табличной части это вряд-ли касается, в 77 вообще как-то очень плохо с кешированием.
15 Aleksey_3
 
12.01.10
09:20
(14) Из модуля формы в модуль проведения? Сомневаюсь....
16 Chai Nic
 
12.01.10
10:07
(14) Очень часто "отфильтровывается" достаточно большой процент выборки, и как следствие, проверка с получением данных является избыточной и неоптимальной.
17 Stillcat
 
12.01.10
13:57
(5) Ну так пусть знают! Мне не жалко.
(4) А в чем собственно критика?
фыва.ТекущийЭлемент() не есть объект,созданный функцией СоздатьОбъект()
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.