![]() |
#13 |
Участник
|
Добрый день, спасибо за советы.
С профилями, округлениями и др. все нормально. Вторичную валюту не используем. Перенос в основной валюте. Внутри одной компании. В данных проблемных строк в журнале переноса и в InventTrans ничего подозрительного не увидел. Разве, что журнал сторно. Дошел до следующего. Дошел до ошибки в коде в методе LedgerBondClient_RU.bondVRef2VRef() Для всех "нормальных" строк он отрабатывает по одной ветке, для "ненормальных" (на которых ошибка возникает) по другой. Вот код. X++: public void bondVRef2VRef(LedgerBondVrefId_RU _vRefId1, LedgerBondVrefId_RU _vRefId2, Amount _amount = 0.0, LedgerBondAmountType_RU _amountType = LedgerBondAmountType_RU::Currency, LedgerBondOrder_RU _bondOrder = LedgerBondOrder_RU::Auto, boolean _roundToCredit = false) { LedgerBondVrefId_RU vRefIdDebit; LedgerBondVrefId_RU vRefIdCredit; LedgerBondTransObject_RU bondTransObject2, bondTransObject1 = this.bondTransObject(_vRefId1); Amount amount1 = _amount, amount2; LedgerBondAmountType_RU amountType = _amountType; ; if (ledgerBondServer.fatalErrorState()) return; if (! amount1) { // здесь все отрабатывает для "нормальных" строк // без ошибок, т.е. amount2 и amount1 получают // ненулевые значения amount1 = bondTransObject1.remainAmountCur(); bondTransObject2 = this.bondTransObject(_vRefId2); if (ledgerBondServer.fatalErrorState()) return; // для нормальных строк в bondTransObject2.remainAmountCur() есть значение // для "ненормальных" возращается 0 amount2 = bondTransObject2.remainAmountCur(); if (! amount1 || ! amount2) { amount1 = bondTransObject1.remainAmountMST(); amount2 = bondTransObject2.remainAmountMST(); amountType = LedgerBondAmountType_RU::MST; } if (! amount1 || ! amount2) { // в случае, когда amount2 == 0 алгоритм приземляется здесь amount1 = bondTransObject1.remainAmountMSTSecond(); amount2 = bondTransObject2.remainAmountMSTSecond(); amountType = LedgerBondAmountType_RU::MSTSecondary; } amount1 = min(abs(amount1), abs(amount2)); } ......... ......... // ну и далее при amount1 == 0, возникает ошибка в во второй ветке LedgerBondAmountType_RU::MSTSecondary // ledgerBondServer.addBondProrateAmountMSTSecond() // т.к. как там внутри соответствующая проверка // в нормальном же случае все идет по последней ветке // amount1 ненулевой, ошибки внутрях не возникает switch (amountType) { case LedgerBondAmountType_RU::MST : ledgerBondServer.addBondProrateAmountMST(vRefIdDebit, vRefIdCredit, amount1, _roundToCredit); break; case LedgerBondAmountType_RU::MSTSecondary : ledgerBondServer.addBondProrateAmountMSTSecond(vRefIdDebit, vRefIdCredit, amount1, _roundToCredit); break; case LedgerBondAmountType_RU::Currency : ledgerBondServer.addBondProrateAmountCur(vRefIdDebit, vRefIdCredit, amount1, _roundToCredit); break; } Последний раз редактировалось Romb; 01.03.2013 в 09:17. |
|
Теги |
ledgerbondserver_ru, не балансируют |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|