Любопытно, что в стандартной документации в разделе Exception Handling про такую особенность исключений ничего не сказано.
Более того написано буквально следующее :
Цитата:
One strategy is to have the last catch statement leave the exception type unspecified. This means it handles all exceptions that are not handled by a previous catch. This strategy is appropriate for the outermost try - catch blocks.
X++:
try { /* Code here. */ }
catch (Exception::Numeric) { info("Caught a Numeric exception."); }
catch { info("Caught an exception."); }
Т.е. если четко следовать документации, то можно нагородить ошибок.
Хотя формально все правильно, просто в некоторых редких случаях разъезжается InventSum и InventTrans.
Также аналогичная проблема может проявиться в любом месте при конфликте обновления записи и выглядеть это будет так словно транзакция закоммитилась посередине.