|
Длительные (фоновые) задания + Поместить во временное хранилище | ☑ | ||
---|---|---|---|---|
0
Eugeneer
02.10.22
✎
12:47
|
Короче мне нужно, чтобы фоновое задание (функция) мне вернула целый список стркутуры. Там есть просто пара строк, потом ТЗ, и еще самое важное - тоже адрес во временном хранилище, куда тоже кое что впихнуто.
Поэтому соответственно у меня в фунции (которая фоном) идет возврат СтруктураРезультата.... Я так понял исходя из длительных операций. Что эта любой результат фоновых функций всегда задвигается в Результат.АдресРезультата. Ну т.е. чтобы мы не возвращали - оно всегда в хранилище. Единственная хроень - что там адрес можно заранее свой передать. Но вот беда, а как мне сдеклать чтобы адрес был в адресе. Ну т.е. вся структура передачи в хранилище, ап в этой структуре еще адрес на еще одно хранилище... Я так понял что беда с фоновыми - оно не видит никаких других адресов, кроме своего (типа сессии то разные). Вот такая штука Примечание: Временное хранилище, сформированное в одном сеансе, недоступно из другого сеанса. Исключением является возможность передачи данных из фонового задания в сеанс, инициировавший фоновое задание, с помощью временного хранилища. Для такой передачи следует в родительском сеансе поместить во временное хранилище пустое значение, передав идентификатор формы. Затем полученный адрес передать в фоновое задание через параметры фонового задания. Далее, если этот адрес использовать в параметре <Адрес>, то результат будет скопирован в сеанс, из которого было запущено фоновое задание. Данные, помещенные во временное хранилище в фоновом задании, не будут доступны из родительского сеанса до момента завершения фонового задания. Данные, помещенные в фоновом сеансе в хранилище по сформированному в родительском сеансе адресу, сразу после помещения становятся недоступными в фоновом сеансе. |
|||
1
Eugeneer
02.10.22
✎
12:52
|
Мне просто нужно чтобы фоном отработала одна длительная фигня, которая бы на серваке данные в хранилище впихнула.
Вернула мне адренс этого хранилища. Чтобы потом с этими данными дальше работать в других процедурах - вызывая из хранилища. Без фонового задания это все возможно. Но вот беда что фоновое их пихает видимо в сессию из которой достать адрес невозможно. |
|||
2
RomanYS
02.10.22
✎
13:36
|
Код бы минимально воспроизводимый привёл. Фоновые сам создаешь или методами БСП?
|
|||
3
Eugeneer
02.10.22
✎
13:54
|
https://its.1c.ru/db/v8std/content/642/hdoc
Почти один в один. Только есть своя функция (глобальник) |
|||
4
Eugeneer
02.10.22
✎
13:58
|
в ней есть
АдресДанныхВХранилище = ПоместитьПоВременноеХранилище(Туту большая хрень,Новый УникальныйИдентификатор); СтруктураРезультата.Вставить("АдресДанныхВХранилище",АдресДанныхВХранилище); Возврат СтруктураРезультата; &НаКлиенте Процедура ОткрытьФайлИмпорта_ПриЗавершении(Результат, ДополнительныеПараметры) Экспорт Если Результат = Неопределено Тогда Возврат; КонецЕсли; Если Результат.Статус = "Ошибка" Тогда ВызватьИсключение Результат.ПодробноеПредставлениеОшибки; КонецЕсли; СтруктураРезультата = ПолучитьИзВременногоХранилища(Результат.АдресРезультата); //УдалитьИзВременногоХранилища(Результат.АдресРезультата); Объект.АдресДанныхВХранилище = СтруктураРезультата.АдресДанныхВХранилище; Объект.ИдентификаторПрайса = СтруктураРезультата.ИдентификаторПрайса; Объект.ИнформацияФайл = СтруктураРезультата.ИнформацияФайл; Объект.ТабличныйДокумент = СтруктураРезультата.ТабличныйДокумент; ЗаполнитьТаблицыВОбработке(); ПолучитьСохраненныеНастройкиКолонокПрофиляСервер(); Элементы.Страницы.ТекущаяСтраница = Элементы.ИсходнаяТаблица; Если НЕ Объект.ИмпортЧерезБуфер Тогда ЭтаФорма.ТекущийЭлемент = Элементы.ТаблицаЛистовФайла; КонецЕсли; КонецПроцедуры |
|||
5
Eugeneer
02.10.22
✎
13:59
|
Ну и все собственно говоря
Объект.АдресДанныхВХранилище = СтруктураРезультата.АдресДанныхВХранилище; нифига не видит адрес |
|||
6
Eugeneer
02.10.22
✎
14:01
|
Ну собственно и рассчитывать тут не на что. ФОновое задание является своей сессией. Только как бы выкрутится)
|
|||
7
roman52
02.10.22
✎
14:13
|
(6) подозреваю, что никак не выкрутиться
и перебрасывать данные между фоновыми заданиями придется классически: либо через регистр сведений, либо через получение данных из ВХ + помещение данных в ВХ понимаю, что хочется избавится от избыточной де/сериализации, но предполагаю, что адрес пробрасываемых данных жестко связывается с [конкретной парой сеансов (порождающий, фоновый)], и передача адреса в другой фоновый сеанс невозможна, т.к. связь уже существует |
|||
8
Eugeneer
02.10.22
✎
14:40
|
Фигово что даже функция не может тупо вернуть ТЗ. Я бы ее потом после фонового впихнул бы в хранилище на клиенте.
Если в структуру возврата вставляю ТЗ. начинает ругаться по причине: Ошибка получения значения из временного хранилища по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: НачалоСвойства: {http://v8.1c.ru/8.2/mngsrv/ws}response Форма: Элемент Тип: {http://v8.1c.ru/8.1/data/core}Structure по причине: Ошибка преобразования данных XDTO: НачалоСвойства: Value Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType по причине: Ошибка отображения типов: Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable' |
|||
9
Eugeneer
02.10.22
✎
14:43
|
Я вообще не понимаю зачем тогда в фоновом есть хранилище и адрес хранилища, которое возвращается в результат. Но оказывается в него ничего нельзя впихнуть типа ТЗ.
|
|||
10
Eugeneer
02.10.22
✎
14:45
|
А вот табличный документ легко возвращает через структуру.
В общем один вопрос - как фоновым заданием ТЗ вернуть) |
|||
11
RomanYS
02.10.22
✎
14:46
|
(10) может не надо их с клиента вызывать?
|
|||
12
Eugeneer
02.10.22
✎
14:49
|
(11) мне нужно чтобы фоновое задание вернуло ТЗ юзеру. в этом суть.
|
|||
13
RomanYS
02.10.22
✎
14:52
|
(12) ТЗ на клиенте нет
|
|||
14
Eugeneer
02.10.22
✎
15:00
|
ВОт есть обработка Удаление помеченных обьектов. По сути тоже работает в фоне. Это обработка.
Там все делается фоном. Но там дерево значений. И оно возвращается фоном. |
|||
15
Eugeneer
02.10.22
✎
15:00
|
(13) она даже не является реквизитом формы.
|
|||
16
Eugeneer
02.10.22
✎
15:04
|
Все я врубился!! кажется!!!
Там в обработчик ожидания на клиенте после фона. нужно не в нем адрес раскладывать. А делать серверную процедуру с передачей адреса. И уже там все делать! Спасибо типовой обработке. Сейчас проверю. |
|||
17
Eugeneer
02.10.22
✎
15:37
|
Все заработало.
Я тупил что пытался результат в процедуре обработки ожидания (клиенской) получить результаты по адресу фоновой функции. В ней нужно было сделать серверную, передать в нее адрес. А уже там мастерить. Все возвращается. |
|||
18
H A D G E H O G s
02.10.22
✎
17:04
|
Респект таким парням!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |