1С:Предприятие 8.x не поддерживает настоящие вложенные транзакции — это важно понимать при проектировании логики приложения.
Платформа использует счётчик вложенности транзакций:
НачатьТранзакцию() счётчик увеличивается на 1ЗафиксироватьТранзакцию() счётчик уменьшается на 1На уровне базы данных существует единственная физическая транзакция. Все вложенные вызовы — это лишь эмуляция на стороне платформы 1С.
Это самый критичный момент: вызов ОтменитьТранзакцию() на любом уровне вложенности откатывает всю транзакцию целиком, а не только текущий «вложенный» блок.
Пример опасного сценария:
НачатьТранзакцию(); // счётчик = 1
НачатьТранзакцию(); // счётчик = 2
ОтменитьТранзакцию(); // откат ВСЕЙ транзакции!
ЗафиксироватьТранзакцию(); // вызовет исключение
НачатьТранзакцию() / ЗафиксироватьТранзакцию() / ОтменитьТранзакцию() осознанноПопытка...ИсключениеВ 1С:Предприятие 8.x при вызове ОтменитьТранзакцию() на втором уровне вложенности откатываются только изменения текущего блока, а изменения первого уровня сохраняются.
Новый — ещё не проверен сообществом
Вы