Для примера разобрано програмнное заполнение верхнего и нижнего колонтитулов, а также печать в качестве подложки — логотипа организации (печать картинки на заднем фоне, при этом у логотипа уменьшена яркость и он повернут на 45 градусов).
В качестве примера рассматривается печать в Word из заказа клиента.
Шаблон в формате *.doc хранится как двоичные данные в макете, при этом внутри шаблона необходимые для заполнения поля указывается в знак решетки: #Организация#, #Контрагент# и т.п. Это сделано и в основном теле документа, и в колонтитулах.
В сведениях о внешней обработке указывается, что это "ВызовКлиентскогоМетода":
строкаКоманды = тзКоманд.Добавить();
строкаКоманды.Идентификатор = Идентификатор;
строкаКоманды.Представление = Наименование;
строкаКоманды.ПоказыватьОповещение = Истина;
строкаКоманды.Использование = "ВызовКлиентскогоМетода";
строкаКоманды.ПоказыватьОповещение = "Истина";
Далее, непосредственно в модуле формы в процедуре Печать получаем макет (на клиенте), и обращаемся к нему:
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
Для Каждого ОбъектНазначения Из ОбъектыНазначения Цикл
MSWord = ПолучитьИзВременногоХранилища(МакетСервер("ЗаказКлиентаМакет"));
ИмяВрем = ПолучитьИмяВременногоФайла(".doc");
MSWord.Записать(ИмяВрем);
// выводим данные
Попытка
//получаем объект - документ. Это OLE объект, с ним можно работать используя все методы, которые существуют в VBA
//Документ = ПолучитьCOMОбъект(ИмяВрем);
COMОбъект = Новый COMОбъект("Word.Application");
//COMОбъект.Documents.Add();
COMОбъект.WordBasic.DisableAutoMacros(1);
COMОбъект.Documents.Open(ИмяВрем);
Документ = COMОбъект.ActiveDocument;
......
Все заполнение документа происходит на клиенте (предварительно необходимо получить нужные данные).
Ну и отдельно, заполнение колонтитулов:
&НаКлиенте
Процедура ВыполнитьЗаменуКолонтитула(СтруктураДанных, Документ, ЭтоВерхнийКолонититул = Ложь)
Для Каждого КлючЗначение Из СтруктураДанных Цикл
ТекстЧтоЗаменять = "#" + КлючЗначение.Ключ + "#";
ТекстНаЧтоЗаменять = КлючЗначение.Значение;
Если ЭтоВерхнийКолонититул ТОгда
Документ.Sections(1).Headers(1).Range.Find.Execute(ТекстЧтоЗаменять, Ложь, Истина, Ложь, , , Истина, , Ложь, ТекстНаЧтоЗаменять, 2);
Иначе
Документ.Sections(1).Footers(1).Range.Find.Execute(ТекстЧтоЗаменять, Ложь, Истина, Ложь, , , Истина, , Ложь, ТекстНаЧтоЗаменять, 2);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
и вставка подложки:
&НаКлиенте
Процедура ВставитьРисунокКакПодложку(COMОбъект,АдресВхранилищеРисунок, Расширение)
ИмяФайла = ПолучитьИмяВременногоФайла(Расширение);
ПолучитьФайл(АдресВхранилищеРисунок, ИмяФайла, Ложь);
Документ = COMОбъект.ActiveDocument;
Рис = Документ.Sections(1).Headers(1).Shapes.AddPicture(ИмяФайла,Ложь,Истина);
Рис.PictureFormat.Brightness = 0.85; //уменьшаем яркость и контрастность
Рис.PictureFormat.Contrast = 0.25;
Рис.WrapFormat.AllowOverlap = True;
Рис.WrapFormat.Type = 3;
Рис.LockAspectRatio = True;
Рис.Left = -999995;
Рис.RelativeHorizontalPosition = 1;
Рис.RelativeVerticalPosition = 1;
Рис.Top = -999995;
Рис.Rotation = 315; //поворачиваем под углом
КонецПроцедуры
В примере выводится в качестве подложки логотип организации, под углом 45 градусов, с уменьшенной яркостью. Эта подложка будет выводиться на всех листах документа.
Тестировалось на платформе 8.3.13.1690 на УТ 11.4.7.114 и ERP 2.4.7.141
Жаль примера печати в скриншотах нет.
(1) Последний скришот показывает как выглядит сформированный Word, с подложкой.
(2) а где подложка? Вроде только колонтитул вижу…
(3)на скриншоте — надпись «Москва», с красной звездой — это подложка, выполнена с понижением контрастности, и под углом 45 градусов. Эта картинка берется из логотипа организации
(4) и где эта надпись на скриншоте? Контрастность видимо совсем на нуле, раз подложки совсем не видно.