Задача: Вывод на печать документов с использованием шаблонов Word. Методика вывода на печать должна быть максимально близкой к методике вывода в табличный документ.
Шаблон: В качестве шаблона может использоваться любой документ Word (doc, docx, dot и т.д.)
Область: Для определения областей документа используется конструкция вида:
{v8 Область.Наименование}
{/v8 Область.Наименование}
Вложенность областей НЕ поддерживается. Горизонтальное присоединение областей НЕ поддерживается.
Параметры: для описания параметров используется конструкция {v8 НаименованиеПараметра}
Ограничения применения:
- Алгоритмы рассчитаны на использование только MSWord (без OO Writer).
- В работе НЕ использовался более универсальный модуль УправлениеПечатьюКлиент для того что бы можно было использовать вывод в MS-Word из старых конфигураций (построенных без использования БСП) с переносом в них минимального количества модулей БСП
- Во время формирования документа используется буфер обмена. Т.е. во время вывода на печать:
- Будет затерта информация пользователя в буфере обмена.
- Нельзя использовать буфер обмена.
Вывод документа:
На вход процедуры подаются:
ДвоичныеДанныеМакета - макет типа двоичные данные, содержащий файл-шаблон.
ДанныеДляПечати - структура или другой тип данных, поддерживаемый процедурой ЗаполнитьЗначенияСвойств
Процедура Печать_MS_Word(ДвоичныеДанныеМакета, ДанныеДляПечати) Экспорт
Макет = УправлениеПечатьюMSWordКлиент.ПолучитьМакетMSWord(ДвоичныеДанныеМакета, ПолучитьИмяВременногоФайла("docx"));
Документ = УправлениеПечатьюMSWordКлиент.ИнициализироватьПечатнуюФормуMSWord(Макет);
ПрисоединитьОбласть_MS_Word(Макет, Документ, "Документ", ДанныеДляПечати);
УправлениеПечатьюMSWordКлиент.ПоказатьДокументMSWord(Документ);
УправлениеПечатьюMSWordКлиент.ЗакрытьСоединение(Макет, Истина);
КонецПроцедуры
Присоединение области:
Процедура ПрисоединитьОбласть_MS_Word(Макет, Документ, ИмяОбласти, ДанныеДляПечати, ВывестиСтрокуТаблицы = Ложь) Экспорт
Область = УправлениеПечатьюMSWordКлиент.ПолучитьОбластьМакетаMSWord(Макет, ИмяОбласти);
Если Область = Неопределено тогда
Сообщить("При выводе на печать не найдена область """ + ИмяОбласти + """");
Возврат;
КонецЕсли;
Область_ = УправлениеПечатьюMSWordКлиент.ПрисоединитьОбласть(Документ, Область, , ВывестиСтрокуТаблицы);
Параметры = ПараметрыОбласти_MS_Word(Область_);
ЗаполнитьЗначенияСвойств(Параметры, ДанныеДляПечати);
УправлениеПечатьюMSWordКлиент.ЗаполнитьПараметры(Область_, Параметры);
КонецПроцедуры
В БСП заполнение параметров области может производиться только из структуры. При этом получить структуру, содержащую перечень параметров, невозможно. Для этих целей можно использовать следующую процедуру:
Функция ПараметрыОбласти_MS_Word(Область)
Параметры = Новый Структура;
Текст = Область.Document.Content.Text;
Пока Найти(Текст, "{v8 ") > 0 И Найти(Текст, "}") > 0 цикл
Начало = Найти(Текст, "{v8 ") + 4;
Конец = Найти(Текст, "}");
ИмяПараметра = Сред(Текст, Начало, Конец-Начало);
Текст = СтрЗаменить(Текст, "{v8 " + ИмяПараметра + "}", "");
Параметры.Вставить(ИмяПараметра, Неопределено);
КонецЦикла;
Возврат Параметры;
КонецФункции
Для работы процедур необходимы модули СтроковыеФункцииКлиентСервер и УправлениеПечатьюMSWordКлиентиз БСП. В случае необходимости модули могут быть скопированы в отдельное решение с удалением из них строк, связанных с регистрированием исключений в журнале ошибок.