Как отцентрировать слово Итого в итоговой колонке кросс-таблицы СКД 8.3

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

При разработке отчетов типа "шахматка" (кросс-таблица) в системе компоновки данных (СКД) программисты часто сталкиваются с тем, что стандартные заголовки общих итогов ведут себя "упрямо". Например, слово Итого в правом верхнем углу (заголовок итогов по строкам) по умолчанию может прижиматься к краю, и обычное условное оформление всей группировки не всегда помогает решить эту задачу. В этой статье мы разберем несколько проверенных способов, как добиться идеального центрирования этого элемента, начиная от простых манипуляций с вычисляемыми полями и заканчивая созданием собственных макетов.

Способ 1: Создание вычисляемого поля для итогов (форумное решение)

Рассмотрим метод, который помог автору вопроса. Суть заключается в том, чтобы подменить стандартный автоматический итог своим собственным полем, которым мы сможем полностью управлять.

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

Проанализируем ситуацию: создавая отдельное поле, мы выводим его из-под власти системных механизмов формирования "Общих итогов", которые часто игнорируют настройки выравнивания в угоду стандартному макету оформления.

Способ 2: Использование макета заголовка группировки

Если способ с вычисляемыми полями кажется вам избыточным, разберем более "чистый" с точки зрения архитектуры СКД метод — использование закладок Макеты. Этот метод позволяет визуально нарисовать ячейку заголовка.

Рассмотрим по шагам:

  1. Откроем закладку Макеты.
  2. Нажмем кнопку Добавить макет заголовка группировки.
  3. В появившемся окне выберем имя группировки колонок (та, что отвечает за вывод данных по горизонтали). Тип макета установим как Заголовок.
  4. В редакторе табличного документа, который откроется ниже, выделим область (одну или несколько ячеек) и напишем в ней текст "Итого".
  5. Для этой ячейки через стандартную палитру свойств 1С установим Горизонтальное положение — Центр и Вертикальное положение — Центр.
  6. В свойствах макета укажем параметр Область, выбрав нарисованные ячейки.

Этот метод хорош тем, что он не требует изменения состава данных (набора данных или вычисляемых полей). Мы просто говорим системе: "Когда будешь рисовать шапку этой группы, используй мой рисунок".

Способ 3: Тонкая настройка области условного оформления

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

Посмотрим на алгоритм правильной настройки:

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

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

Способ 4: Программная корректировка в модуле отчета

Бывают случаи, когда из-за сложных вложенных таблиц или специфических макетов оформления настройки в конструкторе игнорируются. Тогда мы можем прибегнуть к программному методу в процедуре ПриКомпоновкеРезультата модуля отчета.

Рассмотрим пример кода:


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

Этот метод считается "тяжелым", так как мы фактически берем управление процессом вывода на себя. Однако он дает стопроцентную гарантию результата, так как мы работаем с уже сформированным ТабличныйДокумент.

Советы по работе с фиксированными макетами

При использовании кросс-таблиц важно помнить о динамической ширине колонок. Если вы используете макет (Способ 2), убедитесь, что в свойствах ячейки параметр Размещение текста установлен в значение Переносить. Это предотвратит "зажатие" текста, если колонка окажется слишком узкой для слова "Итого".

Также проанализируем настройку Автополе. Если в выбранных полях группировки стоит Авто, СКД сама решает, как называть итоги. Чтобы иметь возможность применить оформление конкретно к заголовку, попробуйте явно добавить поле в настройки и через правую кнопку мыши выбрать Установить заголовок. После этого поле станет "именованным" для системы условного оформления, и "зацепиться" за него станет проще.

Резюмируя: для быстрой правки лучше всего подходит Способ 3 (Условное оформление с ограничением области использования только заголовком). Для сложных отчетов с жесткими требованиями к дизайну — Способ 2 (Макеты заголовков). А если вы столкнулись с ошибкой платформы или нетипичным поведением — используйте Способ 4.

← На главную