Показать сообщение отдельно
Старый 27.09.2012, 16:28   #2  
avf is offline
avf
Участник
 
31 / 24 (1) +++
Регистрация: 28.06.2007
проблема оказалась шире - для исправления 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;