При разработке отчетов с использованием объекта ПостроительОтчета программисты часто сталкиваются с тем, что стандартный вывод данных выглядит «сплошным полотном». Без четкого разделения строк и колонок линиями пользователю становится трудно ориентироваться в больших массивах информации. Рассмотрим подробно, как решить задачу программной отрисовки границ ячеек и разберем сопутствующие технические нюансы.
Самый быстрый и правильный способ изменить внешний вид отчета — это использование встроенных макетов оформления. Объект ПостроительОтчета имеет свойство МакетОформления, которое определяет визуальный стиль таблицы: цвета, шрифты и, что самое важное в нашем случае, линии сетки. Рассмотрим пример кода, который устанавливает классический стиль с рамками вокруг каждой ячейки:
// Установка стандартного оформления "Зима", где есть четкие границы
ПостроительОтчета.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Зима);
ПостроительОтчета.Выполнить();
ПостроительОтчета.Вывести(ЭлементыФормы.ПолеТабличногоДокумента);
Проанализируем ситуацию: метод ПолучитьМакетОформления принимает в качестве параметра системное перечисление СтандартноеОформление. Наиболее подходящими для «черно-белой» печати с четкими границами являются варианты Классика, Зима или Арктика.
Часто при реализации вышеуказанного кода возникает ошибка: «Процедура или функция с указанным именем не определена (ПолучитьМакетОформления)». Выясним причину этой проблемы. Объект ПостроительОтчета и методы работы с макетами оформления относятся к интерфейсным механизмам, которые полноценно поддерживаются только в толстом клиенте. Если ваш код выполняется в контексте тонкого клиента или на стороне сервера (в управляемом приложении), данная функция будет недоступна.
Рекомендация: Если вы работаете в управляемом приложении 8.3, рекомендуется переходить на Систему компоновки данных (СКД), где управление границами реализовано через условное оформление и доступно на любом типе клиента. Если же необходимо использовать именно ПостроительОтчета в рамках поддержки старого кода, убедитесь, что вызовы оформления происходят в процедурах, помеченных директивой &НаКлиенте в толстом клиенте или используйте альтернативные методы.
Если стандартные макеты оформления не удовлетворяют требованиям заказчика или нужно нарисовать линии только в определенных местах, мы можем прибегнуть к постобработке ТабличногоДокумента. После того как ПостроительОтчета вывел данные, мы можем программно пройтись по всем ячейкам и установить границы. Посмотрим на пример реализации:
// Выводим отчет в табличный документ
ТабДок = Новый ТабличныйДокумент;
ПостроительОтчета.Вывести(ТабДок);
// Определяем область, которую нужно обвести рамками (все заполненные ячейки)
ОбластьВсего = ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы);
// Устанавливаем сплошную тонкую линию для всех сторон каждой ячейки
Линия = Новый Линия(ТипЛинииСоединенияТабличногоДокумента.Сплошная, 1);
ОбластьВсего.ГраницаСверху = Линия;
ОбластьВсего.ГраницаСнизу = Линия;
ОбластьВсего.ГраницаСлева = Линия;
ОбластьВсего.ГраницаСправа = Линия;
Этот метод является универсальным, так как он не зависит от настроек самого построителя и гарантирует, что границы будут отображаться при печати. Здесь мы используем объект Линия, где первый параметр — это тип (сплошная, пунктир и т.д.), а второй — толщина линии.
Еще один профессиональный подход — создание собственного макета оформления. Вы можете нарисовать в редакторе 1С (файл .mxl) образец того, как должна выглядеть шапка, группировка и детальные записи, заранее установив там все необходимые границы. После этого данный макет назначается построителю:
// Назначение собственного макета
МакетИзФайла = ПолучитьМакет("МойМакетОформления");
ПостроительОтчета.Макет = МакетИзФайла;
// Построитель будет использовать оформление ячеек из этого макета
Разберем по шагам, как это работает: ПостроительОтчета при генерации ищет области с именами Шапка, Детали, Подвал и копирует их оформление в итоговый документ. Если в вашем макете-шаблоне ячейки этих областей обведены рамками, то и в готовом отчете они появятся автоматически.
Многие типовые конфигурации (например, УТ 10.3 или УПП 1.3) используют механизм «Универсальный отчет», который надстроен над Построителем отчета. В этих конфигурациях логика отрисовки границ часто скрыта в общих модулях. Чтобы добиться линий «как в шапке», можно позаимствовать настройки из модуля УниверсальныйОтчет. Обычно там используется принудительная установка свойств для области каждой строки в цикле вывода.
Важным нюансом является свойство ЗаполнениеРасшифровки. Если вы настраиваете границы вручную, убедитесь, что установлено значение ПозицииДляРасшифровки.Ячейка. Это предотвратит «расползание» границ при попытке пользователя нажать на ячейку для детализации данных.
Резюмируем: Для быстрого результата используйте СтандартноеОформление.Зима. Для гибкой настройки — программный перебор областей ТабличногоДокумента или создание собственного макета MXL. Помните о контексте выполнения кода, чтобы избежать ошибок в тонком клиенте.