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

Результаты опроса: Как лучше оформлять несколько условий в select where?
Я предпочитаю указывать операторы после условных выражений (Вариант 1) 13 25.49%
Я предпочитаю указывать операторы до условных выражений (Вариант 2) 35 68.63%
Использую комбинированный способ (написал в теме) 3 5.88%
Нет предпочтений: иногда делаю так, иногда иначе 0 0%
Не знаю/Мне все равно 0 0%
Голосовавшие: 51. Вы ещё не голосовали в этом опросе

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.06.2011, 20:43   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Как лучше оформлять несколько условий в select where? Повторная попытка
Начало здесь Как лучше оформлять несколько условий в select where?

Прошу переголосовать с измененными формулировками.

В коде часто встречаются select c несколькими условиями (условными выражениями).
Как лучше оформлять несколько условий в select where?

Вариант 1. (операторы после условия)
X++:
    select firstonly paymentTrans
        where paymentTrans.AccountNum            == factureJour.CustVendInvoiceAccount &&
              paymentTrans.Voucher               == factureJour.Voucher                &&
              paymentTrans.CurrencyCode          == factureJour.CurrencyCode           &&
              paymentTrans.PrepaymentFactureId_W == factureJour.FactureId              &&
              paymentTrans.Prepayment            == NoYes::Yes;
Вариант 2. (операторы до условия)
X++:
    select firstonly paymentTrans
        where paymentTrans.AccountNum            == factureJour.CustVendInvoiceAccount
           && paymentTrans.Voucher               == factureJour.Voucher
           && paymentTrans.CurrencyCode          == factureJour.CurrencyCode
           && paymentTrans.PrepaymentFactureId_W == factureJour.FactureId
           && paymentTrans.Prepayment            == NoYes::Yes;
Как вы предпочитаете ставить операторы между условиями?
Перед условием или после условия?
Почему?

А в более сложны случаях? Например,
X++:
    while select bankClientPayment_RU
    where bankClientPayment_RU.RContractAccount
    notexists join RContractTable
    where (
              ( RContractTable.RContractPartnerType == RContractPartnerType::Cust
             && BankClientPayment_RU.PartnerType == ModuleCustVend::Cust )
           || ( RContractTable.RContractPartnerType == RContractPartnerType::Vend
             && BankClientPayment_RU.PartnerType == ModuleCustVend::Vend )
          )
       && RContractTable.RContractAccount == bankClientPayment_RU.RContractAccount
       && RContractTable.RContractCode == bankClientPayment_RU.RContractCode
Добавлено: понятно, что при правке существующих select'ов скорее всего будете оставлять так как есть. Вопрос как вы предпочитаете, когда сами создаете select'ы
__________________
полезное на axForum, github, vk, coub.
Старый 24.06.2011, 20:50   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
предыдущее достаточно интересное обсуждение здесь Как лучше оформлять несколько условий в select where?

по наводке vanokh
процитирую Best Practice

ax3.0
Нажмите на изображение для увеличения
Название: Dev_BPHB_chm.PNG
Просмотров: 575
Размер:	116.4 Кб
ID:	6956

ax2009
Нажмите на изображение для увеличения
Название: BestPractice2009.PNG
Просмотров: 573
Размер:	69.4 Кб
ID:	6957
__________________
полезное на axForum, github, vk, coub.
Старый 24.06.2011, 22:27   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от mazzy Посмотреть сообщение
Как лучше оформлять несколько условий в select where?
Вариант 1. (операторы после условия)
Вариант 2. (операторы до условия)
Как вы предпочитаете ставить операторы между условиями?
Вспомнилась что-то классика:
Цитата:
- Вы хотите курить, как я вижу? - неожиданно обратился к Бездомному неизвестный, - вы какие предпочитаете?
- А у вас разные, что ли, есть? - мрачно спросил поэт, у которого папиросы кончились.
- Какие предпочитаете? - повторил неизвестный.
- Ну, "Нашу марку", - злобно ответил Бездомный.
Незнакомец немедленно вытащил из кармана портсигар и предложил его Бездомному:
- "Наша марка".
Возвращаясь к нашим баранам, в связи с чем, собственно, возник вопрос?
Старый 24.06.2011, 22:49   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Вспомнилась что-то классика:Возвращаясь к нашим баранам, в связи с чем, собственно, возник вопрос?
ни с чем. давно хотел спросить. правил очередной запрос - спросил
__________________
полезное на axForum, github, vk, coub.
Старый 25.06.2011, 11:18   #5  
Alexanderis.ua is offline
Alexanderis.ua
Участник
 
53 / 40 (2) +++
Регистрация: 25.12.2008
Адрес: Киев, Украина
Операторы до условия.
В самом начале знакомства с аксаптой увидел такую запись. Мне показалась более наглядной.
Теперь уже привык и не задумываюсь.
Со сложными условиями примерно так.
X++:
    while select bankClientPayment_RU
           where bankClientPayment_RU.RContractAccount
       notexists join RContractTable
           where (  (  RConractTable.RContractPartnerType  == RContractPartnerType::Cust
                    && BankClientPayment_RU.PartnerType    == ModuleCustVend::Cust )
                 || (  RContractTable.RContractPartnerType == RContractPartnerType::Vend
                    && BankClientPayment_RU.PartnerType    == ModuleCustVend::Vend ))
              && RContractTable.RContractAccount           == bankClientPayment_RU.RContractAccount
              && RContractTable.RContractCode              == bankClientPayment_RU.RContractCode
