|
Транзакция внутри обработки проведения | ☑ | ||
---|---|---|---|---|
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
|
просто,если платежки проаодят кучей,то во-первых,тормоза,во-вторых,сообщения будут пачеой и в третьих,непроведенная платнжка,когда она должна быть проведена,хуже,чем недрзапись в какие-то документы.
если лень флажками,то подписка на событие проведения и запись в регистр,а потом регламентным заданием обработка,причем одним заданием все документы сразу в лучае группового проведения. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |