Печать с использованием шаблонов Word при помощи модуля из БСП

17.05.15

Разработка - БСП (Библиотека стандартных подсистем)

Вывод на печать документов с использованием шаблонов Word.

Задача: Вывод на печать документов с использованием шаблонов Word. Методика вывода на печать должна быть максимально близкой к методике вывода в табличный документ.

Шаблон: В качестве шаблона может использоваться любой документ Word (doc, docx, dot и т.д.)

Область: Для определения областей документа используется конструкция вида:

{v8 Область.Наименование} 
{/v8 Область.Наименование}

Вложенность областей НЕ поддерживается. Горизонтальное присоединение областей НЕ поддерживается.
Параметры: для описания параметров используется конструкция {v8 НаименованиеПараметра} 

 

Ограничения применения:

 

  1. Алгоритмы рассчитаны на использование только MSWord (без OO Writer).
  2. В работе НЕ использовался более универсальный модуль УправлениеПечатьюКлиент для того что бы можно было использовать вывод в MS-Word из старых конфигураций (построенных без использования БСП) с переносом в них минимального количества модулей БСП
  3. Во время формирования документа используется буфер обмена. Т.е. во время вывода на печать:
    1. Будет затерта информация пользователя в буфере обмена.
    2. Нельзя использовать буфер обмена.


Вывод документа:
На вход процедуры подаются:
ДвоичныеДанныеМакета - макет типа двоичные данные, содержащий файл-шаблон.
ДанныеДляПечати - структура или другой тип данных, поддерживаемый процедурой ЗаполнитьЗначенияСвойств

 

Процедура Печать_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Клиентиз БСП. В случае необходимости модули могут быть скопированы в отдельное решение с удалением из них строк, связанных с регистрированием исключений в журнале ошибок.

Печать печатные бланки word MS Office бланки

См. также

БСП. Добавляем отчет в меню Отчеты

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Добавим новый отчет в меню нового документа средствами БСП.

02.04.2024    3102    John_d    10    

88

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1673    dimanich70    8    

14

Заполнение поля адреса в своей обработке [БСП]

Механизмы платформы 1С БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Небольшая шпаргалка по функциям БСП касательно адреса. Так скажем, еще один способ помимо https://infostart.ru/1c/articles/1060970/

12.02.2024    784    FilippovRI    0    

15

Расширяем возможности дополнительных обработок и настраиваем их отладку

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2599    YA_418728146    11    

42

1С:БСП Дополнительные реквизиты и сведения

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Бесплатно (free)

В этой статье расскажем об архитектуре, использовании и особенностях реализации подсистемы «Свойства» из инструментария разработчика «1С:Библиотека стандартных подсистем» (1С: БСП).

19.01.2024    6200    PROSTO-1C    5    

46

Бесплатный митап 9 февраля «Библиотеки и фреймворки на 1С и всё, что с этим связано»

БСП (Библиотека стандартных подсистем) Мероприятия Бесплатно (free)

Митап посвящен вопросам создания, использования и поддержке переиспользуемого кода при разработке решений на платформе 1С:Предприятие 8.

15.01.2024    3882    0    Infostart    0    

21
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4674 17.05.15 12:13 Сейчас в теме
(0) Корретно использовать не модуль УправлениеПечатьюMSWordКлиент, а "полиморфные" процедуры из УправлениеПечатьюКлиент.
cool.vlad4; +1
2. Gladkov_Anton 331 17.05.15 20:08 Сейчас в теме
Дело в том, что задача была поставлена использовать шаблоны в формате MS Word.
В случае использования модуля УправлениеПечатьюКлиент потребуется:
1. Написать процедуру ПараметрыОбласти_MS_Word так что бы она могла работать с OO Writer.
2. Провести существенную переработку кода БСП так что бы можно было использовать шаблоны в "старых" конфигурациях.

В результате был выбран этот вариант, как более удобный к переносу в разные конфигурации.
Pavel_Vladivostok; +1
3. cool.vlad4 2 20.05.15 01:21 Сейчас в теме
(2) зачем? там помоему как раз без проблем делается . просто указывается ТипМакета = "Doc";
дальше УправлениеПечатьюКлиент.ИнициализироватьМакет и т.п.
но есть некоторые баги
1. надо иметь ввиду что делается все через выделения. т.е. если параллельно пользователь будет открывать word и копировать данные, будет лажа
2. Вот этот кусок Пока Найти(Текст,"{v8 ")> 0 цикл в некоторых ситуациях может стать Infinite loop
3. таблицы довольно долго делаются. непонятно почему не сделали вставку таблиц через ПФ_ActiveDocument.Tables.Add . так на порядок быстрее
Il; +1
4. Поручик 4674 20.05.15 08:44 Сейчас в теме
(3) Чел не до конца изучил матчасть.
+
6. Gladkov_Anton 331 20.05.15 10:21 Сейчас в теме
(4) Поручик, по правилам "хорошего тона" следует критиковать публикацию и предлагать улучшения, а НЕ тыкать пальчиком автора.
davdykin; +1
7. Поручик 4674 20.05.15 10:55 Сейчас в теме
(6) В первом посте я сказал, как правильно делать. Изучите демо БСП в части генерации документов Word и OpenOffice
+
5. Gladkov_Anton 331 20.05.15 10:19 Сейчас в теме
(3) cool.vlad4, 1. Указал в ограничениях. 2 и 3 исправил в коде.
Спасибо за замечания.
+
8. Pavel_Vladivostok 58 25.10.21 11:19 Сейчас в теме
Спасибо автору за статью, с момента публикации прошло больше 6 лет, но материал по прежнему актуален, данная статья прилично сэкономила мне время :)
+
Оставьте свое сообщение