|
Подписки на события операция с транзакцией в коде |
☑ |
0
User_Agronom
07.05.15
✎
11:47
|
В подписке на событие нужно изменить одновременно три объекта. Если при изменении хотя бы одного из них возникнет ошибка, то нужно отменить все изменения.
По моему два варианта:
1. В процедуре, выполняемой по подписке
Попытка
Объект1 = Элемент1.ПолучитьОбъект();
// Код изменений
Объект1.Записать();
Объект2 = Элемент2.ПолучитьОбъект();
// Код изменений
Объект2.Записать();
Объект3 = Элемент3.ПолучитьОбъект();
// Код изменений
Объект3.Записать();
Исключение
Отказ = Истина
КонецПопытки;
2. Или пробовать мутить с транзакцией
НачатьТранзакцию();
Попытка
Объект1 = Элемент1.ПолучитьОбъект();
// Код изменений
Объект1.Записать();
Объект2 = Элемент2.ПолучитьОбъект();
// Код изменений
Объект2.Записать();
Объект3 = Элемент3.ПолучитьОбъект();
// Код изменений
Объект3.Записать();
ЗафиксироватьТранзакцию();
Исключение
Отказ = Истина;
ОтменитьТранзакцию();
КонецПопытки;
Уважаемые эксперты: Как будет правильнее?
|
|
1
hhhh
07.05.15
✎
11:52
|
а что за подписка? Может она уже в какой-то транзакции?
|
|
2
User_Agronom
07.05.15
✎
11:53
|
(1) Обработка проведения документа.
|
|
3
Spieluhr
07.05.15
✎
11:56
|
(2) А проведение документа не в транзакции чтоли?
|
|
4
vde69
07.05.15
✎
11:57
|
(2) уже в транзакции, ничего делать не надо...
|
|
5
User_Agronom
07.05.15
✎
11:59
|
(4) Т.е я правильно понял, что
Отказ = Истина
откатит и изменения сторонних объектов?
|
|
6
Spieluhr
07.05.15
✎
12:00
|
(5) да
|
|
7
User_Agronom
07.05.15
✎
12:01
|
(4) (6) Спасибо.
|
|