Имя: Пароль:
1C
1С v8
Из внеш. обработки вызвать внеш. обработку получить печформу и сохранить в файл.
0 SergVMV
 
13.04.17
13:28
Есть внешняя обработка, в которой нужно открыть другую внешнюю обработку для выпуска отчета. Его сохранить и после получить путь к этому файлу.
Не могу понять как программно открыть внешнюю и как передать в нее параметры. И как получить путь к сформированному отчету.
1 lodger
 
13.04.17
13:29
а вам бы все гланды через ж удалять )
отчет и макет перекопировать не вариант?
2 Гипервизор
 
13.04.17
13:36
ВнешниеОбработки.Создать(ПолныйПутьКОбработке) не предлагать?
3 anreko
 
13.04.17
13:45
Вызвать внешнюю обработку(отчет):

&НаСервере
Функция ПодключитьВнешнийОтчет(АдресХранилища)
    Возврат ВнешниеОтчеты.Подключить(АдресХранилища,,Ложь);
    //УстановитьБезопасныйРежим(Истина);
КонецФункции

&НаКлиенте
Процедура Старт()
    //Помещаем обработку во временном хранилище
    АдресХранилища = "";
    
    Оп = Новый ОписаниеОповещения("Континью", ЭтотОбъект);
    
    НачатьПомещениеФайла(Оп, АдресХранилища, "\\server\c$\Внешняя.erf", Ложь);
    
КонецПроцедуры    

&НаКлиенте
Процедура Континью(Результат, АдресХранилища, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт    
    
    ИмяОбработки = ПодключитьВнешнийОтчет(АдресХранилища);
    
    // Откроем форму подключенной внешней обработки
    П = Новый Структура("Параметр", 2);
    ФормаОбработки = ПолучитьФорму("ВнешнийОтчет."+ ИмяОбработки +".Форма.ФормаОтчетаУправляемая",П);
    
    ФормаОбработки.Открыть();
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Старт();
КонецПроцедуры
4 anreko
 
13.04.17
13:48
А затем выполнение отчета:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Зашли в обработку, а параметр: "+Параметры.Свойство("Параметр");
    Сообщение.Сообщить();

    Если Параметры.Свойство("Параметр") Тогда    
    
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Параметр 2: пошла обработка";
        Сообщение.Сообщить();
        Отчет.АвтоВыполнениеЗакрытие = Истина;
        
        ЗаполнитьСписокОбъектов(Истина);
    
        ТабДок = ПолучитьТабДокНаСервере();
        
         ИмяФайла = Отчет.РабочийКаталог + "Протокол загрузки+".xls";  
        // удаление предыдущего файла
        Файл = Новый Файл(ИмяФайла);
        Если Файл.Существует() = Истина Тогда
            УдалитьФайлы(Отчет.РабочийКаталог,"portal.roscap.com - Протокол загрузки+"*");
        КонецЕсли;
    
        // запись нового файла
        ТабДок.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLS);
        
        Если НЕ Отчет.НеОтправлятьПочту Тогда
            ОтправитьПочту(ИмяФайла);
        КонецЕсли;    

    Иначе    
        Отчет.АвтоВыполнениеЗакрытие = Ложь;
    КонецЕсли;

КонецПроцедуры
5 anreko
 
13.04.17
13:53
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    Если Отчет.АвтоВыполнениеЗакрытие Тогда    
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Параметр 2: пошло завершение работы";
        Сообщение.Сообщить();
        ЗавершитьРаботуСистемы(Ложь);
    КонецЕсли;

КонецПроцедуры
6 SergVMV
 
17.04.17
09:07
С 4 пунктом не совсем допонял. Как мне передать в форму параметр и запустить сам отчет?
Форму после выгрузки файла как закрыть?
7 anreko
 
17.04.17
09:38
Я завершаю работу 1с.
Если тебе просто нужно закрыть форму, сделай в процедуре при открытии Отказ = Истина; и форма обработки открываться не будет.

Как передать параметр я ж как раз и показал:
  П = Новый Структура("Параметр", 2);
    ФормаОбработки = ПолучитьФорму("ВнешнийОтчет."+ ИмяОбработки +".Форма.ФормаОтчетаУправляемая",П);

А вот это условие как раз и проверяет наличие параметра, правда не значение, тут нужно чуть-чуть доработать:
  Если Параметры.Свойство("Параметр") Тогда    
  ...
  КонецЕсли;

Ну и наконец замечу, что это должен будет быть именно внешний отчет, для внешней обработки также нужно будет пару изменений.
8 SergVMV
 
18.04.17
09:03
С параметром разобрался. Но, не смог понять как запустить сам отчет.
есть функция: Сформировать(ЛС). в ней как раз и должен формироваться отчет с сохранением в файл, где ЛС это параметр для формы отчета.
Как мне воспользоваться Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)?
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.