Печать с использованием шаблонов 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 бланки

См. также

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

Синтакс-помощник БСП - cправочник по библиотеке стандартных подсистем. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП.

1800 руб.

21.11.2024    323    1    0    

3

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

Некоторые нюансы, если вы захотите создавать свои расширения. Доработка отчета "Связанные документы" для отражения документов расширения. Печатные формы с шаблоном Word.

20.11.2024    2285    milkers    3    

7

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

В статье описан алгоритм для включения документа или справочника в систему БСП. Будет полезно программистам 1С, начинающим работать с БСП.

24.10.2024    1173    PROSTO-1C    0    

14

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

В материале описан универсальный механизм работы с добавленными элементами на общую форму «ФормаОтчета». Думаю, облегчит работу многим разработчикам.

08.10.2024    1036    PROSTO-1C    4    

12

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

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

04.10.2024    1883    MadRave    11    

24

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

Пример отслеживания прогресса фонового выполнения дополнительной обработки с использованием программного интерфейса длительных операций БСП.

10.09.2024    1887    MadRave    1    

17

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

А что, если долгожданная реализация Паузы в 1С смутно напоминает старую, проверенную? А?!

06.09.2024    1297    n_mezentsev    10    

8

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

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    4156    John_d    10    

52
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4692 17.05.15 12:13 Сейчас в теме
(0) Корретно использовать не модуль УправлениеПечатьюMSWordКлиент, а "полиморфные" процедуры из УправлениеПечатьюКлиент.
cool.vlad4; +1 Ответить
2. Gladkov_Anton 347 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 . так на порядок быстрее
4. Поручик 4692 20.05.15 08:44 Сейчас в теме
(3) Чел не до конца изучил матчасть.
6. Gladkov_Anton 347 20.05.15 10:21 Сейчас в теме
(4) Поручик, по правилам "хорошего тона" следует критиковать публикацию и предлагать улучшения, а НЕ тыкать пальчиком автора.
davdykin; +1 Ответить
7. Поручик 4692 20.05.15 10:55 Сейчас в теме
(6) В первом посте я сказал, как правильно делать. Изучите демо БСП в части генерации документов Word и OpenOffice
5. Gladkov_Anton 347 20.05.15 10:19 Сейчас в теме
(3) cool.vlad4, 1. Указал в ограничениях. 2 и 3 исправил в коде.
Спасибо за замечания.
8. Pavel_Vladivostok 58 25.10.21 11:19 Сейчас в теме
Спасибо автору за статью, с момента публикации прошло больше 6 лет, но материал по прежнему актуален, данная статья прилично сэкономила мне время :)
Оставьте свое сообщение