Страница 1 из 1

Правила вычисления логических выражений

Добавлено: Пт дек 01, 2017 11:47 pm
Ivan_Strelec
Добрый день!

Заметил, что при вычислении логического выражения, DX отрабатывает не совсем так, как принято в большинстве языков
программирования. А именно: логическое выражение должно вычисляться до тех пор, пока не станет известен его результат.
У меня при вычислениях проверяется попадание даты в диапазон, но есть записи, в которых дата не установлена и соответственно
имеет значение NULL.
Пишу выражение

Код: Выделить всё

iif([Выдано]<>null & [Выдано]>=[:Дата начала] & [Выдано]<=[:Дата конца],[Окончательный расчет],0) 

где при пустом значении поля [Выдано] уже не имеет смысла продолжать дальнейшие вычисления, т.к. ясно, что оно ложно.
Обычно таким образом и происходит "защита" от ошибки при сравнениях дат с пустым значением.
Однако, DX продолжает и выдает ошибку в сравнении.
Приходится использовать вложенный IIF

Код: Выделить всё

iif ([Выдано]<>null,
  iif([Выдано]>=[:Дата начала] & [Выдано]<=[:Дата конца],
     [Окончательный расчет],0), 0) 

Несколько громоздко и легко запутаться в открывающихся и закрывающихся скобках. :(

Re: Правила вычисления логических выражений

Добавлено: Сб дек 02, 2017 7:57 am
admin
Только использовать вложенный IIF.

Re: Правила вычисления логических выражений

Добавлено: Сб дек 02, 2017 3:38 pm
rausNT
admin писал(а):Только использовать вложенный IIF.


действительно, длинные вложенные IIF выносят мозг, может как то можно перенести стандартную логику, например из SQL?

Re: Правила вычисления логических выражений

Добавлено: Сб дек 02, 2017 4:05 pm
YurAnt
Какую?

Re: Правила вычисления логических выражений

Добавлено: Сб дек 02, 2017 6:43 pm
rausNT
YurAnt писал(а):Какую?


AND, OR, ELSE, IS NULL, скобки между выражениями. C IIF тяжело составлять разветвленные выборки.

Re: Правила вычисления логических выражений

Добавлено: Сб дек 02, 2017 6:52 pm
YurAnt
Ну скриптами только... Выражения для таких целей слишком "простые"...

Re: Правила вычисления логических выражений

Добавлено: Вс дек 10, 2017 3:05 pm
jurist23rus
В версии от 10.12.2017 года реализовано частичное вычисление логических выражений.

Re: Правила вычисления логических выражений

Добавлено: Вс дек 10, 2017 11:37 pm
rausNT
jurist23rus писал(а):В версии от 10.12.2017 года реализовано частичное вычисление логических выражений.


а поподробнее можно где нибудь почитать?

Re: Правила вычисления логических выражений

Добавлено: Пн дек 11, 2017 6:50 am
admin
rausNT писал(а):а поподробнее можно где нибудь почитать?

Нет. Что интересует? Если операция И и левый операнд ложный, то правый не вычисляется, потому что условие уже ложно. Если операция ИЛИ и левый операнд истинный, то правое не вычисляется, потому что условие уже истинно.