При работе с печатными формами в 1С часто возникает ситуация, когда необходимо объединить основной документ и приложение, подготовленные в разных макетах. Однако при программном выводе одного ТабличныйДокумент в другой, пользователь сталкивается с неприятным эффектом: форматирование присоединяемого документа «ломается». Ширина колонок меняется, подстраиваясь под сетку основного документа, что приводит к некорректному делению страниц и искажению визуальной структуры.
Разберемся, почему это происходит. В 1С ТабличныйДокумент не является набором независимых областей. Это единая «сеточная» структура. Когда мы вызываем метод Вывести() или Присоединить(), платформа пытается привести параметры присоединяемого объекта к параметрам области приемника. В итоге, если у вас в макетах разное количество или ширина столбцов, 1С принудительно пересчитывает ширину всех ячеек, ориентируясь на сетку первого выведенного макета.
Самым эффективным способом «заморозить» форматирование присоединяемого документа является использование метода СоздатьФорматСтрок(). Этот метод фиксирует настройки ширины и высоту строк текущей области, не давая платформе произвольно изменять их при вставке в основной документ.
Рассмотрим, как реализовать этот подход на практике. Мы можем создать вспомогательную процедуру, которая будет подготавливать табличный документ перед его выводом в основной отчет.
Реализуем алгоритм по шагам:
ТабличныйДокумент.СоздатьФорматСтрок() к полученной области.ТабличныйДокумент.Посмотрим на пример кода такой процедуры:
Процедура ПрисоединитьТабличныйДокумент(ПриемникТаблДок, ПередатчикТаблДок, СоздатьФорматСтрок = Ложь)
ВременныйТаблДок = Новый ТабличныйДокумент;
ОбластьЯчеек = ВременныйТаблДок.Вывести(ПередатчикТаблДок);
Если СоздатьФорматСтрок Тогда
ОбластьЯчеек.СоздатьФорматСтрок();
КонецЕсли;
ПриемникТаблДок.Вывести(ВременныйТаблДок);
КонецПроцедуры
Если метод СоздатьФорматСтрок() не дает желаемого результата из-за слишком сильных различий в сетках, рассмотрим другие стратегии, которые применяются профессиональными разработчиками 1С:
1. Унификация макетов (Сетчатое проектирование)
Самый надежный способ — проектирование всех макетов на основе «базовой сетки». Суть метода заключается в том, чтобы все макеты системы использовали колонки одинаковой ширины (например, кратные 2.5 мм). Тогда любая область будет идеально вписываться в любой другой документ, так как границы всех ячеек будут математически совпадать.
2. Построчный вывод
Вместо объединения готовых документов, можно выводить области макета последовательно прямо в основной ТабличныйДокумент. Это требует более сложной логики, так как вам придется самостоятельно управлять переходом на новую страницу, но это дает полный контроль над форматированием на каждом этапе формирования отчета.
3. Использование графического представления
В случаях, когда визуальное соответствие является критически важным и документ не требует дальнейшего редактирования пользователем, можно предварительно сохранить приложение как PDF-файл или картинку, а затем программно вставить это изображение в основной табличный документ. Это гарантирует 100% сохранение внешнего вида, но лишает документ интерактивности.
Анализируя данную задачу, мы выяснили, что главной причиной сдвигов является сеточная природа ТабличныйДокумент. Использование метода СоздатьФорматСтрок() — это лучшее «быстрое» решение для большинства задач. Тем не менее, для крупных и сложных печатных форм мы рекомендуем придерживаться унификации сетки макетов еще на этапе разработки конфигурации. Это избавит вас от необходимости программных «костылей» и обеспечит стабильную работу системы печати в любых условиях.