Почему колонка в отчете СКД растягивается и как уменьшить ее ширину?

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

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

Выясним причину: как платформа рассчитывает ширину колонок

Рассмотрим внутренний механизм формирования таблицы СКД. При расчете геометрических параметров итогового табличного документа платформа учитывает два независимых слоя: ячейки данных и ячейки заголовков (шапки отчета).

  1. Приоритет текста заголовка. По умолчанию условное оформление, заданное для выбранных полей, применяется только к строкам с данными. Если наименование поля или его пользовательский заголовок состоит из длинного неразрывного текста (например, «Цена поступления базовая»), платформа рассчитывает ширину колонки по наиболее длинному значению — то есть по тексту шапки, игнорируя заданную для строк данных максимальную ширину.
  2. Специфика свойства «Растягивать по горизонтали». Значение Нет лишь указывает генератору макета не увеличивать колонку за счет свободного пространства страницы при заполнении ширины листа. Однако это свойство не может сжать колонку меньше физического размера самого широкого неделимого текста, находящегося в ней.
  3. Свойство «Размещение». Если для поля в оформлении установлено Размещение = Авто, платформа отдает приоритет полному отображению неделимой строки и не переносит заголовок автоматически, что приводит к раздуванию ширины всей колонки.

Способ 1. Сокращение пользовательского заголовка поля

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

  1. Перейдем на вкладку Настройки в схеме компоновки данных.
  2. Откроем список Выбранные поля.
  3. Выделим проблемное поле, откроем контекстное меню и выберем пункт Установить заголовок.
  4. Заменим громоздкую строку (например, Цена конечного остатка) на лаконичное слово — Цена. Если колонка находится внутри группы колонок, контекст для пользователя останется понятным, а ширина шапки уменьшится до минимума.

Способ 2. Включение переноса строк и ручные переносы

Если сократить название невозможно по бизнес-требованиям, заставим платформу переносить слова на новые строки:

  1. В настройках условного оформления отчета (или конкретного поля) добавим свойство Размещение со значением Переносить.
  2. Зададим параметры Максимальная ширина и Минимальная ширина (например, 8 или 10). При активном переносе текста платформа сожмет шапку до указанной границы, перенеся длинное название на две или три строки.
  3. Также можно задать жесткий перенос в самом заголовке поля. Для этого при редактировании пользовательского заголовка нажмем комбинацию клавиш Shift + Enter между словами. Текст заголовка будет принудительно разбит на несколько строк, что устранит эффект распирания ячейки.

Способ 3. Оформление на уровне схемы компоновки данных

Рассмотрим вариант, при котором настройки ширины применяются гарантированно ко всей колонке, включая шапку, еще до этапа пользовательских настроек:

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

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

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

Посмотрим на пример кода в процедуре вывода отчета:


// Создаем процессор компоновки и процессор вывода
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);

ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);

// Принудительно корректируем нужную колонку в готовом документе
НомерКолонки = 4; // Номер проблемной колонки
ОбластьКолонки = Результат.Область(, НомерКолонки, , НомерКолонки);
ОбластьКолонки.ШиринаКолонки = 10;
ОбластьКолонки.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;

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

Способ 5. Проверка структуры отчета в кросс-таблицах

Проанализируем ситуацию, когда поле выводится внутри структуры типа Таблица (в группировке колонок):

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