Имя: Пароль:
   
1C
1С v8
Библиотека стандартных подсистем печатные формы в Word
0 YF
 
26.06.12
17:35
Имеем нетленку с внедренной БСП.

Сделал печатную форму в Word. Прикрутил ее для печати справочника.
Запускаю печать, формируется документ word - открывается, но

В макете весь текст одним шрифтом, а в получившемся документе в разных обзацах разный размер шрифта.

Как сделать, чтобы было как в макете - одним размером шрифта?
1 mzelensky
 
26.06.12
17:41
(0)выделить весь текст и установить шрифт.
2 mzelensky
 
26.06.12
17:43
(0) а можешь более подробно рассказать о работе системы? она может обратную ситуацию отработать - взять шаблон вордовский и из него сделать печатную форму...точнее макет формы.
3 YF
 
26.06.12
17:43
(1) В макете шрифт одинаковый, при выводе уже нет
4 mzelensky
 
26.06.12
17:47
(3) при "выводе" куда? в печатную форму, Word или куда?
5 YF
 
26.06.12
17:53
(4) Естественно в Word, куда еще можно его выводить. С БСП-то знаком?
6 mzelensky
 
26.06.12
17:56
(5) с БСП не знаком - завтра буду ознакамливаться.

Зато знаком с формированием вордовских документов из 1С. Что мешает после наполнения вордовского документа выделить весь текст (все абзацы) и "финально" установить шрифт?
7 YF
 
26.06.12
17:57
(6) Мешает то, что формирую и вывожу методами БСП. Если все делать самому, то нафига тогда БСП нужно?
8 YF
 
26.06.12
18:16
Блин, вобще пипец, сделана одна область целиком во весь документ, в ней параметры для заполнения.

внутри этой области есть списки , таблицы и т.п. при выводе нумерованые списки перенумеровываются т.е. был пункт 2.3.11, стал, например 2.3.12

Знатоки БСП откликнитесь, помогите. А то так не хочется переделывать подсистему печати из БСП
9 Мимохожий Однако
 
26.06.12
18:25
(8)Для начала покажи фрагмент кода что-ли
10 YF
 
27.06.12
09:37
Вот и код (это модуль формы внешней обработки, которая зарегистрирована как внешняя печатная форма к справочнику Договоры)


&НаСервере
//------- © YF & 1C --------------------
Процедура ПриСозданииНаСервере(_отказ, _стандартнаяОбработка)
   ОбъектЗнч = РеквизитФормыВЗначение("Объект");
   
   // Переберем все доступные макеты договора и положим их в
   //список. Затем, при печати, пользователю предложим выбрать макет из этого списка
   Для Каждого макет_ Из ОбъектЗнч.Метаданные().Макеты Цикл
       ПечатныеФормы.Добавить(макет_.Имя, макет_.Представление());    
   КонецЦикла;//Для Каждого макет_ Из ОбъектЗнч.Метаданные().Макеты
   
КонецПроцедуры

&НаКлиенте
//------- © YF & 1C --------------------
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
   
   Отказ = Истина;
   
   // Проверим количество объектов
   Если ОбъектыНазначения.Количество() = 0 Тогда
       Возврат;
   КонецЕсли;
   
   ТекстСообщения = ?(ОбъектыНазначения.Количество() > 1,
   НСтр("ru = 'Выполняется формирование печатных форм...'"),
   НСтр("ru = 'Выполняется формирование печатной формы...'"));
   Состояние(ТекстСообщения);
       
   выбранныйЭлемент_    = ПечатныеФормы.ВыбратьЭлемент("Выберите нужный макет договора");
   Если выбранныйЭлемент_ = Неопределено Тогда
       имяМакета_        = "";
       Возврат;
   Иначе
       имяМакета_        = выбранныйЭлемент_.Значение;
   КонецЕсли;//Если выбранныйЭлемент_ = Неопределено
   
   МакетИДанныеОбъекта = ПолучитьМакетИДанныеОбъекта(имяМакета_, ОбъектыНазначения);
   
   Для Каждого объектНазначения_ Из ОбъектыНазначения Цикл
       НапечататьДоговоры(МакетИДанныеОбъекта, имяМакета_, объектНазначения_, МакетИДанныеОбъекта["ЛокальныйКаталогФайловПечати"]);
   КонецЦикла;//Для Каждого объектНазначения_ Из ОбъектыНазначения
   
КонецПроцедуры

&НаКлиенте
//------- © YF & 1C --------------------
Процедура НапечататьДоговоры(_макетИДанныеОбъекта, _имяМакета, _договор, _локальныйКаталогФайловПечати)
   
   // Возьмем данные договора
   типМакета_                = _макетИДанныеОбъекта.Макеты.ТипыМакетов[_имяМакета];
   двоичныеДанныеМакетов_    = _макетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов;
   области_                = _макетИДанныеОбъекта.Макеты.ОписаниеОбластей;
   данныеОбъекта_            = _макетИДанныеОбъекта.Данные[_договор][_имяМакета];
       
   // Выведем печатную форму
   Попытка
       Макет = УправлениеПечатьюКлиент.ИнициализироватьМакет(двоичныеДанныеМакетов_[_имяМакета], типМакета_, _локальныйКаталогФайловПечати, _имяМакета);
       Если Макет = Неопределено Тогда
           Возврат;
       КонецЕсли;
       ПечатнаяФорма = УправлениеПечатьюКлиент.ИнициализироватьПечатнуюФорму(типМакета_, Макет.НастройкиСтраницыМакета);
       Если ПечатнаяФорма = Неопределено Тогда
           УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);
           Возврат;
       КонецЕсли;
       
       // Вывод колонтитулов документа.
       Если области_[_имяМакета].Свойство("ВерхнийКолонтитул") Тогда
           Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, области_[_имяМакета]["ВерхнийКолонтитул"]);
           УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, данныеОбъекта_);
       КонецЕсли;//области_[_имяМакета].Свойство("ВерхнийКолонтитул")
       Если области_[_имяМакета].Свойство("НижнийКолонтитул") Тогда
           Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, области_[_имяМакета]["НижнийКолонтитул"]);
           УправлениеПечатьюКлиент.ПрисоединитьОбласть(ПечатнаяФорма, Область);
       КонецЕсли;//области_[_имяМакета].Свойство("НижнийКолонтитул")
       
       // Вывод верхней части документа - обычная область с параметрами.
       Если области_[_имяМакета].Свойство("ШапкаДокумента") Тогда
           Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, области_[_имяМакета]["ШапкаДокумента"]);
           УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, данныеОбъекта_, Ложь);
       КонецЕсли;//области_[_имяМакета].Свойство("Заголовок")
       
       // Вывод верхней части документа - обычная область с параметрами.
       Если области_[_имяМакета].Свойство("ТелоДокумента") Тогда
           Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, области_[_имяМакета]["ТелоДокумента"]);
           УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, данныеОбъекта_, Ложь);
       КонецЕсли;//области_[_имяМакета].Свойство("ТелоДокумента")

       // Вывод реквизитов договора - обычная область с параметрами.
       Если области_[_имяМакета].Свойство("РеквизитыДоговора") Тогда
           Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, области_[_имяМакета]["РеквизитыДоговора"]);
           УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, данныеОбъекта_, Ложь);
       КонецЕсли;//области_[_имяМакета].Свойство("РеквизитыДоговора")

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

&НаСервере
//------- © YF & 1C --------------------
Функция ПолучитьМакетИДанныеОбъекта(_имяМакета, _массивЭлементов)
   
   ОбъектЗначение                = РеквизитФормыВЗначение("Объект");
   массивИменМакетов_            = Новый Массив;
   массивИменМакетов_.Добавить(_имяМакета);
       
   Возврат ОбъектЗначение.ПолучитьДанныеПечати(_массивЭлементов, массивИменМакетов_)
   
КонецФункции
11 YF
 
27.06.12
11:02
вверх
12 YF
 
27.06.12
12:04
вверхх
13 YF
 
27.06.12
12:44
вверххх
14 Armando
 
27.06.12
13:04
У меня тоже какие-то заморочки были с форматированием. Решилось вот так:

УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, ОбластьШапка, ДанныеСтроки, Ложь);
End = ПечатнаяФорма.COMСоединение.ActiveDocument.Range().End;
Selection = ПечатнаяФорма.COMСоединение.Selection;
Selection.Start = End;
Selection.End = End;
Selection.TypeBackspace();

Не факт что это твой случай...
После каждого вызова УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры
Вставлял этот кусок:
End = ПечатнаяФорма.COMСоединение.ActiveDocument.Range().End;
Selection = ПечатнаяФорма.COMСоединение.Selection;
Selection.Start = End;
Selection.End = End;
Selection.TypeBackspace();
15 Armando
 
