проблема оказалась шире - для исправления glp-бага пришлось доработать этот же метод следующим образом:
X++:
settledTransAmount = this.settledTransAmount(custVendTrans, dateNull(), toDate);
// BUS-Modification on 06 Сен 2012 at 18:20:18 by avf - Begin
// BF GLP слоя
// if (settledTransAmount && turnoverSettleDebit)
// if ((settledTransAmount && (turnoverSettleDebit || turnoverSettleCredit))) // попытка №1 исправления бага
// Сальдо на конец периода необходимо рассчитывать вне зависимости от того были или нет сопоставления
if (true)
// BUS-Modification on 06 Сен 2012 at 18:20:18 by avf - End
{
settledTransAmount = balanceDebit + turnoverDebit - turnoverSettleDebit - balanceCredit - turnoverCredit + turnoverSettleCredit;
if (settledTransAmount)
{
// BUS-Modification on 27 Сен 2012 at 15:38:08 by avf - Begin
// BF GLP слоя
// Определять проводка по кредиту или по дебету необходимо на основании её суммы,
// а не на основании переменной settledTransAmount,
// значение которой может быть рассчитано выше на основании нулевых переменных balanceDebit и balanceCredit, но реально ненулевого входящего сальдо
// if (this.isCredit(settledTransAmount, custVendTrans))
if (this.isCredit(custVendTrans.AmountMST ? custVendTrans.AmountMST : custVendTrans.AmountCur, custVendTrans))
// BUS-Modification on 27 Сен 2012 at 15:38:08 by avf - End
{
settledBalanceEndCt = -settledTransAmount;
}
else
{
settledBalanceEndDt = settledTransAmount;
}
}
}
ещё порадовал код в методе loopBalanceTrans класса RLedgerSheetEngine_TurnoverCustVend, в котором значение переменной transAmount рассчитывается как сумма сопоставлений до даты toDate, и следующей же строчкой её значение рассчитывается уже новым образом)
X++:
transAmount = this.settledTransAmount(trans, dateNull(), toDate);
transAmount = balanceDebit - turnoverSettleDebit - balanceCredit + turnoverSettleCredit;