При разработке печатных форм и отчетов в платформе 1С:Предприятие разработчики часто сталкиваются с ситуацией, когда стандартной сетки колонок недостаточно. Например, в шапке документа требуется одна ширина колонок, в табличной части — совершенно другая, а в подвале — третья. Если просто изменить ширину колонки, она по умолчанию меняется для всего табличного документа по вертикали.
Разберем подробно, за счет какого механизма платформы реализуется независимая ширина колонок для разных строк, как это настроить в Конфигураторе и как управлять этим процессом программно.
По умолчанию объект ТабличныйДокумент имеет единую сетку: ширина колонок распространяется сверху донизу на весь лист. Чтобы разорвать эту зависимость и задать индивидуальную ширину колонок для конкретной строки или группы строк, в платформе предусмотрен специальный механизм — Формат строк.
Когда для строки создается собственный формат, она получает автономную разметку колонок, никак не связанную с колонками выше или ниже.
Рассмотрим по шагам, как разделить ширину колонок при редактировании макета в Конфигураторе или в режиме «1С:Предприятие»:
Таблица → Формат → Создать формат строк (или вызовем контекстное меню правой кнопкой мыши по номерам строк и выберем соответствующий пункт).Удалить формат строк.Проанализируем ситуацию, когда печатная форма или отчет формируются полностью программно без использования заранее размеченного макета или когда требуется динамически разбить сетку колонок в коде.
Для этих целей у объекта ОбластьЯчеекТабличногоДокумента предусмотрен метод СоздатьФорматСтрок(). Разберем пример кода:
// Создаем результирующий табличный документ
ТабДокумент = Новый ТабличныйДокумент;
// 1. Формируем шапку со стандартной сеткой
ТабДокумент.Область(1, 1).Текст = "Шапка документа (общая сетка)";
ТабДокумент.Область(1, 1).ШиринаКолонки = 30;
// 2. Выделяем диапазон строк под табличную часть (строки 3-10) целиком
ОбластьСетки = ТабДокумент.Область(3, , 10, );
// Создаем для этого диапазона независимый формат строк
ОбластьСетки.СоздатьФорматСтрок();
// 3. Задаем индивидуальную ширину колонок только для новой области строк
ТабДокумент.Область(3, 1).ШиринаКолонки = 10;
ТабДокумент.Область(3, 2).ШиринаКолонки = 50;
ТабДокумент.Область(3, 3).ШиринаКолонки = 15;
// Заполняем данными
ТабДокумент.Область(3, 1).Текст = "№";
ТабДокумент.Область(3, 2).Текст = "Номенклатура";
ТабДокумент.Область(3, 3).Текст = "Сумма";
Посмотрим на важный нюанс: метод СоздатьФорматСтрок() применяется только к области, которая представляет собой строки целиком. Если попытаться вызвать метод для прямоугольной области вида ТабДокумент.Область(1, 1, 5, 3), платформа сгенерирует исключение.
Разберем несколько важных аспектов, о которых необходимо помнить разработчику при проектировании макетов с независимыми форматами строк:
.xls и .xlsx не поддерживают независимую ширину колонок для разных строк. При сохранении такого документа 1С разбивает колонки на множество мелких подколонок и объединяет их ячейки. Это усложняет последующую работу пользователей с таблицей в Excel (затрудняется сортировка, фильтрация и расчет по формулам).Объединить().