27.06.12
15:09
Отпишись что получится
16 YF
 
27.06.12
16:18
(15) Не, не помогает. Все тоже самое
17 Armando
 
27.06.12
16:47
(16) Тогда не твой случай. Я просто не помню уже, в чем конкретно у меня косяк был.
18 YF
 
04.07.12
16:50
А вдруг еще мысли созрели у кого
19 Armando
 
04.07.12
17:17
выложи пример на посмотреть
20 YF
 
04.07.12
17:26
Это полностью текст модуля формы внешней обработки.

&НаСервере
//------- © YF & 1C --------------------
Процедура ПриСозданииНаСервере(_отказ, _стандартнаяОбработка)
   
   ОбъектЗнч = РеквизитФормыВЗначение("Объект");
   
   // Переберем все доступные макеты договора и положим их в
   //список. Затем, при печати, пользователю предложим выбрать макет из этого списка
   Для Каждого макет_ Из ОбъектЗнч.Метаданные().Макеты Цикл
       ПечатныеФормы.Добавить(макет_.Имя, макет_.Представление());    
   КонецЦикла;//Для Каждого макет_ Из ОбъектЗнч.Метаданные().Макеты
   
КонецПроцедуры

&НаКлиенте
//------- © YF & 1C --------------------
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
   
   Отказ = Истина;
   
   // Проверим количество объектов
   Если ОбъектыНазначения.Количество() = 0 Тогда
       Возврат;
   КонецЕсли;
   
   ТекстСообщения = ?(ОбъектыНазначения.Количество() > 1,
   НСтр("ru = 'Выполняется формирование печатных форм...'"),
   НСтр("ru = 'Выполняется формирование печатной формы...'"));
   Состояние(ТекстСообщения);
       
   выбранныйЭлемент_    = ПечатныеФормы.ВыбратьЭлемент("Выберите нужный макет договора");
   Если выбранныйЭлемент_ = Неопределено Тогда
       имяМакета_        = "";
       Возврат;
   Иначе
       имяМакета_        = выбранныйЭлемент_.Значение;
   КонецЕсли;//Если выбранныйЭлемент_ = Неопределено
   
   МакетИДанныеОбъекта = ПолучитьМакетИДанныеОбъекта(имяМакета_, ОбъектыНазначения);
   
   Для Каждого объектНазначения_ Из ОбъектыНазначения Цикл
       НапечататьДоговоры(МакетИДанныеОбъекта, имяМакета_, объектНазначения_, МакетИДанныеОбъекта["ЛокальныйКаталогФайловПечати"]);
   КонецЦикла;//Для Каждого объектНазначения_ Из ОбъектыНазначения
   
КонецПроцедуры

