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