Как сохранить ширину колонок из разных макетов при выводе в один табличный документ 1С?

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

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

Рассмотрим подробно причины такого поведения платформы 1С:Предприятие и разберем проверенные способы решения этой задачи.

Выясним причину сброса ширины колонок

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

Чтобы каждая область табличного документа сохраняла свою собственную ширину колонок, необходимо явно объявить для этих строк отдельный формат строк.

Способ 1. Настройка формата строк в Конфигураторе

Самый простой и эффективный способ — настроить независимый формат строк непосредственно в макете через Конфигуратор. В этом случае не потребуется писать дополнительный код для ручной установки ширины колонок.

Проанализируем по шагам, как это сделать:

  1. Откройте необходимый макет (например, Макет2) в редакторе макетов.
  2. Выделите целиком те строки, которые должны иметь уникальную ширину колонок (нажав на панели с номерами строк слева).
  3. Зажмите клавишу Ctrl и измените ширину любой колонки мышью внутри выделенных строк.
  4. Платформа 1С отобразит системный диалог с вопросом: «Сохранить новый формат строк?». Нажмите кнопку «Да».
  5. Отрегулируйте ширину колонок для выделенной области так, как это требуется.

После сохранения макета вызов стандартного кода вывода автоматически сохранит заданную ширину колонок:


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

Макет1 = ПолучитьМакет("Макет1");
Область1 = Макет1.ПолучитьОбласть("Шапка");
ТабДок.Вывести(Область1);

Макет2 = ПолучитьМакет("Макет2");
Область2 = Макет2.ПолучитьОбласть("СтрокаТаблицы");
ТабДок.Вывести(Область2);

Способ 2. Программное создание формата строк

Если макет формируется динамически или нет возможности изменить его структуру в Конфигураторе, можно воспользоваться программным методом СоздатьФорматСтрок() у объекта ОбластьЯчеекТабличногоДокумента.

Разберем алгоритм решения по шагам:

  1. Фиксируем номер начальной строки перед выводом новой области.
  2. Выводим область в результирующий табличный документ.
  3. Получаем область выведенных строк и вызываем для нее метод СоздатьФорматСтрок().
  4. Задаем ширину колонок для новой области программно.

Посмотрим на пример программной реализации:


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

// Выводим первую область
Макет1 = ПолучитьМакет("Макет1");
Область1 = Макет1.ПолучитьОбласть("Шапка");
ТабДок.Вывести(Область1);

// Выводим вторую область с другим форматом колонок
Макет2 = ПолучитьМакет("Макет2");
Область2 = Макет2.ПолучитьОбласть("Таблица");

// Запоминаем начальную строку для нового блока
СтартСтрока = ТабДок.ВысотаТаблицы + 1;

// Выводим область
ТабДок.Вывести(Область2);

// Определяем диапазон добавленных строк и создаем для них новый формат
НоваяОбласть = ТабДок.Область(СтартСтрока, , ТабДок.ВысотаТаблицы, );
НоваяОбласть.СоздатьФорматСтрок();

// Настраиваем ширину колонок для нового формата строк
ТабДок.Область(СтартСтрока, 1).ШиринаКолонки = 15;
ТабДок.Область(СтартСтрока, 2).ШиринаКолонки = 40;
ТабДок.Область(СтартСтрока, 3).ШиринаКолонки = 10;

Альтернативный вариант: Использование «микроколонок»

Существует еще один подход — создание в макете большого количества очень узких колонок одинаковой ширины (например, ШиринаКолонки = 1) и последующее объединение ячеек под нужную ширину текстовых блоков. Однако данный метод имеет существенные недостатки: он усложняет верстку макета и значительно замедляет скорость генерации результирующего документа при выводе больших объемов данных.

Ограничения и особенности работы с разными форматами строк

При использовании различных форматов строк в одном табличном документе следует учитывать важные платформенные особенности:

Экспорт в Microsoft Excel: Если результирующий табличный документ содержит строки с разной шириной колонок, при сохранении в форматы .xls или .xlsx платформе приходится приводить все строки к единой сетке. Из-за этого визуальное оформление документа в Excel может исказиться.

Альтернативные форматы для сохранения: Для точного сохранения внешнего вида и верстки печатной формы при выгрузке рекомендуется использовать форматы PDF, HTML или XPS, которые сохраняют произвольный формат строк без искажений.

Выделение и копирование: В документе с несколькими форматами строк пользователь не сможет выделить произвольную прямоугольную область мышью, если она пересекает границу между двумя разными форматами строк. Выделение в таких зонах возможно только строками целиком.

← На главную