Имя: Пароль:
1C
 
Фоновое выполнение алгоритмов у пользователей без обработчика ожиданий
0 ИС-2
 
naïve
22.07.16
09:31
При подборе номенклатуры, в режиме реального времени, выводятся остатки номенклатуры. Параллельно должен идти подбор похожих позиций. Его хочу ыполнить в фоновом режиме, чтобы не тормозить основную работу пользователей.

ПодключитьОбработчикОжидания не подходит т.к это тормозит работу системы. Через вызвать исключение какое-то некрасивое решение и непонятно, где оно выйдет боком.

Как можно определить, что фоновое задание завершилось и можно вывести результат расчета на экран?
1 DrZombi
 
гуру
22.07.16
09:33
(0) И в какой момент ты это предлагаешь делать, без обработчика?
2 DmitrO
 
22.07.16
09:38
Обработчик ожидания не тормозит работу системы, работу системы тормозит то что в нем написано. :)
3 DmitrO
 
22.07.16
09:40
"Как можно определить, что фоновое задание завершилось.."
И мы в очередной раз подходим к вопросу о том что платформа не умеет делать асинхронные вызовы к собственному серверу.
4 ИС-2
 
naïve
22.07.16
09:46
(1) повесить бы какой-то обработчик. Пример, внешнее событие...
5 Jija Grenkov
 
22.07.16
09:49
По производительности передача результата через исключение должена быть лучшим вариантом. Из побочных явлений Будут сообщения в логах.
На сколько я понимаю, обработчик ожидания не поможет получить данные без записи в БД.
Ещё наверняка есть ВК которые помогут передать результат через память.
6 Jija Grenkov
 
22.07.16
11:00
хотя наверное все же можно передать данные через хранилище значений или повторно возвращающий результат общий модуль
7 Stepa86
 
22.07.16
11:10
Без обработчика ожидания непонятно как ты код будешь стартовать, который проверяет выполнение фонового задания. И с каких пор он тормозит?

В типовых используется схема - создал пустое временное хранилище, запустил задание в фоне, передав ему УИД хранилища, сохранил ИД задания и УИД на форме, обработчиком ожидания проверяешь выполнение задания по ИД с увеличивающимся интервалом, типа каждая последующая проверка через 1.6*предИнтервал. Когда задание отработало, смотришь чо лежил в УИДе. Причем форма по отработке может быть отдельной, правда фокус она будет перехватывать иногда
8 hhhh
 
22.07.16
11:15
(4) ну любой отчет возьми как пример. Там они все через фоновое задание работают. И все выводят на экран.
9 Jija Grenkov
 
22.07.16
11:16
(7) там написано, что можно через исключение оповестить о завершении. Но не спорю, что в данном случае обработчик ожидания нужен как минимум, что бы не стартовать - это задание мгновенно при активации строки.
10 Jija Grenkov
 
22.07.16
11:17
но нужно еще выяснить версию платформы
11 Fragster
 
гуру
22.07.16
11:17
фоновое + обработчик ожидания на проверку. Жалко, что фоновые нельзя навесить на методы самой формы.
12 Fragster
 
гуру
22.07.16
11:18
на проверку завершения
13 Fragster
 
гуру
22.07.16
11:18
еще можно в фоне СКД формировать, а из результирующего документа доставать данные
14 Stepa86
 
22.07.16
11:21
(9) Там это где? Не в курсе про передачу управления кодом на клиент через вызов исключения в фоновом задании. Да и вообще использование обработки исключений в логике не по назначению чревато ухудшением качества кода.

(0) А зачем похожие позиции рассчитывать? Может их отдельно считать и тупо хранить? Как в подсистеме "НоменклатураПродаваемаяСовместно" в УП и УТ11
15 EvgeniuXP
 
22.07.16
11:26
ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор).Состояние = СостояниеФоновогоЗадания.Завершено
16 EvgeniuXP
 
22.07.16
11:27
Не нравится обрботчик ожиданий - пиши в базу и от туда читай - если для тебя это лучше
17 Stepa86
 
22.07.16
11:28
(16) а читать из базы когда?
18 EvgeniuXP
 
22.07.16
11:29
Но узнаешь всё равно через обработчик ;)
19 EvgeniuXP
 
22.07.16
11:30
(17) при активизации, при изменении, при закрытим - всё дело рук программиста
20 Stepa86
 
22.07.16
11:32
(19) Этими обработчиками можно и фоновое задание проверить. С тем же успехом можно кнопку "Нажми меня, вдруг там посчиталось" сделать
21 ИС-2
 
naïve
22.07.16
12:25
(2) тормозит. Особенно если частота выполнения 1 секунда
22 Stepa86
 
22.07.16
12:52
(21) а тормозит это сколько в секундах? У меня вот проверка выполнения фонового задания в обработчике ожидания - 0.008983сек. Это с учетом сбегать на сервер и дернуть менеджер фоновых заданий
23 Jija Grenkov
 
22.07.16
15:05
(14) там - это в первом сообщении данного топика. Так учениям 1с слепо следовать == высокого перформанса не видать.

(21) Вы уверены, что не получится сохранить в бд заранее максимально подготовленные данные и уже нечего не считать, а простым запросом к 1 таблице вытянуть данные? Запрос можно запускать в обработчике ожидания через 1 секунду после активизации строки.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.