Имя: Пароль:
1C
 
Получение данных из фонового задания
,
0 DexterMorgan
 
21.11.15
13:08
1. Через сообщения пользователю 33% (1)
2. Вот так лучше 33% (1)
3. Тебе это не нада 33% (1)
4. Через хранилище настроек 0% (0)
Всего мнений: 3

Есть дополнительный отчет на бсп, у которого есть команда и эта команда выполняется в фоновом задании. Нужно во время выполнения фонового задания получать данные из него какие-то данные. Подключен обработчик ожидания в форме отчета и т.д.
Из СП: "Данные, помещенные во временное хранилище в фоновом задании, не будут доступны из родительского сеанса до момента завершения фонового задания.", те временное хранилище не подходит. Как лучше?
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
смотря что за данные. Я за сообщения, в сообщение можно строку внутр записать или еще чего.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан