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