Разберем классическую и очень распространенную ситуацию, с которой сталкивается практически каждый разработчик 1С при создании отчетов. Представим: мы создали отчет на базе Системы Компоновки Данных (СКД), нарисовали свой собственный красивый макет. Выводим результат — и видим, что наименование одной из группировок (например, месяц или период) неконтролируемо раздвигает первую колонку таблицы. При этом визуально в макете строка группировки полностью объединена, и колонка с данными (числами) должна оставаться узкой.
Проанализируем ситуацию и выясним причину такого поведения. Это не ошибка в вашем макете, а нормальное, хотя и неочевидное, поведение алгоритмов автоширины платформы 1С. Когда СКД генерирует табличный документ, она пытается синхронизировать ширину колонок в строке группировки с колонками детальных записей. Если текст группировки длинный, платформа "растягивает" всю колонку вниз, игнорируя настройки объединения ячеек.
Посмотрим на доступные методы решения этой проблемы. Мы рассмотрим несколько подходов: от правильной настройки свойств ячеек до изменения структуры самого отчета.
Часто проблема кроется в том, что ширины колонок в разных строках начинают зависеть друг от друга. Выясним, как это обойти.
ИндивидуальныйФорматСтрок или колонок.Использование независимого формата позволяет сделать так, чтобы ширина колонок в строке группировки (где выводится длинный заголовок) никак не влияла на ширину колонок в строках с детальными записями, где нам нужна узкая колонка для чисел из 4 знаков. Однако при использовании СКД этот метод может работать не всегда, так как компоновщик переопределяет настройки.
Если индивидуальный формат не спасает, давайте жестко укажем платформе, что текст не должен раздвигать границы ячейки.
РазмещениеТекста. По умолчанию он часто стоит в значении Авто.Переносить.АвтоВысотаСтроки (если оно мешает) и зададим фиксированную ширину ячейки.Теперь платформа будет вынуждена переносить длинное наименование (например, "Январь - Декабрь") на новую строку, а не растягивать колонку вправо.
Рассмотрим попытку решить задачу через вкладку Условное оформление в настройках СКД. Многие разработчики первым делом пытаются задать параметр МаксимальнаяШирина для поля группировки.
Почему это часто не помогает? Приоритет в СКД отдается пользовательскому макету. Если вы нарисовали свой макет, настройки максимальной ширины из условного оформления для этой группировки могут игнорироваться. Однако, если вы используете стандартную генерацию (без своего макета), этот способ отлично работает.
// Пример программной установки максимальной ширины (если нужно делать кодом)
ЭлементОформления = Настройки.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("МаксимальнаяШирина", 15);
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Период");
Проанализируем интересную магию СКД. Если удалить из группировки одно поле (например, "Год") или оставить только один месяц, ширина колонки может внезапно сузиться. Что произошло?
Изменение состава полей меняет итоговый тип значения, передаваемый в макет. Если остается только дата, СКД применяет к ней системные алгоритмы форматирования для дат. Если полей несколько, формируется составная строка, и алгоритм расчета автоширины меняется.
Посмотрим на еще одну спасительную настройку — расположение группировок:
РасположениеГруппировок (или расположение полей группировок).Вместе на Отдельно или ОтдельноИТолькоВИтогах.Это заставит СКД выводить наименования группировок в независимой области (отдельной колонке), что навсегда решит проблему "пляшущей" ширины первой колонки с числовыми данными.
Если ни один из системных вариантов не помог (что бывает при очень сложных перекрестных таблицах с собственными макетами), прибегнем к проверенным практическим хитростям.
Попробуем не выводить слитный текст "Январь-Декабрь", а добавим пробелы: "Январь - Декабрь". Зачастую генератору табличного документа 1С просто не хватает символа пробела, чтобы понять, где можно разорвать слово при автопереносе. Добавив пробел, мы даем платформе возможность перенести текст на вторую строку, тем самым сохраняя заданную нами ширину колонки.
Подводя итог: делайте отчеты как можно ближе к стандартам СКД, избегайте излишнего переопределения макетов там, где можно обойтись условным оформлением, и всегда обращайте внимание на свойства ячеек РазмещениеТекста и независимые форматы колонок.