AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.11.2010, 13:20   #1  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Ax2009 RU5: класс InventDimCtrl_Frm_Mov_Purch
Есть в этом классе метод mustEnableField().
Заинтересовал следующий участок кода
X++:
    &&  (movement.interCompanyMovement()    && this.dimSearch().dimFinancialInvent()
      || movement.interCompanyTransaction() && this.dimSearch().dimItemDimension()))
то есть что-то типа ( a && b || c && d )
Создатели пропустили скобки или так и должно быть ?
Аналогичная ситуация и в классе InventDimCtrl_Frm_Mov_Sales.
__________________
Дмитрий
За это сообщение автора поблагодарили: samolalex (1).
Старый 12.11.2010, 13:44   #2  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Все правильно, последняя скобка относится ко всему IF.
Старый 12.11.2010, 13:46   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,430 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
На сколько я помню приоритет операции ||(ИЛИ) ниже приоритета операции &&(И). Так что конкретно в данном случае скобки не обязательну.
Друго дело что страдет наглядность кода и повышается вероятность ошибки при возможных изменениях этого участка кода - это да.
Старый 12.11.2010, 13:49   #4  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Применительно ко всему условию скобки расставлены правильно. Все условие выглядит примерно так:
if(x && y && q && ( a && b || c && d ) )

В чем проблема, не могу понять?
Старый 12.11.2010, 14:00   #5  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Как я понял, вопрос состоит в уточнении приоритетности операций && и ||.

( a && b || c && d ) равносильно ( (a && b) || (c && d) ), но
( a && b || c && d ) не равносильно ( a && (b || c) && d )
__________________
С уважением, Александр.
Старый 12.11.2010, 15:26   #6  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Да, вопрос в приоритетности операций.
По тому как на самом деле отрабатывает метод у меня возникло убеждение что операция ИЛИ для системы в данном конкретном случае имеет больший приоритет чем операция И.
То есть в данном случае (a && b || c && d) отрабатывает как (a && ( b || c ) && d)
Может приоритет логических операций где-то настраивается ?
__________________
Дмитрий
Старый 12.11.2010, 15:29   #7  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
Может приоритет логических операций где-то настраивается ?
Насколько я знаю, Axapta такой функциональностью не располагает.
__________________
С уважением, Александр.
Старый 12.11.2010, 15:37   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,430 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Damn Посмотреть сообщение
Может приоритет логических операций где-то настраивается ?
Нет, абсурд. Такой настройки существовать не может. Иначе, как обеспечить совместимость раличных модификаций!
Цитата:
Сообщение от Damn Посмотреть сообщение
По тому как на самом деле отрабатывает метод у меня возникло убеждение что операция ИЛИ для системы в данном конкретном случае имеет больший приоритет чем операция И.
То есть в данном случае (a && b || c && d) отрабатывает как (a && ( b || c ) && d)
Можете набросать тестовый джобик? А лучше сами ещё повнимательнее всё проверьте.
Старый 12.11.2010, 15:55   #9  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Приоритет операций описан в спецификации языка. Он не менялся и не может меняться. Скорее всего вы что-то не правильно поняли.
Старый 12.11.2010, 15:56   #10  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Можете набросать тестовый джобик? А лучше сами ещё повнимательнее всё проверьте.
А вы функциональность внутренних расчётов не используете ?
Указанный мною метод класса InventDimCtrl_Frm_Mov_Purch определяет доступность номенклатурных и складских аналитик в закупках.
Если предположить что логическое И имеет превосходство над ИЛИ, то исходя из этого метода финансовые складские аналитики должны быть недоступны для редактирования в открытых строках внутрирасчётных закупок. Хотя я у нас в системе вижу обратное. Это говорит о том что сначала всё-таки выполняется логическое ИЛИ, а потом И. Даже ставил точку останова чтобы убедиться в этом.
__________________
Дмитрий
Старый 12.11.2010, 16:02   #11  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
стоило только облачить операции с логическим И в скобки (хотя это вроде бы и не должно ни на что повлиять)
X++:
    &&  ((movement.interCompanyMovement()    && this.dimSearch().dimFinancialInvent())
      || (movement.interCompanyTransaction() && this.dimSearch().dimItemDimension())))
