Использование шаблонов Word в 1С

Использование шаблонов Word в 1С

В работе программиста 1С, данный функционал требуется крайне редко, хотя благодаря нему можно решать довольно сложные задачи с динамическими и не постоянными печатными формами. При реализации данной задачи, работа по созданию шаблонов Word и расстановке закладок в шаблоне Word возлагается на пользователей 1C.

В данном примере будет показано, как используя механизмы 1С и документа Word в качестве шаблона, можно создать печатную форму для вывода данных, пользователям программы 1С.

Создадим шаблон на основе документа Word для 1С. Сначала необходимо включить показ закладок для более удобной работы с документом:

Использование шаблонов Word в 1С

Использование шаблонов Word в 1С


Использование шаблонов Word  в 1С

Использование шаблонов Word в 1С

Далее необходимо в файл шаблона для 1С, добавить текст и пару закладок. Закладка добавляется через меню «Вставка» — «Закладка». Нужно выделить текст закладки, скопировать его, открыть меню «Вставка — Закладка», вставить скопированный текст закладки и нажать «Добавить»:

Установка закладки, шаблон Word для 1С

Установка закладки, шаблон Word для 1С


Когда файл шаблона Word готов, создаем новую внешнею обработку в 1С, добавляем форму и в модуле формы вставляем следующий код:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ЗаполнитьШаблонВорд();
	
КонецПроцедуры

&НаКлиенте
Функция ЗаполнитьШаблонВорд()

	//Попытка создать COM объект
	Попытка
		ОбъектВорд = Новый COMОбъект("Word.Application"); 
	Исключение
		Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
		Возврат Неопределено;
	КонецПопытки;
	
	//Путь к шаблону
	ОбъектВорд.Documents.Add("C:\Users\Константин\Desktop\Шаблон.docx");
	ШаблонВорд = ОбъектВорд.ActiveDocument;
	
	//Получаем все закладки из шаблона
	Для каждого ЗакладкаВорд Из ШаблонВорд.Bookmarks Цикл
		Сообщить(ЗакладкаВорд.Name);		
	КонецЦикла;
	
	//Заменяем закладку1 на текст
	ШаблонВорд.Bookmarks("Закладка1").Select();
	ШаблонВорд.Application.Selection.TypeText("Текст для закладки №1.");
	
	//Заменяем закладку2 на текст
	ШаблонВорд.Bookmarks("Закладка2").Select();
	ШаблонВорд.Application.Selection.TypeText("Текст для закладки №2.");
	
	//Заменяем закладку3 на текущую дату
	ШаблонВорд.Bookmarks("Закладка3").Select();
	ШаблонВорд.Application.Selection.TypeText(ТекущаяДата());
	
	ОбъектВорд.Application.Visible = Истина;
	ОбъектВорд.Activate();
	
	//Закрытие документа
	//ОбъектВорд.Application.Quit();
	
КонецФункции

В результат запуска внешней обработки 1С по формированию печатной формы на основе шаблона в виде файла Word, мы получим следующий результат:

Результат использования шаблонов Word в 1С

Результат использования шаблонов Word в 1С

Информацию по методам COM объекта Word, а так же дополнительные данные можно узнать из MSDN.

Скачать файл обработки 1С и шаблона Word.

Использование шаблонов Word в 1С: 15 комментариев

    1. Благин Константин Автор записи

      Достаточно изменить размер шрифта закладки, в шаблоне. А вот, если необходимо динамически менять размерность, тогда:

      //Заменяем закладку3 на текущую дату
      ШаблонВорд.Bookmarks("Закладка3").Select();
      
      ШаблонВорд.Application.Selection.Font.Bold = 1;
      ШаблонВорд.Application.Selection.Font.Size = 20;
      	
      ШаблонВорд.Application.Selection.TypeText(ТекущаяДата());
      
  1. Александр

    Добрый день, подскажите, пожалуйста, картинки есть возможность выгружать в шаблон?

    1. Благин Константин Автор записи

      Да, конечно. Примеры для C# и VB описаны по ссылке: https://msdn.microsoft.com/ru-ru/library/ms178792.aspx, а для 1С код будет следующий:

      // Вставка изображения
      ШаблонВорд.Bookmarks("Закладка3").Select();
      ШаблонВорд.Application.Selection.InlineShapes.AddPicture("C:\Users\Константин\Desktop\logo_1c.png");
      
  2. Андрей

    Снова, здравствуйте.
    Вопрос по шаблонам. Попросили перенести шаблоны, написанные в Word из ЗиК 1.0 в ЗиК 3.0.
    Как я понял — не перенесутся, нужно новые писать. Поскольку, учусь, то это даже на руку. За образец решил взять Ваш и начать разбираться. Но Ваш НЕ ГРУЗИТСЯ. Пишет:
    Невозможно подключить дополнительную обработку из файла.
    Возможно, она не подходит для этой версии программы.

    Метод объекта не обнаружен (СведенияОВнешнейОбработке)
    Кстати, когда пытаюсь загрузить шаблоны из 1.0, то пишет тоже самое.
    Можете что-нибудь посоветовать?

    1. Благин Константин Автор записи

      Данная ошибка, появляется, потому что обработка создана просто как внешняя, без возможности подключения к 1С. Если вы хотите подключить какую либо обработку, в режиме «1С:Предприятие», тогда в модуле обработки необходимо вставить определенный код, более подробно описано по следующим ссылкам:
      Добавление дополнительных отчетов и обработок в тонком клиенте.
      Создание нового отчета или обработки
      youtube: Создание внешней обработки

      А насчет переноса могу посоветовать, проанализировать, как в ЗиК 1.0 производилось заполнение шаблона. Найти участки кода, которые за это отвечают, попробовать сначала перенести их во внешнюю обработку, для тестирования. Как вариант, сам шаблон можно положить в макеты (тип макета «Active document») этой обработки и уже оттуда загружать его.

      Здесь есть несколько нюансов, механизм заполнения шаблонов и сами шаблоны, типовые, доработанные или самописные? Объекты которые используются для заполнения в ЗиК 1.0 могут отсутствовать в ЗиК 3.0 или иметь другое наименование. Плюс ко всему, необходимо еще учесть, что ЗиК 1.0 это обычное приложение, использующее толстый клиент, а ЗиК 3.0 управляемое приложение, использующее тонкий клиент, соответственно здесь тоже присутствует своя специфика работы.

      Да и еще, в ЗиК 3.0 как мне кажется должен быть свой механизм шаблонов, к сожалению, не работал с этими конфигурациями, но вероятно там уже есть механизм аналогичный ЗиК 1.0. Так что может, будет достаточно только добавить шаблон.

  3. Андрей

    Спасибо за быстрый и подробный ответ.
    Попробую разобраться.
    Шаблоны у нас самописные.
    Про собственный механизм шаблонов, даже не слышал. Попробую поискать в сети.

  4. Андрей

    Ваша ссылка помогла.
    Добавил две функции и одну процедуру, и Ваша обработка заработала.
    Свою, похоже , придётся рисовать с нуля.

  5. Илья

    При выполнении кода: ОбъектВорд.Documents.Add(«C:/Шаблон.docx») (туда я поместил Ваш документ) получаю ошибку : «Ошибка при вызове метода контекста (Add)» в чем может быть причина?

      1. Илья

        Помогло. Спасибо.
        Подскажите пожалуйста еще почему при сохранении макета типа active document в файл word кодом:

        ОбработкаОбъект = РеквизитФормыВЗначение(«Объект»);
        Макет = ОбработкаОбъект.ПолучитьМакет(«ШаблонПисьмаПросрочка»);
        ИмяФайла = КаталогВременныхФайлов() + «\»файл.doc»;
        Макет.Записать(ИмяФайла);

        Я получаю вместо нормального документа вот такой http://prntscr.com/eshgjk

        1. Благин Константин Автор записи

          Предполагаю, что метод Записать(< ИмяФайла>, < ТипФайлаТаблицы>) по умолчанию, записывает файл в формате MXL. Попробуйте вторым параметром установить значение: ТипФайлаТабличногоДокумента.DOCX, более подробно описано в «Синтакс-помощнике».

  6. Руслан

    Константин,
    У меня в документе есть ссылки на файлы которые расположены на сетевом диске.
    Как в шаблоне сделать гиперссылку на эти файлы?

    1. Благин Константин Автор записи

      Здравствуйте, Руслан.
      Интересный вопрос, если попробовать сделать запись макроса и посмотреть результат, то в Visual Basic добавление гиперссылки будет выглядеть следующим образом:

      Sub Макрос1()
      '
      ' Макрос1 Макрос
      '
      '
          Selection.MoveLeft Unit:=wdCharacter, Count:=15, Extend:=wdExtend
          ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
              "C:\Users\Константин\Desktop\Тест.txt", SubAddress:="", ScreenTip:="", _
              TextToDisplay:="ТестоваяСсылка"
      End Sub
      

      Описание метода добавления в MSDN: https://msdn.microsoft.com/en-us/vba/word-vba/articles/hyperlinks-add-method-word

      Соответственно код для 1С следующий:

      Функция ЗаполнитьШаблонВорд()
      
      	//Попытка создать COM объект
      	Попытка
      		ОбъектВорд = Новый COMОбъект("Word.Application"); 
      	Исключение
      		Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
      		Возврат Неопределено;
      	КонецПопытки;
      	
      	//Путь к шаблону
      	ОбъектВорд.Documents.Add("C:\Users\k.blagin\Desktop\Шаблон.docx");
      	ШаблонВорд = ОбъектВорд.ActiveDocument;
      	
      	//Получаем все ссылки из шаблона
      	Для каждого ЗакладкаВорд Из ШаблонВорд.Hyperlinks Цикл
      		Сообщить(ЗакладкаВорд.Name);		
      	КонецЦикла;
      	
      	//Меняем адрес уже существующей ссылки
      	ШаблонВорд.Hyperlinks("Logs.zip").Address = "C:\Users\k.blagin\Desktop\Memory.zip";
      	
      	//Заменяем закладку на ссылку
      	ОбъектЗакладка = ШаблонВорд.Bookmarks("Закладка3");
      	ШаблонВорд.Hyperlinks.Add(ОбъектЗакладка.Range, "C:\Users\k.blagin\Desktop\Шаблон.docx", "", "Шаблон.docx", "C:\Users\k.blagin\Desktop\Шаблон.docx");
      	
      	ОбъектВорд.Application.Visible = Истина;
      	ОбъектВорд.Activate();
      	
      	//Закрытие документа
      	//ОбъектВорд.Application.Quit();
      	
      КонецФункции
      

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *