Показать сообщение отдельно
Старый 17.02.2010, 12:13   #1  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
-> MarkupTable.checkCustAccount(), баг?
Затрудняюсь с позиционированием вопроса, пусть будет "Прочий".
Просьба перенести при необходимости.


Указанный в сабже метод на таблице (Версии 3.0 - 2009, вроде не менялось)
X++:
boolean  checkCustAccount()
{
    boolean  ok = true;
    ;

    if (this.CustAccount)
    {
        ok = LedgerTable::checkAllowPosting(this.CustAccount);
    }

    if (this.CustType != MarkupType::LedgerAccount && (this.CustType != MarkupType::Item || !PurchParameters::find().PostChargeAccount))
    {
        if (this.CustAccount)
            ok = checkFailed("@SYS25165");
    }
    else
    {
        if (this.CustType != MarkupType::Item || !PurchParameters::find().PostChargeAccount)
            if (!this.CustAccount)
                ok = checkFailed("@SYS25989");
    }

    return ok;
}
Варианта 3, либо тут баг, либо лишний код, лио я вообще ничего не понимаю.
Поясню:
- В первый блок ( if (this.CustType != MarkupType::LedgerAccount && (this.CustType != MarkupType::Item || !PurchParameters::find().PostChargeAccount)) ) заходим, если тип Клиент/Поставщик, либо тип Номенклатура с НЕустановленной птичкой PostChargeAccount. В этом случае счёт задавать нельзя. С этим всё понятно.
- Во второй блок (else) мы заходим соответсвенно в остальных случаях (Тип = Бух.Счёт либо тип Номенклатура с установленной птичкой). Но на горизонте появляется этот второй IF (if (this.CustType != MarkupType::Item || !PurchParameters::find().PostChargeAccount)), вторая часть которого вообще в данном случае бессмысленна, т.к. с неустановленной галкой при типе Номенклатура мы в этот блок в принципе не зайдём.
Может конечно они ошиблись с отрицанием, но тогда весь этот IF во втором блоке - тавтология. Да и судя по соседнему методу checkCustType(), это не совсем верно...

Вообщем не совсем понятно с точки зрения функционала, как правильно...
__________________
Zhirenkov Vitaly