![]() |
![]() |
![]() |
|
Распечатать внешнюю печатную форму из обработки АРМ | ☑ | ||
---|---|---|---|---|
0
Серёжа_
программист 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) Мантра мантрой. Дело не в ВПФ, если я добавляю ее обработку напрямую в конфу. То процедура адекватно вызывается сразу.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |