|
Провести второй документ в транзакции первого | ☑ | ||
---|---|---|---|---|
0
TrueBuild
27.05.21
✎
10:35
|
Задача: после успешного проведения документа автоматически сформировать и провести другой документ. Но другой документ может не провестись и вызвать исключение, в таком случае просто записать его, оставив непроведенным.
Соответственно проблема в том, что первый документ проводится в транзакции и, если мы вклиниваемся в транзакцию записи первого документа, пытаемся там провести второй документ, а он вызывает исключение, то мы и первый не сможем провести. Единственное, что приходит на ум, это создать какой-то регистр очереди, куда после успешного проведения первого документа записывать ссылку на него. А регламентным заданием постоянно читать эту очередь и на основании данных очереди формировать второй документ. Но, мне кажется, какое-то слишком сложное решение для такой простой задачи. Да и лишняя нагрузка на базу в виде регл.задания, которое будет регулярно дергать регистр. |
|||
1
Dmitry77
27.05.21
✎
10:42
|
Попытка исключение
|
|||
2
ДенисЧ
27.05.21
✎
10:44
|
(1) Что, в 1с уже вложенные транзакции завезли?
|
|||
3
ДенисЧ
27.05.21
✎
10:44
|
(0) Только регистр или подобная структура.
|
|||
4
RomanYS
27.05.21
✎
10:45
|
(0) после любого проведения? Или речь про конкретную форму?
|
|||
5
Bigbro
27.05.21
✎
10:47
|
из формы то без проблем, а если всякие пакетные перепроводки.
|
|||
6
TrueBuild
27.05.21
✎
10:56
|
(4) (5) После любого проведения. Из формы да, без проблем можно было бы реализовать.
|
|||
7
youalex
27.05.21
✎
10:58
|
Можно в сторону фоновых заданий посмотреть , но не факт, что это норм решение.
|
|||
8
FN
27.05.21
✎
10:59
|
(0) Можно и без регистра. Просто создаешь второй документ с реквизитом "требует проведения" и не проводишь его.
А проведение уже в регламентированном задании. Которое можно даже не по расписанию запускать, а прямо из кода после создания всех доков и закрытия транзакции. |
|||
9
Irbis
27.05.21
✎
11:01
|
(0) Изначально идея куёвая. Нужно трансформировать задачу.
|
|||
10
TrueBuild
27.05.21
✎
11:01
|
(7) Думал об этом. Но фоновое задание не видит ссылку на объект, который еще пишется в транзакции.
Как вариант, можно отправлять проведение второго документа в фоновое задание из первого, в фоновом задании делать паузу несколько секунд-минут, чтобы там была доступна ссылка. Но это костыль какой-то. |
|||
11
ДедМорроз
27.05.21
✎
13:45
|
При проведении первого документа запускаем фоновое задание и передаем в него ссылку на документ.
Фоновое задание читает наш документ,и сможет прочитать только тогда,когда основная транзакция зааершилась,теперь можно проводить второй документ. |
|||
12
Вафель
27.05.21
✎
13:49
|
(2) если вложенная откатывается то и верхняя откатывается
вне зависимости от поддержки вложенных |
|||
13
Ногаминебить
27.05.21
✎
13:52
|
План обмена может? И регламентом потом анализировать. Или надо чтоб прям вот сразу после сформировался второй?
|
|||
14
ДенисЧ
27.05.21
✎
13:57
|
(12) Спасибо, кэп
|
|||
15
Garykom
гуру
27.05.21
✎
14:08
|
(11) Механизм защиты от сбоев где?
|
|||
16
TrueBuild
27.05.21
✎
14:23
|
(11) Ты имеешь в виду в фоновом запускать бесконечный цикл, который будет обращаться к ссылке, пока не сможет прочитать ее?
|
|||
17
Вафель
27.05.21
✎
14:24
|
(12) с поддержкой вложенных еще идут точки сохранения. можно откатиться до последней точки сохранения внутри большой транзакции и дальше считать
|
|||
18
Вафель
27.05.21
✎
14:25
|
(0) как вариант юзать аналоги отложенного проведения.
те в транзакции писать. а проведется как нибудь само. ну или не проведется |
|||
19
fisher
27.05.21
✎
15:44
|
(0) > Но, мне кажется, какое-то слишком сложное решение для такой простой задачи. Да и лишняя нагрузка на базу в виде регл.задания, которое будет регулярно дергать регистр.
Тебе кажется. Норм решение. |
|||
20
TrueBuild
27.05.21
✎
17:32
|
(19) Ну ладно, убедили ))
|
|||
21
Dark_Warrior
28.05.21
✎
09:23
|
(9) +
>> Единственное, что приходит на ум, это создать какой-то регистр очереди, куда после успешного проведения первого документа записывать ссылку на него. А регламентным заданием постоянно читать эту очередь и на основании данных очереди формировать второй документ. Хотя бы так. Либо просто регламент с анализом, без очереди. |
|||
22
mistеr
28.05.21
✎
09:28
|
(0) Выявить условия, при которых второй документ не проведется, на этапе проверки первого документа. И соответственно выставлять режим записи.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |