Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Транзакция внутри обработки проведения

Транзакция внутри обработки проведения
Я
   Wefast
 
30.01.20 - 13:57
Есть документ.
В обработчике проведения, берутся связанные документы и изменяются.

Хочу сделать так, чтобы при изменение свяазанных документов если в одном из них возникнет ошибка - не менять ни один свяазанный документ.

Как это сделать?

НачатьТранзакцию()

Попытка
//ЦИкл обхода связанных документов
ЗафиксироватьТранзакцию()
Исключение
ОтменитьТранзакцию()
//Сообщить что то
КонецПопытки


А если я хочу в том числе и главный документ при этом не записывать?

Достаточно ли будет написать:
Для Каждого зависимДокумент из Доки Цикл
Если Отказ Тогда
Прервать;
КонецЕсли;

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

КонецЦикла;

Или надо:
НачатьТранзакцию()

Попытка
//ЦИкл обхода связанных документов
ЗафиксироватьТранзакцию()
Исключение
ОтменитьТранзакцию()
//Сообщить что то
ВызватьИсключение (ИЛИ тут написать просто Отказ = Истина)
КонецПопытки
   vicof
 
1 - 30.01.20 - 14:02
Обработка проведения уже делается в транзакции. И вложенные транзакции делать в ней нет смысла.
   Irbis
 
2 - 30.01.20 - 14:04
(0) Не надо так делать. Слишком до фейхоа последствий. Например при отмене проведения что делать, а если изменяемый документ окажется заблокированным? А если впоследствии пометят на удаление какой то из документов. Думай над логикой, так меньше врееда для дела.
   Wefast
 
3 - 30.01.20 - 14:10
(2) да вроде ок все.

У меня есть ЗаказПокупателя, КорректировкаЗаказаПокупателя.

При проведение документа Платежное поручение входящее в заказе проставляется реквизит.

В корректировках он тоже есть. И их там тоже нужно проставить

Нужно отработать 3 варианта:
1) При котором запишется что может, а для других выведется сообщение
2) НЕ проведутся вообще все документы
3) Не проведутся только Заказ и его корректировки


в 1 варианте я так понимаю запись каждого документа просто делать через попытку исключение
во 2 делать все через попытку, присвоит Отказ = Истина( что отменит проведение Платежного поручения) и сделать проверку на отказ
в 3 случае проведение Заказа и его корректировок поместить в одну попытку, или я думаю лучше в транзакцию
   unenu
 
4 - 30.01.20 - 14:19
если вероятность того, что со связанным доком будет работать только эта обработка и больше никто и ничто равна 100%, то вложенные транзакции не зло.
   Wefast
 
5 - 30.01.20 - 14:23
(4) какой вариант кода что я привел тогда правильный?
   FIXXXL
 
6 - 30.01.20 - 14:26
(3) не стОит такое городить...
если конфа современная, сделай свою галку через доп.свойство и не придется расследовать "...в этой транзакции уже происходили ошибки..." :)
   FIXXXL
 
7 - 30.01.20 - 14:28
(6) если прям очень хочется: можно через доп.свойство организовать "очередь" платежек, по которым надо изменить связанные доки
обрабатывать "очередь" отдельным рег.заданием
   ДНН
 
8 - 30.01.20 - 14:30
Просто меняешь в обработке проведения зависимые документы и записываешь. Без попытки. Если будет ошибка - транзакция сама отменется. А вообще лучше делать это не в обработке проведения, а перед записью с проверкой режима записи
   Wefast
 
9 - 30.01.20 - 14:32
(7) Городить какие то очереди с регламентым заданием вот уж действительно как по мне "горождение" то еще.

Я правда все равно не понял твоей идеи.

Не понимаю какие могут возникнуть ошибки при моем подходе, если выводить в исключениях сообщения.


(8) Но это вариант при котором все документы не запишутся?
Если платежка не сможет провестись - зачем мне менять какие то другие документы.
В перед записью исправлю связанные документы, а потом вдруг платежка не проведется
   Андроны едут
 
10 - 30.01.20 - 14:34
(9) тогда после записи
   ДНН
 
11 - 30.01.20 - 14:53
(9) тогда транзакция отменется и все исправления связанных документов тоже
   unregistered
 
12 - 30.01.20 - 14:58
(9) >> Не понимаю какие могут возникнуть ошибки при моем подходе.

Тогда зачем завёл эту ветку?...

Правильный ответ на поставленный вопрос уже прозвучал - в (1).
Правильный совет в (6) и (7).
Остальное - флуд бессмысленный.
   Андроны едут
 
13 - 30.01.20 - 15:01
Транзитивная зависимость - это зло
   Wefast
 
14 - 30.01.20 - 15:10
(12) да я не уверен в том как правильно написать то что задумал. С транзакциями сталкиваюсь раз в год.

Как эту очередь сделать из (7) не понял, а все остальное принял к сведению.
   FIXXXL
 
15 - 03.02.20 - 08:37
(14) про "очередь": в подписке обработки проведения пишешь для документа доп.свойство "проставить галку в заказах"
затем рег.заданием обрабатываешь эту "очередь", выбираешь по доп.свойству нужные доки и связанные с ними для обновления галки, в оконцовке меняя значение доп.свойства
   Сияющий в темноте
 
16 - 03.02.20 - 08:57
просто,если платежки проаодят кучей,то во-первых,тормоза,во-вторых,сообщения будут пачеой и в третьих,непроведенная платнжка,когда она должна быть проведена,хуже,чем недрзапись в какие-то документы.
если лень флажками,то подписка на событие проведения и запись в регистр,а потом регламентным заданием обработка,причем одним заданием все документы сразу в лучае группового проведения.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.