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