Получение данных из фонового задания #758827


#0 by DexterMorgan
Есть дополнительный отчет на бсп, у которого есть команда и эта команда выполняется в фоновом задании. Нужно во время выполнения фонового задания получать данные из него какие-то данные. Подключен обработчик ожидания в форме отчета и т.д. Из СП: "Данные, помещенные во временное хранилище в фоновом задании, не будут доступны из родительского сеанса до момента завершения фонового задания.", те временное хранилище не подходит. Как лучше?
#1 by DexterMorgan
Вообще мне кажется очень удобным получать данные через хранилище настроек, но оно явно для этого не предназначено
#2 by ДенисЧ
тыц
#3 by DexterMorgan
Минусы использования хранилища настроек какие то видишь?
#4 by GROOVY
Временное хранилище.
#5 by su_mai
Примечание: Временное хранилище, сформированное в одном сеансе, недоступно из другого сеанса. Исключением является возможность передачи данных из фонового задания в сеанс, инициировавший фоновое задание, с помощью временного хранилища. Для такой передачи следует в родительском сеансе поместить во временное хранилище пустое значение, передав идентификатор формы. Затем полученный адрес передать в фоновое задание через параметры фонового задания. Далее, если этот адрес использовать в параметре <Адрес>, то результат будет скопирован в сеанс, из которого было запущено фоновое задание. Данные, помещенные во временное хранилище в фоновом задании, не будут доступны из родительского сеанса до момента завершения фонового задания.
#6 by su_mai
Проще говоря временное хранилище формы будет доступно и в форме и в фоновом задании
#7 by DexterMorgan
Что временное хранилище? вы читаете, что постите? "Данные, помещенные во временное хранилище в фоновом задании, не будут доступны из родительского сеанса до момента завершения фонового задания." НЕ БУДУТ ДОСТУПНЫ ДО МОМЕНТА ЗАВЕРШЕНИЯ по-моему черным по белому написано: пока фоновое задание не завершится, данные не доступны. А нужно ВО ВРЕМЯ ВЫПОЛНЕНИЯ.
#8 by DexterMorgan
Проще говоря, если бы ты дочитал до конца, то развидел бы, что этот текст из СП я читал и сам часть процитировал.
#9 by Kain_wrath
Если найдешь решение напиши, тоже интересно
#10 by oleg_km
Я использую .NET и сокеты
#11 by Cyberhawk
Через запись в объект БД (преимущественно регистр сведений)
#12 by DexterMorgan
решения как минимум два, они описаны в . Это запись во время выполнения фонового задания в хранилище общих настроек и сообщение пользователю (у фонового задания есть метод ПолучитьСообщенияПользователю)
#13 by DexterMorgan
Не универсально, допустим нельзя вносить изменения в конфигурацию и по сути от хранилища общих настроек не отличается.
#14 by DexterMorgan
а можно поподбробнее?
#15 by DexterMorgan
в чем преимущество?
#16 by PR третий
Насколько я понимаю через сообщения правильнее всего и 1С делает так.
#17 by DexterMorgan
ты про прогресс бары от 1с ?)
#18 by PR третий
Да
#19 by DexterMorgan
Наверное это так, лучше не писать в бд, если это "временные данные", но не всегда это удобно. Сообщение придется разбирать как строку, а тут структуру удобно создать и записать в хранилище.
#20 by DexterMorgan
Хотя нет, возвращается массив объектов СообщениеПользователю и используя "Поле" например можно по типу стркутуры замутить, ладно для моего случая это точно лучше
#21 by Garykom
я правильно понял классику жанра, про сообщения от сервера к клиенту?
#22 by DexterMorgan
не просто клиенту, а родительскому сеансу
#23 by DexterMorgan
А че никто не голосует, никто прогресс бары не делал что ли?
#24 by mikeA
строка может быть и XML, а в ней всё что угодно. ну или почти всё
#25 by su_mai
Да уж прогрлядел :) На самом деле проблема древняя уже, хорошо не решается. А какой ты хотел прогресс, прямо тик-тик-тик или обновление состояния через интервалы?
#26 by DexterMorgan
Ну в общем обрабатываются документы, по-мимо самого прогресс бара выводить еще информацию что за текущий документ обрабатывается, сколько обработано, сколько не обработано и т.д.
#27 by DexterMorgan
ну главное решается, но через сообщения как то неудобно, пока не понял как лучше получить идентификатор этого задания, чтобы потом получить его сообщения. Это доп отчет, в фоне можно запустить используя "ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКомандуВФоне", и дальше оно запускается без ключа. По наименованию что ли искать?
#28 by DexterMorgan
через интервалы
#29 by Garykom
а что будет если дважды эту обработку запустить? одновременно с двух сеансов
#30 by DexterMorgan
а ты подумай
#31 by DexterMorgan
может быть каждый сеанс получит, то что ему предназначено?
#32 by su_mai
Ох уж придумали бы 1С-ники какой - нибудь SynchronizationContext или BeginInvoke.
#33 by Garykom
речь не про сеанс и получение данных а про взаимоблокировку в смысле не понимаю зачем нужно в фоне именно запускать? что хочется далее продолжать работать или как? при этом посматривая на % выполнения
#34 by DexterMorgan
блокировки - это другой вопрос, у меня это в обработке заказов предусмотрено. Речь действительно про "продолжение работы" и отслеживании состояния выполнения.
#35 by DexterMorgan
Действительно, если бы можно было запустить выполнение в фоне и указать ключ, то получать данные можно было бы и из сообщений пользователю. Но тут получается у меня есть только наименование задания, которое будет таким же, как если его запустить из другого сеанса. Конечно дальше можно перебрать массив заданий и проверить еще и его параметры, но муторно это пипец.
#36 by DexterMorgan
А не и параметры недоступны, да ну нахрен эти сообщения =)
#37 by su_mai
А может запустить отдельный сеанс 1С ки? Переключаясь между окнами отслеживать? Это так навскидку...
#38 by DexterMorgan
не понял. два разных пользователя, допустим запустят. Есть два разных фоновых задания, но кому какое принадлежит как узнать?
#39 by Garykom
можно сделать через веб сервис )) только его поднимать должен клиент (или вообще нечто сторонее), а фоновое туда данные будет отсылать
#40 by DexterMorgan
проще в хранилище настроек записать =)
#41 by su_mai
Или выполнять в фоновом задании обработку "пачек" документов, между обработками выводить процент выполнения.  В я имел ввиду вообще без фоновых заданий. Можно письмо на почту отсылать :)
#42 by DexterMorgan
с клиента кучу серверных вызовов? ну нее
#43 by su_mai
Проще забить на это до лучших времен... Пока 1С не реализует это средствами платформы.
#44 by DexterMorgan
А вот что всем не нравится в хранилище настроек записывать?
#45 by su_mai
А как ты хотел что бы из ФЗ на клиенте отображалось? Те же родимые серверные вызовы :)
#46 by DexterMorgan
знаешь, уже столько времени уф, что мне кажется не будут они этого делать
#47 by su_mai
Ну можно суп есть вилкой, только неудобно.
#48 by DexterMorgan
Да, но есть большая разница. По твоему это сильно увеличит время выполнения обработки, а в фоновом - нет. Пока фоновое спокойно крутится на сервере, клиент тоже истерично дергает сервер, но только во время выполнения фонового.
#49 by DexterMorgan
А че неудобно? Помещать во временное хранилище удобно, а в хранилище настроек нет?
#50 by su_mai
В 1С постоянно кто то пишет что: "Комплект отчетности грузится долго, мы думаем что он завис, сделайте прогресс бар" Когда нибудь сделают. Хорошо изначально запускай много фоновых заданий с "пачками" документов, по их выполнению изменяй процент
#51 by DexterMorgan
Они сделали. Через сообщения пользователю =) Тут просто конкретная ситуация, что не могу его использовать не меняя конфы
#52 by su_mai
Все асинхронно, все в транзакциях, прогресс движется, пользователь рад. Единственно если ты хотел все в одной бооольшой транзакции сделать чтоб потом отменить все если что тогда конечно :(
#53 by DexterMorgan
"Хорошо изначально запускай много фоновых заданий с "пачками" документов, по их выполнению изменяй процент" ну слушай, чета это тебя понесло=) 1000 документов это сколько фоновых заданий нужно? Да и вообще они же параллельно выполнятся или мне по очереди их вызывать?  так это тоже самое, что и обычный серверный вызов будет
#54 by su_mai
Разбей на пачки, размер опытным путем выбирай. То что параллельно обрабатываются, возможно, это не важно, если документы не связаны.
#55 by su_mai
Тик-Тик-Тик не будет конечно, но Тааак-Тааак-ТаааК можно получить. Это же лучще чем просто смотреть на "крутилку" :)
#56 by DexterMorgan
так при параллельном выполнении процент сразу скаканет =)
#57 by Лефмихалыч
единственный вариант - хранить в базе. А уж где именно - не так важно. Можно напилить что-то для этого, а можно и через хренилище настроек - на вкус и цвет фломастеры разные у всех
#58 by su_mai
Надо ловить когда фоновое отвалилось, значит обработано...
#59 by DexterMorgan
вот ты сейчас правда пытаешься есть суп вилкой =)
#60 by DexterMorgan
просто как то это не "в ходу" что ли. Тема скорее очистить совесть, я вот честно пытался через сообщения сделать.
#61 by su_mai
Возможно, просто я бы в базу не писал и в хренилище настроек потому что это для другого. Прикинь а вдруг загубятся настройки вредной кассирши ...
#62 by DexterMorgan
тихо-тихо, я же с ключом пишу. ключ - идентификатор формы, никому ниче я не сломаю.
#63 by Лефмихалыч
да в ходу еще как. Просто все стыдятся признаться. Удостоверься только, что: 1. разные сеансы не смогут прочитать данные друг друга и попутать трататульки. Один пользователь может же два сеанса запустить и отчет этот может быть в обоих. 2. не оставишь мусора после себя
#64 by Лефмихалыч
да и камнем их, настройки эти. Если важно - достанет из бэкапа. Главное, чтобы отчет у двух разных кассирш эти данные не перепутывал. И одной и той же в двух сеансах.
#65 by Лефмихалыч
да и в одном сеансе-то моно два раза отчет запустить одновременно и заставить это фоновое параллельно два раза выполняться ведь. В общем - следи за собой и будь осторожен
#66 by ИсчадиеADO
смотря что за данные. Я за сообщения, в сообщение можно строку внутр записать или еще чего.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С