&НаКлиенте
//------- © YF & 1C --------------------
Процедура НапечататьДоговоры(_макетИДанныеОбъекта, _имяМакета, _договор, _локальныйКаталогФайловПечати)
   
   // Возьмем данные договора
   типМакета_                = _макетИДанныеОбъекта.Макеты.ТипыМакетов[_имяМакета];
   двоичныеДанныеМакетов_    = _макетИДанныеОбъекта.Макеты.ДвоичныеДанныеМакетов;
   области_                = _макетИДанныеОбъекта.Макеты.ОписаниеОбластей;
   данныеОбъекта_            = _макетИДанныеОбъекта.Данные[_договор][_имяМакета];
       
   // Выведем печатную форму
   Попытка
       Макет = УправлениеПечатьюКлиент.ИнициализироватьМакет(двоичныеДанныеМакетов_[_имяМакета], типМакета_, _локальныйКаталогФайловПечати, _имяМакета);
       Если Макет = Неопределено Тогда
           Возврат;
       КонецЕсли;
       ПечатнаяФорма = УправлениеПечатьюКлиент.ИнициализироватьПечатнуюФорму(типМакета_, Макет.НастройкиСтраницыМакета);
       Если ПечатнаяФорма = Неопределено Тогда
           УправлениеПечатьюКлиент.ОчиститьСсылки(Макет);
           Возврат;
       КонецЕсли;
       
       // Вывод колонтитулов документа.
       Если области_[_имяМакета].Свойство("ВерхнийКолонтитул") Тогда
           Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, области_[_имяМакета]["ВерхнийКолонтитул"]);
           УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, данныеОбъекта_, Ложь);
           
           End = Макет.COMСоединение.ActiveDocument.Range().End;
           Selection = Макет.COMСоединение.Selection;
           Selection.Start = End;
           Selection.End = End;
           Selection.TypeBackspace();
           
       КонецЕсли;//области_[_имяМакета].Свойство("ВерхнийКолонтитул")
       Если области_[_имяМакета].Свойство("НижнийКолонтитул") Тогда
           Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, области_[_имяМакета]["НижнийКолонтитул"]);
           УправлениеПечатьюКлиент.ПрисоединитьОбласть(ПечатнаяФорма, Область, Ложь);
           
           End = Макет.COMСоединение.ActiveDocument.Range().End;
           Selection = Макет.COMСоединение.Selection;
           Selection.Start = End;
           Selection.End = End;
           Selection.TypeBackspace();

           
       КонецЕсли;//области_[_имяМакета].Свойство("НижнийКолонтитул")
       
       // Вывод верхней части документа - обычная область с параметрами.
       Если области_[_имяМакета].Свойство("ШапкаДокумента") Тогда
           Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, области_[_имяМакета]["ШапкаДокумента"]);
           УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, данныеОбъекта_, Ложь);
           
           End = Макет.COMСоединение.ActiveDocument.Range().End;
           Selection = Макет.COMСоединение.Selection;
           Selection.Start = End;
           Selection.End = End;
           Selection.TypeBackspace();

           
       КонецЕсли;//области_[_имяМакета].Свойство("Заголовок")
       
       // Вывод верхней части документа - обычная область с параметрами.
       Если области_[_имяМакета].Свойство("ТелоДокумента") Тогда
           Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, области_[_имяМакета]["ТелоДокумента"]);
           УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, данныеОбъекта_, Ложь);
           
           End = Макет.COMСоединение.ActiveDocument.Range().End;
           Selection = Макет.COMСоединение.Selection;
           Selection.Start = End;
           Selection.End = End;
           Selection.TypeBackspace();

           
       КонецЕсли;//области_[_имяМакета].Свойство("ТелоДокумента")

       // Вывод реквизитов договора - обычная область с параметрами.
       Если области_[_имяМакета].Свойство("РеквизитыДоговора") Тогда
           Область = УправлениеПечатьюКлиент.ПолучитьОбласть(Макет, области_[_имяМакета]["РеквизитыДоговора"]);
           УправлениеПечатьюКлиент.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, данныеОбъекта_, Ложь);
           
           
           End = Макет.COMСоединение.ActiveDocument.Range().End;
           Selection = Макет.COMСоединение.Selection;
           Selection.Start = End;
           Selection.End = End;
           Selection.TypeBackspace();

           
       КонецЕсли;//области_[_имяМакета].Свойство("РеквизитыДоговора")

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

&НаСервере
//------- © YF & 1C --------------------
Функция ПолучитьМакетИДанныеОбъекта(_имяМакета, _массивЭлементов)
   
   ОбъектЗначение                = РеквизитФормыВЗначение("Объект");
   массивИменМакетов_            = Новый Массив;
   массивИменМакетов_.Добавить(_имяМакета);
       
   Возврат ОбъектЗначение.ПолучитьДанныеПечати(_массивЭлементов, массивИменМакетов_)
   
КонецФункции
21 AaNnDdRrEeYy
 
04.07.12
17:27
У меня другая ситуация в макете шрифт где 8 где 10 а  при выводе везде 11.
там при выводе задаются тип области "Общая" "Верхнийколонтитул" у тебя там какие типы?
22 YF
 
04.07.12
17:30
//------- © YF & 1C --------------------
Функция ПолучитьОписаниеОбластейМакетаОфисногоДокумента()
   
   ОписаниеОбластей = Новый Структура;
   
   УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "НижнийКолонтитул"    ,    "НижнийКолонтитул");
   УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "ШапкаДокумента"    ,    "Общая");
   УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "ТелоДокумента"        ,    "Общая");
   УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "РеквизитыДоговора"    ,    "Общая");
   
   Возврат ОписаниеОбластей;
   
КонецФункции
23 AaNnDdRrEeYy
 
04.07.12
17:30
зачем эти строки?

End = Макет.COMСоединение.ActiveDocument.Range().End;
Selection = Макет.COMСоединение.Selection;
Selection.Start = End;
Selection.End = End;
Selection.TypeBackspace();

у меня без них  работает.
24 YF
 
04.07.12
17:38
(23) Это чел в (14) посоветовал. Но, что с ними, что без них - одна фигня
25 AaNnDdRrEeYy
 
