К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как соединить два табличных документа в 1С

Как объединить два табличных документа в 1С: метод Вывести, построчное копирование, объединение областей. Примеры кода, типичные ошибки и проверка результата.

Задача соединить два табличных документа возникает при формировании составных печатных форм, объединении отчётов из разных источников и выводе нескольких макетов в один файл. В 1С нет одной кнопки «склеить документы», но есть несколько рабочих приёмов: метод Вывести() с областями, построчное копирование значений и вывод одного документа в другой через временный буфер.

Выбор способа зависит от того, что нужно сохранить: только текст и числа или также оформление, ширину колонок, объединённые ячейки и картинки. Простое копирование значений теряет форматирование, а метод вывода областей переносит документ почти без потерь, но требует аккуратной работы с областями.

Ниже разобраны основные подходы с примерами кода на встроенном языке, условия их применения, типичные ошибки и способы проверить, что объединение прошло корректно.

Что именно нужно объединить: определяем исходные данные

Прежде чем писать код, важно понять, откуда берутся оба табличных документа. Это могут быть два результата отчётов на СКД, два заполненных макета, документ, загруженный из файла Excel, и сформированная печатная форма. От этого зависит, доступны ли области документа и сохранилось ли форматирование.

Также определите направление соединения: вертикальное (один документ под другим) или горизонтальное (колонки рядом). Вертикальное объединение — стандартный сценарий, для него подходит метод Вывести(). Горизонтальное потребует присоединения областей методом Присоединить() или ручного переноса колонок.

Третий вопрос — что делать с шириной колонок. Если у документов разное число колонок и разная ширина, при выводе второго документа в первый сохранятся колонки первого. Это частая причина «кривого» результата.

Оба документа из макетовОбласти доступны

Используйте Вывести() с областями — форматирование сохранится

Один документ из ExcelСтруктура может отличаться

Проверьте число колонок и типы значений перед объединением

Нужны только данныеФорматирование не важно

Достаточно построчного копирования значений ячеек

Разная ширина колонокРиск искажения вида

Настройте ширину в итоговом документе после объединения

Способ 1: вывод областей через метод Вывести()

Основной и самый корректный приём — вывести область второго табличного документа в конец первого. Область получают методом ПолучитьОбласть(), а затем передают в Вывести() целевого документа. При этом переносятся значения, форматирование ячеек, объединения и рамки.

// Документ1 и Документ2 — объекты типа ТабличныйДокумент

ОбластьВторого = Документ2.ПолучитьОбласть(1, 1, Документ2.ВысотаТаблицы, Документ2.ШиринаТаблицы);

Документ1.Вывести(ОбластьВторого);

Метод Вывести() добавляет область ниже последней заполненной строки. Если нужно вставить разрыв страницы между документами, вызовите Документ1.ВывестиГоризонтальныйРазделительСтраниц() перед выводом второй области.

Учтите ограничение: ширина колонок берётся из целевого документа. Если у второго документа колонки шире или уже, визуально они «подгонятся» под первый. Когда это критично, объединяйте документы в новый пустой табличный документ и задавайте ширину явно.

Порядок действий при выводе областей
  1. 1
    Сформируйте или загрузите оба табличных документа
  2. 2
    Получите область второго документа через ПолучитьОбласть() с указанием границ
  3. 3
    При необходимости добавьте разделитель страниц в первый документ
  4. 4
    Вызовите Документ1.Вывести(Область) для присоединения
  5. 5
    Проверьте высоту итогового документа и внешний вид колонок

Способ 2: построчное копирование значений

Когда форматирование не нужно — например, вы собираете сводную таблицу только из данных — проще пройти циклом по строкам второго документа и перенести содержимое ячеек. Этот способ полностью контролируется и не зависит от структуры областей.

Для НомерСтроки = 1 По Документ2.ВысотаТаблицы Цикл

НоваяСтрока = Документ1.ВысотаТаблицы + 1;

Для НомерКолонки = 1 По Документ2.ШиринаТаблицы Цикл

ИсходнаяЯчейка = Документ2.Область(НомерСтроки, НомерКолонки);

ЦелеваяЯчейка = Документ1.Область(НоваяСтрока, НомерКолонки);

ЦелеваяЯчейка.Текст = ИсходнаяЯчейка.Текст;

КонецЦикла;

КонецЦикла;

Обратите внимание: свойство Текст переносит отображаемую строку, а не реальное значение. Если в ячейках расшифровка или типизированные значения, их придётся переносить отдельно через параметры расшифровки. Для отчётов, где важна только печать, это обычно не требуется.

Минус подхода — теряются цвета, шрифты, объединённые ячейки и границы. Если итоговый документ пойдёт на печать клиенту, результат придётся оформлять заново.

Способ 3: горизонтальное соединение через Присоединить()

Когда документы нужно поставить рядом — например, сравнить план и факт в соседних колонках — используется метод Присоединить(). Он добавляет область справа от текущего содержимого.

ОбластьПраво = Документ2.ПолучитьОбласть(1, 1, Документ2.ВысотаТаблицы, Документ2.ШиринаТаблицы);

Документ1.Присоединить(ОбластьПраво);

