Объединение и соединение табличных документов - исследовательская статья "на подумать"
Проблема соединения (объединения) табличных документов начинается тогда, когда табличный документ имеет блоки строк с разной шириной колонок. Сейчас почти все печатные формы на УФ имеют блоки разной ширины колонок - так сказать разных форматов.
За формат блока строк отвечает программно процедура области ячеек табл. документа СоздатьФорматСтрок()
Интерактивно ее можно вызвать, если вы выделите в табличном документ строки и раздвинете любую колонку - интерактивный вопрос о создании нового формата строк не замедлит появиться на экране.
Особенности использования форматированных строк описаны на ИТС Особенности работы с форматами строк табличного документа
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%" - сделал неправильный вывод, написал публикацию. В результате, пришлось заново все перепроверить, внести редактуру в публикацию.
Сейчас статья остается в рамках публикации "на подумать". Возможно кто-нибудь прольет свет зачем в платформе используется процедура СоздатьФорматСтроки().
Возможно, есть разница в использовании при выводе поочередно макетов разной структуры в СКД или при программной установке ширины колонки для определенной строки. Но эти задачи совсем другие, поэтому объединять готовые печатные формы, я полагаю, можно и без процедуры СоздатьФорматСтроки().
Прикрепил скриншоты печатных форм для алгоритма соединения табл. документов через СоздатьФорматСтрок() - результат положительный и представлен на скриншотах.
Всем добра!
мой яндекс-дзен-канал
Заполнение табличного документа
ТабличныйДокументПоДвоичнымДанным (БСП)
РаспечататьТабличныеДокументы (БСП)
Как загрузить в табличную часть одного документа табличную часть другого документа?
КопируемыеСвойстваТабличногоДокумента (БСП)
Печать БСП по табличному документу
Вставка рисунка в табличный документ без изменения макета