При разработке отчетов и печатных форм в среде 1С:Предприятие 8 (особенно на обычных формах, например, в конфигурации «Управление торговлей 10.3») программисты часто сталкиваются с эстетической проблемой: сформированный отчет «прижимается» вплотную к верхней границе формы или панели инструментов. Попытки сделать аккуратный и небольшой отступ стандартными методами автооформления часто приводят к тому, что пустые строки получаются слишком высокими, а настройки оформления сбрасывают ручные изменения разметки.
В этой статье мы подробно рассмотрим причины такого поведения платформы и разберем четыре практических способа создания аккуратного верхнего отступа в табличном документе, включая наиболее гибкое решение через кастомизацию макета построителя отчетов.
Когда мы пытаемся вывести пустую строку над таблицей для создания отступа, платформа автоматически рассчитывает её высоту. По умолчанию высота строки в табличном документе определяется размером шрифта, установленного для ячеек этой строки. Если в макете или оформлении по умолчанию используется стандартный шрифт (например, Arial размером 10pt), пустая строка визуально займет слишком много места на экране — порядка 15–20 пикселей, что эквивалентно полноценной строке с текстом. Нам же зачастую нужен тонкий, аккуратный отступ шириной в 3–5 пикселей.
Выясним, какими инструментами мы располагаем для решения этой задачи.
---
Если мы выводим отчет вручную или формируем макет программно, мы можем принудительно ограничить высоту строки, предназначенной для отступа. Для этого у объекта ОбластьЯчеекТабличногоДокумента предусмотрено два важных свойства:
ВысотаСтроки — определяет фиксированную высоту строки в пунктах.АвтоВысотаСтроки — булево свойство, определяющее, будет ли платформа автоматически рассчитывать высоту строки по содержимому.Рассмотрим пример кода, который выводит пустую строку-разделитель и принудительно делает её узкой:
// Получаем область пустой строки из нашего макета
ОбластьОтступа = Макет.ПолучитьОбласть("ПустаяСтрока");
ТабДок.Вывести(ОбластьОтступа);
// Находим выведенную область в результирующем табличном документе
// Например, это первая строка табличного документа (R1)
СтрокаОтступа = ТабДок.Область("R1");
// Устанавливаем фиксированную высоту в 5 пунктов
СтрокаОтступа.ВысотаСтроки = 5;
// При установке значения ВысотаСтроки отличного от 0,
// свойство АвтоВысотаСтроки автоматически принимает значение Ложь.
Этот метод отлично работает при построчном выводе документа вручную, однако он может не сработать или сброситься, если вывод таблицы целиком делегирован объекту ПостроительОтчета с включенным стандартным оформлением.
---
Среди разработчиков существует заблуждение, что метод ПостроительОтчета.Вывести() управляет геометрическим положением таблицы на форме. Это не так. Метод лишь заполняет данными объект ПолеТабличногоДокумента, но не меняет его физические границы.
Если нам нужен отступ на экране (в самой форме отчета), самым простым и правильным решением будет физическое перемещение элемента управления ниже. Мы можем сделать это интерактивно в конфигураторе при проектировании формы, просто перетащив элемент ПолеТабличногоДокумента на несколько пикселей вниз и разместив над ним пустую область или декоративную панель.
Также мы можем сделать это программно при открытии формы:
Процедура ПриОткрытии()
// Сдвигаем поле табличного документа на 12 пикселей вниз от верхней границы формы
ЭлементыФормы.ПолеТабличногоДокумента.Верх = ЭлементыФормы.ПолеТабличногоДокумента.Верх + 12;
КонецПроцедуры
При таком подходе настройки автооформления построителя отчетов никак не затронут геометрию формы, и вы получите стабильный, независимый от данных визуальный отступ на экране.
---
Важно четко понимать конечную цель: нужен ли отступ для удобства отображения отчета на мониторе компьютера или же документ подготавливается к печати на бумаге? Если речь идет исключительно о выводе на печать, чтобы таблица не обрезалась границами принтера, использовать пустые строки в макете вообще не нужно.
Для управления отступами при печати у объекта ТабличныйДокумент есть встроенный механизм полей. Настроим их программно перед выводом на печать:
// Устанавливаем верхнее поле документа в 10 миллиметров
ТабДок.ПолеСверху = 10;
ТабДок.ПолеСлева = 10;
ТабДок.ПолеСправа = 5;
ТабДок.ПолеСнизу = 5;
// Рекомендуется включить автосмещение под страницу
ТабДок.АвтоМасштаб = Истина;
Важное примечание: в обычном режиме просмотра таблицы на экране эти поля не отображаются. Увидеть их можно, только если перевести табличный документ в режим просмотра страниц или вызвать диалог предварительного просмотра печати.
---
Проанализируем наиболее изящное решение проблемы, когда мы вынуждены использовать ПостроительОтчета совместно со стандартным макетом оформления (например, СтандартноеОформление.Интерфейс или СтандартноеОформление.Классика).
По умолчанию построитель генерирует макет автоматически. Если мы задаем ему собственный макет, то стандартное оформление (цвета, рамки, шрифты группировок) к нему не применяется. Но платформа 1С предоставляет возможность объединить эти два подхода с помощью метода ОформитьМакет().
Алгоритм действий выглядит следующим образом:
Заголовок, Шапка, ДетальныеЗаписи и т.д.).Заголовок нашего макета делаем первую строку очень узкой (например, задаем ей высоту в 4 пункта в свойствах ячейки) и оставляем её пустой.Посмотрим на пример реализации этого сценария в коде:
// 1. Задаем стандартное оформление построителя отчета
ПостроительОтчета.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Классика);
// 2. Назначаем построителю наш собственный макет, где мы вручную настроили высоту строки-отступа
ПостроительОтчета.Макет = ПолучитьМакет("МойМакетОтчета");
// 3. Применяем стили оформления "Классика" поверх структуры нашего макета.
// При этом геометрические настройки высоты строк и ширины колонок,
// заданные нами в "МойМакетОтчета", будут бережно сохранены платформой!
ПостроительОтчета.ОформитьМакет();
// 4. Выводим результат в табличный документ на форме
ПостроительОтчета.Вывести(ЭлементыФормы.ПолеТабличногоДокумента);
Вызов метода ПостроительОтчета.ОформитьМакет() является ключевым в данной схеме. Он берет цветовую схему, шрифты и границы из макета оформления и проецирует их на ячейки вашего собственного макета, не сбрасывая при этом вручную установленные размеры строк (включая ту самую узкую строку-отступ, которую мы подготовили в области Заголовок).
Используя этот подход, мы получаем красивое стандартизированное оформление отчета с точно выверенными и аккуратными отступами сверху и между ключевыми блоками данных.