HelpF.pro

Пример работы с общим макетом типа ActiveDocument в клиент-серверном варианте

Код 1C v 8.х
 //**********************************************************************************
//получаем макет на сервере, сохраняем в файл и передаем на клиента
&НаСервере
Функция ПолучитьДанныеМакета()
    АдресХранилища = Новый УникальныйИдентификатор();
    Макет          = ПолучитьОбщийМакет("Договор");
 
    ВременныйФайл = ПолучитьИмяВременногоФайла("doc");
    Макет.Записать(ВременныйФайл);
 
 Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ВременныйФайл), АдресХранилища);
 УдалитьФайлы(ВременныйФайл);
 
 Возврат Адрес;
   
КонецФункции
//**********************************************************************************
//код сотрудника, нужно для создания уникального имени файла для каждого пользователя
&НаСервере
Функция КодПользователя(Пользователь)
 
 Возврат СокрЛП(Пользователь.Сотрудник.Код);
 
КонецФункции
//**********************************************************************************
//Ссылка - ссылка на договор(ссылка справочника, нужно для подстановки реквизитов)
//РеквизитыДляПечати - структура с нужными реквизитами
&НаКлиенте
Процедура ПечатьДоговора(Ссылка,РеквизитыДляПечати)
 
 Пользователь = ОбщегоНазначения.ТекущийПользователь();
 Каталог = КаталогВременныхФайлов();
 Каталог = ?(Прав(Каталог,1) = "\", Каталог, Каталог+"\");
 ПолноеИмяФайла = Каталог+"Договор_"+КодПользователя(Пользователь)+".doc";
 
    Попытка
        Индификатор = ПолучитьДанныеМакета();
        МакетДоговора = ПолучитьИзВременногоХранилища(Индификатор);
        МакетДоговора.Записать(ПолноеИмяФайла);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
 
 Попытка
  MSWord = Новый COMОбъект("Word.Application");
 Исключение
  Сообщить("Ошибка при попытке создать объект ""MS Word""!" + Символы.ПС +
  "Возможно приложение ""MS Word"" не установлено или установлено неправильно.", СтатусСообщения.Внимание);
 КонецПопытки;
 
 MSWord.Documents.Open(ПолноеИмяФайла);
 
 Попытка
  Документ = MSWord.Application.Documents(1);
  Документ.Activate();
 Исключение
  // Если произойдет ошибка, выводятся данные об ошибке, и объект закрывается.
  Сообщение = Новый СообщениеПользователю();
  Сообщение.Текст = ОписаниеОшибки();
  Сообщение.Сообщить();
  
  MSWord.Application.Quit();
  
  Возврат;
 КонецПопытки;
 
 
 //*******************************************
 //тут выполняем замену
 Попытка
  Замена = Документ.Content.Find;
  Замена.Execute("{ЧтоМеняем}", Ложь, Истина, Ложь, , , Истина, , Ложь,   "На что меняем");
 Исключение
 КонецПопытки;
 
 // Делаем видимым приложение и активизируем его.
 MSWord.Application.Visible = Истина;
 MSWord.Activate();
 
КонецПроцедуры

 

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq83/view/1872.html