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

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

Табличный документ в 1С: программное объединение ячеек

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

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

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

Как работает метод Объединить()

Метод Объединить() объединяет все ячейки прямоугольной области в одну. Текст и оформление берутся из левой верхней ячейки области — содержимое остальных ячеек при объединении теряется. Это важно учитывать, если область заполнялась до объединения.

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

Объединение по адресу области

Самый компактный способ — указать адрес области в нотации «RстрокаCколонка». Пример: объединить ячейки второй строки с первой по пятую колонку для общего заголовка.

ТабДок = Новый ТабличныйДокумент;

ТабДок.Область("R2C1:R2C5").Объединить();

ТабДок.Область("R2C1").Текст = "Отчёт по продажам за период";

ТабДок.Область("R2C1").ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;

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

Объединение по координатам строк и колонок

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

КоличествоКолонок = 7;

НомерСтроки = 3;

ОбластьЗаголовка = ТабДок.Область(НомерСтроки, 1, НомерСтроки, КоличествоКолонок);

ОбластьЗаголовка.Объединить();

ОбластьЗаголовка.Текст = "Динамический заголовок";

ОбластьЗаголовка.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;

ОбластьЗаголовка.Шрифт = Новый Шрифт(, , Истина);

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

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

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

Если печатная форма строится по макету, объединение часто разумнее выполнить один раз в самом макете: выделить ячейки в редакторе и выбрать «Объединить» в контекстном меню. Тогда программно объединять ничего не нужно — область выводится уже готовой.

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

ТабДок.Вывести(ОбластьСтрока);

// объединяем первые три колонки последней выведенной строки

НомерСтроки = ТабДок.ВысотаТаблицы;

ТабДок.Область(НомерСтроки, 1, НомерСтроки, 3).Объединить();

ТабДок.Область(НомерСтроки, 1).Текст = "Итого:";

Частые ошибки и ограничения

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

Вторая ошибка — обращение к «внутренним» ячейкам объединённой области. После объединения существует только одна ячейка; попытка записать текст в соседнюю по координатам ячейку не даст видимого эффекта или приведёт к ошибке. Всегда работайте через левый верхний угол области.

Третья ошибка — путать объединение ячеек с группировкой строк. Методы НачатьГруппуСтрок() и ЗакончитьГруппуСтрок() создают сворачиваемые группы в интерактивном документе, но не объединяют ячейки. Для визуального слияния нужен именно Объединить().

Типичные ошибки
01
Заполнение всех ячеек до объединения — текст правых и нижних ячеек теряется
02
Объединение области, пересекающейся с уже объединённой — ошибка или неверный результат
03
Обращение к внутренним ячейкам после объединения — изменения не видны
04
Смешение объединения ячеек с группировкой строк — это разные механизмы

Проверка результата

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

При выводе в файл (Excel, PDF) дополнительно откройте сохранённый файл: некоторые форматы по-разному обрабатывают объединённые ячейки, и визуальная проверка в самой 1С не всегда гарантирует идентичный результат в выгрузке.

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

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

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

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

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

Объединение смещено или захватывает лишние ячейки

Текст в объединённой ячейке
Норма

Текст виден полностью, выравнивание соответствует заданному

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

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

Выгрузка в Excel
Норма

Объединение сохраняется в файле

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

Ячейки в файле разъединены или сдвинуты

Когда объединять программно, а когда в макете

Сравнение вариантов

Объединение в макете

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

Программное объединение

Нужно при динамической структуре: переменное число колонок, условные заголовки, универсальные процедуры печати. Требует аккуратной работы с координатами.

Смешанный подход

Статичные части объединяются в макете, динамические — кодом после вывода областей. Оптимален для сложных печатных форм.

Правило простое: если положение и размер объединения известны на этапе разработки макета — делайте это в макете. Если границы вычисляются во время выполнения — используйте Объединить() по координатам. Смешивать подходы в одной форме допустимо и часто удобно.

Итог

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

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

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

Можно ли объединить ячейки по вертикали?

Да. Укажите область, охватывающую несколько строк в одной или нескольких колонках, например ТабДок.Область(2, 1, 5, 1).Объединить() — объединит ячейки первой колонки со второй по пятую строку.

Как разъединить ранее объединённые ячейки?

Вызовите метод Разъединить() у той же области, например: ТабДок.Область("R2C1:R2C5").Разъединить(). После этого ячейки снова доступны по отдельности.

Почему после объединения пропал текст части ячеек?

При объединении сохраняется содержимое только левой верхней ячейки области. Заполняйте текст уже после вызова Объединить(), обращаясь к левой верхней ячейке.

Сохраняется ли объединение при сохранении в Excel?

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

Чем объединение отличается от группировки строк?

Объединение (Объединить()) визуально сливает ячейки в одну. Группировка (НачатьГруппуСтрок() / ЗакончитьГруппуСтрок()) создаёт сворачиваемые блоки строк в интерактивном документе и не меняет структуру ячеек.

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

Да. После Вывести() или Присоединить() получите область по координатам (например, через ТабДок.ВысотаТаблицы для последней строки) и вызовите Объединить().