А вы не могли бы попробовать провести эксперимент.
ttsBegin / ttsCommit
методы есть на самом табличном буфере(в частности при работе с времянками in memory лучше использовать их)
попробуйте в методе Write задействовать не обычный ttsbegin / commit а одноименные методы на буфере датасорса.
Есть подозрение что для работы датасорса формы ядро у вас использовало отдельное соединение к базе и при выбросе исключения откатило именно транзакцию открытую в этом соединении. А основную транзакцию в дефолтном соединении, которую вы открыли написав ttsBegin - не откатило.
Вот хотелось бы чтобы там был try catch и в catch проверить открыта ли транзакция на соединении связанном с буфером датасорса (я правда на все 100 не уверен что это отдельное соединение - вот и проверим). Как проверить уровень транзакции - Напрямую на табличном буфере методов нет. Но можно попробовать вызвать tableBuffer.ttsCommit() в цикле со счетчиком. Если уровень транзакции 0 то вызов должен по идее выругаться.
|