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