Как отцентрировать данные в колонке Построителя отчета и настроить ее ширину

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

При работе с объектом ПостроительОтчета в 1С:Предприятие 8 часто возникает ситуация, когда стандартное оформление, задаваемое через МакетОформления, не полностью удовлетворяет требованиям визуализации. Одной из типичных задач является необходимость центрирования данных в определенной колонке (например, «Разница») или изменение ее ширины программным способом без создания громоздких статических макетов. В этой статье мы подробно разберем, как управлять оформлением отчета, используя гибкие механизмы настройки макета.

Метод 1: Программная модификация автогенерируемого макета

Этот способ наиболее эффективен, если вы не хотите вручную рисовать макет в конфигураторе, но вам нужно точечно изменить свойства конкретных ячеек. Разберем логику: ПостроительОтчета умеет самостоятельно генерировать макет на основе источника данных. Если мы сначала заставим его создать этот макет, а затем перехватим его до момента вывода, мы сможем изменить любые свойства областей.

Рассмотрим пошагово, как это реализовать в коде:


Процедура Печать(Элемент)
    ПострПечать = Новый ПостроительОтчета;
    ПострПечать.ИсточникДанных = Новый ОписаниеИсточникаДанных(Документы);
    
    // Устанавливаем стандартное оформление
    ПострПечать.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Интерфейс);
    
    // Заставляем построитель сформировать структуру
    ПострПечать.Выполнить();
    
    // Генерируем макет по умолчанию
    ПострПечать.Макет = Неопределено; 
    МойМакет = ПострПечать.Макет;
    
    // Теперь найдем нужную область. 
    // Построитель именует области деталей по шаблону "Детали<ИмяПоля>"
    Попытка
        ОбластьРазница = МойМакет.Область("ДеталиРазница");
        ОбластьРазница.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
        
        // Попутно можем установить ширину, если это необходимо
        ОбластьРазница.ШиринаКолонки = 15;
    Исключение
        // Если область не найдена, отчет выведется как обычно
    КонецПопытки;
    
    // Возвращаем измененный макет обратно в построитель
    ПострПечать.Макет = МойМакет;
    
    ПострПечать.Вывести(); 
КонецПроцедуры

В данном примере мы используем свойство ГоризонтальноеПоложение, устанавливая его в значение ГоризонтальноеПоложение.Центр. Это позволяет добиться нужного визуального эффекта для всей колонки данных.

Метод 2: Использование заранее подготовленного макета

Если настроек оформления слишком много (шрифты, цвета, сложные заголовки), проще всего «скармливать» построителю заранее созданный макет. Это избавляет от необходимости писать десятки строк кода для форматирования каждой ячейки.

Проанализируем ситуацию: в конфигураторе у обработки или документа создается макет с типом «Табличный документ». В нем рисуются области, которые должны называться так же, как их ожидает построитель (Заголовок, Шапка, Детали). Выясним, как подключить такой макет:


// Вместо автогенерации используем готовый шаблон из общих макетов или макетов объекта
ПострПечать.Макет = ПолучитьМакет("ТвойКрасивыйМакет");
ПострПечать.Вывести();

Важный момент: При использовании своего макета важно следить за тем, чтобы имена параметров в ячейках совпадали с именами полей в ИсточникДанных. Если вы переименовали колонку в запросе или таблице значений, не забудьте обновить имя параметра в макете.

Метод 3: Пост-обработка итогового табличного документа

Иногда удобнее манипулировать не макетом, а уже результатом вывода. Метод Вывести() может принимать в качестве аргумента объект ТабличныйДокумент. Мы можем вывести данные в таблицу, а затем «пройтись» по ней циклом или поиском.

Разберем пример, где мы программно ищем колонку по заголовку и центрируем все значения в ней:


ТабДок = Новый ТабличныйДокумент;
ПострПечать.Вывести(ТабДок);

// Ищем ячейку с заголовком "Разница"
НайденнаяОбласть = ТабДок.НайтиТекст("Разница");

Если НайденнаяОбласть <> Неопределено Тогда
    НомерКолонки = НайденнаяОбласть.Лево;
    // Определяем область всей колонки (от первой строки до последней)
    ОбластьКолонки = ТабДок.Область(, НомерКолонки, ТабДок.ВысотаТаблицы, НомерКолонки);
    ОбластьКолонки.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
    ОбластьКолонки.ШиринаКолонки = 20;
КонецЕсли;

ТабДок.Показать();

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

Настройка ширины через ОписаниеИсточникаДанных

Стоит упомянуть, что часть настроек внешнего вида можно задать еще на этапе подготовки данных. Если вашим источником является ТаблицаЗначений, свойства ее колонок (такие как Заголовок и типы данных) напрямую влияют на то, как ПостроительОтчета сформирует колонки в макете. Однако для точного управления выравниванием (лево, право, центр) все же придется использовать один из трех методов, описанных выше.

Резюме и рекомендации

Подводя итог, выделим основные правила выбора метода:

  1. Если нужно быстро центрировать одну колонку в стандартном отчете — используйте Метод 1 (программная правка ПострПечать.Макет).
  2. Если требуется сложный дизайн с логотипами и специфическим форматированием — используйте Метод 2 (статический макет в конфигураторе).
  3. Если оформление зависит от результатов расчета в итоговой таблице — используйте Метод 3 (правка ТабличныйДокумент после вывода).

Помните, что использование СтандартноеОформление (например, Интерфейс или Апельсин) перезаписывает многие свойства ячеек, поэтому вносить свои правки в макет нужно после назначения оформления, но до вызова метода Вывести().

← На главную