Объединение табличных документов

Рустем 10 1

Объединение и соединение табличных документов - исследовательская статья "на подумать"

Проблема соединения (объединения) табличных документов начинается тогда, когда табличный документ имеет блоки строк с разной шириной колонок. Сейчас почти все печатные формы на УФ имеют блоки разной ширины колонок - так сказать разных форматов.
За формат блока строк отвечает программно процедура области ячеек табл. документа СоздатьФорматСтрок()
Интерактивно ее можно вызвать, если вы выделите в табличном документ строки и раздвинете любую колонку - интерактивный вопрос о создании нового формата строк не замедлит появиться на экране.
Особенности использования форматированных строк описаны на ИТС Особенности работы с форматами строк табличного документа

https://its.1c.ru/db/metod8dev#content:2227:hdoc:_top:создатьформатстрок

Но из голой теории мало что понятно - не хватает картинок, примеров на реальных макетах....
В справке 1С - предоставлен пример такой, который отрабатывает присоединяемый табл. документ, у которого один (!) формат строк на весь макет....

Если в присоединяемом табл. документе много разных блоков - с разными форматами строк, то алгоритм уже не сработает - поскольку все последующие строки табл. документа будут приводиться к формату первого блока строк....

Поможет алгоритм вот отсюда МИСТА: Объединение печатных форм с разным количеством колонок

Автор алгоритма потрудился разделить присоединяемый табл.документ на все блоки разных форматов строк - присоединил каждый по отдельности. Ему огромное спасибо за предоставленный алгоритм!

Я через расширение добавил алгоритм соединения двух печатных форм в одном табличном документе - расходный ордер и задание на отбор - удобно при учете адресного хранения товаров в режиме справочного размещения по ячейкам.

&После("Печать")
Процедура ДопПечать_Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
	
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "РасходныйОрдер") Тогда
		
		ТабДок1 = ПечатьРасходногоОрдераНаТовары(МассивОбъектов, ОбъектыПечати);
		ТабДок2 = Обработки.ДопПечать_ПечатьРасходногоОрдераИЗаданияНаОтбор.СформироватьРасходныйОрдерИЗаданиеНаОтбор(МассивОбъектов, ОбъектыПечати, ПараметрыПечати);
		
		
		ДобавитьТабличныйДокумент(ТабДок1, ТабДок2);
		
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
			КоллекцияПечатныхФорм,
			"РасходныйОрдер",
			НСтр("ru = 'Расходный ордер на товары'"),
			ТабДок1);
				
	КонецЕсли;
		
КонецПроцедуры

Также я пробовал выводить табл. документы так:

ТабДок1 = ПечатьРасходногоОрдераНаТовары(МассивОбъектов, ОбъектыПечати);
        ТабДок2 = Обработки.ДопПечать_ПечатьРасходногоОрдераИЗаданияНаОтбор.СформироватьРасходныйОрдерИЗаданиеНаОтбор(МассивОбъектов, ОбъектыПечати, ПараметрыПечати);
        
        ТабДок = Новый ТабличныйДокумент;
            
        ТабДок.Вывести(ТабДок1);
        ТабДок.Вывести(ТабДок2);

В таком случае два макета садятся в один - с первого взгляда красиво, но в формат А4 "Портрет" уже не влезает - колонки изменяют ширину.
Как оказалось в итоге, оба варианта выходят за размеры портрета - печатная форма Расходной накладной изначально шире листа А4. Для обоих вариантов необходимо печатать в режиме "По ширине страницы".
Для платформы 1С:Предприятие 8.3 (8.3.18.1741) и конфигурации 1С:Комплексная автоматизация 2 (2.4.13.281) оба варианта оказались рабочими как для использования расширений, так и внешних печатных форм.
Первые тесты проходили на 1С:Комплексная автоматизация 2 (2.4.13.209) и платформе 1С:Предприятие 8.3 (8.3.18.1289) - ошибок не было.

Из-за того, что не увидел, что вариант с использованием процедуры СоздатьФорматСтроки() - распечатывал "по ширине странице", а вариант без этой процедуры распечатывал в режиме "Масштаб 100%" - сделал неправильный вывод, написал публикацию. В результате, пришлось заново все перепроверить, внести редактуру в публикацию.
Сейчас статья остается в рамках публикации "на подумать". Возможно кто-нибудь прольет свет зачем в платформе используется процедура СоздатьФорматСтроки().
Возможно, есть разница в использовании при выводе поочередно макетов разной структуры в СКД или при программной установке ширины колонки для определенной строки. Но эти задачи совсем другие, поэтому объединять готовые печатные формы, я полагаю, можно и без процедуры СоздатьФорматСтроки().

Прикрепил скриншоты печатных форм для алгоритма соединения табл. документов через СоздатьФорматСтрок() - результат положительный и представлен на скриншотах.

2021-12-29_18-44-59.png
2021-12-29_18-44-30.png

Всем добра!
мой яндекс-дзен-канал

0

См. также

Заполнение табличного документа

ТабличныйДокументПоДвоичнымДанным (БСП)

РаспечататьТабличныеДокументы (БСП)

Как загрузить в табличную часть одного документа табличную часть другого документа?

КопируемыеСвойстваТабличногоДокумента (БСП)

Печать БСП по табличному документу

Вставка рисунка в табличный документ без изменения макета

Пересчет сумм в табличной части документа

ПроверитьВыводТабличногоДокумента (БСП)

Модератору