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

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

Как объединить ячейки в табличном документе 1С

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

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

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

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

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

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

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

Такой способ идеален для статичных элементов печатных форм: заголовков отчёта, шапок табличных частей с двухуровневыми колонками, строк «Итого», подписей ответственных лиц. Изменение выполняется один раз и не требует поддержки в коде.

Объединение ячеек в макете
  1. 1
    Откройте макет табличного документа в конфигураторе
  2. 2
    Выделите мышью прямоугольный диапазон ячеек
  3. 3
    Нажмите правую кнопку мыши и выберите «Объединить» или используйте меню «Таблица» → «Объединить»
  4. 4
    Введите текст — он разместится во всей объединённой ячейке
  5. 5
    Сохраните макет и проверьте вывод печатной формы

Программное объединение методом Объединить()

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

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

bsl
// Вариант 1: по координатам строк и колонок
Область = ТабДок.Область(2, 1, 2, 5); // строка 2, колонки с 1 по 5
Область.Объединить();

// Вариант 2: по строковому адресу
Область = ТабДок.Область("R2C1:R2C5");
Область.Объединить();

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

bsl
НомерСтроки = ТабДок.ВысотаТаблицы + 1;
ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));
// объединяем колонки 2–4 в выведенной строке
Область = ТабДок.Область(НомерСтроки, 2, НомерСтроки, 4);
Область.Объединить();

Объединение по вертикали и сложные шапки

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

Можно объединять и прямоугольные блоки из нескольких строк и колонок одновременно. Так строят сложные шапки: верхний уровень объединён по горизонтали на ширину группы колонок, а отдельные ячейки — по вертикали на высоту двух строк заголовка. Главное правило остаётся тем же: область должна быть прямоугольной, без «ступенек».

Что происходит с содержимым и форматированием

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

Форматирование (шрифт, цвет, рамки, выравнивание) также наследуется от левой верхней ячейки. Если после объединения вид ячейки отличается от ожидаемого, проверьте оформление именно этой ячейки в макете. Для вертикального центрирования текста в высокой объединённой ячейке задайте свойство «Вертикальное положение» — «Центр».

Как отменить объединение и проверить результат

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

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

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

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

Выделение ячейки в макете
Норма

Диапазон выделяется как единый блок

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

Ячейки выделяются по отдельности — объединение не выполнено

Текст после объединения
Норма

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

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

Текст пропал — он был в другой ячейке диапазона

Печатная форма на печати
Норма

Границы и текст выглядят как в макете

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

Разрывы рамок или обрезанный текст — проверьте рамки и размещение

Типичные ошибки при объединении ячеек

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

Типичные ошибки
01
Объединение после заполнения всех ячеек диапазона — текст из соседних ячеек теряется; сначала объединяйте, потом заполняйте
02
Неверные координаты строки после Вывести() — объединяется не та строка; запоминайте ВысотаТаблицы до вывода области
03
Попытка объединить непрямоугольный диапазон — метод не сработает как ожидается; перестройте макет
04
Ожидание, что тексты ячеек склеятся, как в Excel — платформа так не делает, переносите значения вручную
05
Оформление задаётся не той ячейке — рамки и цвет наследуются от левой верхней ячейки диапазона

Когда объединение не нужно: альтернативы

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

Маршрут решения

Как выбрать действие

Структура формы фиксирована и известна заранееОбъедините ячейки в макете конфигуратора — без кода
Количество объединяемых колонок зависит от данныхОбъединяйте программно методом Объединить() после вывода области
Нужно склеить тексты нескольких ячеекСформируйте строку в коде и запишите её в одну ячейку — объединение тексты не склеивает
Нужно убрать повторы значений в строках отчётаРассмотрите группировки СКД вместо вертикального объединения

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

Итог

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

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

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

Можно ли объединить ячейки в уже сформированном табличном документе в режиме 1С:Предприятие?

Да, если документ открыт для редактирования: выделите диапазон и выберите «Объединить» в контекстном меню или меню «Таблица». Если документ открыт в режиме «Только просмотр», сначала снимите этот режим через меню «Таблица» → «Вид» → «Только просмотр».

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

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

Как объединить ячейки в макете СКД?

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

Как программно узнать, объединена ли ячейка?

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

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

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

Чем Объединить() отличается от свойства «Объединение» в палитре свойств?

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