Имя: Пароль:
1C
1С v8
Транзакция внутри обработки проведения
,
0 Wefast
 
30.01.20
13:57
Есть документ.
В обработчике проведения, берутся связанные документы и изменяются.

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

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

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

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


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

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

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

КонецЦикла;

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

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

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

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

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

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


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

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

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


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

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

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

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