Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Передача массива файлов в фоновое задание

Передача массива файлов в фоновое задание
Я
   neusro84
 
14.10.20 - 05:51
Приветствую. Что-то не получается получить файлы, помещённые на сервер при помощи НачатьПомещениеФайловНаСервер, в фоновом задании.
При помещении файлов указываю УИД формы.
В фоновое задание передаю массив адресов файлов (полученных в результате работы НачатьПомещениеФайловНаСервер) , в фоновом пытаюсь получить файл из хранилища, а в ответ Неопределено. Причем тот же код при выполнении не в фоновом задании возвращает из адреса файл. В чем может быть проблема?
   DrZombi
 
1 - 14.10.20 - 06:10
(0) Запусти Отладчик с параметром запуска "РежимОтладки". И ваши фоновые задания переведутся в локальные с отладкой :)
   DrZombi
 
2 - 14.10.20 - 06:11
+ Дальше дело вашего взгляда.
   DrZombi
 
3 - 14.10.20 - 06:12
+(1) "фоновые задания" - будут запущены под вашей сессией на сервере, а не отдельным заданием. (как то так)
   neusro84
 
4 - 14.10.20 - 06:44
(1) И что я там увижу, кроме того что уже видел. Массив с адресами передается нормально, перед запуском фонового задания делаю в режиме отладки - ПолучитьИзВременногоХранилища - получаю двоичные данные, при входе в фоновое задание массив содержит элементы, но по адресам уже нет  двоичных данных.
   PuhUfa
 
5 - 14.10.20 - 07:35
(0) >>При помещении файлов указываю УИД формы.
Что за форма в фоновом задании?
   neusro84
 
6 - 14.10.20 - 09:40
(5) Файлы передаются с клиента через форму и фоновое запускается тоже с клиента
   Basilio
 
7 - 14.10.20 - 10:20
Форма на момент работы фонового еще существует? Данные из Временного Хранилища удаляются в момент закрытия Формы.
   neusro84
 
8 - 14.10.20 - 11:01
(7) В том то и дело что существует, проблема воспроизводится в файловом и серверном варианте работы на версии 8.3.16.
   Вафель
 
9 - 14.10.20 - 11:03
код в студию
   neusro84
 
10 - 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) вот оно  и видно как позаботился
   neusro84
 
15 - 14.10.20 - 11:50
(11) Мне необходимо передать все файлы за один раз. Другого способа не нашел.
(13) Да, то же самое.
   Вафель
 
16 - 14.10.20 - 11:51
(15) массив двоичных данных
   Вафель
 
17 - 14.10.20 - 11:52
с произвольным уидом хранилище умирает сразу после завершения процедуры
   polosov
 
18 - 14.10.20 - 12:01
(10)ПомещениеФайлаОтменено  проанализируй в Процедура Завершение
   acht
 
19 - 14.10.20 - 12:11
(13) Не позаботится. Временное хранилище всегд существует в рамках сеанса. Читать из одного сеанса данные другого нельзя (сам понимаешь, почему). Единственное, специально реализованное платформой исключение - копирование результата фонового в вызывающий сеанс. А фоновое задание всегда запускает новый сеанс.

Единственный способ передать данные в фоновое задание - его параметры. Надо или передавать файлы через двоичные данные, или выкладывать их на внешний по отношению к 1С ресурс (типа файловой шары), который доступен из разных сеансов (практически даже - с разных серверов), передавать параметром в фоновое их расположение.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.