04.07.12
17:44
Открыл демо БСП там есть док. счет на оплату, изменил ему вордовский макет, именно шрифт, указал использовать пользовательский макет, напечатал все нормально.
Попробуй использовать пользовательский макет а не поставляемый, может при получении макета глюк какой.
26 BigRoma
 
04.07.12
17:44
(0) Такие проблемы иногда возникают из за некорректно отформатированных макетов.
Как отладиться.
В функциях ИнициализироватьПечатнуюФормуMSWord и ПолучитьМакетMSWord общего модуля УправлениеПечатьюMSWordКлиент перед    Возврат Handler;
добавить код:
   COMОбъект.Application.Visible = Истина;

После этого документы при формировании становятся видимыми и можно увидеть, как формируется ПФ.
Необходимо обратить внимание на вызовы ПолучитьОбластьМакетаMSWord и ПрисоединитьОбласть.

Если вкратце принцип работы следующий - находится область в макете - копируется в буфер обмена - область из буфера обмена вставляется в ПФ
27 YF
 
04.07.12
18:00
(26) Оно, конечно интересно, но че там увидишь? Ибо окно будет под окном 1С и, даже если поверх, то увидишь как текст вставляется и все :-(
28 BigRoma
 
04.07.12
18:18
(27) ну да, увидишь как текст вставляется и увидишь, где он вставляется неправильно, а раз так - можешь переформатировать участок, который переносится неправильно.
29 LelDen
 
27.07.12
16:11
У меня тоже была проблема с форматированием: в получившемся документе шрифт, формат абзацев не совпадал с шаблоном.
Решил проблему изменением процедуры УправлениеПечатьюMSWordКлиент. ИнициализироватьПечатнуюФормуMSWord. Добавил параметр ДвоичныеДанные (двоичные данные шаблона), при передаче которого результирующий документ создается не добавлением нового документа (COMОбъект.Documents.Add();), а открытием файла с двоичными данными.

Функция ИнициализироватьПечатнуюФормуMSWord(НастройкиСтраницыМакета, ДвоичныеДанные = Неопределено) Экспорт
   
   Handler = Новый Структура("Тип", "DOC");
   
   Попытка
       COMОбъект = Новый COMОбъект("Word.Application");
   Исключение
       ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка",
           ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),,Истина);
       НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке());
   КонецПопытки;
   
   Handler.Вставить("COMСоединение", COMОбъект);
   
   //COMОбъект может быть новый с применением переданных настроек
   //или открыт из двоичных данных, если они переданы
   Если ДвоичныеДанные    = Неопределено Тогда
       //создаем из нового документа
       Попытка
           COMОбъект.Documents.Add();
       Исключение
           COMОбъект.Quit(0);
           COMОбъект = 0;
           Handler.COMОбъект = 0;
           ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка",
               ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),,Истина);
           НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке());
       КонецПопытки;
       
       Если НастройкиСтраницыМакета <> Неопределено Тогда
           Для Каждого Настройка Из НастройкиСтраницыМакета Цикл
               Попытка
                   COMОбъект.ActiveDocument.PageSetup[Настройка.Ключ] = Настройка.Значение;
               Исключение
                   // Пропустить, если настройка не поддерживается данной версией программы.
               КонецПопытки;
           КонецЦикла;
       КонецЕсли;
   Иначе
       //создаем из переданных двоичных данных
       
       //получаем имя временного файла - пишем двоичные данные
       #Если НЕ ВебКлиент Тогда
       ИмяВременногоФайла = ПолучитьИмяВременногоФайла("DOC");
       ДвоичныеДанные.Записать(ИмяВременногоФайла);
       #КонецЕсли
       
       //пытаемся открыть
       Попытка
           COMОбъект.Documents.Open(ИмяВременногоФайла);
       Исключение
           COMОбъект.Quit(0);
           COMОбъект = 0;
           Handler.COMОбъект = 0;
           УдалитьФайлы(ИмяВременногоФайла);
           ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), "Ошибка",
               ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),,Истина);
           ВызватьИсключение(НСтр("ru = 'Ошибка при открытии файла шаблона.'") + Символы.ПС
               + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
       КонецПопытки;

       //очищаем документ от содержания
       COMОбъект.Selection.WholeStory();
       COMОбъект.Selection.Delete();
       
   КонецЕсли;
   
   Возврат Handler;
   
КонецФункции
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший