Почему не работает вертикальное объединение ячеек макета в расширении 1С и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При доработке типовых печатных форм в 1С (например, формы ОС-6 в конфигурации «Бухгалтерия предприятия 3.0») разработчики часто сталкиваются со странным поведением платформы. В режиме Конфигуратора или при предварительном просмотре макета все выглядит идеально, но при выводе результирующего табличного документа в режиме Предприятия вертикально объединенные ячейки «разваливаются» и не объединяются. Рассмотрим подробнее, почему возникает эта проблема и разберем по шагам, как ее надежно решить.

Суть проблемы: конфликт макетов в расширении

Проанализируем классическую ситуацию. У нас есть задача доработать печатную форму, и мы, следуя лучшим практикам, заимствуем типовой макет в расширение. При этом имя макета в расширении совпадает с именем макета в основной конфигурации.

Именно здесь и кроется корень проблемы. В платформе 1С существует специфика работы механизма перекрытия объектов и менеджера печати. Если в расширение заимствован макет с тем же именем, платформа из-за агрессивного кэширования или особенностей вызова через подсистему БСП (например, УправлениеПечатью) может частично обращаться к оригинальному макету. В результате структура колонок и строк смешивается, и вертикальное объединение игнорируется.

Решение проблемы: создание уникального макета

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

  1. Не используйте заимствованный макет напрямую. Создайте в расширении абсолютно новый макет.
  2. Дайте новому макету уникальное имя. Например, если типовой макет назывался ПФ_MXL_ОС6, назовите новый макет Расш1_ПФ_MXL_ОС6_Доработанный.
  3. Скопируйте все содержимое (или нужные области) из типового макета в ваш новый макет и внесите необходимые доработки.
  4. В модуле менеджера объекта или общем модуле, где формируется табличный документ, переопределите получение макета.

Посмотрим на пример того, как это можно реализовать в коде через расширение (с использованием аннотации &Вместо или &После):


&Вместо("СформироватьПечатнуюФормуОС6")
Процедура Расш1_СформироватьПечатнуюФормуОС6(МассивОбъектов, ОбъектыПечати, ТабличныйДокумент)
    // Получаем наш уникальный макет из расширения
    Макет = Справочники.ОсновныеСредства.ПолучитьМакет("Расш1_ПФ_MXL_ОС6_Доработанный");
    
    // Получаем область из нового макета
    ШапкаРаздела5Б = Макет.ПолучитьОбласть("ШапкаРаздела5Б");
    
    // Заполняем параметры области
    ШапкаРаздела5Б.Параметры.Организация = "ООО Ромашка";
    
    // Выводим область в результирующий документ
    ТабличныйДокумент.Вывести(ШапкаРаздела5Б);
КонецПроцедуры

Этот простой шаг — переименование и создание макета с нуля в расширении — позволяет обойти 90% проблем с «разваливающейся» версткой, так как платформа 1С перестает путать кэшированные данные оригинала и вашей доработки.

Технические правила корректного вывода объединенных ячеек

Если после переименования макета проблема сохраняется, проанализируем технические нюансы работы с вертикальным объединением. Вертикальное объединение в динамических таблицах 1С работает корректно только при строгом соблюдении нескольких правил:

  1. Вывод области целиком: Если вы используете метод Вывести(), платформа должна получить за один раз всю область, в которую входит объединенная группа строк. Если вывести только часть строк, объединение не сработает.
  2. Осторожность с методом Присоединить: Если для добавления колонок справа применяется метод Присоединить(), и в этих колонках есть вертикальные объединения, высота присоединяемой области обязана совпадать с высотой текущей строки в табличном документе. В противном случае платформа может проигнорировать объединение.
  3. Параметр «Заполнение»: Если у объединенной ячейки установлен параметр Заполнение, убедитесь, что при программном заполнении обрабатываются все строки, входящие в объединение.

Особенности сложных форм (на примере ОС-6)

Форма Инвентарной карточки учета ОС (ОС-6) исторически является одной из самых сложных для редактирования в 1С. В ней используется очень мелкая сетка колонок, чтобы точно позиционировать элементы. Выясним причину частых сбоев в таких формах:

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

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

Как правильно отлаживать макеты

Чтобы не тратить часы на поиск ошибки в Предприятии, используйте практический совет: при проверке всегда применяйте метод ТабДок.Показать(). Добавьте его прямо в код формирования печатной формы (во временных целях отладки). Это позволит вам увидеть сырой результат вывода до того, как табличный документ попадет в стандартные механизмы вывода БСП, которые могут накладывать дополнительные ограничения, фиксации областей или колонтитулы.

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

← На главную