Перейти к содержанию

Неправильное использование метода "ОтменитьТранзакцию"

При работе с транзакциями, необходимо предусмотреть обработку исключений – в блоке Исключение нужно сначала вызвать метод ОтменитьТранзакцию, а затем выполнять другие действия, если они требуются. Такое правило необходимо, чтобы убрать потенциальную возможность выброса исключения в блоке "Исключение", что может привести к тому, что метод "ОтменитьТранзакцию" не будет вызван.

Неправильно:

Процедура ЗаписатьДокумент()
    НачатьТранзакцию();
    Попытка
        ДокументОбъект.Записать();
        ЗафиксироватьТранзакцию();
    Исключение
        ЗаписатьВЛогОшибку();   // Опасность выброса повторного исключения
        ОтменитьТранзакцию(); 
    КонецПопытки;
КонецПроцедуры

Правильно:

Процедура ЗаписатьДокумент()
    НачатьТранзакцию();
    Попытка
        ДокументОбъект.Записать();
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию(); 
        ЗаписатьВЛогОшибку();   // Сначала отменяем транзакцию, потом делаем всё остальное
    КонецПопытки;
КонецПроцедуры

См. также: * Транзакции: правила использования