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