|
Пауза перед фоновым заданием. | ☑ | ||
---|---|---|---|---|
0
picom
17.02.21
✎
11:02
|
В УТ11.4 есть дописка.
Событие при записи заказа клиента выгружает файло на FTP. Запуск кодом ФоновыеЗадания.Выполнить("Облачка.ВыгружаемЗаказ", Параметры, Новый УникальныйИдентификатор, "Выгрузка заказ"); Но теперь у нас же все асинхронно и иногда: 1. Иногда эта строка срабатывает еще до того как документ записан в базу, не може получить реквизиты. 2. Если два раза записали то одновременное чтение одного документа и запись в один файл. Видимо нужна какая-то пауза перед началом выгрузки, как ее лучше организовать одной строкой (без регистрации объектов для обмена)? |
|||
1
DrShad
17.02.21
✎
11:09
|
выгружать лучше после записи объекта с реквизитами
|
|||
2
picom
17.02.21
✎
11:12
|
(1) это какой тип события?
|
|||
3
zuza
17.02.21
✎
11:28
|
(2) ПослеЗаписи =)
|
|||
4
zuza
17.02.21
✎
11:31
|
+(3) лучше использовать подписку, и ни при записи, а наверно при проведении.
|
|||
5
picom
17.02.21
✎
11:34
|
(4) не существует такой подписки
|
|||
6
DrShad
17.02.21
✎
11:36
|
(5) сделай
|
|||
7
acht
17.02.21
✎
11:37
|
(4) > при проведении
Затягивать транзакцию на время обмена с неторопливым FTP-сервером так себе идея. И да, что делать, если FTP в процессе внезапно умер - откатывать транзакцию? =) Сделайте регистрацию в каком-нибудь плане обмена и выгрузку регламентным заданием. |
|||
8
rozer76
17.02.21
✎
11:37
|
послезаписи это только в форме если что. Я бы делал так "ПриЗаписи" в модуле, если Проведен=Истина пишем в РС а потом скопом РЗ обрабатываем этот РС и рассылаем на фтп
|
|||
9
rozer76
17.02.21
✎
11:38
|
(7) опередил )
|
|||
10
rozer76
17.02.21
✎
11:40
|
(8) ПриЗаписи уже ссыль есть и флаг Проведен ну а если проведение не сработает или запись то неявная транзакция не запишет в РС ну или в планобмена как в (7)
|
|||
11
DrShad
17.02.21
✎
11:41
|
(7) причем тут затягивание трнзакции? ведь будет запущено фоновое задание в отдельном процессе
|
|||
12
DrShad
17.02.21
✎
11:42
|
(10) при записи объекта, еще может не быть всех его реквизитов - в сабже же описано
|
|||
13
rozer76
17.02.21
✎
11:43
|
(11) угу и транзакции там не будет ибо это фоновое и вот представим что транзакция записи дока откатилась а мы уже в фоновом отправляем ...
|
|||
14
rozer76
17.02.21
✎
11:44
|
(12) в событии ПриЗаписи каких реквизитов не будет ? Объекта ? Все будет )
>>без регистрации объектов для обмена нормально без этого не сделать ИМХО |
|||
15
Serg_1960
17.02.21
✎
11:49
|
:) Подсказка: паузу можно сделать не перед вызовом фонового задания, а в самом фоновом задании.
|
|||
16
DrShad
17.02.21
✎
11:50
|
(13) подписка срабатывает после ОбработкиПроведения - откуда откат?
|
|||
17
rozer76
17.02.21
✎
11:51
|
(16) подписка на какое событие ?
|
|||
18
Serg_1960
17.02.21
✎
11:52
|
(16) Не откат, а Отказ = Истина от последующей подписки.
|
|||
19
DrShad
17.02.21
✎
11:54
|
(17) ОбработкаПроведения же
|
|||
20
rozer76
17.02.21
✎
11:56
|
(19) и что ? если Отказ=Истина в самой ОбработкаПроведения или подписке на нее или транзакция сама умерла то все и откатывается.
|
|||
21
timurhv
17.02.21
✎
11:57
|
(0) Пишите в дополнительный реквизит, а лучше в регистр сведений "ДополнительныеСведения" признак "Готов к отправке" вместо плана обмена. Вставьте дополнительную обработку и выполняйте ее по расписанию.
|
|||
22
rozer76
17.02.21
✎
11:59
|
(21) допреквизит - не вариант, если документ не проведен то когда это писать а он хранится в тч дока. А вот "ДополнительныеСведения" - норм
|
|||
23
DrShad
17.02.21
✎
12:00
|
(20) если будет отказ в самой ОбработкеПроведения, то подписка не сработает
|
|||
24
rozer76
17.02.21
✎
12:03
|
(23) это да ))
|
|||
25
Serg_1960
17.02.21
✎
12:05
|
Ну ёпрст, программисты-пограмисты, зачем так всё усложнять?
Короче, автор, Вам нужна была пауза перед началом выгрузки желательно одной строкой? ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("Наименование", "Выгрузка заказ"))[0].ОжидатьЗавершения(ХХХ); // где ХХХ - время в секундах |
|||
26
picom
17.02.21
✎
12:06
|
(15) как сделать паузу правильно?
|
|||
27
rozer76
17.02.21
✎
12:08
|
(25) ну какая пауза? 3 секунды а может 2 часа если док на 9999 строк ? Ну делай те нормально чтобы работало в 100%. У всех тут свыше 10 лет стажа и как такое предлагать... Ндя
|
|||
28
picom
17.02.21
✎
12:08
|
(25) интересно.... спасибо
|
|||
29
DrShad
17.02.21
✎
12:09
|
я бы перед выгрузкой просто проверил наличие движений
|
|||
30
ИС-2
naïve
17.02.21
✎
12:11
|
(0) в фоновом задании сделать проверку - если документ не записан, то фоновое задание должно породить само себя
|
|||
31
ИС-2
naïve
17.02.21
✎
12:12
|
правда есть риск закцикливания. И вырастает нагрузка на систему из-за постоянного опроса БД на факт записи документа
|
|||
32
DrShad
17.02.21
✎
12:13
|
(31) написано же, что записан может быть еще без всех реквизитов
|
|||
33
rozer76
17.02.21
✎
12:19
|
(30) ок, парни, теперь представим что фоновое родилось и админ грохнул его на кластере...случайно... на фтп ничего не уйдет а док создан и проведен - это fail.
А так в норм. решении если транзакция записи дока завершилась успешно - создается запись в РС. Далее регулярно РЗ бежит по РС и в отдельно транзакции обрабатывает каждую запись РС и если отправка на фтп ОК - удаляет запись или "отмечает" ее как выполненную. Все. |
|||
34
DrShad
17.02.21
✎
12:21
|
(33) согласен, но это уже тема другого топика
|
|||
35
Serg_1960
17.02.21
✎
12:32
|
(27) Ндя... автору достаточно сделать цикличную проверку на готовность документа к выгрузке (наличие в базе, факт проведения, контрольное блокирование и прочая, о чём тут уже писали) - и если документ не готов - пауза с повторной проверкой. частота, количество попыток, записи в журнал регистрации и прочие бантики и рюшечки - увольте, это уж без меня.
|
|||
36
rozer76
17.02.21
✎
12:49
|
(35) проверки всегда хорошо и полезно делать, но не в фоновом которое стартует ТОЛЬКО один раз при записи и если упадет - файло клиент не увидит
|
|||
37
Serg_1960
17.02.21
✎
14:52
|
(36) Если тут на ветке отказываются от использования плана обмена, то я отказываюсь от участия в изобретении велосипедов с квадратными колесами, а также от обсуждения иных вариантов, например, (33), но замечу: сформированный файл тоже может "упасть" по дороге к клиенту (нужно подтверждение о доставке). Автор спросил за паузу - я подсказал. Не менее и не более.
|
|||
38
H A D G E H O G s
17.02.21
✎
14:57
|
Автор, держи, не благодари
Процедура ВыполнитьАрхивациюМарокУпаковок(ДвижениеМарок=Неопределено, НоваяВерсияДанных=Неопределено) Экспорт Если ДвижениеМарок<>Неопределено Тогда ОбъектРасширения=АСФРасширенияФункционала.ПолучитьОбъектРасширения(); Если ОбъектРасширения<>Неопределено Тогда КоличествоПопыток=0; Пока Истина Цикл Попытка Если ОбъектРасширения.Спать(1000)=Ложь Тогда Прервать; КонецЕсли; Исключение Прервать; КонецПопытки; ТекущаяВерсияДанных=АСФОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДвижениеМарок,"ВерсияДанных"); Если ТекущаяВерсияДанных=НоваяВерсияДанных Тогда //Документ записан, основная транзакция зафиксирована. Прервать; КонецЕсли; КоличествоПопыток=КоличествоПопыток+1; Если КоличествоПопыток>5 Тогда Возврат; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; |
|||
39
Вафель
17.02.21
✎
15:21
|
стартуй задание со структурой документа, а не с ссылкой
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |