Показать сообщение отдельно
Старый 26.09.2012, 10:25   #6  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Да, действительно. Вспомнил про эту багу.Столкнулся при переходе.Особенно неприятно, когда она всплывает после пересчетов: Счета переворачиваются.
Вся беда в методе класса SalesFormLetter :
X++:
protected void initFromSalesTotals(SalesTotals _salesTotals)
{
    ........................................................
    if (this.canBeCreditnote())
    {
        if (TaxParameters::find().CashDiscOnInvoice)
        {
            cashDiscAmount = salesTotals.cashDiscAmount();

            if (salesTotals.totalAmountCashDiscOnInvoice(true) < 0)
                creditNote = NoYes::Yes;
            else
                creditNote = NoYes::No;
        }
        else
        {
            if (salesTotals.totalAmount() < 0)
                creditNote = NoYes::Yes;
            else
                creditNote = NoYes::No;
        }
    }
    else
    {
        creditNote = NoYes::No;
    }
}
Здесь видно, что сторно это или нет, определяется исключительно только по сумме.

Можно обойтись небольшой кровью:
В классе SalesFormLetter_Invoice в методе UpdateNow() вместо
X++:
inventMovement.parmStorno_RU(creditNote && salesParmUpdate.Storno);
можно сделать так
X++:
inventMovement.parmStorno_RU((creditNote || salesParmLine.DeliverNow < 0) && salesParmUpdate.Storno);
ledgerVoucher.findLedgerVoucherObject().parmCorrection((creditNote || salesParmLine.DeliverNow < 0) && salesParmUpdate.Storno);
кстати и сторнирование через немедленное получение тоже не помечает проводки как сторно, в случае, когда сумма нулевая
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.

Последний раз редактировалось Pustik; 26.09.2012 в 10:53.
За это сообщение автора поблагодарили: Cardagant (1).