|
Как перекинуть печать ВПФ с формы в модуль объекта | ☑ | ||
---|---|---|---|---|
0
DenYuliya
11.11.21
✎
17:09
|
Добрый день.
Платформа 1С:Предприятие 8.3 (8.3.18.1289) Есть ВПФ, выводящая на печать Word через COMОбъект. Раньше прекрасно работала через форму (на форме кнопка, все процедуры - в модуле формы). Формирование, заполнение, вызов и т.д. COMОбъект происходил в клиентской процедуре. &НаКлиенте Процедура ПечатьУведомлениеОЗадолженности(Команда) \\\\ тут код КонецПроцедуры Тут понадобилось от формы отказаться, все перенести в модуль объекта. Сделала новую обработку, создала форму, на ней реквизит "ссылка на объект" и кнопка "Печать". В модуле формы пишу: &НаСервере Функция ПечатьПФНаСервере() ЭтотОбъектОбработка = РеквизитФормыВЗначение("Объект"); ЭтотОбъектОбработка.Печать(); КонецФункции &НаКлиенте Процедура ПечатьПФ(Команда) ПечатьПФНаСервере(); КонецПроцедуры В модуле объекта: Функция Печать() Экспорт ПечатьУведомлениеОЗадолженности(); КонецФункции &НаСервере Процедура ПечатьУведомлениеОЗадолженности() Экспорт СтруктураДляЗаполнения = ПолучитьСтруктуруДляЗаполнения(); Попытка ОбъектВорд = Новый COMОбъект("Word.Application"); Исключение Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание); КонецПопытки; ОбъектВорд.Documents.Add("\\serv8\ftp\Шаблоны исков\Юр блок Колпино\Уведомление о задолженности.docx"); Док = ОбъектВорд.ActiveDocument; ////// КонецПроцедуры Суть проблемы: Раньше процедура ПечатьУведомлениеОЗадолженности() была клиентской и вот эта часть нормально отрабатывала. ОбъектВорд.Documents.Add("\\serv8\ftp\Шаблоны\Уведомление о задолженности.docx"); А теперь если ПечатьУведомлениеОЗадолженности() оставить НаКлиенте - я не могу понять, как ее вызвать. Если ПечатьУведомлениеОЗадолженности() сделать НаСервере - то вываливается ошибка Значение не является значением объектного типа (Documents) {ВнешняяОбработка.УведомлениеОЗадолженности.МодульОбъекта(46)}: ОбъектВорд.Documents.Add("\\serv8\ftp\Шаблоны исков\Юр блок Колпино\Уведомление о задолженности.docx"); {ВнешняяОбработка.УведомлениеОЗадолженности.МодульОбъекта(32)}: ПечатьУведомлениеОЗадолженности(); {ВнешняяОбработка.УведомлениеОЗадолженности.Форма.Форма.Форма(5)}: ЭтотОбъектОбработка.Печать(); {ВнешняяОбработка.УведомлениеОЗадолженности.Форма.Форма.Форма(10)}: ПечатьПФНаСервере(); подскажите, где я туплю? Спасибо большое! |
|||
1
SuperMario
11.11.21
✎
17:25
|
А у Вас Word как приложение на сервере стоит?
Если так, то Попытка ОбъектВорд = Новый COMОбъект("Word.Application"); Исключение Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание); >>>>!!!! На сервере отработала ошибка, Вам ничего не показала т.к. это интерагтивное событие и пошла дальше косячить!<<<<<< КонецПопытки; Но , вообще, я не понимаю, зачем WORD вы на сервер запихнули? Если только сохранить как файл, тогда Ок. |
|||
2
DenYuliya
11.11.21
✎
17:37
|
(1) нет
|
|||
3
DenYuliya
11.11.21
✎
17:39
|
(1) я что-то только после вашего вопроса задумалась о том. что стоит он только на другом серваке, где другие базы крутятся, а на этом-то реально нет... Что, никак, получается?
|
|||
4
SuperMario
11.11.21
✎
17:39
|
(2) А метод серверный!
|
|||
5
DenYuliya
11.11.21
✎
17:41
|
(4) а если его сделать клиентским, как он и был раньше - его никак не вызвать с команды на форме?
|
|||
6
SuperMario
11.11.21
✎
17:41
|
(3) Вы поручили серверу предприятия делать работу заполнения документа, а приложение ему не дали.
Вместо Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание); сделайте запись в журнал регистрации и потом возврат (это если по фен и шую)) ). Не нужно никакого интерактива ;-) |
|||
7
Креатив
11.11.21
✎
17:43
|
Интересно, а com-объект с клиента на сервер передать можно?
|
|||
8
SuperMario
11.11.21
✎
17:43
|
(5) Вы бы написали, чего добиваетесь? тогда проще было подсказать.
|
|||
9
SuperMario
11.11.21
✎
17:44
|
(7) Это несериализуемый тип.
|
|||
10
DenYuliya
11.11.21
✎
17:47
|
(8) я в изначальном посте писала - Есть ВПФ, выводящая на печать Word через COMОбъект.
Раньше прекрасно работала через форму (на форме кнопка, все процедуры - в модуле формы). Формирование, заполнение, вызов и т.д. COM Объекта происходило в клиентской процедуре. Но у пользователя по кнопке "Печать" открывалась форма, где он нажимал "напечатать". Решили избавиться от формы и все формировать в модуле объекта. Но отладку-то как-то надо запускать? Поэтому форма осталась временно, чтобы там выбирать "ссылку на объект" и кнопку. Вот пытаюсь понять, как бы "натянуть сову на глобус" |
|||
11
mTema32
11.11.21
✎
17:52
|
(0) Клиентский механизм хотите выполнить на сервере. Это так не работает.
Задача поставлена некорректно. |
|||
12
mTema32
11.11.21
✎
17:53
|
Вся идея такой реализации изначально падает если сервер под линуксом.
|
|||
13
SuperMario
11.11.21
✎
17:57
|
У Вас что за прикладное решение? Применяете БСП?
В топе только версия платформы |
|||
14
DenYuliya
11.11.21
✎
17:59
|
(13) отраслевка 1С:Учет в управляющих компаниях ЖКХ, ТСЖ и ЖСК, редакция 3.0 (3.0.103.1)
|
|||
15
DenYuliya
11.11.21
✎
18:05
|
(12) на винде
|
|||
16
SuperMario
11.11.21
✎
18:08
|
(14) на почту скинул рабочую печать трудового договора в Word-е.
|
|||
17
SuperMario
11.11.21
✎
18:09
|
За основу можно взять
|
|||
18
SuperMario
11.11.21
✎
18:16
|
Обрати внимание на то, что обработка вызывается из подсистемы печати
..... ..... ДобавитьКоманду(ТаблицаКоманд,НСтр("ru = 'Трудовой договор (WORD)'"),"ТрудовойДоговор", "ВызовКлиентскогоМетода",Истина,"ПечатьMXL"); И Интерактивно из Формы (для отладки) |
|||
19
DenYuliya
11.11.21
✎
18:17
|
(16) спасибо большое, посмотрю сейчас!
|
|||
20
SuperMario
11.11.21
✎
18:18
|
(19) я не сталкивался с "отраслевками". Но, думается, что БСП они применяют. тогда это Ваш случай)))
|
|||
21
DenYuliya
11.11.21
✎
19:07
|
(20) да, конечно, БСП есть, это же БИТ))). Смотрю уже, некоторые интересные моменты подергала у вас).
Хотя - у вас тоже есть форма и формирование COM-объекта идет НаКлиенте, как и у меня. Идея-то была вообще убрать форму из обработки. Ну да ладно, больше провожусь. Хотя, конечно, интересно, можно ли в принципе это реализовать. |
|||
22
DenYuliya
11.11.21
✎
22:03
|
(18) а можно глупый вопрос? Я так понимаю, в твоей обработке - ПФ выводится по одному экземпляру на каждую строку ТЧ, ведь так? А где начинается обход ТЧ? Не могу понять, как это для COMОбъекта реализовать?
Что то типа ДляКаждого Строка Из ТЧ_Сотрудники ///печать COMОбъект Цикл |
|||
23
DenYuliya
11.11.21
✎
22:09
|
(18) в продолжение (22)
У меня сейчас вот так, но выводится либо первая строка ТЧ. если она всего одна, либо последняя, если строк ТЧ - несколько. Я так понимаю, надо впендюрить куда-то Цикл и что-то еще, да? &НаКлиенте Процедура Печать(ИдентификаторКоманды,ОбъектыНазначения) Экспорт СтруктураДляЗаполнения = ПолучитьСтруктуруДляЗаполнения(); Попытка ОбъектВорд = Новый COMОбъект("Word.Application"); Исключение Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание); КонецПопытки; ОбъектВорд.Documents.Add("\\serv8\ftp\Шаблоны исков\Уведомление о задолженности.docx"); Док = ОбъектВорд.ActiveDocument; //заполнение закладки ПолноеНаименованиеОрганизации Док.Bookmarks("ПолноеНаименованиеОрганизации").Select(); Док.Application.Selection.TypeText(СтруктураДляЗаполнения.ПолноеНаименованиеОрганизации); ///ну и куча заполнения параметров поштучно ОбъектВорд.Application.Visible=1; ОбъектВорд.Activate(); ОбъектВорд = 0; КонецПроцедуры |
|||
24
SuperMario
12.11.21
✎
09:51
|
(22) Это же трудовой договор на основе приема на работу))
Там нет многострочных частей. |
|||
25
SuperMario
12.11.21
✎
09:55
|
(21) я подстраивался под ВызовКлиентскогоМетода БСП.
Вот подходящий материал https://infostart.ru/1c/articles/694647/ |
|||
26
SuperMario
12.11.21
✎
09:59
|
+(22) но у меня где-то была печ. форма с заполнение таблицы WORD-а. Сложность вызывала создание самой таблицы в коде с точным указанием кол-ва строк и колонок да еще в конкретном месте документа ))
Но это уже совсем другая история... (С) Следствие вели с Леонидом Каневским |
|||
27
SuperMario
12.11.21
✎
10:20
|
+(21) Никак. Подумайте сами. На самом клиенте что бы сделать вызов нужно "нечто"(извините за тавтологию), которое на нем будет находиться и выполнять код.
Обработка, как объект (точнее её коллекция) находится на сервере. Что бы получить доступ к модулю объекта, его нужно создать (т.к. он после создания коллекции реквизитов формы сам объект разрушается). РеквизитФоромыВЗначение("Объект") создаст объект ТОЛЬКО на сервере (если вы обратите внимание в конфигураторе на сам объект, то он будет в скобках. Это означает, что этот объект только на сервере и передать его на клиента никак не можно). Вот и попробуйте находясь на сервере добраться до клиента (вызвать клиентский метод). |
|||
28
DenYuliya
12.11.21
✎
12:26
|
(24) я в нашей УПП посмотрела бегло этот документ, там есть ТЧ. Хотя может у нее другой смысл какой-то, я в ЗУП вообще "0"
|
|||
29
DenYuliya
12.11.21
✎
12:29
|
(26) да, это какой - то лютый треш((((. За ссыль в (25) спасибо, изучу.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |