Войти
Вставка картинок в документы WORD средствами 1с
Опубликовано 04.05.2022 / Смотрели 501

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

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

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

Смотрите в параметрах программы.

Далее необходимо в файл шаблона для 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С

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

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

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

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

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

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

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

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

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

5. У меня в документе есть ссылки на файлы которые расположены на сетевом диске. Как в шаблоне сделать гиперссылку на эти файлы?
Интересный вопрос, если попробовать сделать запись макроса и посмотреть результат, то в Visual Basic добавление гиперссылки будет выглядеть следующим образом:

1
2
3
4
5
6
7
8
9
10
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

Код который работает с картинками из библиотеки картинок и документом которых хранится в хранилище

Вставка картинок с помощью ЗАКЛАДОК в документе.

ТекущиеДанные = ТекущиеДанныеСпискаФайлов();
Оболочка = Новый COMОбъект("WScript.Shell");
КаталогДанныхПользователя = Оболочка.ExpandEnvironmentStrings("%APPDATA%");
ПутьККаталогу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогДанныхПользователя);
ДанныеФайла = РаботаСФайламиВызовСервера.ДанныеФайлаДляОткрытия(ТекущиеДанные.Ссылка,
Неопределено,
ЭтаФорма.УникальныйИдентификатор,
Неопределено,
ПредыдущийАдресФайла);
РаботаСФайламиКлиент.ПолучитьФайлВерсииВРабочийКаталог(
Неопределено,
ДанныеФайла,
"",
ЭтаФорма.УникальныйИдентификатор,
Неопределено);

Если ДанныеФайла.Расширение = "doc" ИЛИ ДанныеФайла.Расширение = "docx" Тогда

ИмяФайлаНовое = ДанныеФайла.ПолноеНаименованиеВерсии + " с факсимилем.docx";
ИмяФайла = ДанныеФайла.ПолноеИмяФайлаВРабочемКаталоге;
ФайлВФормате = ПутьККаталогу+ИмяФайлаНовое;
MSWord = Новый COMОбъект("Word.Application");
MSWord.Visible = Ложь;
MSWord.Documents.Add(ИмяФайла);
ШаблонВорд = MSWord.ActiveDocument;

// Вставка Печать
БиблиотекаКартинок.Pechat.Записать(ПутьККаталогу + "pechat.png");
ФайлКартинки = ПутьККаталогу + "pechat.png";
ШаблонВорд.Bookmarks("Печать1").Select();
Печать = ШаблонВорд.Application.Selection.InlineShapes.AddPicture(ФайлКартинки);
Печать.Height = 120;
Печать.Width = 120;
Shape = Печать.ConvertToShape();
Shape.WrapFormat.Type = 5;
УдалитьФайлы(ПутьККаталогу + "pechat.png");

// Вставка Подпись
БиблиотекаКартинок.Podpis.Записать(ПутьККаталогу + "podpis.png");
ФайлКартинки = ПутьККаталогу + "podpis.png";
ШаблонВорд.Bookmarks("Подпись1").Select();
Подпись = ШаблонВорд.Application.Selection.InlineShapes.AddPicture(ФайлКартинки);
Подпись.Height = 100;
Подпись.Width = 100;
Shape = Подпись.ConvertToShape();
Shape.WrapFormat.Type = 5;
УдалитьФайлы(ПутьККаталогу + "podpis.png");

ДокументВорд = MSWord.Application.Documents(1);
ДокументВорд.Activate();
ДокументВорд.SaveAs(ФайлВФормате);
MSWord.Application.Quit();

// добавляем получившийся файл в карточку документа
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("ВладелецФайла",ДанныеФайла.Владелец);
ПараметрыВыполнения.Вставить("ДобавлениеОригинала",Ложь);
ПараметрыВыполнения.Вставить("ИдентификаторРодительскойФормы",Неопределено);
ПараметрыВыполнения.Вставить("НеОткрыватьКарточкуПослеСозданияФайла",Истина);
ПараметрыВыполнения.Вставить("ОбработчикРезультата",Неопределено);
ПараметрыВыполнения.Вставить("ПараметрыОповещения",Неопределено);
ПараметрыВыполнения.Вставить("СписокОповещений",Неопределено);
ПараметрыВыполнения.Вставить("ПолноеИмяФайла",ФайлВФормате);
ПараметрыВыполнения.Вставить("ИмяСоздаваемогоФайла",Неопределено);
ПараметрыВыполнения.Вставить("ФормаВладелец",ЭтаФорма);

РаботаСФайламиКлиент.ДобавитьИзФайловойСистемыСРасширениемСинхронно(ПараметрыВыполнения);

КонецЕсли;

 

Код вставки картинок без ЗАКЛАДОК в документ WORD

 

ТекущиеДанные = ТекущиеДанныеСпискаФайлов();
Оболочка = Новый COMОбъект("WScript.Shell");
КаталогДанныхПользователя = Оболочка.ExpandEnvironmentStrings("%APPDATA%");
ПутьККаталогу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогДанныхПользователя);
ДанныеФайла = РаботаСФайламиВызовСервера.ДанныеФайлаДляОткрытия(ТекущиеДанные.Ссылка,
Неопределено,
ЭтаФорма.УникальныйИдентификатор,
Неопределено,
ПредыдущийАдресФайла);
РаботаСФайламиКлиент.ПолучитьФайлВерсииВРабочийКаталог(
Неопределено,
ДанныеФайла,
"",
ЭтаФорма.УникальныйИдентификатор,
Неопределено);

Если ДанныеФайла.Расширение = "doc" ИЛИ ДанныеФайла.Расширение = "docx" Тогда

ИмяФайлаНовое = ДанныеФайла.ПолноеНаименованиеВерсии + " с факсимилем.docx";
ИмяФайла = ДанныеФайла.ПолноеИмяФайлаВРабочемКаталоге;
ФайлВФормате = ПутьККаталогу+ИмяФайлаНовое;
MSWord = Новый COMОбъект("Word.Application");
MSWord.Visible = Ложь;
MSWord.Documents.Add(ИмяФайла);
ШаблонВорд = MSWord.ActiveDocument;

// Вставка Печать
БиблиотекаКартинок.Pechat.Записать(ПутьККаталогу + "pechat.png");
ФайлКартинки = ПутьККаталогу + "pechat.png";
Выбор = MSWord.Selection;
Печать = Выбор.InlineShapes.AddPicture(ФайлКартинки, False, True);
Печать.Height = 120;
Печать.Width = 120;
Фигура = Печать.ConvertToShape();
Фигура.WrapFormat.Type = 5;
Фигура.Left = 230;
Фигура.Top = 650;
УдалитьФайлы(ПутьККаталогу + "pechat.png");

// Вставка Подпись
БиблиотекаКартинок.Podpis.Записать(ПутьККаталогу + "podpis.png");
ФайлКартинки = ПутьККаталогу + "podpis.png";
Выбор = MSWord.Selection;
Печать = Выбор.InlineShapes.AddPicture(ФайлКартинки, False, True);
Печать.Height = 100;
Печать.Width = 100;
Фигура = Печать.ConvertToShape();
Фигура.WrapFormat.Type = 5;
Фигура.Left = 330;
Фигура.Top = 650;
УдалитьФайлы(ПутьККаталогу + "podpis.png");

 

ДокументВорд = MSWord.Application.Documents(1);
ДокументВорд.Activate();
ДокументВорд.SaveAs(ФайлВФормате);
MSWord.Application.Quit();

 

// добавляем получившийся файл в карточку документа
ПараметрыВыполнения = Новый Структура;
ПараметрыВыполнения.Вставить("ВладелецФайла",ДанныеФайла.Владелец);
ПараметрыВыполнения.Вставить("ДобавлениеОригинала",Ложь);
ПараметрыВыполнения.Вставить("ИдентификаторРодительскойФормы",Неопределено);
ПараметрыВыполнения.Вставить("НеОткрыватьКарточкуПослеСозданияФайла",Истина);
ПараметрыВыполнения.Вставить("ОбработчикРезультата",Неопределено);
ПараметрыВыполнения.Вставить("ПараметрыОповещения",Неопределено);
ПараметрыВыполнения.Вставить("СписокОповещений",Неопределено);
ПараметрыВыполнения.Вставить("ПолноеИмяФайла",ФайлВФормате);
ПараметрыВыполнения.Вставить("ИмяСоздаваемогоФайла",Неопределено);
ПараметрыВыполнения.Вставить("ФормаВладелец",ЭтаФорма);

 

РаботаСФайламиКлиент.ДобавитьИзФайловойСистемыСРасширениемСинхронно(ПараметрыВыполнения);

КонецЕсли;

 


  • Сон. Дэвид Айк
    Сон. Дэвид Айк

    Дэвид Айк стал всемирно известным благодаря своей работе, разоблачающей современную быстро разворачивающуюся глобальную антиутопию более чем за три…

  • Газовый котел Beretta
    Газовый котел Beretta

    Срок службы котла при условии соблюдения всех рекомендаций по установке и своевременному техническому обслуживанию составляет не менее 10 лет. По окончании этого…

  • Настройка котла Tenko Digital
    Настройка котла Tenko Digital

    1.1Устройство предназначено для теплоснабжения помещений с принудительной циркуляцией теплоносителя в замкнутой системе отопления и автоматического…


Комментарии

19 + 71 =