Печать в WORD при помощи БСП. Вывод уникальных ссылок в строки таблицы

03.04.23

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

Пример вывода уникальных ссылок в строку таблицы макета WORD при печати с помощью БСП. Может быть полезна при создании интерактивных прайсов.

В предыдущей статье мы научили БСП выводить ссылки в WORD. Теперь разберем как вывести различные ссылки в строки таблицы.

Для начала подготовим макет документа WORD. В макете мы будем выводить ссылку в картинке, для этого дадим рисунку уникальное имя.

 

Теперь обработаем название рисунка и вставим уникальную ссылку.
В процедуре Печать() все как обычно здесь она приведена, для того чтобы было понятно откуда происходит вызов функции ПечатьWord()

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	ИмяМакета = "ИмяМакета";
	ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, ИмяМакета);
	Если ПечатнаяФорма <> Неопределено Тогда
	
	   	МакетИДанныеОбъекта = УправлениеПечатьюВызовСервера.МакетыИДанныеОбъектовДляПечати("Обработка.ПечатьВВорд", ИмяМакета, МассивОбъектов);
		
		ОфисныеДокументы = Новый Соответствие;
							
		Для Каждого Ссылка Из МассивОбъектов Цикл

			АдресХранилищаОфисныйДокумент = ПечатьWord(Ссылка, МакетИДанныеОбъекта, ИмяМакета, ПараметрыПечати);
			ОфисныеДокументы.Вставить(АдресХранилищаОфисныйДокумент, ИмяДокумента);
			
		КонецЦикла;	
		
		ПечатнаяФорма.ОфисныеДокументы = ОфисныеДокументы;
		
	КонецЕсли;	
		
КонецПроцедуры

Теперь рассмотрим функцию ПечатьWord()

Здесь нужно при добавлении каждой ссылки обновлять таблицу связей документа. Для этого добавим в конец строки переменной ПечатнаяФорма.СтруктураДокумента.СвязиКонтента данные о новой ссылке. В листинге шаблон добавления описан в переменной ШаблонСсылкиВТаблицеСвязей (см. листинг).

Для чего все это нужно?) Дело в том в XML-структуре документ в ссылке не хранится прямой адрес, а указан ИД из таблицы связей контекста (которая является отдельным файлом XML). Полученный таким образом ИД в дальнейшем будет использован для подстановки в ссылку.
Следует отметить, что помимо переменной СтруктураДокумента.СвязиКонтента, БСП разбирает файл связи контекста в таблицу значений, которая также есть в структуре документа, но в данный момент эта таблица никак в дальнейшем не используется, поэтому в нее ничего не добавляем.

Теперь добавим ссылку используя полученный ИД. Для этого нам потребуется получить область макета строки таблицы и использовать два шаблона для вставки: первая вставляет всплывающую подсказку на ссылку(ТекстСсылки1), а вторая сама ссылку(ТекстСсылки2). Для добавления воспользуемся функцией СтрЗаменить() вот тут и пригодится уникальное имя рисунка, именно по нему мы и будем искать место для вставки.

 

ВАЖНО: Перед использованием СтрЗаменить нужно сохранить текст области в отдельную переменную, чтобы потом после вывода области вернуть текст обратно. Т.к. в отличие от обычного получения области, здесь не происходит обращения к макету, область получается из структуры, которая была инициализирована при разборе макета WORD.

Для вставки всплывающей подсказки ищем в тексте области текст: "рисПаспорт""/><wp:cNvGraphicFramePr>"
Для вставки ссылки ищем текст - "рисПаспорт""/><pic:cNvPicPr/>"

Листинг вывода в строку таблицы и замена текста в связях контента и формирование ссылок приведен ниже:

Функция ПечатьWord(ДокументСсылка, МакетИДанныеОбъекта, ИмяМакета, ПараметрыПечати)
	
...
	
	ПечатнаяФорма = УправлениеПечатью.ИнициализироватьПечатнуюФорму(, , Макет);
	АдресХранилищаПечатнойФормы = "";
...		
	//получим количество связей и инициализируем последний номер
	ИдНомерСвязи = ПечатнаяФорма.СтруктураДокумента.ТаблицаСвязейКонтента.Количество();// индексы с 1, поэтому кол-во строк = последний индекс
			
	Область = УправлениеПечатью.ОбластьМакета(Макет, Области[ИмяМакета]["ШапкаТаблицы"]);
	УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеОбъекта, Ложь);
		
	Для каждого СтрокаТЧ Из ДанныеОбъекта.ТЧ Цикл
			
		ИсходныйТекстОбласти = ""; 
		флВставитьСсылку = Ложь;
						
		Если ЗначениеЗаполнено(СтрокаТЧ.СсылкаКФайлу) Тогда
			ИдНомерСвязи = ИдНомерСвязи + 1; 
			ШаблонСсылкиВТаблицеСвязей = "<Relationship Id=""" + Формат(ИдНомерСвязи, "ЧДЦ=0; ЧГ=0; ЧФ=rIdЧ") + """"  
									   + " Type=""http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"""
									   + " Target=""" + СтрокаТЧ.СсылкаКФайлу + """" 
									   + " TargetMode=""External""/>";
				
			//добавим в конец текста связей
			ПечатнаяФорма.СтруктураДокумента.СвязиКонтента = СтрЗаменить(ПечатнаяФорма.СтруктураДокумента.СвязиКонтента, "</Relationships>", ШаблонСсылкиВТаблицеСвязей + "</Relationships>"); 
			флВставитьСсылку = Истина;
					
		КонецЕсли;
				
		Область = УправлениеПечатью.ОбластьМакета(Макет, Области[ИмяМакета]["СтрокаТаблицы"]);
				
		Если флВставитьСсылку Тогда  
			ИсходныйТекстОбласти = Область.Текст;
			ТекстСсылки1 = "<a:hlinkClick xmlns:a=""http://schemas.openxmlformats.org/drawingml/2006/main"" r:id=""" + Формат(ИдНомерСвязи, "ЧДЦ=0; ЧГ=0; ЧФ=rIdЧ") + """/>";
			ТекстСсылки2 = "<a:hlinkClick r:id=""" + Формат(ИдНомерСвязи, "ЧДЦ=0; ЧГ=0; ЧФ=rIdЧ") + """/>";   
			Область.Текст = СтрЗаменить(Область.Текст, "рисПаспорт""/><wp:cNvGraphicFramePr>", "рисПаспорт"">" + ТекстСсылки1 + "</wp:docPr><wp:cNvGraphicFramePr>");
			Область.Текст = СтрЗаменить(Область.Текст, "рисПаспорт""/><pic:cNvPicPr/>", "рисПаспорт"">" + ТекстСсылки2 + "</pic:cNvPr><pic:cNvPicPr/>"); 
		КонецЕсли;	
			
		УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, СтрокаТЧ, Ложь);
			
		Если флВставитьСсылку Тогда
		    Область.Текст = ИсходныйТекстОбласти; 
		КонецЕсли;
			
	КонецЦикла;
		
	АдресХранилищаПечатнойФормы = УправлениеПечатью.СформироватьДокумент(ПечатнаяФорма); 
			
	УправлениеПечатью.ОчиститьСсылки(ПечатнаяФорма, ЗакрытьОкноПечатнойФормы);
	УправлениеПечатью.ОчиститьСсылки(Макет);
	
	Возврат АдресХранилищаПечатнойФормы;
	
КонецФункции	

Проверено на БСП 3.1.5.306.

См. также

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

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

1800 руб.

21.11.2024    135    1    0    

2

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

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

24.10.2024    1121    PROSTO-1C    0    

13

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

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

08.10.2024    1000    PROSTO-1C    4    

12

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

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

04.10.2024    1851    MadRave    11    

24

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

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

10.09.2024    1839    MadRave    1    

17

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

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

06.09.2024    1265    n_mezentsev    10    

8

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

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

02.09.2024    4117    John_d    10    

52

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

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    5375    PROSTO-1C    12    

52
Оставьте свое сообщение