Как запретить перенос строк в заголовке поля СКД и сохранить компактную ширину значений?

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

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

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

Выясним причину автоматического переноса и растягивания ячеек

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

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

Способ 1. Настройка условного оформления с ограничением области применения

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

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

Способ 2. Использование неразрывных пробелов в заголовке поля

Рассмотрим изящный способ, не требующий сложных манипуляций с условным оформлением. Платформа 1С выполняет перенос текста исключительно по стандартным пробелам (символ с кодом 32) и дефисам. Если разорвать цепочку обычных пробелов, СКД будет воспринимать фразу как единое длинное слово.

  1. Откроем схему компоновки данных и перейдем на вкладку «Наборы данных».
  2. Найдем необходимое поле в таблице полей набора.
  3. В колонке «Заголовок» введем нужный текст, заменив обычные пробелы на неразрывные пробелы. Вставить неразрывный пробел в операционной системе Windows можно с помощью клавиатурной комбинации Alt + 0160 (набирая цифры на цифровом блоке клавиатуры при зажатой клавише Alt).
  4. Если заголовок формируется динамически или задается через «Выражение представления» на вкладке «Вычисляемые поля», можно использовать встроенную функцию платформы СтрЗаменить(Поле, " ", Символ(160)).

В этом случае компоновщик макета не сможет перенести текст заголовка и будет вынужден отрисовать его в одну строчку.

Способ 3. Разделение полей через параметры вывода отчета

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

  1. На вкладке «Настройки» выберем корневой элемент отчета или конкретную группировку.
  2. Перейдем на подвкладку «Другие настройки».
  3. Найдем параметр «Расположение реквизитов» и переключим его значение в «Отдельно» или «В отдельной колонке» (вместо «Вместе с владельцем»).
  4. Параметр «Расположение полей группировок» также переведем в значение «Отдельно».

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

Способ 4. Создание собственного макета поля

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

  1. Перейдем на вкладку «Макеты» схемы компоновки данных.
  2. Нажмем кнопку «Добавить макет» и выберем пункт «Добавить макет поля».
  3. Укажем целевое поле и тип макета («Заголовок»).
  4. В визуальном редакторе макета выделим ячейку заголовка, откроем ее свойства (палитра свойств) и снимем флаг «Автовысота строки» у строки макета.
  5. Для свойства ячейки «Размещение» выберем значение «Обрезать» или «Выступать», а также зададим фиксированную ширину колонки макета.

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

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


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

Таким образом, комбинируя область применения условного оформления и свойства размещения текста, мы получаем аккуратный табличный документ без деформированных ячеек с данными.

← На главную