Отличия в операциях сравнения

  1. 9 г. назад

    Какие отличия в приведенных ниже сравнениях и зачем избыточность?

    Если не Поля.Количество() >0 Тогда
    Если не Поля.Количество() Тогда

    или вот кусок запроса

    И РеализацияТоваровИУслуг.Проведен = ИСТИНА
    И РеализацияТоваровИУслуг.Проведен

    Зачем "уточнять" сравнения в данных примерах? Это ведь приводит к компиляции избыточного кода!
    Учитывая для примера 1 - Функция Количество() не бывает меньше нуля.

    Ответы: (1) (2) (6) (7)
  2. alex_shkut Зачем "уточнять" сравнения в данных примерах?

    Поля.Количество() имеет тип Число, так что первая строчка более корректна

  3. alex_shkut или вот кусок запроса

    И РеализацияТоваровИУслуг.Проведен = ИСТИНА
    И РеализацияТоваровИУслуг.Проведен

    в данном случае вообще никакой разницы, это семёрошник какой-нить писал, наверное

  4. А разве неверно утверждение, что 0 - ЛОЖЬ, а не 0 - ИСТИНА

    Ответы: (4)
  5. +(3) ... а больше 0 - ИСТИНА :)

  6. а эти строки эквивалентны?
    в C++, например Если не Поля.Количество() Тогда
    эквивалентно Если Поля.Количество()=0 Тогда.
    А в 1С это эквивалентно >0 что ли?

  7. alex_shkut Если не Поля.Количество() >0 Тогда
    Если не Поля.Количество() Тогда

    а вот это, строго говоря, разные условия, если число может быть отрицательным, здесь мне гораздо привлекательнее первый вариант, второй же вариант эквивалент
    Если Поля.Количество()=0

    Ответы: (7)
  8. (6) Я уточнил в (0), что функция не возвращает отрицательных значений. Про -1 = ЛОЖЬ я знаю. Хотя, не везде так.

    Ответы: (8) (11)
  9. (7)Ты пытаешься использовать "неявным приведением типа", то иногда приводит к весьма большим неожиданностям :-)

    А вот использовать "И РеализацияТоваровИУслуг.Проведен" - это хороший стиль разработки

    Ответы: (9)
  10. (8) В данном случае приведение типа очень предсказуемо :)

    Ответы: (12)
  11. 08.05.2015 12:18:44 отредактировано alex_shkut

    Вот интересный пример, что получим?:
    Если ОстаткиТоваровНаСкладах.Цена Тогда
    Пример условный, но мне интересен ;)
    лучше в запросе...

  12. alex_shkut Про -1 = ЛОЖЬ

    кстати, это только в 1с так, в нормальных языках -1 = ИСТИНА

    Ответы: (13)
  13. alex_shkut В данном случае приведение типа очень предсказуемо :)

    Нет, не очень - если это тип Неопределено (или в запросе например выходит NULL) - ой как может быть весело.

  14. andrewks в нормальных языках -1 = ИСТИНА

    В нормальных языках "не 1" - тоже не всегда ЛОЖЬ, это вполне может быть "Не определено" (не инициализировано).

    Ответы: (14)
  15. (13) в нормальных языках "Не определено" нет, а вот "не инициализировано" может быть

    Ответы: (15)
  16. andrewks в нормальных языках "Не определено" нет

    Э-э-э-э... Т.е. тип NULL - это Нуралиев придумал?

    Ответы: (18)
  17. да начнется nullосрач

    Ответы: (17)
  18. 08.05.2015 13:06:32 отредактировано alex_shkut

    (16) Ага :). В запросах на соединение операция суммирования с NULL - дает NULL

    Ответы: (19)
  19. (15) NULL - это вполне конкретное значение в нормальных языках

    Ответы: (21)
  20. alex_shkut В запросах на объединение операция суммирования с NULL - дает NULL

    А в операции " Если Неопределено Тогда " - что?

  21. NULL - это категория БД, а Неопределено - конкретный неинициализированный тип.

    Ответы: (22)
  22. andrewks это вполне конкретное значение в нормальных языках

    Именно, а при переводе с "английского на русский" и возник его аналог - Неопределено.

    Просто Нуралиев в Запросах оставил более корректный термин NULL, а в объектном языке повыпендривался с переводом.

    Ответы: (25) (32)
  23. alex_shkut а Неопределено - конкретный неинициализированный тип.

    А расскажи, что значит в С++ значение NULL (или там такого нет) ?

    Ответы: (23) (24) (26)
  24. (22) Я в С++ почти полный ноль, php - немного.

  25. (22) Читать смогу, точный расклад не расскажу. Но смысл написанного мне будет понятен.

  26. avm3110 Именно, а при переводе с "английского на русский" и возник его аналог - Неопределено.

    а ты не путаешь ли с undefined?

  27. (22) NULL в Си - это ноль, как ни странно, но в типизации указателя

    Ответы: (27) (29)
  28. (26) То есть, это потолок адресного пространства?

    Ответы: (28)
  29. (27) сфигаль?

    Ответы: (30)
  30. andrewks NULL в Си - это ноль, как ни странно, но в типизации указателя

    э-э-э... Даю цитату:
    Тип, допускающие значения NULL, являются экземплярами структуры System.Nullable<T>. Тип, допускающий значения NULL, может представлять правильный диапазон значений для своего базового типа значений и дополнительное пустое значение null. Например, для Nullable<Int32>, называемого "тип Int32, допускающий значения NULL", можно назначить любое значение от -2 147 483 648 до 2 147 483 647 или значение null. Для Nullable<bool> можно назначить значения true, false или null. Возможность назначения значения null для числовых и логических типов особенно полезна при работе с базами данных и другими типами данных, содержащих элементы, которым может быть не назначено значение. Например, логическое поле в базе данных может хранить значения true или false или может быть не задано.

    Ответы: (31) (32)
  31. (28) Ну, насколько мне известно, начало - это FFFF (дописывай до любой разрядности)

  32. (29) я не знаю, чё ты там читаешь, но в Си++

    ISO/IEC 14882
    18.1. 4 The macro NULL is an implementation-defined C++ null pointer constant in this International Standard. Possible definitions include 0 and 0L, but not (void*)0.

    ну, строго говоря, в каких-то реализациях это может быть и не ноль, но в х86 архитектуре обычно описывается нулём

    Ответы: (34)
  33. (29) то есть, утверждение в (21) верно? Но Неопределено <> NULL?

  34. #undef NULL
    #if defined(__cplusplus)
    #define NULL 0
    #else
    #define NULL ((void *)0)
    #endif
    
  35. andrewks но в х86 архитектуре обычно описывается нулём

    Я во времена столь давние, участвовал в разработках САПР электроники (моделирование цифровиков) и мы уже тогда закладывали что логика может быть "ноль", "единица" и "неопределено".

    ПыСы. Термин "Архитектура x86" и термин "представление чисел" - строго говоря разные вещи :-)

    Ответы: (35)
  36. (34) при чём здесь представление чисел, если, строго говоря, stddef.h отличается от архитектуры и ОС?

    Ответы: (36) (38)
  37. andrewks отличается от архитектуры и ОС

    Потому что строго говоря в понятие "архитектура" (архитектура x86, архитектура ARM и т.д.) нет никакого упоминания "представления чисел", что например NULL "описывается нулями".

    Ответы: (37)
  38. (36) чё сказать-то хочешь? или поспорить ради спора?

    Ответы: (39)
  39. 08.05.2015 13:51:04 отредактировано Bekas

    andrewks stddef.h отличается от архитектуры и ОС?

    яничегонепонел

    Ответы: (40)
  40. andrewks чё сказать-то хочешь?

    Я всего лишь слегка уточнил формулировку "архитектуры х86 :-)

    Ну а по теме сабжа я ответил выше

  41. Bekas яничегонепонел

    mingw

    /*
     * stddef.h
     *
     * Standard type definitions provided by the C library.
     *
     * NOTE: This is typically supplied by GCC, but there's a small gotcha -
     *       GCC's version doesn't guard typedefs via RC_INVOKED. This is
     *       GCC's version, with the guard macro. Since we install this in
     *       the tool include directory, it gets picked up before GCC's
     *       internal include directory, and we're safe.
     *
     * This file is part of the Mingw32 package.
     *
     * Contributors:
     *  Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
     *
     *  THIS SOFTWARE IS NOT COPYRIGHTED
     *
     *  This source code is offered for use in the public domain. You may
     *  use, modify or distribute it freely.
     *
     *  This code is distributed in the hope that it will be useful but
     *  WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
     *  DISCLAMED. This includes but is not limited to warranties of
     *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     *
     */
    
    #if (!defined(_STDDEF_H) && !defined(_STDDEF_H_) && !defined(_ANSI_STDDEF_H) \
         && !defined(__STDDEF_H__)) \
        || defined(__need_wchar_t) || defined(__need_size_t) \
        || defined(__need_ptrdiff_t) || defined(__need_NULL) \
        || defined(__need_wint_t)
    
    /* Any one of these symbols __need_* means that GNU libc
       wants us just to define one data type.  So don't define
       the symbols that indicate this file's entire job has been done.  */
    #if (!defined(__need_wchar_t) && !defined(__need_size_t)	\
         && !defined(__need_ptrdiff_t) && !defined(__need_NULL)	\
         && !defined(__need_wint_t))
    #define _STDDEF_H
    #define _STDDEF_H_
    /* snaroff@next.com says the NeXT needs this.  */
    #define _ANSI_STDDEF_H
    /* Irix 5.1 needs this.  */
    #define __STDDEF_H__
    #endif
    
    #ifndef RC_INVOKED
    
    #ifndef __sys_stdtypes_h
    /* This avoids lossage on SunOS but only if stdtypes.h comes first.
       There's no way to win with the other order!  Sun lossage.  */
    
    /* On 4.3bsd-net2, make sure ansi.h is included, so we have
       one less case to deal with in the following.  */
    #if defined (__BSD_NET2__) || defined (____386BSD____) || defined (__FreeBSD__) || defined(__NetBSD__)
    #include <machine/ansi.h>
    #endif
    
    /* In 4.3bsd-net2, machine/ansi.h defines these symbols, which are
       defined if the corresponding type is *not* defined.
       FreeBSD-2.1 defines _MACHINE_ANSI_H_ instead of _ANSI_H_ */
    #if defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_)
    #if !defined(_SIZE_T_) && !defined(_BSD_SIZE_T_)
    #define _SIZE_T
    #endif
    #if !defined(_PTRDIFF_T_) && !defined(_BSD_PTRDIFF_T_)
    #define _PTRDIFF_T
    #endif
    /* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
       instead of _WCHAR_T_. */
    #if !defined(_WCHAR_T_) && !defined(_BSD_WCHAR_T_)
    #ifndef _BSD_WCHAR_T_
    #define _WCHAR_T
    #endif
    #endif
    /* Undef _FOO_T_ if we are supposed to define foo_t.  */
    #if defined (__need_ptrdiff_t) || defined (_STDDEF_H_)
    #undef _PTRDIFF_T_
    #undef _BSD_PTRDIFF_T_
    #endif
    #if defined (__need_size_t) || defined (_STDDEF_H_)
    #undef _SIZE_T_
    #undef _BSD_SIZE_T_
    #endif
    #if defined (__need_wchar_t) || defined (_STDDEF_H_)
    #undef _WCHAR_T_
    #undef _BSD_WCHAR_T_
    #endif
    #endif /* defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) */
    
    /* Sequent's header files use _PTRDIFF_T_ in some conflicting way.
       Just ignore it.  */
    #if defined (__sequent__) && defined (_PTRDIFF_T_)
    #undef _PTRDIFF_T_
    #endif
    
    /* On VxWorks, <type/vxTypesBase.h> may have defined macros like
       _TYPE_size_t which will typedef size_t.  fixincludes patched the
       vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is
       not defined, and so that defining this macro defines _GCC_SIZE_T.
       If we find that the macros are still defined at this point, we must
       invoke them so that the type is defined as expected.  */
    #if defined (_TYPE_ptrdiff_t) && (defined (__need_ptrdiff_t) || defined (_STDDEF_H_))
    _TYPE_ptrdiff_t;
    #undef _TYPE_ptrdiff_t
    #endif
    #if defined (_TYPE_size_t) && (defined (__need_size_t) || defined (_STDDEF_H_))
    _TYPE_size_t;
    #undef _TYPE_size_t
    #endif
    #if defined (_TYPE_wchar_t) && (defined (__need_wchar_t) || defined (_STDDEF_H_))
    _TYPE_wchar_t;
    #undef _TYPE_wchar_t
    #endif
    
    /* In case nobody has defined these types, but we aren't running under
       GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE__TYPE__, and
       __WCHAR_TYPE__ have reasonable values.  This can happen if the
       parts of GCC is compiled by an older compiler, that actually
       include gstddef.h, such as collect2.  */
    
    /* Signed type of difference of two pointers.  */
    
    /* Define this type if we are doing the whole job,
       or if we want this type in particular.  */
    #if defined (_STDDEF_H) || defined (__need_ptrdiff_t)
    #ifndef _PTRDIFF_T	/* in case <sys/types.h> has defined it. */
    #ifndef _T_PTRDIFF_
    #ifndef _T_PTRDIFF
    #ifndef __PTRDIFF_T
    #ifndef _PTRDIFF_T_
    #ifndef _BSD_PTRDIFF_T_
    #ifndef ___int_ptrdiff_t_h
    #ifndef _GCC_PTRDIFF_T
    #define _PTRDIFF_T
    #define _T_PTRDIFF_
    #define _T_PTRDIFF
    #define __PTRDIFF_T
    #define _PTRDIFF_T_
    #define _BSD_PTRDIFF_T_
    #define ___int_ptrdiff_t_h
    #define _GCC_PTRDIFF_T
    #ifndef __PTRDIFF_TYPE__
    #define __PTRDIFF_TYPE__ long int
    #endif
    typedef __PTRDIFF_TYPE__ ptrdiff_t;
    #endif /* _GCC_PTRDIFF_T */
    #endif /* ___int_ptrdiff_t_h */
    #endif /* _BSD_PTRDIFF_T_ */
    #endif /* _PTRDIFF_T_ */
    #endif /* __PTRDIFF_T */
    #endif /* _T_PTRDIFF */
    #endif /* _T_PTRDIFF_ */
    #endif /* _PTRDIFF_T */
    
    /* If this symbol has done its job, get rid of it.  */
    #undef	__need_ptrdiff_t
    
    #endif /* _STDDEF_H or __need_ptrdiff_t.  */
    
    /* Unsigned type of `sizeof' something.  */
    
    /* Define this type if we are doing the whole job,
       or if we want this type in particular.  */
    #if defined (_STDDEF_H) || defined (__need_size_t)
    #ifndef __size_t__	/* BeOS */
    #ifndef _SIZE_T	/* in case <sys/types.h> has defined it. */
    #ifndef _SYS_SIZE_T_H
    #ifndef _T_SIZE_
    #ifndef _T_SIZE
    #ifndef __SIZE_T
    #ifndef _SIZE_T_
    #ifndef _BSD_SIZE_T_
    #ifndef _SIZE_T_DEFINED_
    #ifndef _SIZE_T_DEFINED
    #ifndef ___int_size_t_h
    #ifndef _GCC_SIZE_T
    #ifndef _SIZET_
    #ifndef __size_t
    #define __size_t__	/* BeOS */
    #define _SIZE_T
    #define _SYS_SIZE_T_H
    #define _T_SIZE_
    #define _T_SIZE
    #define __SIZE_T
    #define _SIZE_T_
    #define _BSD_SIZE_T_
    #define _SIZE_T_DEFINED_
    #define _SIZE_T_DEFINED
    #define ___int_size_t_h
    #define _GCC_SIZE_T
    #define _SIZET_
    #define __size_t
    #ifndef __SIZE_TYPE__
    #define __SIZE_TYPE__ long unsigned int
    #endif
    #if !(defined (__GNUG__) && defined (size_t))
    typedef __SIZE_TYPE__ size_t;
    #ifdef __BEOS__
    typedef long ssize_t;
    #endif /* __BEOS__ */
    #endif /* !(defined (__GNUG__) && defined (size_t)) */
    #endif /* __size_t */
    #endif /* _SIZET_ */
    #endif /* _GCC_SIZE_T */
    #endif /* ___int_size_t_h */
    #endif /* _SIZE_T_DEFINED */
    #endif /* _SIZE_T_DEFINED_ */
    #endif /* _BSD_SIZE_T_ */
    #endif /* _SIZE_T_ */
    #endif /* __SIZE_T */
    #endif /* _T_SIZE */
    #endif /* _T_SIZE_ */
    #endif /* _SYS_SIZE_T_H */
    #endif /* _SIZE_T */
    #endif /* __size_t__ */
    #undef	__need_size_t
    #endif /* _STDDEF_H or __need_size_t.  */
    
    /* Wide character type.
       Locale-writers should change this as necessary to
       be big enough to hold unique values not between 0 and 127,
       and not (wchar_t) -1, for each defined multibyte character.  */
    
    /* Define this type if we are doing the whole job,
       or if we want this type in particular.  */
    #if defined (_STDDEF_H) || defined (__need_wchar_t)
    #ifndef __wchar_t__	/* BeOS */
    #ifndef _WCHAR_T
    #ifndef _T_WCHAR_
    #ifndef _T_WCHAR
    #ifndef __WCHAR_T
    #ifndef _WCHAR_T_
    #ifndef _BSD_WCHAR_T_
    #ifndef _WCHAR_T_DEFINED_
    #ifndef _WCHAR_T_DEFINED
    #ifndef _WCHAR_T_H
    #ifndef ___int_wchar_t_h
    #ifndef __INT_WCHAR_T_H
    #ifndef _GCC_WCHAR_T
    #define __wchar_t__	/* BeOS */
    #define _WCHAR_T
    #define _T_WCHAR_
    #define _T_WCHAR
    #define __WCHAR_T
    #define _WCHAR_T_
    #define _BSD_WCHAR_T_
    #define _WCHAR_T_DEFINED_
    #define _WCHAR_T_DEFINED
    #define _WCHAR_T_H
    #define ___int_wchar_t_h
    #define __INT_WCHAR_T_H
    #define _GCC_WCHAR_T
    
    /* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
       instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other
       symbols in the _FOO_T_ family, stays defined even after its
       corresponding type is defined).  If we define wchar_t, then we
       must undef _WCHAR_T_; for BSD/386 1.1 (and perhaps others), if
       we undef _WCHAR_T_, then we must also define rune_t, since 
       headers like runetype.h assume that if machine/ansi.h is included,
       and _BSD_WCHAR_T_ is not defined, then rune_t is available.
       machine/ansi.h says, "Note that _WCHAR_T_ and _RUNE_T_ must be of
       the same type." */
    #ifdef _BSD_WCHAR_T_
    #undef _BSD_WCHAR_T_
    #ifdef _BSD_RUNE_T_
    #if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
    typedef _BSD_RUNE_T_ rune_t;
    #endif
    #endif
    #endif
    
    #ifndef __WCHAR_TYPE__
    #ifdef __BEOS__
    #define __WCHAR_TYPE__ unsigned char
    #else
    #define __WCHAR_TYPE__ int
    #endif
    #endif
    #ifndef __cplusplus
    typedef __WCHAR_TYPE__ wchar_t;
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif
    #endif /* __wchar_t__ */
    #undef	__need_wchar_t
    #endif /* _STDDEF_H or __need_wchar_t.  */
    
    #if defined (_STDDEF_H) || defined (__need_wint_t)
    #ifndef _WINT_T
    #define _WINT_T
    
    #ifndef __WINT_TYPE__
    #define __WINT_TYPE__ unsigned int
    #endif
    typedef __WINT_TYPE__ wint_t;
    #endif
    #undef __need_wint_t
    #endif
    
    /*  In 4.3bsd-net2, leave these undefined to indicate that size_t, etc.
        are already defined.  */
    /*  BSD/OS 3.1 requires the MACHINE_ANSI_H check here.  FreeBSD 2.x apparently
        does not, even though there is a check for MACHINE_ANSI_H above.  */
    #if defined(_ANSI_H_) || (defined(__bsdi__) && defined(_MACHINE_ANSI_H_))
    /*  The references to _GCC_PTRDIFF_T_, _GCC_SIZE_T_, and _GCC_WCHAR_T_
        are probably typos and should be removed before 2.8 is released.  */
    #ifdef _GCC_PTRDIFF_T_
    #undef _PTRDIFF_T_
    #undef _BSD_PTRDIFF_T_
    #endif
    #ifdef _GCC_SIZE_T_
    #undef _SIZE_T_
    #undef _BSD_SIZE_T_
    #endif
    #ifdef _GCC_WCHAR_T_
    #undef _WCHAR_T_
    #undef _BSD_WCHAR_T_
    #endif
    /*  The following ones are the real ones.  */
    #ifdef _GCC_PTRDIFF_T
    #undef _PTRDIFF_T_
    #undef _BSD_PTRDIFF_T_
    #endif
    #ifdef _GCC_SIZE_T
    #undef _SIZE_T_
    #undef _BSD_SIZE_T_
    #endif
    #ifdef _GCC_WCHAR_T
    #undef _WCHAR_T_
    #undef _BSD_WCHAR_T_
    #endif
    #endif /* _ANSI_H_ || ( __bsdi__ && _MACHINE_ANSI_H_ ) */
    
    #endif /* __sys_stdtypes_h */
    
    #endif /* RC_INVOKED */
    
    /* A null pointer constant.  */
    
    #if defined (_STDDEF_H) || defined (__need_NULL)
    #undef NULL		/* in case <stdio.h> has defined it. */
    #ifdef __GNUG__
    #define NULL __null
    #else   /* G++ */
    #define NULL ((void *)0)
    #endif  /* G++ */
    #endif	/* NULL not defined and <stddef.h> or need NULL.  */
    #undef	__need_NULL
    
    #ifdef _STDDEF_H
    
    /* Offset of member MEMBER in a struct of type TYPE.  */
    
    #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
    
    #endif /* _STDDEF_H was defined this time */
    
    #endif /* !_STDDEF_H && !_STDDEF_H_ && !_ANSI_STDDEF_H && !__STDDEF_H__
    	  || __need_XXX was not defined before */
    
    
  42. В общем, если я правильно понял, то надо рисовать программы максимально параноидально, дабы в какой-нибудь БеОС это все не полетело к чертям...

  43. А вот и пример из жизни:

    (ХЗО.СуммаОстаток + ВЫБОР
    |		КОГДА ХЗОСпис.СуммаОстаток ЕСТЬ NULL 
    |			ТОГДА 0
    |		ИНАЧЕ ХЗОСпис.СуммаОстаток
    |	КОНЕЦ) / &Курс / &Кратность КАК ОсСуммаБезНДС,

    Связан счет ОС со счетом амортизации ОС (остаточная стоимость), без проверки на NULL вылезли косяки с новыми ОС.
    Вот такой он, этот NULL...

    Ответы: (43)
  44. alex_shkut без проверки на NULL вылезли косяки с новыми ОС

    Поставили бы вместо "Выбор" функцию ISNULL () - и было бы вам счастье

  45. + ЕСТЬNULL ( ХЗОСпис.СуммаОстаток , 0 )

    Ответы: (45)
  46. (44) А не наоборот?

    Ответы: (46)
  47. (45)Нет

    Ответы: (47)
  48. (46) Так нелогично :), если ISNULL(истина, ложь) интуитивнее ведь?

    Ответы: (49)
  49. Перепутал с ?(Выражение, истина, ложь)....

  50. alex_shkut Так нелогично :), если ISNULL(истина, ложь) интуитивнее ведь?

    Всё очень логично
    ISNULL( <Значение которое может быть NULL>, <Значение которое нужно подставить, если первое значение все же NULL>)

    Ответы: (50)
  51. (49) Да-да, я уже ЖК почитал

  52. И уже применил в другом случае, красиво получается:
    ЕСТЬNULL(ЦенаФакт,0)<=0

    Ответы: (52)
  53. И опять же вопрос. Какие могут быть грабли при использовании такого вида сравнения
    ВЫБОР КОГДА ЕСТЬNULL(ЦенаФакт,0) ТОГДА
    Вместо (51)

    Ответы: (56)
  54. Простые - запрос не выполнится )

    Ответы: (54)
  55. (53) Ща проверим...

  56. Ошибки нету, но запрос не отрабатывает правильно.
    Вот и не пойму:
    1. ЕСТЬNULL(NULL,0) = 0 = ЛОЖЬ
    2. ЕСТЬNULL(0,0) = 0 = ЛОЖЬ
    3. ЕСТЬNULL(0.10,0) = 0.10 = ИСТИНА?

    Ответы: (56) (57)
  57. Уточнение к (55) вариант (52) СКД в вычисляемом поле принимает, но работает некоректно, но и не ругается.
    А запрос не выполняется.

  58. alex_shkut запрос не отрабатывает правильно

    запрос отрабатывает правильно. просто ты от него ждешь не то

    Ответы: (58)
  59. Bekas запрос отрабатывает правильно. просто ты от него ждешь не то

    (задумчиво) интересное однако у тебя определение "правильности" :-)

или зарегистрируйтесь чтобы ответить!