Имя: Пароль:
1C
 
Длительные (фоновые) задания + Поместить во временное хранилище
,
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
Респект таким парням!