Использование транзакции при записи двух зависимых объектов

1. yurowski 33 11.03.19 08:42 Сейчас в теме
Здравствуйте.
Хотелось бы понять как правильно реализовать в транзакции запись двух объектов.

Т.е. есть процедура, которая записывает объект.
Перед записью, она создает документ, вызывая другую процедуру из общего модуля.

Если запись документа не выполнена, то нужно отменить дальнейшие действия в текущем модуле.
И наоборот, если с документом всё нормально, то что-то пошло не так с объектом, то отменить и запись документа и изменения объекта.

Будет ли работать конструкция без вызова - ОтменитьТранзакцию()?

/// тело процедуры
.................
НачатьТранзакцию();

ОбщийМодуль.СоздатьДок();

Попытка
ТекущийОбъект.Записать(); 
Исключение
//некое сообщение
КонецПопытки

ЗафиксироватьТранзакцию();

Процедура СоздатьДок()

Док = Док.Имя.СоздатьДок();

Попытка
Док.Записать();
Исключение
КонецПопытки

КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 11.03.19 08:50 Сейчас в теме
Нет, не будет. Любая попытка работы с ИБ внутри транзакции после ошибки работы с ИБ приведет к ошибке "В этой транзакции уже происходили ошибки". Даже если Вы обернули такую ошибку в блок "Попытка-Исключение".

Предлагаю Вам рассмотреть следующий вариант:
/// тело процедуры 
................. 
НачатьТранзакцию(); 

Попытка

	ОбщийМодуль.СоздатьДок(); 
 
	ТекущийОбъект.Записать(); 
	
	ЗафиксироватьТранзакцию(); 

Исключение 

	ОтменитьТранзакцию();
	
	//некое сообщение

КонецПопытки 

/// конец тела процедуры
......................... 

Процедура СоздатьДок() 

	Док = Док.Имя.СоздатьДок(); 
	Док.Записать();  

КонецПроцедуры
Показать
pechenka1440; yurowski; +2 Ответить
3. SedovSU@mail.ru 298 11.03.19 09:17 Сейчас в теме
ПРи вызове ЗафиксироватьТранзакцию() будет выходит ошибка постоянна В этой транзакции уже происходили ошибки.
Очень хороший вариант предложен в (2)
4. yurowski 33 11.03.19 10:40 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот