1с 8.3 управление торговлей (Демо) Печатная форма Word

1. DavidK 12.09.17 06:05 Сейчас в теме
Всем привет. У меня есть внешняя печатная форма (Во вложении). В качестве макета выступает документ MSWord ПримерВордовскойПечати, добавлен в Active Document. Задача: в 1с предприятии, а не в конфигурации, в разделе продажи -> документы продажи(все) -> печать и вывести в печати именно тот документ, который я сделал (ПримерВордовскойПечати). так как я еще совсем новичок, обошел все форумы, написал код программы, в модуле объекта, в в дополнительные отчеты и обработки, загрузил этот документ, зашел в раздел продажи -> документы продажи(все) -> печать-> ПримерВордПечати и выводит такую ошибку:

{ОбщийМодуль.ДополнительныеОтчетыИОбработки.Модуль(235)}: Слишком много фактических параметров
ВнешняяОбработкаОбъект.Печать(

пока я обошел все форумы я уже запутался. посмотрите мой код (Во вложении) и объясните начинающему нормально, как эту ошибку устранить
Прикрепленные файлы:
ПримерВордовскойПечати.epf
По теме из базы знаний
Найденные решения
21. EVKash 14 13.09.17 11:23 Сейчас в теме
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. EVKash 14 12.09.17 08:30 Сейчас в теме
(1) для начала
Функция Печать(Команда) Экспорт

почему функция, а не процедура? кому и что она должна возвращать?
почему в модуле обработки, а не формы?
почему вызов серверного метода? на сервере нужно только макет и нужные данные получить, а выводить по-любому на клиенте. на сервере может(скорее всего) и офис не установлен.
делайте вызовклиентскогометода
в модуле обработки убирайте свою функцию
в форме
&НаКлиенте
Процедура Печать(Команда) Экспорт
....
Макет = ПолучитьМакетНаСервере();
....

&НаСервере
Функция ПолучитьМакетНаСервере()
Обработка = РеквизитФормыВЗначение("Объект");
Возврат Обработка.ПолучитьМакет("НужныйМакет");
КонецФункции
Показать
3. DavidK 12.09.17 09:20 Сейчас в теме
(2)
&НаСервере
Функция ПолучитьМакетНаСервере()
Обработка = РеквизитФормыВЗначение("Объект");
Возврат Обработка.ПолучитьМакет("НужныйМакет");
КонецФункции


вообще я это все из примеров брал.
переделал так, как ты написал (во вложении),
ошибка следующая:

{ОбщийМодуль.ДополнительныеОтчетыИОбработкиКлиент.Модуль(412)}: Слишком много фактических параметров
ФормаОбработки.Печать(ВыполняемаяКоманда.Идентификатор, ОбъектыНазначения);
Прикрепленные файлы:
ПримерВордовскойПечати.epf
4. EVKash 14 12.09.17 09:23 Сейчас в теме
а ну да... еще же объекты назначения...
Процедура Печать(ИдентификаторКоманды, МассивОбъектов) Экспорт

Это массив ссылок на документы из которых вызывается обработка. Как правило, там один твой документ.
5. DavidK 12.09.17 09:33 Сейчас в теме
(4) а коман
(4)
ИдентификаторКоманды, МассивОбъектов


теперь выводит такую ошибку:

{ВнешняяОбработка.ПримерВордовскойПечати.Форма.Форма.Форма(10)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
Договор = РеквизитФормыВЗначение("Объект").ПолучитьМакет("ПФ_WORD_Договор");
по причине:
Метод недоступен на клиенте
Прикрепленные файлы:
ПримерВордовскойПечати.epf
6. EVKash 14 12.09.17 09:35 Сейчас в теме
Потому, что это должно быть с дериктивой &НаСервере
&НаСервере 
Функция ПолучитьМакетНаСервере() 
Обработка = РеквизитФормыВЗначение("Объект"); 
Возврат Обработка.ПолучитьМакет("НужныйМакет"); 
КонецФункции
8. DavidK 12.09.17 09:42 Сейчас в теме
(6)
Потому, что это должно быть с дериктивой &НаСервере
&НаСервере
Функция ПолучитьМакетНаСервере()
Обработка = РеквизитФормыВЗначение("Объект");
Возврат Обработка.ПолучитьМакет("НужныйМакет");
КонецФункции


с какой дериктивой?
7. EVKash 14 12.09.17 09:39 Сейчас в теме
Договор = РеквизитФормыВЗначение("Объект").ПолучитьМакет("ПФ_WORD_Договор");
Это лишнее. Вместо этого должно быть
Договор = ПолучитьМакетНаСервере();
9. DavidK 12.09.17 09:43 Сейчас в теме
(7)да, но без этой строки он ругается

{ВнешняяОбработка.ПримерВордовскойПечати.Форма.Форма.Форма(11,11)}: Переменная не определена (Договор)
MSWord = <<?>>Договор.Получить(); (Проверка: Тонкий клиент)
10. DavidK 12.09.17 09:44 Сейчас в теме
11. DavidK 12.09.17 09:47 Сейчас в теме
(7)сейчас, он руается на такую ошибку:

{ВнешняяОбработка.ПримерВордовскойПечати.Форма.Форма.Форма(10)}: Ошибка при вызове метода контекста (ПолучитьМакетНаСервере)
Договор = ПолучитьМакетНаСервере();
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'ret':
форма: Элемент
имя: {http://v8.1c.ru/8.2/managed-application/modules}ret
по причине:
Прикрепленные файлы:
ПримерВордовскойПечати.epf
12. EVKash 14 12.09.17 09:54 Сейчас в теме
У меня в макете используется вордовский файл загруженный в двоичном формате.
Обработка такая
	ДокументВордДляПечати =  Новый COMОбъект("Word.Application");
	Макет = ПолучитьМакетСервер();
	временныйПуть = КаталогВременныхФайлов();
	имяВременногоФайла = временныйПуть + "dog1s.doc";
	Макет.Записать(имяВременногоФайла);
	ТекДок = ДокументВордДляПечати.Documents.ADD(имяВременногоФайла);
	Замена = ТекДок.Content.Find;
	
	Замена.Execute("{Номер}", Ложь, Истина, Ложь, , , Истина, , Ложь, СокрЛП(РеквизитыДокумента.НомерДоговора));
...

	ДокументВордДляПечати.Visible = Истина;
Показать
13. DavidK 12.09.17 10:00 Сейчас в теме
(12)Я правильно понимаю, Ты мне предлагаешь тип макета Active document поменять на двоичные данные, вставить тот код который ты мне сейчас написал??
14. EVKash 14 12.09.17 10:03 Сейчас в теме
(13) С актив документ не разбирался. Мой код у меня работает.
15. DavidK 12.09.17 10:16 Сейчас в теме
(14)я просто не понимаю про двоичные данные
16. EVKash 14 12.09.17 10:22 Сейчас в теме
(15) в свой макет загружаешь свой "шаблон.doc" в формате двоичных данных. Двочные данные - это сам файл.
Потом, по логике, этот файл локально сохраняется во временных файлах и COMОбъект("Word.Application") загружает этот сохраненный документ.
Дальше крути как хочешь.
17. DavidK 12.09.17 11:30 Сейчас в теме
(16)
(12)
бработка такая
ДокументВордДляПечати = Новый COMОбъект("Word.Application");
Макет = ПолучитьМакетСервер();
временныйПуть = КаталогВременныхФайлов();
имяВременногоФайла = временныйПуть + "dog1s.doc";
Макет.Записать(имяВременногоФайла);
ТекДок = ДокументВордДляПечати.Documents.ADD(имяВременногоФайла);
Замена = ТекДок.Content.Find;

Замена.Execute("{Номер}", Ложь, Истина, Ложь, , , Истина, , Ложь, СокрЛП(РеквизитыДокумента.НомерДоговора));
...

ДокументВордДляПечати.Visible = Истина;
Показать



а код этот ты куда пихаешь????
18. EVKash 14 12.09.17 11:42 Сейчас в теме
(17) Если написанные строчки кода не несут для вас смысловой нагрузки(т.е. что, откуда и куда), то вам нужно идти к самым истокам изучения программирования 1с.
19. DavidK 12.09.17 12:13 Сейчас в теме
20. DavidK 13.09.17 09:02 Сейчас в теме
(12)
ДокументВордДляПечати = Новый COMОбъект("Word.Application");
Макет = ПолучитьМакетСервер();
временныйПуть = КаталогВременныхФайлов();
имяВременногоФайла = временныйПуть + "dog1s.doc";
Макет.Записать(имяВременногоФайла);
ТекДок = ДокументВордДляПечати.Documents.ADD(имяВременногоФайла);


как же муторно все тут зачем вы именно двоичные данные используете. еще больше запутали! :( пррр. голова кипит уже
21. EVKash 14 13.09.17 11:23 Сейчас в теме
22. DavidK 14.09.17 08:25 Сейчас в теме
(21)спасибо. а через эктив документ не получится, я так понимаю
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот