При разработке интерфейсов на управляемых формах 1С программисты часто сталкиваются с тем, что динамический список ведет себя слишком «самостоятельно». Одной из наиболее раздражающих проблем является невозможность жестко задать ширину конкретной колонки, например, для даты или номера документа. Система автоматически растягивает колонки, пытаясь заполнить все доступное пространство формы, что часто портит внешний вид интерфейса.
В этой статье мы подробно разберем, как обуздать динамический список, почему стандартные свойства могут не работать и какие нюансы нужно учитывать при работе с типом данных Дата.
Первым делом рассмотрим стандартный механизм настройки ширины в конфигураторе. Многие разработчики совершают ошибку, устанавливая только одно свойство, в то время как для достижения результата требуется комплексный подход. Проанализируем правильную последовательность действий в палитре свойств элемента формы (колонки):
Однако, как показывает практика, даже этих действий бывает недостаточно. Разберемся, почему.
Рассмотрим ситуацию, когда разработчик пытается установить ширину колонки в значение «1» для даты. На первый взгляд кажется, что это заставит систему сжать колонку до минимально возможного размера. Но на практике это приводит к обратному эффекту: система видит, что данные (дата в формате 10.10.2023) не помещаются в заданный размер, и начинает применять алгоритмы автоматического подбора ширины, что часто приводит к неоправданному растягиванию.
Важное правило: всегда устанавливайте «адекватную» ширину. Для стандартной даты без времени оптимальным значением будет 8–10, для даты с временем — 14–15. Если задать слишком маленькое значение, 1С может просто проигнорировать ваши настройки.
Иногда настройки в конфигураторе перекрываются логикой формы или пользовательскими настройками. В таком случае мы можем принудительно задать параметры при создании формы. Проанализируем пример кода, который нужно разместить в процедуре ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Обращаемся к конкретному элементу (колонке) списка
ЭлементДата = Элементы.Список.ПодчиненныеЭлементы.Дата;
// Устанавливаем жесткие ограничения
ЭлементДата.АвтоМаксимальнаяШирина = Ложь;
ЭлементДата.Ширина = 10;
ЭлементДата.МаксимальнаяШирина = 10;
ЭлементДата.РастягиватьПоГоризонтали = Ложь;
КонецПроцедуры
Важно помнить, что программная установка свойств должна происходить до того, как форма будет отрисована клиенту. Если изменять эти свойства позже (например, в ПриОткрытии), результат может быть нестабильным из-за специфики работы движка управляемых форм.
Выясним еще одну скрытую причину: ширина заголовка. В 1С ширина колонки не может быть меньше длины текста её заголовка. Если ваша колонка называется «Дата совершения хозяйственной операции», а ширину вы ставите «5», система растянет колонку так, чтобы заголовок был виден полностью (или хотя бы его значительная часть).
Чтобы минимизировать ширину, попробуйте следующие приемы:
Часто программист все настроил верно, проверил в конфигураторе («Проверить форму»), и там все выглядит идеально. Но в режиме «1С:Предприятие» колонка по-прежнему широкая. Причина кроется в том, что 1С сохраняет настройки формы (размеры, положение колонок) для каждого пользователя индивидуально.
Если пользователь (или вы сами в процессе тестирования) хотя бы раз вручную изменил ширину колонки, система запомнит это значение и будет приоритетно использовать его, игнорируя настройки из конфигуратора. Чтобы проверить чистое поведение формы, выполните следующие действия:
Для колонок с типом Дата крайне важно настроить Формат. Если формат не задан, 1С выводит дату и время. Если же вам нужна только дата, явно укажите это в свойствах поля на форме в строке формата (например, ДФ=dd.MM.yyyy).
Почему это важно? Система компоновки данных и механизмы отрисовки таблиц анализируют формат данных для расчета «идеальной» ширины. Чем короче формат отображения, тем легче системе удержать колонку в заданных вами узких рамках.
Проанализируем специфику поведения последней колонки в списке. В платформе 8.3 реализован алгоритм «жадного» заполнения пространства: последняя видимая колонка часто забирает на себя весь остаток ширины формы, независимо от настроек РастягиватьПоГоризонтали.
Если ваша колонка с датой оказалась последней в списке, она неизбежно растянется. Рассмотрим изящное решение этой проблемы: добавьте в конец списка пустую колонку (без данных или со статичным текстом) и установите у неё РастягиватьПоГоризонтали = Истина. В этом случае пустая «заглушка» заберет на себя все лишнее место, а колонка с датой останется фиксированного размера.
На уровне самой таблицы (Динамического списка) существует свойство Автоустановка ширины. По умолчанию оно включено. Система анализирует первые строки данных и сама решает, какой ширины должны быть колонки. Для динамических списков, данные в которые подгружаются порциями, это может работать непредсказуемо. Попробуйте отключить это свойство у всей таблицы, если ручные настройки отдельных колонок игнорируются.
Подводя итог, можно сказать, что «обуздание» ширины — это всегда комбинация отключения авто-свойств, установки реалистичных (адекватных) значений ширины и контроля за тем, чтобы заголовок или пользовательские настройки не перекрывали ваши намерения.