Имя: Пароль:
1C
1С v8
Как передать файл в фоновое задание
0 vhl
 
03.09.15
14:45
Платформа 8.3.6.2152
Нужно из УФ передать файл в фоновое задание для последующей обработки.
Делал так:
&НаКлиенте
Процедура Команда1(Команда)
    ФайлДД = Новый ДвоичныеДанные(ИмяФайла);
    АдресХранилищаДляФонового = ПоместитьВоВременноеХранилище(ФайлДД, УникальныйИдентификатор);
    ЗапуститьВыгрузкуЗагрузкуНаСервере(АдресХранилищаДляФонового)
КонецПроцедуры

&НаСервере
Функция ЗапуститьВыгрузкуЗагрузкуНаСервере(АдресХранилищаДляФонового)
    ПараметрыМетода = Новый Массив;
    ПараметрыМетода.Добавить(АдресХранилищаДляФонового);
    Задание = ФоновыеЗадания.Выполнить("МойОбщийМодуль.МоеФоновое", ПараметрыМетода);
КонецФункции

В общем модуле:

Процедура МоеФоновое(АдресХранилища) Экспорт
    ФайлДД = ПолучитьИзВременногоХранилища(АдресХранилища);
    Если ТипЗнч(ФайлДД) = Тип("ДвоичныеДанные") Тогда
        ЗаписьЖурналаРегистрации("Отладка", , , ,"Есть ДД");
    Иначе
        ЗаписьЖурналаРегистрации("Отладка", , , ,"Нет ДД");
    КонецЕсли;
КонецПроцедуры

Пробовал так:
ПомещаемыеФайлы = Новый Массив;
ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла));
ПомещенныеФайлы = Новый Массив;
Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь,  УникальныйИдентификатор) Тогда
    Возврат;
КонецЕсли;
АдресХранилищаДляФонового = ПомещенныеФайлы[0].Хранение;

Пробовал так:
АдресХранилищаДляФонового = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ПоместитьФайл(АдресХранилищаДляФонового, ИмяФайла, , Ложь);

Из фонового на клиент через временное хранилище нормально передается, а вот с клиента в фоновое - никак почему-то.
1 VikingKosmo
 
03.09.15
14:50
потому что так и было задумано...
2 vhl
 
03.09.15
14:55
Забыл сказать, иногда файл передается, но не могу понять в каком случае, так что (1) в пролете.
3 Lexey_
 
03.09.15
15:08
(0) ПоместитьВоВременноеХранилище(<Данные>, <Адрес>)
<Адрес>: В случае, если передается УникальныйИдентификатор формы или адрес в хранилище, то значение будет автоматически удалено после закрытия этой формы.
4 VikingKosmo
 
03.09.15
15:14
(2) врешь, потому что "Также позволяет поместить данные из фонового задания в родительский сеанс". Из ФЗ в Родительский сеанс, Карл!
5 Serginio1
 
03.09.15
15:18
Base64Строка,Base64Значение да и ДД сериализуются правда в тот же Base64
6 vhl
 
03.09.15
15:20
(3) Форма не закрывается
7 vhl
 
03.09.15
15:22
(4) Это я еще в (0) написал, зачем ты мне повторяешь это?
8 vhl
 
03.09.15
15:50
В общем все оказалось довольно просто. Получается можно тупо передавать ДвоичныеДанные как параметр к фоновому заданию. Для неквалифицированных любителей цитировать справку и рассказывать что "так и задумано" рабочий код:
&НаКлиенте
Процедура Команда1(Команда)
    ЗапуститьВыгрузкуЗагрузкуНаСервере(Новый ДвоичныеДанные(ИмяФайла))
КонецПроцедуры

&НаСервере
Функция ЗапуститьВыгрузкуЗагрузкуНаСервере(ДД)
    ПараметрыМетода = Новый Массив;
    ПараметрыМетода.Добавить(ДД);
    Задание = ФоновыеЗадания.Выполнить("МойОбщийМодуль.МоеФоновое", ПараметрыМетода);
КонецФункции

Процедура МоеФоновое(ФайлДД) Экспорт
    Если ТипЗнч(ФайлДД) = Тип("ДвоичныеДанные") Тогда
        ЗаписьЖурналаРегистрации("Отладка", , , ,"Есть ДД");
    Иначе
        ЗаписьЖурналаРегистрации("Отладка", , , ,"Нет ДД");
    КонецЕсли;
КонецПроцедуры
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой