При настройке отчетов на системе компоновки данных (СКД) разработчики нередко сталкиваются с ситуацией, когда колонка отчета отображается слишком широкой. Даже если в настройках условного оформления жестко задана Максимальная ширина и отключено свойство Растягивать по горизонтали (установлено значение Нет), таблица все равно отрисовывает растянутую ячейку. Проанализируем, почему платформа ведет себя именно так и какими способами можно добиться желаемой компактности отчета.
Рассмотрим внутренний механизм формирования таблицы СКД. При расчете геометрических параметров итогового табличного документа платформа учитывает два независимых слоя: ячейки данных и ячейки заголовков (шапки отчета).
Размещение = Авто, платформа отдает приоритет полному отображению неделимой строки и не переносит заголовок автоматически, что приводит к раздуванию ширины всей колонки.Разберем самое простое и эффективное решение, сработавшее в исходном обсуждении. Часто длинное название поля требуется только разработчику для идентификации, а пользователю в контексте отчета достаточен краткий заголовок.
Цена конечного остатка) на лаконичное слово — Цена. Если колонка находится внутри группы колонок, контекст для пользователя останется понятным, а ширина шапки уменьшится до минимума.Если сократить название невозможно по бизнес-требованиям, заставим платформу переносить слова на новые строки:
8 или 10). При активном переносе текста платформа сожмет шапку до указанной границы, перенеся длинное название на две или три строки.Shift + Enter между словами. Текст заголовка будет принудительно разбит на несколько строк, что устранит эффект распирания ячейки.Рассмотрим вариант, при котором настройки ширины применяются гарантированно ко всей колонке, включая шапку, еще до этапа пользовательских настроек:
Переносить). Настройки, заданные в наборе данных, имеют более высокий приоритет при формировании макета по умолчанию.Если отчет формируется программно через модуль объекта или модуль формы, мы можем полностью переопределить ширину колонок после вывода отчета в ТабличныйДокумент.
Посмотрим на пример кода в процедуре вывода отчета:
// Создаем процессор компоновки и процессор вывода
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
// Принудительно корректируем нужную колонку в готовом документе
НомерКолонки = 4; // Номер проблемной колонки
ОбластьКолонки = Результат.Область(, НомерКолонки, , НомерКолонки);
ОбластьКолонки.ШиринаКолонки = 10;
ОбластьКолонки.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
Такой подход полностью исключает влияние расчетов компоновщика и жестко фиксирует размер нужного столбца.
Проанализируем ситуацию, когда поле выводится внутри структуры типа Таблица (в группировке колонок):