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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.07.2009, 23:40   #1  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
? PriceDisc.findPrice в DAX2009 - непонятно
Поиск цен/скидок в ценовых соглашениях.

В методе поиска цены - PriceDisc.findPrice - на gls слое, т.е. я так понимаю в восточно-европейской локализации, добавили в этот метод много изменений, в частности работу с договорами. В частности добавлено следующее условие:
X++:
    ret =   (!checkContract || this.searchbyRContract()) && ....
Лично мне кажется что это условие по "или" крайне противоречивым (возможно отрицание лишнее).
В итоге получается достаточно странная ситуация, когда "птичка" Цены\скидки по договору стоит, складская аналитика в поиске используется, но это странное условие сразу выкидывает нас на последнюю строчку этого оператора:
X++:
this.findPriceAgreement(_priceGroupId, InventDim::inventDimIdBlank(),rContractCode,rContractAccount);
в следствии чего поиск осуществляется без учёта аналитик вообще... Очень странное поведение. Кто-нибудь может объяснить его логически, или же это таки баг?

версия приложения 5.0.1500.809
__________________
Zhirenkov Vitaly
Старый 26.07.2009, 23:45   #2  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
и немного ещё...
Кстати говоря подобный код имеется только в случае поиска цены по клиентам. В случае цены поставщиков или скидок по любому модулю ничего подобного не делается... Есть общий код на New класса:
X++:
    if ((_moduleType == ModuleInventPurchSales::Sales && SalesParameters::find().rContractPriceDisc) ||
        (_moduleType == ModuleInventPurchSales::Purch && PurchParameters::find().rContractPriceDisc)
       )
    {
        rContractCode       = _rContractCode;
        rContractAccount    = _rContractAccount;
    }
Вроде как этого должно быть достаточно...

На всякий случай приведу весь код метода :
X++:
boolean  findPrice(PriceGroupId _priceGroupId,
                   boolean      _useItemPrice = true)
{
    boolean         findAll     = true;
    boolean         findItemDim = true;

    InventDim       inventDimAllActivated;
    InventDim       inventDimItemDimActivated;
    InventDim       inventDimNoneActivated;

    InventTable     inventTable;
    // <GEEU>
    boolean         ret;
    boolean         checkContract;
    // </GEEU>
    ;

    usedPriceGroupId = _priceGroupId;

    if (itemId)
    {
        inventTable = InventTable::find(itemId);

        switch (moduleType)
        {
            case ModuleInventPurchSales::Purch:
                inventDimAllActivated.copyActivatePurchPriceAll(inventTable.DimGroupId, inventDim);
                // <GEEU>
                checkContract = PurchParameters::find().rContractPriceDisc;
                // </GEEU>
                break;
            case ModuleInventPurchSales::Sales:
                inventDimAllActivated.copyActivateSalesPriceAll(inventTable.DimGroupId, inventDim);
                // <GEEU>
                checkContract = SalesParameters::find().rContractPriceDisc;
                // </GEEU>
                break;
            default:
                inventDimAllActivated.copyItemDim(inventTable.DimGroupId, inventDim);
        }

        inventDimItemDimActivated.copyItemDim(inventTable.DimGroupId, inventDimAllActivated);

        findAll     = !InventDim::isInventDimEqual(inventDimAllActivated, inventDimItemDimActivated);
        findItemDim = !InventDim::isInventDimEqual(inventDimItemDimActivated,inventDimNoneActivated);

        inventDimAllActivated       = findAll       ? InventDim::findDim(inventDimAllActivated)     : inventDimAllActivated;
        inventDimItemDimActivated   = findItemDim   ? InventDim::findDim(inventDimItemDimActivated) : inventDimItemDimActivated;
    }

    /* <SYS>
    return ((findAll     && inventDimAllActivated.RecId     && this.findPriceAgreement(_priceGroupId, inventDimAllActivated.InventDimId))       ||
    </SYS> */
    // <GEEU>
    ret =   (!checkContract || this.searchbyRContract()) && (findAll     && inventDimAllActivated.RecId     && this.findPriceAgreement(_priceGroupId, inventDimAllActivated.InventDimId,rContractCode,rContractAccount)) ||
            (findItemDim && inventDimItemDimActivated.RecId && this.findPriceAgreement(_priceGroupId, inventDimItemDimActivated.InventDimId,rContractCode,rContractAccount))   ||
                                                               this.findPriceAgreement(_priceGroupId, InventDim::inventDimIdBlank(),rContractCode,rContractAccount);

    return  ret ||
            (findAll     && inventDimAllActivated.RecId     && this.findPriceAgreement(_priceGroupId, inventDimAllActivated.InventDimId))       ||
            // </GEEU>
            (findItemDim && inventDimItemDimActivated.RecId && this.findPriceAgreement(_priceGroupId, inventDimItemDimActivated.InventDimId))   ||
                                                               this.findPriceAgreement(_priceGroupId, InventDim::inventDimIdBlank())            ||
             /* <SYS>
             (_useItemPrice && this.findItemPrice()));
             </SYS> */
             // <GEEU>
             (_useItemPrice && this.findItemPrice());
             // </GEEU>
}
__________________
Zhirenkov Vitaly
Старый 15.02.2012, 20:30   #3  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
Цитата:
Сообщение от ZVV Посмотреть сообщение
Очень странное поведение. Кто-нибудь может объяснить его логически, или же это таки баг?
Да похоже там просто забыли пару скобок поставить...

X++:
    ret =   (!checkContract || this.searchbyRContract()) && (
            (findAll     && inventDimAllActivated.RecId     && this.findPriceAgreement(_priceGroupId, inventDimAllActivated.InventDimId,        rContractCode,  rContractAccount,   rContractPartnerCode))  ||
            (findItemDim && inventDimItemDimActivated.RecId && this.findPriceAgreement(_priceGroupId, inventDimItemDimActivated.InventDimId,    rContractCode,  rContractAccount,   rContractPartnerCode))  ||
                                                               this.findPriceAgreement(_priceGroupId, InventDim::inventDimIdBlank(),            rContractCode,  rContractAccount,   rContractPartnerCode));
С кем не бывает

Там еще прикол в том, что если не указать договор, то поиск будет производиться по записям с пустым договором, хотите вы этого или нет.
__________________
Axapta non erubescit

Последний раз редактировалось b_nosoff; 15.02.2012 в 20:33.
Старый 30.12.2013, 18:38   #4  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
!
Баг бережно сохранили и перенесли в DAX 2012 R2
__________________
Axapta non erubescit
Теги
ax2009, баг, договор, коммерческие соглашения, цена, прайс

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Заказы на перемещения и проводки в ГК в DAX2009 Starling DAX: Функционал 16 10.06.2009 11:43
Вопросы по OLAP в DAX2009 oleg_e DAX: Функционал 9 10.12.2008 02:02
Настройка листа калькуляции издержек (DAX2009) petr DAX: Функционал 0 23.09.2008 13:36
Дополнительные реквизиты номенклатуры. DAX2009. slava09 DAX: Функционал 30 16.09.2008 14:50
Апгрейд существующего приложения на DAX2009 petr DAX: Администрирование 3 03.09.2008 18:54

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

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

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