Вход | Регистрация


1С:Предприятие ::

Метки: 

Распечатать внешнюю печатную форму из обработки АРМ

Я
   Серёжа_программист
 
10.04.18 - 06:13
Вообщем есть кучка ВПФ, которые подключены к документу ПередачаВАренду. Есть обработка АРММенеджера, из которой клиент хочет  распечатывать эти документы.

В обработке АРММенеджера в командном меню печать, добавил кнопку для печати документа. В обработчике кнопки получил внешнюю обработку из справочника ДополнительныеОтчетыИОбработки и пытаюсь вызвать экспортную процедуру печать. На что получаю ошибку "Метод объекта печать не обнаружен"

Экспортная процедура печать в ВПФ присутствует.
Конфигурация 1с Такси и аренда автомобилей

Код процедуры откуда происходит вызов:

Процедура ПечатьИзВПФ(ИмяВПФ, ПараметрКоманды);
    СсылкаНаВПФ = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ИмяВПФ);
    Если СсылкаНаВПФ.Пустая() Тогда
        Сообщить("В справочнике 'Внешние обработки' не нашли внешнюю печатную форму с наименованием '"+ИмяВПФ+"'");
        Возврат;
    КонецЕсли;
        
    Попытка
        ИмяВременногоФайла = КаталогВременныхФайлов()+"тмп_впф.epf";
    Исключение
        Сообщить ("Невозможно создать файл обработке в каталоге временных файлов <<"+
        +КаталогВременныхФайлов()+">>. Возможно, не хватает прав доступа в Windows в папку для данного сеанса 1С ");
        Возврат;
    КонецПопытки;    
    
    Попытка
        ДвоичныеДанные = СсылкаНаВПФ.ХранилищеОбработки.Получить();        
        ДвоичныеДанные.Записать(ИмяВременногоФайла);
    Исключение
        Сообщить("Ошибка получения объекта из хранилища обработки");
    КонецПопытки;    
        
    Попытка
        ОбрОбъект = ВнешниеОбработки.Создать(ИмяВременногоФайла);
        ОбрОбъект.Документ = ПараметрКоманды;
    Исключение
        Сообщить("Ошибка создания объекта из временного файла обработки "+ИмяВременногоФайла);
        Возврат;
    КонецПопытки;
    
    // Проба печати

    Попытка
        ТаблДок = ОбрОбъект.Печать();
        ТаблДок.Вывести();
    Исключение
        А=1;// Точка останова для отладки!

        Сообщить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке() ));// ВНЕШНЮЮ печатную форму из справончика ВПФ можно спокойно поправить!

    КонецПопытки;    
            
КонецПроцедуры
 
 
   МимохожийОднако
 
1 - 10.04.18 - 06:18
Экспорт позабыл
   Серёжа_программист
 
2 - 10.04.18 - 06:23
(1) Экспорт есть 

Вот код процедуры которую необходимо вызвать

