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

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

Разберем классическую и очень распространенную ситуацию, с которой сталкивается практически каждый разработчик 1С при создании отчетов. Представим: мы создали отчет на базе Системы Компоновки Данных (СКД), нарисовали свой собственный красивый макет. Выводим результат — и видим, что наименование одной из группировок (например, месяц или период) неконтролируемо раздвигает первую колонку таблицы. При этом визуально в макете строка группировки полностью объединена, и колонка с данными (числами) должна оставаться узкой.

Проанализируем ситуацию и выясним причину такого поведения. Это не ошибка в вашем макете, а нормальное, хотя и неочевидное, поведение алгоритмов автоширины платформы 1С. Когда СКД генерирует табличный документ, она пытается синхронизировать ширину колонок в строке группировки с колонками детальных записей. Если текст группировки длинный, платформа "растягивает" всю колонку вниз, игнорируя настройки объединения ячеек.

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

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

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

  1. Откроем ваш собственный макет СКД в конфигураторе.
  2. Выделим строки, которые относятся к группировке.
  3. Откроем палитру свойств и найдем свойство табличного документа ИндивидуальныйФорматСтрок или колонок.

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

Способ 2: Жесткое управление размещением текста

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

  1. Перейдем в макет компоновки данных.
  2. Выделим проблемную ячейку с параметром группировки.
  3. В свойствах ячейки найдем параметр РазмещениеТекста. По умолчанию он часто стоит в значении Авто.
  4. Изменим его значение на Переносить.
  5. Обязательно отключим свойство АвтоВысотаСтроки (если оно мешает) и зададим фиксированную ширину ячейки.

Теперь платформа будет вынуждена переносить длинное наименование (например, "Январь - Декабрь") на новую строку, а не растягивать колонку вправо.

Способ 3: Настройка условного оформления (Максимальная ширина)

Рассмотрим попытку решить задачу через вкладку Условное оформление в настройках СКД. Многие разработчики первым делом пытаются задать параметр МаксимальнаяШирина для поля группировки.

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


// Пример программной установки максимальной ширины (если нужно делать кодом)
ЭлементОформления = Настройки.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("МаксимальнаяШирина", 15);
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Период");

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

Проанализируем интересную магию СКД. Если удалить из группировки одно поле (например, "Год") или оставить только один месяц, ширина колонки может внезапно сузиться. Что произошло?

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

Посмотрим на еще одну спасительную настройку — расположение группировок:

  1. Перейдем на вкладку Другие настройки в настройках структуры отчета.
  2. Найдем параметр РасположениеГруппировок (или расположение полей группировок).
  3. Попробуем переключить его со значения Вместе на Отдельно или ОтдельноИТолькоВИтогах.

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

Способ 5: "Танцы с бубном" и форматирование строк

Если ни один из системных вариантов не помог (что бывает при очень сложных перекрестных таблицах с собственными макетами), прибегнем к проверенным практическим хитростям.

Попробуем не выводить слитный текст "Январь-Декабрь", а добавим пробелы: "Январь - Декабрь". Зачастую генератору табличного документа 1С просто не хватает символа пробела, чтобы понять, где можно разорвать слово при автопереносе. Добавив пробел, мы даем платформе возможность перенести текст на вторую строку, тем самым сохраняя заданную нами ширину колонки.

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

← На главную