Разработка и Конфигурация · 8 мин
Табличный документ в 1С: программное объединение ячеек
Как программно объединить ячейки в табличном документе 1С: метод Объединить, различие с группировкой, типовые ошибки, проверка результата и готовые примеры кода.
Объединение ячеек в табличном документе 1С требуется при формировании печатных форм и отчётов: общие заголовки на несколько колонок, шапки таблиц, строки-разделители. Программно это делается методом Объединить(), который вызывается у области табличного документа.
Ключевой момент, который часто упускают: метод вызывается не у отдельной ячейки, а у прямоугольной области. Поэтому сначала нужно правильно получить область — через Область() по адресу или по координатам строк и колонок, — и только потом объединять её. Ниже разобраны оба способа, ограничения метода и типовые ошибки.
Как работает метод Объединить()
Метод Объединить() объединяет все ячейки прямоугольной области в одну. Текст и оформление берутся из левой верхней ячейки области — содержимое остальных ячеек при объединении теряется. Это важно учитывать, если область заполнялась до объединения.
Обратная операция — метод Разъединить(), который возвращает области исходную структуру ячеек. Его удобно использовать при отладке макета, когда нужно проверить, как документ выглядит без объединений.
Объединение по адресу области
Самый компактный способ — указать адрес области в нотации «RстрокаCколонка». Пример: объединить ячейки второй строки с первой по пятую колонку для общего заголовка.
ТабДок = Новый ТабличныйДокумент;
ТабДок.Область("R2C1:R2C5").Объединить();
ТабДок.Область("R2C1").Текст = "Отчёт по продажам за период";
ТабДок.Область("R2C1").ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
Обратите внимание на порядок: сначала объединение, потом заполнение текста и оформления. Если заполнить ячейки до объединения, то текст из ячеек правее и ниже первой будет потерян. После объединения обращаться к результату нужно через левую верхнюю ячейку области.
Объединение по координатам строк и колонок
Когда строки и колонки вычисляются динамически — например, ширина заголовка зависит от числа колонок таблицы — удобнее использовать четыре числовых параметра: номер первой строки, первой колонки, последней строки, последней колонки.
КоличествоКолонок = 7;
НомерСтроки = 3;
ОбластьЗаголовка = ТабДок.Область(НомерСтроки, 1, НомерСтроки, КоличествоКолонок);
ОбластьЗаголовка.Объединить();
ОбластьЗаголовка.Текст = "Динамический заголовок";
ОбластьЗаголовка.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
ОбластьЗаголовка.Шрифт = Новый Шрифт(, , Истина);
Этот вариант предпочтителен в циклах и универсальных процедурах печати, где адрес в виде строки пришлось бы собирать конкатенацией. Кроме того, при объединении по вертикали (несколько строк в одной колонке) числовые координаты читаются проще.
- 1Определите границы объединяемого диапазона: строки и колонки
- 2Получите область через ТабДок.Область() — по адресу или по координатам
- 3Вызовите у области метод Объединить()
- 4Заполните текст и оформление через левую верхнюю ячейку области
- 5Выведите документ и проверьте результат в предпросмотре
Объединение ячеек в макете и при выводе областей
Если печатная форма строится по макету, объединение часто разумнее выполнить один раз в самом макете: выделить ячейки в редакторе и выбрать «Объединить» в контекстном меню. Тогда программно объединять ничего не нужно — область выводится уже готовой.
Программное объединение после Вывести() или Присоединить() оправдано, когда структура меняется динамически: например, строка-итог должна занимать столько колонок, сколько реально выведено. В этом случае область получают у уже выведенной части документа по координатам.
ТабДок.Вывести(ОбластьСтрока);
// объединяем первые три колонки последней выведенной строки
НомерСтроки = ТабДок.ВысотаТаблицы;
ТабДок.Область(НомерСтроки, 1, НомерСтроки, 3).Объединить();
ТабДок.Область(НомерСтроки, 1).Текст = "Итого:";
Частые ошибки и ограничения
Первая типичная ошибка — попытка объединить область, пересекающуюся с уже объединённой. Платформа либо выдаст ошибку, либо результат будет непредсказуемым. Перед повторным объединением вызывайте Разъединить().
Вторая ошибка — обращение к «внутренним» ячейкам объединённой области. После объединения существует только одна ячейка; попытка записать текст в соседнюю по координатам ячейку не даст видимого эффекта или приведёт к ошибке. Всегда работайте через левый верхний угол области.
Третья ошибка — путать объединение ячеек с группировкой строк. Методы НачатьГруппуСтрок() и ЗакончитьГруппуСтрок() создают сворачиваемые группы в интерактивном документе, но не объединяют ячейки. Для визуального слияния нужен именно Объединить().
Проверка результата
После формирования документа откройте предпросмотр и убедитесь, что объединённая ячейка занимает весь диапазон, текст не обрезан и выровнен корректно. Для длинных заголовков проверьте высоту строки: при необходимости установите АвтоВысотаСтроки или задайте высоту явно.
При выводе в файл (Excel, PDF) дополнительно откройте сохранённый файл: некоторые форматы по-разному обрабатывают объединённые ячейки, и визуальная проверка в самой 1С не всегда гарантирует идентичный результат в выгрузке.
Как проверить результат
Ячейка занимает весь заданный диапазон строк и колонок
Объединение смещено или захватывает лишние ячейки
Текст виден полностью, выравнивание соответствует заданному
Текст обрезан или отображается только часть
Объединение сохраняется в файле
Ячейки в файле разъединены или сдвинуты
Когда объединять программно, а когда в макете
Сравнение вариантов
Подходит для статичных форм с фиксированной структурой. Проще поддерживать, не требует кода. Ограничение: не работает при динамическом числе колонок.
Нужно при динамической структуре: переменное число колонок, условные заголовки, универсальные процедуры печати. Требует аккуратной работы с координатами.
Статичные части объединяются в макете, динамические — кодом после вывода областей. Оптимален для сложных печатных форм.
Правило простое: если положение и размер объединения известны на этапе разработки макета — делайте это в макете. Если границы вычисляются во время выполнения — используйте Объединить() по координатам. Смешивать подходы в одной форме допустимо и часто удобно.
Что важно запомнить
Ячейки объединяются методом Объединить() у прямоугольной области, полученной по адресу или координатам. Текст и оформление задаются через левую верхнюю ячейку после объединения. Статичные формы проще объединять в макете, динамические — программно.
Частые вопросы
Можно ли объединить ячейки по вертикали?
Да. Укажите область, охватывающую несколько строк в одной или нескольких колонках, например ТабДок.Область(2, 1, 5, 1).Объединить() — объединит ячейки первой колонки со второй по пятую строку.
Как разъединить ранее объединённые ячейки?
Вызовите метод Разъединить() у той же области, например: ТабДок.Область("R2C1:R2C5").Разъединить(). После этого ячейки снова доступны по отдельности.
Почему после объединения пропал текст части ячеек?
При объединении сохраняется содержимое только левой верхней ячейки области. Заполняйте текст уже после вызова Объединить(), обращаясь к левой верхней ячейке.
Сохраняется ли объединение при сохранении в Excel?
Как правило, да — объединённые ячейки корректно переносятся в формат Excel. Однако при сложных макетах с пересекающимися областями результат стоит проверить, открыв сохранённый файл.
Чем объединение отличается от группировки строк?
Объединение (Объединить()) визуально сливает ячейки в одну. Группировка (НачатьГруппуСтрок() / ЗакончитьГруппуСтрок()) создаёт сворачиваемые блоки строк в интерактивном документе и не меняет структуру ячеек.
Можно ли объединить ячейки в уже выведенной области макета?
Да. После Вывести() или Присоединить() получите область по координатам (например, через ТабДок.ВысотаТаблицы для последней строки) и вызовите Объединить().