Печать в 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 Абонемент ($m)

Расширения для внедрения консоли кода в обработку подсистемы БСП Групповое изменение реквизитов. Просто, чтобы было удобнее.

2 стартмани

03.12.2023    921    4    vandalsvq    1    

17

Настройка истории изменений. Подключение новых объектов (которых нет в списке) к системе версионирования (БСП) без изменения конфигурации

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

Много материалов и видео в сети о том, как подключить объект, которого нет в списке настроек, к системе версионирования БСП. Суть сводится к изменению определяемого типа, на который все завязано. Но это предполагает изменение конфигурации. Недавно встала задача подключить объект, которого нет в определяемом типе без снятия замков. Пришлось изучить вопрос глубже. Здесь пояснения и краткая инструкция с картинками. Как подключиться, используя только расширение.

20.11.2023    722    user1374747    0    

22

Как включить привилегированный режим для дополнительных отчетов и обработок

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

Как отключить безопасный режим для дополнительных отчетов и обработок РазрешениеНаИспользованиеПривилегированногоРежима

14.10.2023    2246    SpecRam    16    

32

Справочник по методам БСП

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Абонемент ($m)

Данная конфигурация представляет собой инструмент для изучения документации и набора методов для стандартных подсистем БСП (Библиотека стандартных подсистем) в среде 1С:Предприятие. Может помочь разработчикам для быстрого поиска кода и переноса его в другие конфигурации, а также изучения БСП. Это конфигурация не в является заменой сервиса ИТС , а только помогает разработчикам в изучении БСП.

2 стартмани

11.10.2023    4840    107    plm    13    

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