Как настроить отображение рамок и границ у шапки макета в СКД?

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

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

В этой статье мы подробно разберем, почему так происходит, рассмотрим приоритеты оформления в СКД и изучим несколько эффективных способов решения этой проблемы — от простых кликов в настройках схемы до программного управления выводом областей.

Способ 1. Отключение стандартного макета оформления (основное решение)

Выясним главную причину, по которой пропадают рамки. По умолчанию для любого отчета в СКД применяется стандартный макет оформления (например, «Основной», «Арктика», «Бирюзовый» и другие). Эти системные стили обладают жестко зашитыми правилами отрисовки элементов. Когда СКД компонует итоговый табличный документ, свойства системного макета оформления переопределяют (перекрывают) ручные настройки границ ячеек, которые вы задали в своем собственном макете.

Для того чтобы вернуть созданные нами рамки шапки, нам необходимо отключить автооформление отчета. Разберем по шагам, как это сделать:

  1. Откройте вашу схему компоновки данных и перейдите на вкладку «Настройки».
  2. В нижней части экрана выберите вкладку «Другие настройки».
  3. Найдите параметр «Макет оформления».
  4. Установите для него значение «Без оформления».

После изменения этой настройки система перестанет навязывать табличному документу стандартную цветовую гамму и стили границ. СКД послушно выведет именно те рамки, толщину и цвет линий, которые вы нарисовали в макете ячеек шапки.

Способ 2. Использование условного оформления для сохранения общего стиля

Что делать, если нам критически важно сохранить красивый стандартный стиль оформления для строк данных (например, чередование строк «Зебра» или выделение итогов), но при этом мы хотим принудительно очертить границы именно для шапки отчета? Поскольку «Условное оформление» в СКД имеет более высокий приоритет исполнения, чем «Макет оформления», мы можем принудительно «пробросить» рамки через настройки оформления.

Проанализируем этот процесс подробнее:

  1. Перейдите на вкладку «Настройки» в СКД, а затем на вкладку «Условное оформление».
  2. Добавьте новый элемент оформления.
  3. В открывшемся окне найдите свойство «Граница». Нажмите на него и настройте вид рамки: выберите тип линии (например, «Сплошная») и толщину для всех сторон ячейки.
  4. Перейдите на вкладку «Условие». Если рамки нужно применить ко всей шапке без исключения, оставьте список условий пустым. Если границы нужны только для конкретных значений — задайте соответствующие правила фильтрации.
  5. Особое внимание уделите вкладке «Оформляемые поля». Укажите здесь те поля, для которых необходимо вывести рамки. Если оставить список пустым, оформление применится ко всем полям отчета.
  6. На вкладке «Дополнительно» (в зависимости от версии платформы) или в области использования укажите, где именно должно применяться это оформление. Установите флаг напротив пункта «В шапке» (и снимите с пунктов «В группировках», «В иерархии», если там рамки не требуются).

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

Способ 3. Особенности работы с объединенными ячейками в макетах

Довольно часто сложная шапка отчета содержит объединенные ячейки (например, когда под одной общей шапкой группируются несколько подчиненных колонок). При выводе такого отчета рамки могут неожиданно «рваться», отображаться не полностью или пропадать вовсе.

Рассмотрим правила, которые помогут избежать подобных проблем при проектировании макета в конфигураторе:

Способ 4. Влияние группировок данных и параметра «Автоотступ»

Иногда визуальное отсутствие рамок или их «сдвиг» обусловлены тем, как СКД группирует выводимые данные. Если структура отчета динамическая, жестко заданные границы в макете могут не совпадать с итоговыми ячейками из-за смещения колонок.

Обратим внимание на следующие настройки в свойствах отчета (вкладка «Другие настройки»):

Способ 5. Настройка через программный вывод отчета

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

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

Посмотрим на пример реализации данного подхода:


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

Данный программный метод гарантирует, что границы будут нарисованы поверх любых примененных стилей оформления СКД, так как это действие выполняется на самом финальном этапе формирования отчета перед выводом его пользователю.

Способ 6. Проблемы экспорта отчета в Excel

Часто разработчики сталкиваются с ситуацией, когда в режиме «1С:Предприятие» рамки шапки отображаются идеально, но после сохранения отчета в файл формата Excel (XLS/XLSX) границы ячеек пропадают или становятся невидимыми сероватыми линиями. Это связано с особенностями конвертации стилей табличного документа 1С в формат Microsoft Excel.

Для минимизации таких проблем придерживайтесь следующих правил:

← На главную