Да, действительно. Вспомнил про эту багу.Столкнулся при переходе.Особенно неприятно, когда она всплывает после пересчетов: Счета переворачиваются.
Вся беда в методе класса 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);
кстати и сторнирование через немедленное получение тоже не помечает проводки как сторно, в случае, когда сумма нулевая