1с 8 печатная форма в формате word
Пробуя создать внешнюю печатную форму, используя шаболоны из Word, столкнулся с множеством проблем. В результате нашел простой и в моем случае очень удобный способ реализации задач данного вида.
Первое, что необходимо сделать, это собственно создать внешнюю печатную форму. Создается она просто и в интернете полно информации, как это делать.
Далее необходимо определиться, каким образом будет выполняться вызов команд. И тут есть несколько вариантов: вызов клиентского метода или вызов серверного метода. Информация обо всех вариантах, в том числе и о создании внешней обработки, прикреплена ниже, "Дополнительные отчеты и обработки (документация)".
Но вот после создания возникли проблемы.
Первой была проблема получения макета, который был прикреплен к самой обработке.
Решается она очень просто, как оказалось:
Таким образом удалось получить макет, который по сути уже является вордовским документом. То есть никаких дополнительных дейсвий выполнять не надо, берем и работаем.
В случае необходимости получить сам объект воспользуйтесь командой "ПолучитьОбъект()".
Так как используется вызов клиентского метода, то в процедуре печати есть всего 2 параметра, что также очень удобно. Параметры определяют, какой командой была вызвана печать и какой/какие объекты печатаются.
С вызовом серверного метода не разбирался, но и не очень хотелось, так как очень понравился клиентский. Ниже также прикреплен файл заготовки внешней печатной формы на шаблоне ворд, содержищий подробные коментарии по выполняемым действиям и примеры некоторые команды работы с вордовским документом/макетом, а также документация по процедуре "Печать()"
По поводу добавления команд печати на форму, то для ВПФ, она формируется автоматически. Формирование кнопки для простой печати и прочие вопросы, связанные с печатью описаны в документе "Печать", прикреплен ниже.
По отладке могут возникать проблемы. Поэтому создан реквизит "Ссылка на объект", Команда "Печать" и процедура в модуле формы. Чтобы войти в отладку, достаточно поставить точку останова в процедуре "ПечатьОтладка" или в другом любом месте, но только если ВПФ запущена как внешняя обработка, а не вызване непосредственно из документа. В Реквизите "СсылкаНаОбъект" поменяйте тип значения на документ, которвый вам нужен.
Приложенная заготовка протестирована и формирует документ, как на скриншотах.
В работе программиста 1С, данный функционал требуется крайне редко, хотя благодаря нему можно решать довольно сложные задачи с динамическими и не постоянными печатными формами. При реализации данной задачи, работа по созданию шаблонов Word и расстановке закладок в шаблоне Word возлагается на пользователей 1C.
В данном примере будет показано, как используя механизмы 1С и документа Word в качестве шаблона, можно создать печатную форму для вывода данных, пользователям программы 1С.
Создадим шаблон на основе документа Word для 1С. Сначала необходимо включить показ закладок для более удобной работы с документом:
Использование шаблонов Word в 1С
Использование шаблонов Word в 1С
Установка закладки, шаблон Word для 1С
Когда файл шаблона Word готов, создаем новую внешнею обработку в 1С, добавляем форму и в модуле формы вставляем следующий код:
В результат запуска внешней обработки 1С по формированию печатной формы на основе шаблона в виде файла Word, мы получим следующий результат:
Результат использования шаблонов Word в 1С
Информацию по методам COM объекта Word, а так же дополнительные данные можно узнать из MSDN.
Дополнение к заметке Использование шаблонов Word в 1С
Выражаю благодарность, всем тем, кто комментирует запись, благодаря вам, материал дополняется новыми данными и будет полезен более широкому кругу посетителей.
1. А как поменять размер шрифта во вставляемом тексте?
Достаточно изменить размер шрифта закладки, в шаблоне. А вот, если необходимо динамически менять размерность, тогда:
3. При выполнении кода: ОбъектВорд.Documents.Add(«C:/Шаблон.docx») (туда я поместил Ваш документ) получаю ошибку : «Ошибка при вызове метода контекста (Add)» в чем может быть причина?
Может попробовать изменить путь на: «C:\Шаблон.docx».
4. Подскажите пожалуйста еще почему при сохранении макета типа active document в файл word кодом:
5. У меня в документе есть ссылки на файлы которые расположены на сетевом диске. Как в шаблоне сделать гиперссылку на эти файлы?
Интересный вопрос, если попробовать сделать запись макроса и посмотреть результат, то в Visual Basic добавление гиперссылки будет выглядеть следующим образом:
В этом уроке мы научимся создавать шаблоны Word с предопределенными именованными полями, которые можно в дальнейшем заполнять программно из 1С (ссылка на пример кода).
Что это означает на практике?
К примеру, у нас есть типовая форма счёта на оплату, который мы выставляем покупателям.
Так вот - мы можем один раз создать шаблон такого счёта, прописать в нём поля id, date, organization, inn, kpp. и т.д. и затем программным способом создавать готовые для отправки покупателям счета на оплату.
Сейчас мы вместе в Word 2007 создадим такой шаблон, вернее я покажу сам принцип.
1. Первым делом создаём обычной документ Word.
2. Оформляем его как обычно.
3. Затем устанавливаем курсор в место, куда будет вставляться значение программно (пусть это будет номер счёта):
4. Переходим на закладку "Вставка" и выбираем "Экспресс-блоки"-"Поле. ":
5. В открывшемся диалоге выбираем тип поля "MergeField" и пишем имя поля (по которому мы его будем находит в 1с программно) - "number":
6. Нажимаем "Ок" и в документ вставляется поля типа "MergeField" с именем "number":
Отлично! Это то что надо
7. Оформляем весь документ в этом же стиле (вставляя нужные поля):
И, наконец, сохраняем этот документ в виде шаблона Word (с расширением dotx):
Полученный файл с расширением dotx используем для программного создания документов.
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
И там его заполняю, использую закладки для вставки параметров. Документ создается и корректно открывается, НО программа после этого пытается сформировать так же обычную печатную форму, что приводит либо к появлению пустой печатной формы (если создаю пустую), либо пишет ошибку, дескать для такого макета не был создан печатный документ. Как правильно организовать вывод внешней печатной формы, чтобы не появлялась эта ошибка при каждом формировании формы?
Ошибка неформирования появляется, если ты что-то левое из функции отдаёшь(2) Ну я просто взял старую обработку получения внешней печатной формы, и сделал вставил свою процедуру туда. Просто в первый раз решил реализовать именно через договор, потому не знаю, что делаю не так.
(4) Ну этот момент тупо из всяких "гайдов" брал по созданию внешних печатных формну, так у тебя создается вордовый объект из макеты и ты его видишь, а вот эта команда (скорее всего !) какую то еще печать запускает.
как то ты сложно с букмарками общаешься
[1C]
Попытка
Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.language="javascript";
Ворд = Скрипт.Eval("new ActiveXObject('Word.Application.14')");
Исключение
Попытка
Ворд = СоздатьОбъект("Word.Application.15");
Исключение
Сообщить("Не удалось открыть Word 2010");
Возврат;
КонецПопытки;
КонецПопытки;
//[*] ((( dk 16/03/2018
//Ворд.Visible = ексДа;
Ворд.Visible = ексНет;
//[*] dk )))
// Заполним пустышками
Попытка
Док.Bookmarks("НомерДоговора").Range.Text = НомерДоговора;//"__________";
Исключение
КонецПопытки;
Попытка
Док.Bookmarks("НомерДоговора1").Range.Text = НомерДоговора;//"__________";
Исключение
КонецПопытки;
Попытка
Док.Bookmarks("НомерДоговора2").Range.Text = НомерДоговора;//"__________";
Исключение
КонецПопытки;
Попытка
Док.Bookmarks("НомерДоговора3").Range.Text = НомерДоговора;//"__________";
Исключение
КонецПопытки;
Зн = СокрЛП(Элем.Емэйл);
Если ПустоеЗначение(Зн) = 0 Тогда
Попытка
Док.Bookmarks("ЭлПочта").Range.Text = Зн;
Исключение
КонецПопытки;
Попытка
Док.Bookmarks("ЭлПочта1").Range.Text = Зн;
Исключение
КонецПопытки;
Попытка
Док.Bookmarks("ЭлПочта2").Range.Text = Зн;
Исключение
КонецПопытки;
Иначе
Попытка
Док.Bookmarks("ЭлПочта").Range.Text = "__________________________";
Исключение
КонецПопытки;
Попытка
Док.Bookmarks("ЭлПочта1").Range.Text = "__________________________";
Исключение
КонецПопытки;
Попытка
Док.Bookmarks("ЭлПочта2").Range.Text = "__________________________";
Исключение
КонецПопытки;
КонецЕсли;
Зн = СокрЛП(Элем.ПолнНаименование);
Если ПустоеЗначение(Зн) = 0 Тогда
Попытка
Док.Bookmarks("ПокНаименование").Range.Text = Зн;
Исключение
КонецПопытки;
КонецЕсли;
[/1С]
(7)Попробуй вместо "ВызовСерверногоМетода" использовать "ВызовКлиентскогоМетода".
В этом случае тебе нужно будет в обработке создать форму, и в нее поместить процедуру Печать().
Читайте также: