Имя: Пароль:
1C
 
Внешний отчет в регламентном задании
0 C0mmander_Alex
 
03.08.16
10:04
Добрый день! Есть такая задача: регламентном заданием должен формироваться внешний отчет и сохранять результаты на диск. Проблема в том, что при использовании метода ПолучитьФорму появляется ошибка "Интерактивные операции недоступны", т.к. задание выполняется на сервере. Есть ли какие-то еще варианты, как заставить отчет формироваться?
1 C0mmander_Alex
 
03.08.16
10:05
Процедура ВыполнитьЕжедневныеОтчеты() Экспорт
    
    Для Каждого Стр Из Т_Отчеты Цикл
        
        ВнешняяФорма  = Стр.Отчет; //Справочники.ВнешниеОбработки.НайтиПоНаименованию("План фактный анализ плана ТО");
        ИмяФайла = ПолучитьИмяВременногоФайла();
        ДвоичныеДанные = ВнешняяФорма.ХранилищеВнешнейОбработки.Получить();
        ДвоичныеДанные.Записать(ИмяФайла);
                Попытка
            Форма = ВнешниеОтчеты.ПолучитьФорму(ИмяФайла);
        Исключение
            ЗаписьЖурналаРегистрации(ОписаниеОшибки(), УровеньЖурналаРегистрации.Предупреждение);
        КонецПопытки;
        
        Форма.ВыбТовар.Добавить(Стр.ГруппаТовара);
        
        Форма.НачПериода = Стр.ДатаНачала;        
        Форма.КонПериода = Стр.ДатаОкончания;
        
        Форма.НачПериода1 = Стр.ДатаНачала - 86400;        
        Форма.КонПериода1 = Стр.ДатаОкончания- 86400;
        
        Форма.НачПериода2 = ДобавитьМесяц(Стр.ДатаНачала, -12);        
        Форма.КонПериода2 = ДобавитьМесяц(Стр.ДатаОкончания, -12);
        
        Форма.СформироватьУдаленно();
        
        КаталогНаДиске = "\\SERVER-FILE5\Temp\!ОБМЕН\Ежедневные отчеты\" + Формат(ТекущаяДата(), "ДФ=dd.MM.yy");
        
        Проверка = ПроверитьСуществованиеКаталога(КаталогНаДиске);
        
        Если Проверка Тогда
            Время = СтрЗаменить(Лев(СокрЛП(Формат(ТекущаяДата(),"ДЛФ=T")), 5),":","_");

            ИмяФайла = КаталогНаДиске + "\" + СокрЛП(Стр.Менеджер)+ " " + Время + ".xlsx";
            
            Форма.ЭлементыФормы.Результат.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
        КонецЕсли;
        
    КонецЦикла;
    
КонецПроцедуры
2 vicof
 
03.08.16
10:05
Поместить во временное хранилище, потом показывать
3 C0mmander_Alex
 
03.08.16
10:31
(2) Сделал так
ИмяФайла = ПолучитьИмяВременногоФайла();
        ДвоичныеДанные = ВнешняяФорма.ХранилищеВнешнейОбработки.Получить();
        //ДвоичныеДанные.Записать(ИмяФайла);
        //АдресХранилища = "";
           АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
        ИмяОбработки = ВнешниеОбработки.Подключить(АдресВоВременномХранилище, , Ложь);
        Попытка
            Форма = ВнешниеОтчеты.ПолучитьФорму(ИмяОбработки);
        Исключение
            ЗаписьЖурналаРегистрации(ОписаниеОшибки(), УровеньЖурналаРегистрации.Предупреждение);
        КонецПопытки;

Не помогло(
4 ovrfox
 
03.08.16
10:32
Никогда не пробовал, но скорее всего в самом отчете происходят какие-то операции, запрещенные на сервере.
Скорее всего для Вашего случая запуска они бесполезны.
Поместите их между дерективами компилятора #Клиент
5 Lexey_
 
03.08.16
10:35
(0) формировать ТабДок без использования формы
6 C0mmander_Alex
 
03.08.16
10:36
(4) Тогда при выполнении регламентного задания, он просто не увидит эту процедуру
7 vicof
 
03.08.16
10:52
(3) Ну а разделять код на клиентский и серверный кто будет?
8 C0mmander_Alex
 
03.08.16
12:28
Проблема решена. Пришлось переписать отчет, чтобы он формировался без использования данных с формы.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.