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

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

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

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

Объединение ячеек в макете 1С — типовая задача при построении печатных форм, отчётов и табличных документов, выводимых программно. Шапка таблицы, итоговая строка на всю ширину, заголовок группы — всё это требует слияния нескольких ячеек в одну. Во встроенном языке 1С для этого существует метод Объединить() объекта «ОбластьЯчеекТабличногоДокумента».

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

Ниже разобраны синтаксис метода, способы адресации областей, объединение в макете конфигуратора и программно, а также типичные ошибки, из-за которых объединение «не срабатывает» или ломает структуру документа.

Как устроены области табличного документа

Табличный документ в 1С состоит из ячеек, адресуемых по номеру строки и колонки. Область — это прямоугольный диапазон ячеек, который можно получить методом Область(). Адресация поддерживается в двух форматах: «R1C1» (строка 1, колонка 1) и по имени области, если она задана в макете.

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

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

Метод Объединить: синтаксис и пример

Метод вызывается у объекта области и не принимает параметров. Типовой фрагмент кода выглядит так:

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

Макет = ПолучитьМакет("МакетОтчета");

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

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

// Объединяем ячейки строки 2 с колонки 1 по колонку 5

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

ОбластьОбъединения.Объединить();

ОбластьОбъединения.Текст = "Отчет за период";

ОбластьОбъединения.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;

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

Для вертикального объединения синтаксис аналогичен, меняются только координаты: ТабДок.Область("R3C2:R6C2").Объединить() объединит четыре ячейки второй колонки по вертикали. Такое часто нужно при выводе иерархических данных, где значение группы должно охватывать несколько строк детализации.

bsl
Область = ТабДок.Область("R2C1:R2C5");
Область.Объединить();
Область.Текст = "Итого по документу";

Объединение ячеек в макете конфигуратора

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

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

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

Макет или код

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

Подходит для статичных форм; наглядно, не требует кода, но не реагирует на изменение данных

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

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

Именованные области

Компромисс: имена задаются в макете, а объединение и заполнение выполняются в коде по имени

Динамическое объединение при неизвестном числе колонок

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

// После вывода шапки известно число колонок

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

ПоследняяКолонка = КоличествоКолонок; // вычислено ранее

АдресОбласти = "R" + НомерСтроки + "C1:R" + НомерСтроки + "C" + ПоследняяКолонка;

ОбластьЗаголовок = ТабДок.Область(АдресОбласти);

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

ОбластьЗаголовок.Текст = ЗаголовокОтчета;

Альтернатива ручной сборке адреса — использовать числовые параметры метода Область(НомерПервойСтроки, НомерПервойКолонки, НомерПоследнейСтроки, НомерПоследнейКолонки). Этот вариант читается легче и меньше подвержен ошибкам конкатенации строк.

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

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

Типичные ошибки и их причины

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

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

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

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

Проверка результата и ограничения

После формирования откройте табличный документ и визуально проверьте: объединённая ячейка занимает весь задуманный диапазон, текст в ней отображается целиком, границы соседних ячеек не «съехали». Дополнительно полезно сохранить документ в Excel и убедиться, что объединение корректно переносится — метод Записать() с типом файла XLSX сохраняет объединённые ячейки.

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

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

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

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

Внешний вид на экране
Норма

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

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

Текст обрезан, границы соседних ячеек смещены

Экспорт в Excel
Норма

Объединение сохраняется после записи в XLSX

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

Ячейки разъединены или структура таблицы искажена

Повторное формирование
Норма

Документ формируется без ошибок при любом наборе данных

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

Ошибка пересечения областей при определённых данных

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

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

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

Итог

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

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

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

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

Да. Метод Объединить() работает с любым прямоугольным диапазоном, например R2C1:R5C3 — это блок из четырёх строк и трёх колонок. Ограничение одно: область не должна пересекаться с уже объединёнными ячейками.

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

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

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

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

Сохранится ли объединение при выгрузке в Excel?

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

Можно ли объединить ячейки в отчёте на СКД?

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

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

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