(2) Вернет неопределенно, про это уже где-то писали, что из-за бага этим можно было пользоваться, а так в рамках сеанса данные пропадают и через фоновые задания это не пройдет, так как баг пофиксили в более поздних релизах
(5) Пока однозначно не понятно можно или нет. То что в типовых то там идентификатор является идентификатором формы. У меня на сервере нет идентификатора формы. При передачи уникального идентификатора который не является идентификатором формы данные из адреса пропадают.
У меня выполнение инициализируется на самом сервере.
У меня выполнение инициализируется на самом сервере.
Тогда, вероятно, ответ - никак. Если СУБД узкое место у тебя, тогда можешь попробовать организовать межпроцессный обмен через какую-нить внешнюю приблуду. Вон, систему взаимодействий поднять, например :)
(29)А зачем тогда вообще получать результат, делайте все что вам надо в процедуре ФЗ! Непонятен механизм, если это какие-то транзитные действия, ну и выполняйте их целиком в одном месте... Если это большой объем, что мешает их удалить (очистить) из хранилища после выполнения действий
(30) А в чем проблема? Допустим, он хочет распараллелить обработку тяжелого запроса через web-сервис. Собирает какой-то большой JSON-документ из кусков. Не хочет куски писать в базу, чтобы ускорить время обработки и увеличить пропускную способность сервиса. Вполне естественное желание.
(19) В общем лучше сначала проверить, у меня на 8.3.11 в файловом варианте и с простым идентификатором работает. Надо поднять сервер 8.3.11 и проверить на нем
в фоновом задании используйте процедуру
Сообщить();
она накапливает сообщения, затем получаете информацию о ФЗ
в процедуре опроса состояния ФЗ (обработчик ожидания с какой-то переодичностью 1,10,60 сек )
лкЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(фзКод);
Если лкЗадание <> Неопределено Тогда
лкСостояние = лкЗадание.Состояние;
//для оперативной передачи данных используем Сообщещиня пользователю
лкМассивСообщений = лкЗадание.ПолучитьСообщенияПользователю(Истина);
...
//затем обходите массив
Для каждого лкЭлемент Из лкМассивСообщений Цикл
лкСообщение = лкЭлемент.Текст;
Сообщить(лкСообщение);
КонецЦикла;
...
Показать
примерно так,
у меня функционал был более расширенный, выводились сообщения пользователю, и бегущая строка, в процентах (прогресс бар) и все это на сообщениях
(7) Спасибо! Помогло. Запускаю фоновое задание из обычной формы, результат помещал в хранилище общих настроек. При этом перестали сохраняться настройки табличной части в этом документе.
А запишите его куда-нибудь в файл временный, а обработчик на клиенте повесьте на появление этого файла временного :) Если результат очень большой, то чтобы не начать читать то, что ещё записывается, то обработчик можно повесить на ожидание появление какого-нибудь нулевого файла-сигнализатора, который создается после записи большого.
(11) судя по всему, с неработающим временным хранилищем других вариантов у вас не остается :) Можно ещё внешние источники данных подключить. Но все эти предложения - вилами по воде, т.к. что у вас там, и откуда достается только вам известно.
(15) Внешние тоже не подойдут. Данные прилетают через http запросы. Поэтому их не нужно записывать нужно обработать и перекинуть в другое место. Потоки можно сделать и на IIS, но хочется понять может ли 1с без записи сделать похожее. И почему временное хранилище работает в сеансе только с идентификатором формы а с уникальным идентификатором который не является идентификатором формы не работает. И как она определяет что передается идентификатор формы и зачем. Ведь это написано в справке.
Временное хранилище, сформированное в одном сеансе, недоступно из другого сеанса.
Исключением является возможность передачи данных из фонового задания в сеанс, инициировавший фоновое задание, с помощью временного хранилища. Для такой передачи следует в родительском сеансе поместить во временное хранилище пустое значение, передав идентификатор формы. Затем полученный адрес передать в фоновое задание через параметры фонового задания. Далее, если этот адрес использовать в параметре <Адрес>, то результат будет скопирован в сеанс, из которого было запущено фоновое задание.
Данные, помещенные во временное хранилище в фоновом задании, не будут доступны из родительского сеанса до момента завершения фонового задания.
Данные, помещенные в фоновом сеансе в хранилище по сформированному в родительском
Все там работает, никаких багов, если вы инициируете ФЗ - формируйте перед запуском адрес врем. хранилища и передавайте его параметром (через массив) в процедуру ФЗ (куда вы поместите результат), если ФЗ отрабатывает в другом сеансе, формируйте адрес указывая изначальный УИД (например УИД формы из которого происходит запуск ФЗ). По завершение читаем результат из адреса...
На УФ работает корректно. На обычных в первый раз возможно получить результат через ПолучитьИзВременногоХранилища, при следующих запусках возвращает Неопределено.
Так, на обычной форме результат из временного хранилища возможно было получить и увидеть в отладчике только после перезапуска клиента в первую так-сказать итерацию. При последующих запусках того же самого механизма, фоновое задание помещало результат выполнения в хранилище, но на Клиенте ПолучитьИзВременногоХранилища всегда возвращал неопределено.
В моем случае вопрос решился так. Я не знаю каким был БСП в 20м году, но как гипотеза, возврат "неопределено" в результате, у меня - и возможно хотя бы у некоторых в этой ветке, - был из-за того, что результат пытались использовать на форме до того, как он был получен в обработчике "ОбработатьВыполнениеФоновыхЗаданий"
ДлительныеОперацииКлиент.ОжидатьЗавершение(
СтруктураФоновогоЗадания,
Новый ОписаниеОповещения("ОбработатьВыполнениеФоновыхЗаданий",
ЭтотОбъект,
Новый Структура("ИдентификаторЗадания", СтруктураФоновогоЗадания.ИдентификаторЗадания)),
ПараметрыОжидания);
Возможно был подключен обработчик ожидания, например
, который смотрел по оповещаемому прогрессу, если задание закончено и сразу вызывал обработку результата -- а результат еще не успел устаканиться во временном хранилище, например. В результате такой скороспешный вызов увидит в адресе неопределено.
Если вызывать обработку результата из обработчика "ОбработатьВыполнениеФоновыхЗаданий", то проблема уходит.