Такой функционал разарботан компанией ИмпактСофт (
http://www.impactsoft.ru/).
Сходи к ним на сайт и посмотри, там есть описание.
Потом, как надумаешь - купишь %-)
Или можешь сам написать.
Алгоритм достаточно прост,
при этом можно сделать функцию "Отмены применения" и функцию "Отмены учёта".
Вторая включает первую.
Смотри:
1) Находишь операцию, которую хочешь удалить, в General Ledger Entry.
Почему именно в GLE? Потому что туда транслируются операции из всех модулей программы, где, собственно, нужна отмена учёта или применения.
2) После этого по номеру транзакции (поле Transaction No.) находишь связанные операции во всех учётных таблицах и удаляешь их.
Следует учесть, что в некоторых учётных таблицах записей с искомым номером транзакции может и не быть (например, транзакции, касающиеся операций оплаты или отгрузки клиенту не будут найдены в
Vendor Ledger Entry).
3) В процессе удаления не забываешь про таблицу Ledger Dimension Entry, которую тоже нужно почистить в соответствии с теми записями, которые ты удаляешь.
Что касаемо отмены применения, то схема одинакова и для
Vendor Ledger Entry, и для
Cust. Ledger Entry. Делается это таким образом (на примере Customer Ledger Entry):
1) Ищешь в
Cust. Ledger Entry запись, которую хочешь отменить. Находишь соответсующую ей запись в
Detailed Cust. Ledg. Entry.
2) Находишь в
Detailed Cust. Ledg. Entry все те записи, которые были к ней применены (или к которым она была применена). Это можно сделать, отфильтровав записи в данной таблице по полю
"Closed by Entry No.".
3) Восстанавливаешь сумму исходной записи (1) на основании записей (2) и устанавливаешь признак "Открыта".
P.S.
Вообще-то в документации ничего не сказано по поводу того, как быть в той ситуации, когда операции применены неверно. Предполагается, что в любой ситуации можно использовать реверс (по-русски - сторно) для того, чтобы скорректировать ошибку.