Процедура Печать(ИдентификаторКоманды,ОбъектыНазначения) Экспорт

    СсылкаНаОбъект = ОбъектыНазначения[0];
    РеквизитыДокумента = ПолучитьРеквизитыДокумента(СсылкаНаОбъект);//функция получает реквизиты из документа

    
    Макет = ПолучитьМакет(СсылкаНаОбъект);//серверная функция, записывает макет в файл и возвращает полное имя файла


    Попытка 
        Шаблон = ПолучитьCOMОбъект(Макет);//инициализируем COM-объект

    Исключение
        КомОбъект = 0;
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = ОписаниеОшибки();
        Сообщение.Сообщить(); 
        
        Возврат;
    КонецПопытки;  

    Если Шаблон = Неопределено Тогда
        Возврат;
    КонецЕсли;

    //здесь делаем всякие штуки типа заполнения и прочего


    Замена = Шаблон.Content.Find;
    //Заменить заранее определенные ключевые конструкции на требуемый текст.

    Замена.Execute("<НомерДоговора>", Ложь, Истина, Ложь, , , Истина, , Ложь, """" + РеквизитыДокумента.НомерДоговора + """");
    Замена = Шаблон.Content.Find;
    Замена.Execute("<ДатаДоговора>", Ложь, Истина, Ложь, , , Истина, , Ложь, """" + РеквизитыДокумента.ДатаДоговора + """");
    Замена = Шаблон.Content.Find;
    Замена.Execute("<МодельТС>", Ложь, Истина, Ложь, , , Истина, , Ложь, " " + РеквизитыДокумента.МодельТС + " ");
    Замена = Шаблон.Content.Find;
    Замена.Execute("<Марка>", Ложь, Истина, Ложь, , , Истина, , Ложь, " " + РеквизитыДокумента.Марка + " ");
    Замена = Шаблон.Content.Find;
    Замена.Execute("<ГосЗнак>", Ложь, Истина, Ложь, , , Истина, , Ложь, " " + РеквизитыДокумента.ГосЗнак + " ");
    Замена = Шаблон.Content.Find;
    Замена.Execute("<Вин>", Ложь, Истина, Ложь, , , Истина, , Ложь, " " + РеквизитыДокумента.Вин + " ");
    Замена = Шаблон.Content.Find;
    Замена.Execute("<ГодИзготовления>", Ложь, Истина, Ложь, , , Истина, , Ложь, " " + РеквизитыДокумента.ГодИзготовления + " ");
    Замена = Шаблон.Content.Find;
    Замена.Execute("<МодельДВС>", Ложь, Истина, Ложь, , , Истина, , Ложь, " " + РеквизитыДокумента.МодельДВС + " ");    
    Замена = Шаблон.Content.Find;
    Замена.Execute("<НомерДВС>", Ложь, Истина, Ложь, , , Истина, , Ложь, " " + РеквизитыДокумента.НомерДВС + " ");
    Замена = Шаблон.Content.Find;
    Замена.Execute("<ЦветКузова>", Ложь, Истина, Ложь, , , Истина, , Ложь, " " + РеквизитыДокумента.ЦветКузова + " ");
    Замена = Шаблон.Content.Find;
    Замена.Execute("<МощностьДВС>", Ложь, Истина, Ложь, , , Истина, , Ложь, " " + РеквизитыДокумента.МощностьДВС + " ЛС");
    Замена = Шаблон.Content.Find;
    Замена.Execute("<Серия>", Ложь, Истина, Ложь, , , Истина, , Ложь, " " + РеквизитыДокумента.Серия + " ");
    Замена = Шаблон.Content.Find;
    Замена.Execute("<Номер>", Ложь, Истина, Ложь, , , Истина, , Ложь, " " + РеквизитыДокумента.Номер + " ");
    Замена = Шаблон.Content.Find;
    Замена.Execute("<Топливо>", Ложь, Истина, Ложь, , , Истина, , Ложь, " " + РеквизитыДокумента.Топливо + " ");
    Замена = Шаблон.Content.Find;
    Замена.Execute("<ФИОКлиента>", Ложь, Истина, Ложь, , , Истина, , Ложь, "" + РеквизитыДокумента.Контрагент + " ");
    Замена = Шаблон.Content.Find;
    Замена.Execute("<ДатаДоговора>", Ложь, Истина, Ложь, , , Истина, , Ложь, """" + РеквизитыДокумента.ДатаДоговора + """");

    //Конец всяких штук

    
    Шаблон.Fields.UpDate();
    Шаблон.Activate();
    Шаблон.Application.Visible = 1;//указываем, что надо показать юзеру наш COM-объект

    Шаблон.Save();//записываем изменения


    Шаблон = 0;


КонецПроцедуры
   МимохожийОднако
 
3 - 10.04.18 - 06:26
Про это расскажи:
 Шаблон = ПолучитьCOMОбъект(Макет)//инициализируем COM-объект
   Серёжа_программист
 
4 - 10.04.18 - 06:27
(3) Макет актив документ (Ворд), он инициализируется на сервере, потом функция возвращает путь к файлу и открывает макет на клиенте.
   МимохожийОднако
 
5 - 10.04.18 - 06:32
(2) Отладчиком внутрь этой процедуры попадаешь?
   МимохожийОднако
 
6 - 10.04.18 - 06:33
Процедуру используешь как функцию. Это любопытно.
   Серёжа_программист
 
7 - 10.04.18 - 06:35
(5) Нет, отладчик не залетает в процедуру
   Серёжа_программист
 
8 - 10.04.18 - 06:37
(6) Там проблемка в том, что макет можно инициализировать только на сервере, а открывать документ ворд нужно на клиенте, поэтому такие извраты)
   МимохожийОднако
 
9 - 10.04.18 - 06:42
ТаблДок = ОбрОбъект.Печать()
Проблема в том, что 
1. используешь процедуру как печать. 
2. из функции (если переделаешь процедуру) никогда не получишь ТабДок, т.к. используешь актив док
   МимохожийОднако
 
10 - 10.04.18 - 06:43
ОбрОбъект Какой тип значения?
 
 Рекламное место пустует
   Серёжа_программист
 
11 - 10.04.18 - 06:47
(10) В нем лежит внешняя обработка
   МимохожийОднако
 
12 - 10.04.18 - 06:51
(11) "Сумлеваюсь я" ©Дед Щукарь
   МимохожийОднако
 
13 - 10.04.18 - 06:53
Повторюсь. Не удастся получить табличный документ из файла с Word
   Серёжа_программист
 
14 - 10.04.18 - 06:54
   Серёжа_программист
 
15 - 10.04.18 - 06:55
(13) Ну это просто переменная так называется из примера. Мне нужно просто выполнить процедуру печать, она открывает документ ворд и производит замену
   МимохожийОднако
 
16 - 10.04.18 - 06:57
(15) Так процедура или функция? В каком модуле разместил? Отлаживаешь уже подключенную обработку или в обработке есть форма для отладки? УФ или ОФ?
   Серёжа_программист
 
17 - 10.04.18 - 07:04
(16) Процедура. Вообще она размещена в основном модуле формы обработки. Пробовал перемещать в модуль объекта, результат тот же. Её хотябы просто вызвать, а дальше уже можно плясать
   Серёжа_программист
 
18 - 10.04.18 - 07:05
(17) Отлаживаю подключенную
   Серёжа_программист
 
19 - 10.04.18 - 07:05
УФ
   Серёжа_программист
 
20 - 10.04.18 - 07:12
Ну и соответствено ВПФ рабочая, если формировать из документа ПередачаВАренду, то все корректно отрабатывает
   МимохожийОднако
 
21 - 10.04.18 - 07:23
Добавь в свою обработку форму для отладки, из которой вызываешь процедуру печати. В инете об этом написано много. На ИС-е посмотри.
Процедуру печати размести в модуле обработки, а не в модуле формы.
При вызове из формы серверной процедуры не забудь про метод Реквизит формы в значение.
   Серёжа_программист
 
22 - 10.04.18 - 07:43
(21) Ну я создаю любую тестовую процедуру либо функцию в модуле обработки, подключаю её в справочник внешних обработок. И всеравно не получается ёё вызвать. Не находит метод объекта "ИмяПроцедуры"
   МимохожийОднако
 
23 - 10.04.18 - 08:01
Какая БСП используется в твоей конфигурации? Почитай документацию по этой версии.
..
Добавь в свою обработку Форму. В этой форме добавь реквизит СсылкаНаДокумент и команду, которая вызывает из этой формы печать. Отлаживай. Когда отладишь, тогда и подключай к справочнику Внешние обработки.
   Серёжа_программист
 
24 - 10.04.18 - 08:04
(23) 1.1.3.1
   МимохожийОднако
 
25 - 10.04.18 - 08:09
Мантра:
Добавь в свою обработку Форму.
Добавь в свою обработку Форму.
Добавь в свою обработку Форму.
   Серёжа_программист
 
26 - 10.04.18 - 10:52
(25) Мантра мантрой. Дело не в ВПФ, если я добавляю ее обработку напрямую в конфу. То процедура адекватно вызывается сразу.



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