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

Провести второй документ в транзакции первого

Провести второй документ в транзакции первого
Я
   TrueBuild
 
27.05.21 - 10:35
Задача: после успешного проведения документа автоматически сформировать и провести другой документ. Но другой документ может не провестись и вызвать исключение, в таком случае просто записать его, оставив непроведенным.
Соответственно проблема в том, что первый документ проводится в транзакции и, если мы вклиниваемся в транзакцию записи первого документа, пытаемся там провести второй документ, а он вызывает исключение, то мы и первый не сможем провести.

Единственное, что приходит на ум, это создать какой-то регистр очереди, куда после успешного проведения первого документа записывать ссылку на него. А регламентным заданием постоянно читать эту очередь и на основании данных очереди формировать второй документ.

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

>> Единственное, что приходит на ум, это создать какой-то регистр очереди, куда после успешного проведения первого документа записывать ссылку на него. А регламентным заданием постоянно читать эту очередь и на основании данных очереди формировать второй документ.

Хотя бы так. Либо просто регламент с анализом, без очереди.
   mistеr
 
22 - 28.05.21 - 09:28
(0) Выявить условия, при которых второй документ не проведется, на этапе проверки первого документа. И соответственно выставлять режим записи.


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