как ситуация во внутрирасчётных закупках сразу изменилась финансовые складские аналитики сразу стали недоступны для редактирования.
__________________
Дмитрий
Старый 12.11.2010, 16:05   #12  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
А вы можете взять другое приложение, провести на нем глобальную компиляцию и проверить?
Старый 12.11.2010, 16:11   #13  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Проверил у себя на приложении - все нормально. Может вы внутри этих проверок уже что-то накосячили?
Старый 12.11.2010, 16:46   #14  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Damn Посмотреть сообщение
Если предположить что логическое И имеет превосходство над ИЛИ
А если открыть SDK и почитать о Operator Precedence?
__________________
-ТСЯ или -ТЬСЯ ?
За это сообщение автора поблагодарили: Damn (2).
Старый 12.11.2010, 16:50   #15  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,430 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Damn Посмотреть сообщение
стоило только облачить операции с логическим И в скобки (хотя это вроде бы и не должно ни на что повлиять) как ситуация во внутрирасчётных закупках сразу изменилась финансовые складские аналитики сразу стали недоступны для редактирования.
Цитата:
Сообщение от greench Посмотреть сообщение
А вы можете взять другое приложение, провести на нем глобальную компиляцию и проверить?
+1

Даже не нужно новое приложение, просто уберите скобки обратно. Проверьте ошибка вернулась?
Старый 12.11.2010, 17:16   #16  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от Vadik Посмотреть сообщение
А если открыть SDK и почитать о Operator Precedence?
Вот спасибо за предложение почитать
Issues concerning X++: Operator precedence of && and ||
In X++ these two operators have the same precedence, whereas in other languages && is higher priority than ||

Теперь про приоритет логических операций в X++ мне всё понятно, остался вопрос с этим методом - всё-таки программисты забыли скобки поставить или осознанно не поставили ?
__________________
Дмитрий
За это сообщение автора поблагодарили: S.Kuskov (3).
Старый 12.11.2010, 17:36   #17  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Думаю осознанно. Теоретически ведь ошибки нет.
Старый 12.11.2010, 17:44   #18  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,430 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от greench Посмотреть сообщение
Думаю осознанно. Теоретически ведь ошибки нет.
Врядли осознано. Получается что конструкция (a && b || c && d ) эквивалентна этому (((a && b) || c) && d ) ...
Старый 12.11.2010, 17:45   #19  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
брр.. вы уверены, что это (a && b || c && d ) не эквивалентно ((a && b) || (c && d )) ?
Старый 12.11.2010, 18:43   #20  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,430 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от greench Посмотреть сообщение
брр.. вы уверены, что это (a && b || c && d ) не эквивалентно ((a && b) || (c && d )) ?
Я уже не в чём не уверен, но с учётом этого these two operators have the same precedence (эти две операции имеют одинаковый приоритет) я предположил, что в случае отсутствия скобок вычисления будут производиться последовательно
например как (a+b-c+d) эквивалентно (((a+b)-c)+d)

P.S.: Тема 2007-го года Логические операции в Х++

Последний раз редактировалось S.Kuskov; 12.11.2010 в 19:06.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ax2009 RU5: класс SysOperationProgressServer Damn DAX: Программирование 2 29.09.2010 22:18
AX2009 RU5: невозможно открыть "журнал восстановления НДС"... EVGL DAX: Функционал 8 09.09.2010 23:20
Ax2009 RU5: Не заполняется CreatedDateTime в SysDatabaseLog Damn DAX: Администрирование 2 07.09.2010 15:29
AX2009 RU5: ADORecordSet, вопрос на 16 баллов DSPIC DAX: Программирование 6 01.09.2010 18:19
Использование семейства InventDimCtrl_Frm_* - 2 DS InventDim на одной форме Pavlo AKA Panok DAX: База знаний и проекты 5 22.12.2008 17:15

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:36.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.