27.02.2015, 17:47 | #1 |
Участник
|
Сопоставление проводок по клиенту. Странная Ошибка
Уважаемые господа, добрый день,
У нас возникла следующая проблема. Акс 2009. Sp 5. При ручном (или автоматическом) сопоставлении проводок по клиенту в валюте рубль ( при основной валюте доллар) с разным курсом возникает ошибка: "Обновление операции ED-AA01577 отменено во избежание избыточного сопоставления. Сопоставляемое сальдо поставщика или клиента не должно превышать суммы проводки при данной проводке." Проводки по клиенту см приложение Сначала успешно сопоставляются проводки ED-AA01577 и ED-AA01576 (с разными курсами валют) ,но при сопоставлении оставшейся открытой части проводки ED-AA01577 и ED-AA01578(с разными курсами валют) возникает вышеуказанное сообщение об ошибке Обнаружили что в в классе CustVendSettle в методе calcSettleAmountCurForCredit При обработке сопоставления открытых проводок ED-AA01577 и ED-AA01578 не выполняется условие, и именно из-за него возникает ошибка if (custVendTransCredit.AmountMST //-0.15 для нашего случая == custVendTransCredit.SettleAmountMST + custVendTransCredit.ExchAdjustmentRealized + roundedSettleAmountMst) //-0.08+0+-0.08 для нашего случая Пришли к выводу что для правильной работы нужно в условии" >= " вместо "==" if (custVendTransCredit.AmountMST >= custVendTransCredit.SettleAmountMST + custVendTransCredit.ExchAdjustmentRealized + roundedSettleAmountMst) Проверили как работает сопоставление на этом и других случаях.Вроде все отрабыватывает корректно. Правильно ли сделано ли такое исправление? Есть ли случаи, когда важно было чтобы в данном условии был именно знак равенства? protected AmountCur calcSettleAmountCurForCredit(AmountCur _settleAmountCurDebit) { AmountCur settleAmountCur; AmountCur roundedSettleAmountCur; AmountCur remainingAmount; AmountMST settleAmountMst; AmountMST roundedSettleAmountMst; CurrencyExchHelper currencyHelper; ; settleAmountCur = -(_settleAmountCurDebit / paymToInvoiceRate); currencyHelper = CurrencyExchHelper::newCurrency(custVendTransCredit.company(), custVendTransCredit.CurrencyCode); roundedSettleAmountCur = currencyHelper.roundAmount(settleAmountCur); remainingAmount = custVendTransCredit.AmountCur - custVendTransCredit.SettleAmountCur - roundedSettleAmountCur;//remainingAmount =0.01 длянашегослучая if (remainingAmount != 0) { // when not fully settled in transaction currency, check if it will be fully settled in mst settleAmountMst = this.calcSettleAmountMstForCredit(settleAmountCur, false); currencyHelper.parmCurrency(creditCompanyCurrency); roundedSettleAmountMst = currencyHelper.roundAmount(settleAmountMst); if (custVendTransCredit.AmountMST //-0.15 для нашего случая == custVendTransCredit.SettleAmountMST + custVendTransCredit.ExchAdjustmentRealized + roundedSettleAmountMst) //-0.08+0+-0.08 для нашего случая { // The remaining amount is converted to mst and then rounded, and if it is then equal to zero, // adjust the settleAmountCur to be equal to the unsettled amount. currencyHelper.parmCurrency(custVendTransCredit.CurrencyCode); currencyHelper.parmExchRate(custVendTransCredit.exchRateCurToMst()); currencyHelper.parmIsTriangulated(UnknownNoYes::No); remainingAmount = currencyHelper.calculateAmountCurToMst(remainingAmount, true); if (remainingAmount == 0) { settleAmountCur = custVendTransCredit.AmountCur - custVendTransCredit.SettleAmountCur; } } } return settleAmountCur; } Последний раз редактировалось Aquarius; 27.02.2015 в 17:49. |
|
|
|