|
Передача массива файлов в фоновое задание | ☑ | ||
---|---|---|---|---|
0
neusro84
14.10.20
✎
05:51
|
Приветствую. Что-то не получается получить файлы, помещённые на сервер при помощи НачатьПомещениеФайловНаСервер, в фоновом задании.
При помещении файлов указываю УИД формы. В фоновое задание передаю массив адресов файлов (полученных в результате работы НачатьПомещениеФайловНаСервер) , в фоновом пытаюсь получить файл из хранилища, а в ответ Неопределено. Причем тот же код при выполнении не в фоновом задании возвращает из адреса файл. В чем может быть проблема? |
|||
1
DrZombi
гуру
14.10.20
✎
06:10
|
(0) Запусти Отладчик с параметром запуска "РежимОтладки". И ваши фоновые задания переведутся в локальные с отладкой :)
|
|||
2
DrZombi
гуру
14.10.20
✎
06:11
|
+ Дальше дело вашего взгляда.
|
|||
3
DrZombi
гуру
14.10.20
✎
06:12
|
+(1) "фоновые задания" - будут запущены под вашей сессией на сервере, а не отдельным заданием. (как то так)
|
|||
4
neusro84
14.10.20
✎
06:44
|
(1) И что я там увижу, кроме того что уже видел. Массив с адресами передается нормально, перед запуском фонового задания делаю в режиме отладки - ПолучитьИзВременногоХранилища - получаю двоичные данные, при входе в фоновое задание массив содержит элементы, но по адресам уже нет двоичных данных.
|
|||
5
PuhUfa
14.10.20
✎
07:35
|
(0) >>При помещении файлов указываю УИД формы.
Что за форма в фоновом задании? |
|||
6
neusro84
14.10.20
✎
09:40
|
(5) Файлы передаются с клиента через форму и фоновое запускается тоже с клиента
|
|||
7
Basilio
14.10.20
✎
10:20
|
Форма на момент работы фонового еще существует? Данные из Временного Хранилища удаляются в момент закрытия Формы.
|
|||
8
neusro84
14.10.20
✎
11:01
|
(7) В том то и дело что существует, проблема воспроизводится в файловом и серверном варианте работы на версии 8.3.16.
|
|||
9
Вафель
14.10.20
✎
11:03
|
код в студию
|
|||
10
neusro84
14.10.20
✎
11:17
|
Тестовый код для воспроизведения ошибки
Код формы &НаКлиенте Процедура Команда1(Команда) МассивПутей = Новый Массив(); МассивПутей.Добавить(Новый ОписаниеПередаваемогоФайла("D:\tmp\file1.pdf")); МассивПутей.Добавить(Новый ОписаниеПередаваемогоФайла("D:\tmp\file1.pdf")); Описание = Новый ОписаниеОповещения("Завершение", ЭтотОбъект, МассивПутей ); НачатьПомещениеФайловНаСервер(Описание,,,МассивПутей,УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура Завершение(Результат, Доппараметры) Экспорт Мас = Новый Массив(); Для каждого стр из Результат Цикл Доп = Новый Структура("Адрес",стр.Адрес); Мас.Добавить(Доп); КонецЦикла; ЗавершениеНаСервере(Мас); КонецПроцедуры &НаСервере Процедура ЗавершениеНаСервере(Доппараметры) Экспорт ПараметрыЗФ = Новый Массив(); ПараметрыЗФ.Добавить(Доппараметры); ФоновыеЗадания.Выполнить("МодульСКодом.ВыполнитьЗагрузкуФайлов" , ПараметрыЗФ); КонецПроцедуры Код фонового задания модуля "МодульСКодом" Процедура ВыполнитьЗагрузкуФайлов(МассивАдресов) Экспорт Для каждого стр из МассивАдресов Цикл Данные = ПолучитьИзВременногоХранилища(стр.Адрес); //В переменой Данные будет Неопределено КонецЦикла; КонецПроцедуры |
|||
11
Вафель
14.10.20
✎
11:24
|
так у тебя хранилища в хранилищах.
передавай напрямую двоичные данные |
|||
12
Вафель
14.10.20
✎
11:25
|
ну и вообще хранилище может оказаться на другом сервере чем само фоновое.
потому ничего и нет |
|||
13
ДенисЧ
14.10.20
✎
11:27
|
(12) Об этом менеджер кластера позаботится.
(0) А ты пробовал указывать не уид формы, а новый произвольный уид? |
|||
14
Вафель
14.10.20
✎
11:28
|
(13) вот оно и видно как позаботился
|
|||
15
neusro84
14.10.20
✎
11:50
|
(11) Мне необходимо передать все файлы за один раз. Другого способа не нашел.
(13) Да, то же самое. |
|||
16
Вафель
14.10.20
✎
11:51
|
(15) массив двоичных данных
|
|||
17
Вафель
14.10.20
✎
11:52
|
с произвольным уидом хранилище умирает сразу после завершения процедуры
|
|||
18
polosov
14.10.20
✎
12:01
|
(10)ПомещениеФайлаОтменено проанализируй в Процедура Завершение
|
|||
19
acht
14.10.20
✎
12:11
|
(13) Не позаботится. Временное хранилище всегд существует в рамках сеанса. Читать из одного сеанса данные другого нельзя (сам понимаешь, почему). Единственное, специально реализованное платформой исключение - копирование результата фонового в вызывающий сеанс. А фоновое задание всегда запускает новый сеанс.
Единственный способ передать данные в фоновое задание - его параметры. Надо или передавать файлы через двоичные данные, или выкладывать их на внешний по отношению к 1С ресурс (типа файловой шары), который доступен из разных сеансов (практически даже - с разных серверов), передавать параметром в фоновое их расположение. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |