Печать в 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    3655    16    15    

18

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

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

27.12.2024    3453    PROSTO-1C    15    

43

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

Синтакс-помощник БСП - справочник по Библиотеке Стандартных Подсистем, профессиональный инструмент разработчика с интуитивно понятным интерфейсом. Читайте в статье как использовать все возможности справочника и сделать работу с БСП более комфортной и эффективной.

11.12.2024    3907    gorenski    0    

8

БСП (Библиотека стандартных подсистем) Менеджеры внешних отчетов Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление холдингом Абонемент ($m)

За последние лет 5 несколько раз сталкиваюсь с проблемой на разных проектах (в конфигурациях 1С:ERP, 1С:ERP УХ и многих других, основанных на БСП), когда много пользователей (около 30 тысяч) в информационной базе, время добавления доступа для пользователей занимает значительное время. Открытие списка занимает от 10 до 15 секунд, и каждое изменение списка еще примерно столько же.

1 стартмани

10.12.2024    997    Iaskeliainen    2    

7

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

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

20.11.2024    3346    milkers    3    

12

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

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

24.10.2024    1688    PROSTO-1C    0    

18

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

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

08.10.2024    1375    PROSTO-1C    4    

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