При разработке отчетов с использованием Системы компоновки данных (СКД) программисты часто сталкиваются со стандартным поведением платформы, которое не всегда соответствует требованиям заказчика к оформлению. Одной из таких проблем является автоматическое добавление слова "Сумма" в заголовки итоговых колонок ресурсов. Кроме того, часто требуется объединить ячейку заголовка с надписью "Итого" и выровнять текст по центру, чтобы отчет выглядел профессионально и аккуратно.
В этой статье мы подробно разберем несколько способов решения этой задачи: от простых манипуляций в настройках СКД до продвинутой программной постобработки итогового документа.
Прежде чем переходить к написанию кода, проанализируем стандартные возможности системы. Слово "Сумма" добавляется платформой 1С автоматически только в том случае, если для поля ресурса не задан явный заголовок. Чтобы исправить это без программирования, выполним следующие шаги:
СуммаОстаток), нажмем на нем правой кнопкой мыши и выберем пункт "Установить заголовок".Если ваша задача — изменить само слово "Итого" в нижней или боковой части отчета, воспользуемся другими настройками:
Рассмотрим ситуацию, когда стандартных настроек недостаточно. Например, когда нам нужно программно найти ячейку со словом "Сумма" в заголовке итоговой колонки, объединить ее с ячейкой выше (где написано "Итого") и выполнить центрирование. Этот метод наиболее гибок, так как он работает даже в тех случаях, когда колонки формируются динамически. Для работы с динамическими заголовками по периодам можно использовать пример формирования шапки отчета по неделям и месяцам.
Проанализируем алгоритм действий. Мы будем перехватывать момент после вывода отчета в ТабличныйДокумент и программно изменять его структуру. Если отчет формируется стандартной кнопкой "Сформировать", код следует разместить в модуле объекта отчета в процедуре ПриКомпоновкеРезультата. Если же используется своя кнопка на форме, код вставляется сразу после вызова процессора вывода.
Посмотрим на пример реализации:
// Вставляем код после того, как отчет выведен в ТабДок
// ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
ТабДок.ОтображатьСетку = Ложь;
// Ищем ячейку, содержащую текст "Сумма"
ОбластьПоиска = ТабДок.НайтиТекст("Сумма");
Если ОбластьПоиска <> Неопределено Тогда
// Получаем адрес найденной ячейки в формате "R1C1"
ИмяЯчейки = ОбластьПоиска.Имя;
// Разбираем строку адреса, чтобы вычислить координаты
ПозицияС = Найти(ИмяЯчейки, "C");
НСтроки = Сред(ИмяЯчейки, 2, ПозицияС - 2);
НКолонки = Сред(ИмяЯчейки, ПозицияС + 1);
// Определяем область для объединения: текущая ячейка и ячейка над ней
// Используем формат R1C1 для точности
СтрокаНачала = Число(НСтроки) - 1;
КолонкаНачала = Число(НКолонки);
АдресОбласти = "R" + Формат(СтрокаНачала, "ЧГ=") + "C" + Формат(КолонкаНачала, "ЧГ=") +
":R" + Формат(Число(НСтроки), "ЧГ=") + "C" + Формат(КолонкаНачала, "ЧГ=");
ОбластьОбъединения = ТабДок.Область(АдресОбласти);
// Выполняем объединение и форматирование
ОбластьОбъединения.Объединить();
ОбластьОбъединения.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
ОбластьОбъединения.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
КонецЕсли;
Важный нюанс: Обратите внимание на использование функции Формат(..., "ЧГ="). Это критически важно, так как при больших номерах строк или колонок 1С может вставить разделитель групп разрядов (пробел), что приведет к ошибке при формировании строкового адреса области типа "R1 000C1" вместо "R1000C1".
Выясним еще одну хитрость. Если вы не хотите возиться с программной обработкой ячеек, попробуйте создать Расчетное поле в схеме СКД.
ВсегоСумма) и выражение (например, СуммаПродаж).Поскольку это новое поле, 1С не будет применять к нему автоматические правила именования, характерные для стандартных ресурсов, и заголовок в итоговой колонке будет в точности соответствовать вашему названию. Для решения задачи вывода ресурса только в нужной колонке без создания дополнительных полей можно использовать настройку вывода ресурса в одной колонке СКД.
Проанализируем ситуацию, когда текст заголовка нужно подменить динамически в зависимости от условий, не прибегая к сложному парсингу имен ячеек. В СКД существует механизм Условного оформления, который позволяет менять текст в ячейках.
СистемныеПоля.Уровень, если нужно примениться только к определенному уровню группировок.Рассмотрев все варианты, подведем итоги:
1. Если вам нужно просто переименовать колонку — используйте "Установить заголовок" в выбранных полях.
2. Если нужно изменить надпись "Итого" внизу — используйте "Заголовок общих итогов" в других настройках.
3. Если требуется сложное визуальное оформление (объединение ячеек шапки, центрирование над несколькими колонками) — используйте программную постобработку ТабличногоДокумента, как показано в примере выше.
4. Если вы работаете в типовой конфигурации без возможности изменения кода — используйте режим технического специалиста и расширенные настройки варианта отчета.
Помните, что при программном объединении ячеек после вывода отчета может измениться поведение автоматической высоты строк. Проверяйте результат на больших объемах данных, чтобы убедиться, что оформление "не поехало".