Видел, что некоторые еще и скобки на разные строки разносят. Наверно так даже лучше, но не привык и как-то пока не хочу переучиваться
__________________
If it ain't broke, take it apart and find out why (с)
Старый 25.06.2011, 12:05   #6  
kvan is offline
kvan
Moderator
Аватар для kvan
Дети Юза
 
775 / 49 (3) +
Регистрация: 07.08.2002
Адрес: Donetsk
Предпочитаю операторы до условия, в случае сложных условий, внутри этих условий переношу логические операторы после условий, если уж совсем сложные условия то еще и скобки стараюсь разносить.
X++:
select firstonly paymentTrans
where paymentTrans.AccountNum == factureJour.CustVendInvoiceAccount
   && paymentTrans.Voucher    == factureJour.Voucher
   && paymentTrans.Prepayment == NoYes::Yes
   && (paymentTrans.CurrencyCode == "UAH" ||
       paymentTrans.CurrencyCode == "USD");
__________________
С уважением, kvan.

Последний раз редактировалось kvan; 25.06.2011 в 12:09.
Старый 25.06.2011, 23:47   #7  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
Ставлю "До", тк если нужно строку потом закомментировать, то проще и аккуратней поставить "//" в начале строки, чем комметировать оператор строкой выше, а потом комментировать строку условия
Старый 26.06.2011, 18:36   #8  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Тоже пишу до условных выражений. Причина та же, что и у других - легкость добавления и комментирования. Кроме того, люблю выравнивать части кода, а если делать операторы в конце строки, то выравнивание не такое красивое, особенно, если строка длинная - бывает, что на небольшом мониторе просто не видно как связаны условия - операторы выходят слишком далеко вправо. Если же они слева, то сразу видно как связаны строки оператора друг с другом.
Старый 26.06.2011, 19:10   #9  
Daiver is offline
Daiver
Участник
Самостоятельные клиенты AX
 
177 / 44 (2) +++
Регистрация: 19.07.2005
Адрес: Москва
Указываю всегда после. Оно может не очень удобно, но БестПрактикс. Если каждый будет лепить в коде так как ему удобно, то сопровождать такой код будет совсем не весело.

Кстати, можно устроить еще один опрос, В какой степени программеры Акс следуют рекомендациям БестПрактикс?
Старый 26.06.2011, 22:58   #10  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Daiver Посмотреть сообщение
Указываю всегда после. Оно может не очень удобно, но БестПрактикс.
ага, только устаревший годков эдак на несколько...
Цитата:
Сообщение от Daiver Посмотреть сообщение
Если каждый будет лепить в коде так как ему удобно, то сопровождать такой код будет совсем не весело.
Кто бы спорил, однако, это, по-моему, не самое страшное, что может случиться по ходу сопровождения чужого кода. Вот тот же <CENSORED> <BEEP> <CENSORED> copy-paste - он куда <CENSORED> %$ТЬ <CENSORED> больше э... выводит из состояния душевного равновесия, нежели положение амперсандов в условиях where.
Цитата:
Сообщение от Daiver Посмотреть сообщение
Кстати, можно устроить еще один опрос, В какой степени программеры Акс следуют рекомендациям БестПрактикс?
О-о-о, да-а-а-а!.. (с) м/ф "Гадкий я". Например, кто перевел весь свой код на использование шаблона "инкапсулированный конструктор"? Если бы локализаторы потрудились это сделать хотя бы с классом ComExcelDocument_RU, не говоря уже про остальные, мне бы, к примеру, не пришлось парить себе мозг тем, что делать со 100+ местами в коде, где экземпляры этого класса создаются через new, в попытках перевести его на рельсы .NET. Вот с тем же семейством SysExcel* в этом плане все просто: взял и подменил в construct() возвращаемый класс в полном соответствии с принципом подстановки Лисков, ну там еще парочку десятков мест подправил, где вся инкапсуляция рушится из-за прямой работой с Excel через COM (см. также Ошибка времени выполнения в ComExcelDocument_RU.findRange()).
Старый 27.06.2011, 13:54   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
соотношение не слишком изменилось
__________________
полезное на axForum, github, vk, coub.
Теги
select, как правильно, оформление кода, условия

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как лучше оформлять несколько условий в select where? mazzy DAX: Программирование 32 24.06.2011 20:40
select в X++ и список значений в условии where Prophetic DAX: Программирование 20 17.08.2010 18:43
QueryBuildRange в select.. where propeller DAX: Программирование 11 30.09.2008 13:35
Разница NotInTTS и Found Logger DAX: База знаний и проекты 6 18.09.2008 12:35
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:04.