При формировании печатных форм и отчетов в 1С часто возникает необходимость вывести в одном табличном документе две совершенно разные таблицы или блоки данных. Если попытаться изменить значение свойства ШиринаКолонки для ячейки в отдельной строке, платформа по умолчанию меняет ширину этой колонки по всей высоте документа. Выясним, почему так происходит и как программно или интерактивно настроить независимые размеры колонок для разных строк.
По умолчанию табличный документ 1С использует единую (сквозную) сетку колонок для всего документа. Это означает, что первая колонка имеет фиксированную ширину от первой до последней строки. Если изменить ширину ячейки в произвольном месте, меняется весь вертикальный столбец.
Чтобы разбить единую сетку и сделать размеры колонок в конкретной группе строк независимыми от остальных, табличному документу требуется указать собственный формат строк.
Разберем по шагам, как программно разделить сетку табличного документа с помощью метода СоздатьФорматСтрок().
Данный метод вызывается у объекта ОбластьТабличногоДокумента, выделяющего строки целиком. После его вызова для указанной области создается отдельная сетка колонок, которую можно свободно изменять, не влияя на предыдущие и последующие строки.
Рассмотрим пример кода, демонстрирующий этот подход:
// Перед добавлением новых данных запоминаем номер строки, с которой начинается новый блок
НачалоНовогоФорматаСтрок = ТабДокумент.ВысотаТаблицы + 1;
// Выполняем вывод нужных данных в табличный документ...
// Выделяем область полученных строк целиком и создаем для них собственный формат строк
ТабДокумент.Область(НачалоНовогоФорматаСтрок, , ТабДокумент.ВысотаТаблицы, ).СоздатьФорматСтрок();
// Задаем ширину колонок для первой строки нового формата (изменения применятся ко всему блоку)
ТабДокумент.Область(НачалоНовогоФорматаСтрок, 1).ШиринаКолонки = 15;
ТабДокумент.Область(НачалоНовогоФорматаСтрок, 2).ШиринаКолонки = 10;
ТабДокумент.Область(НачалоНовогоФорматаСтрок, 3).ШиринаКолонки = 35;
Важные детали алгоритма:
ВысотаТаблицы.Область() выбираются строки целиком (второй и четвертый параметры области оставляем пустыми).СоздатьФорматСтрок().ШиринаКолонки для каждой ячейки первой строки нового блока.Проанализируем другие популярные техники построения сложных макетов с разной шириной колонок:
Разрабатывается общая детальная сетка колонок с мелким шагом. В каждой конкретной строке ячейки объединяются так, чтобы сформировать визуально нужную ширину столбцов. Этот метод универсален и подходит для ситуаций, когда макет проектируется вручную в Конфигураторе без написания сложного кода.
В основной табличный документ добавляется графический объект Рисунок, которому назначается тип ТипРисункаТабличногоДокумента.ТабличныйДокумент. Внутри этого рисунка создается автономная таблица со своей независимой сеткой колонок, не влияющая на основной документ.
При оформлении макета в Конфигураторе или в режиме «1С:Предприятие» можно выделить нужные строки целиком за их заголовки слева и изменить ширину колонки мышью (или с зажатой клавишей Ctrl). Платформа автоматически предложит создать новый формат строк.
Посмотрим на технические особенности и ограничения, о которых важно помнить при работе с форматами строк:
Вывести(), Присоединить()) платформа может сбрасывать индивидуальные форматы. Поэтому выводить области с разным форматом необходимо последовательно, применяя форматирование по мере формирования документа.СоздатьФорматСтрок() и назначение ширин необходимо выполнять в коде постобработки готового результата.