Как зафиксировать ширину колонки динамического списка в 1С

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

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

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

Базовая настройка свойств в конфигураторе

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

  1. Найдем нужное поле в составе элементов таблицы (динамического списка).
  2. Снимем флажок у свойства АвтоМаксимальнаяШирина. Пока этот флаг установлен, система будет игнорировать ваши попытки ограничить расширение колонки.
  3. Установим значение в поле Ширина. Это желаемая ширина колонки в символах.
  4. Установим такое же значение в поле Максимальная ширина. Это предотвратит растягивание колонки, если в таблице появится свободное место.
  5. Критически важный шаг: установим свойство РастягиватьПоГоризонтали в значение Ложь.

Однако, как показывает практика, даже этих действий бывает недостаточно. Разберемся, почему.

Проблема «слишком маленькой» ширины

Рассмотрим ситуацию, когда разработчик пытается установить ширину колонки в значение «1» для даты. На первый взгляд кажется, что это заставит систему сжать колонку до минимально возможного размера. Но на практике это приводит к обратному эффекту: система видит, что данные (дата в формате 10.10.2023) не помещаются в заданный размер, и начинает применять алгоритмы автоматического подбора ширины, что часто приводит к неоправданному растягиванию.

Важное правило: всегда устанавливайте «адекватную» ширину. Для стандартной даты без времени оптимальным значением будет 8–10, для даты с временем — 14–15. Если задать слишком маленькое значение, 1С может просто проигнорировать ваши настройки.

Программное управление шириной

Иногда настройки в конфигураторе перекрываются логикой формы или пользовательскими настройками. В таком случае мы можем принудительно задать параметры при создании формы. Проанализируем пример кода, который нужно разместить в процедуре ПриСозданииНаСервере:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Обращаемся к конкретному элементу (колонке) списка
    ЭлементДата = Элементы.Список.ПодчиненныеЭлементы.Дата;
    
    // Устанавливаем жесткие ограничения
    ЭлементДата.АвтоМаксимальнаяШирина = Ложь;
    ЭлементДата.Ширина = 10;
    ЭлементДата.МаксимальнаяШирина = 10;
    ЭлементДата.РастягиватьПоГоризонтали = Ложь;
    
КонецПроцедуры

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

Влияние заголовка колонки

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

Чтобы минимизировать ширину, попробуйте следующие приемы:

Пользовательские настройки и кэш формы

Часто программист все настроил верно, проверил в конфигураторе («Проверить форму»), и там все выглядит идеально. Но в режиме «1С:Предприятие» колонка по-прежнему широкая. Причина кроется в том, что 1С сохраняет настройки формы (размеры, положение колонок) для каждого пользователя индивидуально.

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

  1. В режиме «Предприятие» откройте нужную форму.
  2. Нажмите кнопку Еще — Установить стандартные настройки. Это сбросит все пользовательские изменения ширины и вернет форму к виду, заданному разработчиком.
  3. Если это не помогло, может потребоваться очистка кэша метаданных, хотя в случае с шириной колонок сброс настроек формы обычно является исчерпывающим решением.

Особенности типа данных «Дата»

Для колонок с типом Дата крайне важно настроить Формат. Если формат не задан, 1С выводит дату и время. Если же вам нужна только дата, явно укажите это в свойствах поля на форме в строке формата (например, ДФ=dd.MM.yyyy).

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

Эффект последней колонки

Проанализируем специфику поведения последней колонки в списке. В платформе 8.3 реализован алгоритм «жадного» заполнения пространства: последняя видимая колонка часто забирает на себя весь остаток ширины формы, независимо от настроек РастягиватьПоГоризонтали.

Если ваша колонка с датой оказалась последней в списке, она неизбежно растянется. Рассмотрим изящное решение этой проблемы: добавьте в конец списка пустую колонку (без данных или со статичным текстом) и установите у неё РастягиватьПоГоризонтали = Истина. В этом случае пустая «заглушка» заберет на себя все лишнее место, а колонка с датой останется фиксированного размера.

Использование «Автоустановки ширины» таблицы

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

Подводя итог, можно сказать, что «обуздание» ширины — это всегда комбинация отключения авто-свойств, установки реалистичных (адекватных) значений ширины и контроля за тем, чтобы заголовок или пользовательские настройки не перекрывали ваши намерения.

← На главную