16.01.2008, 18:49 | #1 |
Участник
|
Неверный откат сопоставленных транзакций
Проблема: при импорте транзакций из внешней системы в главный журнал была допущена ошибка, в результате которой журнал был проведен неверно. Чтобы вручную не откатывать 1500 транзакций, я написал скрипт, который откатывает их автоматически. Пример:
X++: LedgerJournalTrans ledgerJournalTrans; LedgerTrans ledgerTrans; CustTrans custTrans; VendTrans vendTrans; Args reverseArgs = new Args(); MenuFunction menuFunction; SysOperationProgress progress; TempStr message; TmkImportStatus journalImportStatus = TmkImportStatus::Imported; // find ledgerJournalTrans ... switch(ledgerJournalTrans.AccountType) { case LedgerJournalAcType::Cust: custTrans = CustTrans::findFromInvoice(line.InvoiceId, line.AccountNum); reverseArgs.record(custTrans); menuFunction = new MenuFunction(menuitemactionstr(TransactionReversal_Cust), MenuItemType::Action); menuFunction.run(reverseArgs); break; case LedgerJournalAcType::Vend: vendTrans = VendTrans::findVoucherDateAmount(ledgerJournalTrans.Voucher, ledgerJournalTrans.DocumentDate, line.GrossAmountCur); reverseArgs.record(vendTrans); menuFunction = new MenuFunction(menuitemactionstr(TransactionReversal_Vend), MenuItemType::Action); menuFunction.run(reverseArgs); break; case LedgerJournalAcType::Ledger: ledgerTrans = LedgerTrans::findVoucher(ledgerJournalTrans.Voucher); while select ledgerTrans index VoucherDateIdx where ledgerTrans.Voucher == ledgerJournalTrans.Voucher { reverseArgs.record(ledgerTrans); menuFunction = new MenuFunction(menuitemactionstr(TransactionReversal_Ledger), MenuItemType::Action); menuFunction.run(reverseArgs); } break; default: error("@TMK180"); // This type of transaction cannot be reversed } В результате отката появилась разница между сальдо на общем счете клиентов и суммой открытых транзакций по клиентам. Провел исследования - при если откатывать откат или производить другие манипуляции, это приводит к ухужшению ситуации. Единственное что пока нашел - это откатить сопоставленный платеж. Но тогда обе откаченные транзакции появляются в листе закрытых транзакций, причем lastSettledVoucher у них равен ваучеру отката. Может кто посоветует что делать в этой ситуации, может просто почистить таблицы CustSettlement, CustOpenTrans и подправить в CustTrans все что связано с settlement? Но тогда есть еще налоги, курсовые разницы и прочие интересные штуки. Ax 4.0 SP1 |
|