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