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