Последняя версия DataExpress 3 beta от 9 октября 2018 года. Скачать. Энциклопедия DX. Форум на Develop-Soft

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

Вопросы, связанные с особенностями работы DataExpress.
Аватара пользователя
Ivan_Strelec
Интересующийся
Сообщения: 75
Зарегистрирован: Ср ноя 01, 2017 6:57 pm

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

Сообщение Ivan_Strelec » Пт дек 01, 2017 11:47 pm

Добрый день!

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

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

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

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

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

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

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

Аватара пользователя
admin
Разработчик
Сообщения: 3828
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

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

Сообщение admin » Сб дек 02, 2017 7:57 am

Только использовать вложенный IIF.

Аватара пользователя
rausNT
Знаток
Сообщения: 473
Зарегистрирован: Чт авг 24, 2017 9:23 am

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

Сообщение rausNT » Сб дек 02, 2017 3:38 pm

admin писал(а):Только использовать вложенный IIF.


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

Аватара пользователя
YurAnt
Эксперт
Сообщения: 3361
Зарегистрирован: Чт апр 13, 2017 8:57 am
Контактная информация:

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

Сообщение YurAnt » Сб дек 02, 2017 4:05 pm

Какую?

Аватара пользователя
rausNT
Знаток
Сообщения: 473
Зарегистрирован: Чт авг 24, 2017 9:23 am

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

Сообщение rausNT » Сб дек 02, 2017 6:43 pm

YurAnt писал(а):Какую?


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

Аватара пользователя
YurAnt
Эксперт
Сообщения: 3361
Зарегистрирован: Чт апр 13, 2017 8:57 am
Контактная информация:

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

Сообщение YurAnt » Сб дек 02, 2017 6:52 pm

Ну скриптами только... Выражения для таких целей слишком "простые"...

jurist23rus
Эксперт
Сообщения: 2437
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

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

Сообщение jurist23rus » Вс дек 10, 2017 3:05 pm

В версии от 10.12.2017 года реализовано частичное вычисление логических выражений.
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
rausNT
Знаток
Сообщения: 473
Зарегистрирован: Чт авг 24, 2017 9:23 am

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

Сообщение rausNT » Вс дек 10, 2017 11:37 pm

jurist23rus писал(а):В версии от 10.12.2017 года реализовано частичное вычисление логических выражений.


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

Аватара пользователя
admin
Разработчик
Сообщения: 3828
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

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

Сообщение admin » Пн дек 11, 2017 6:50 am

rausNT писал(а):а поподробнее можно где нибудь почитать?

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


Вернуться в «Особенности работы»