Имя: Пароль:
1C
1С v8
Подписки на события операция с транзакцией в коде
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) Спасибо.