Здесь критично совпадение высоты документов. Если у второго документа больше строк, «лишние» строки всё равно присоединятся, но смысловое соответствие строк нарушится. Перед присоединением проверьте ВысотаТаблицы обоих документов и при необходимости выровняйте их пустыми строками.

Сравнение способов объединения

Вывести() с областью

Сохраняет форматирование, подходит для печатных форм; ширина колонок берётся из целевого документа

Построчное копирование

Полный контроль над данными, но теряется оформление; подходит для сводных таблиц значений

Присоединить()

Горизонтальное объединение; требует одинаковой высоты документов

Объединение результатов нескольких отчётов

Частый практический сценарий — вывести в один документ несколько отчётов, построенных на СКД или компоновке. Для этого каждый отчёт формируется в отдельный табличный документ, а затем все они последовательно выводятся в итоговый.

Между отчётами полезно вставлять строку-заголовок с именем отчёта, иначе пользователь не поймёт, где заканчивается один блок и начинается другой. Заголовок можно вывести из заранее подготовленного макета с оформленной областью.

Если отчёты формируются долго, имеет смысл выводить промежуточные сообщения о прогрессе, а само объединение выполнять в конце — операция вывода областей быстрая и не является узким местом.

Типичные ошибки при соединении документов

Самая распространённая проблема — «съехавшие» колонки после вывода второго документа. Причина в том, что ширина колонок итогового документа определяется первым выведенным содержимым. Лечится явной установкой ширины колонок после объединения через свойство ШиринаКолонки области.

Вторая ошибка — потеря объединённых ячеек при построчном копировании. Цикл по отдельным ячейкам не переносит объединения, и заголовки, растянутые на несколько колонок, распадаются. Если объединения важны, используйте только вывод областей.

Третья ошибка — попытка соединить документы, один из которых ещё не сформирован или пуст. Вызов ПолучитьОбласть() у пустого документа вернёт пустую область, и вторая часть молча не появится. Всегда проверяйте ВысотаТаблицы больше нуля перед объединением.

Типичные ошибки
01
Вывод второго документа без проверки его высоты — пустая область молча пропускается
02
Построчное копирование документа с объединёнными ячейками — структура заголовков разваливается
03
Игнорирование ширины колонок — вторая часть выглядит сжатой или растянутой
04
Копирование только свойства Текст — теряются расшифровка и типизированные значения

Проверка результата перед сохранением и печатью

После объединения откройте итоговый документ и прокрутите его полностью. Проверьте границу стыка: не должно быть наложения строк, потери последней строки первого документа или первой строки второго. Особое внимание — итоговым строкам, они чаще всего оформлены объединениями.

Проверьте разрывы страниц в режиме предварительного просмотра печати. Если документы объединялись для печати, разделитель страниц между частями избавит от ситуации, когда шапка второй части окажется внизу страницы первой.

Наконец, убедитесь, что итоговый документ корректно сохраняется в нужный формат: Записать() с типом файла MXL, Excel или PDF. Иногда проблемы проявляются только при экспорте, например ширина колонок в Excel отличается от экранного вида.

Контрольные точки

Как проверить результат

Стык документов
Норма

Последняя строка первого и первая строка второго на месте

Тревожный признак

Строка потеряна или наложена на соседнюю

Ширина колонок
Норма

Колонки обеих частей одинаковой ширины и читаемы

Тревожный признак

Вторая часть сжата или обрезана

Объединённые ячейки
Норма

Заголовки растянуты на нужные колонки

Тревожный признак

Объединения пропали, текст в одной ячейке

Предпросмотр печати
Норма

Части разделены разрывом страницы

Тревожный признак

Шапка второй части внизу чужой страницы

Частые вопросы

Можно ли соединить больше двух табличных документов?

Да. Создайте пустой итоговый табличный документ и последовательно выводите в него области каждого источника методом Вывести(). Количество документов не ограничено, важно лишь контролировать общую высоту и память при очень больших таблицах.

Как сохранить ширину колонок второго документа?

Выводите оба документа в новый пустой табличный документ и после объединения задайте ширину колонок явно через свойство ШиринаКолонки области. Альтернатива — заранее привести макеты обоих документов к одинаковой ширине колонок.

Переносится ли расшифровка ячеек при объединении?

При выводе областей методом Вывести() оформление переносится, но расшифровка отчётов на СКД привязана к данным расшифровки отдельного объекта и в общем случае не объединяется автоматически. Для работающей расшифровки нужно отдельно объединять данные расшифровки.

Что делать, если документы имеют разное число колонок?

При вертикальном объединении это допустимо: вторая часть просто займёт столько колонок, сколько в ней есть. Но визуально таблица будет выглядеть неоднородно. Если нужна единая сетка, приведите документы к общему числу колонок до объединения.

Можно ли объединить табличные документы без программирования?

Встроенной команды объединения в интерфейсе нет. Можно вручную скопировать содержимое через буфер обмена между открытыми табличными документами, но форматирование и объединения перенесутся не всегда корректно. Для регулярной задачи надёжнее небольшая процедура на встроенном языке.

Итог

Что важно запомнить

Для полноценного объединения с сохранением оформления используйте Вывести() с областями, для данных без форматирования — построчное копирование, для размещения рядом — Присоединить(). Всегда проверяйте ширину колонок, наличие объединённых ячеек и стык документов перед печатью или сохранением.