В классе SalesFormLetter_Invoice в методе updateNow есть цикл по SalesFormLine (список SalesParmLine формируется в классе TradeTotals и записывается в recordListSalesParmLine)
X++:
while (salesParmLine)
{
..
if (! recordListSalesParmLine.next(salesParmLine))
break;
}
{
Внутри этого цикла есть ветка
X++:
if (SalesParameters::find().ReduceInvoice)
{
if (! lineValue)
continue;
else
lineAmountExist = true;
}
а lineAmount в рассматриваемом случае как раз 0.
т.е. возвращаемся к началу цикла с прежним курсором SalesParmLine
в итоге получаем ошибку в методе
X++:
protected void checkBeforePosting()
{
if (salesParmLine.remainBefore != (salesLine.remainSalesFinancial + salesLine.remainSalesPhysical))
throw error("@SYS23025");
...
}
т.к. кол-ва уже не совпадают (текущий SalesParmLine отработан)
Таким образом сняв галочку SalesParameters.ReduceInvoice (Автоматическое сокращение по накладной, Уменьшать строки сопоставления автоматически во время разноски накладной?) устраняем ошибку. (Назначение галочки не разбирал)
Похоже на баг