Печать в 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.

См. также

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

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

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

02.04.2024    3126    John_d    10    

89

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

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

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

01.03.2024    1681    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    2607    YA_418728146    11    

43

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

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

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

19.01.2024    6242    PROSTO-1C    5    

46

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

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

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

15.01.2024    3883    0    Infostart    0    

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