При разработке интерфейсов в среде 1С:Предприятие программисты часто сталкиваются со специфическим поведением табличных полей и динамических списков. Типичная ситуация: мы добавляем в форму списка номенклатуры текстовый реквизит (например, Комментарий), после чего высота каждой строки таблицы автоматически увеличивается в несколько раз. Это происходит из-за того, что поле комментария обычно имеет тип данных «Строка неограниченной длины», и система пытается зарезервировать под него дополнительное пространство.
В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем поведение платформы и рассмотрим различные способы ее решения как для управляемых, так и для обычных форм.
Когда на форму выводится колонка с текстом неограниченной длины, платформа 1С по умолчанию пытается отобразить его содержимое наиболее полным образом. Для этого автоматически задействуется механизм переноса строк и подстройки высоты ячеек под объем текста. В результате даже пустые строки или строки с коротким текстом растягиваются по высоте, подстраиваясь под максимально возможный размер ячейки. Это делает работу со списком крайне неудобной, так как на экране помещается гораздо меньше полезной информации.
В современных конфигурациях на управляемых формах динамический список автоматически рассчитывает высоту строк. Чтобы зафиксировать высоту и вернуть списку компактный вид, проанализируем и изменим свойства элемента формы в конфигураторе:
АвтовысотаЯчейки и установим его в значение Ложь. Это отключит автоматическое растягивание строки по высоте при наличии длинного текста.Высота равным 1. Это ограничит отображение ячейки строго одной строкой. Также убедимся, что свойство МаксимальнаяВысота не заполнено или также равно 1.МногострочныйРежим должен находиться в значении Ложь.В некоторых случаях настройки, заданные в конфигураторе, могут переопределяться сохраненными настройками конкретного пользователя. Чтобы гарантировать корректное поведение формы для всех пользователей, мы можем принудительно инициализировать нужные свойства программно при открытии формы.
Разберем пример кода, который необходимо разместить в модуле формы в обработчике события ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Отключаем автовысоту ячейки для колонки комментария
Элементы.СписокКомментарий.АвтоВысотаЯчейки = Ложь;
// Принудительно устанавливаем высоту в одну строку
Элементы.СписокКомментарий.Высота = 1;
КонецПроцедуры
Обратите внимание, что имя элемента СписокКомментарий должно точно соответствовать имени элемента (колонки) на вашей управляемой форме.
Если разработка ведется на обычных формах, интерфейсные механизмы работают немного иначе. Посмотрим, как настроить отображение списка в этом случае:
ВысотаСтроки. Если его значение равно 0, платформа рассчитывает высоту автоматически. Установим фиксированное значение (например, 1 или конкретное число пикселей), чтобы принудительно зафиксировать одинаковую высоту для всех строк.Комментарий. Убедимся, что свойство Автовысота ячейки отключено, а свойство Высота ячейки установлено в значение 1.ПриВыводеСтроки. Убедимся, что в нем не прописано принудительное включение автовысоты (например, через свойство АвтоВысотаЯчейки объекта оформления ячейки).Если у нас нет возможности вносить изменения в конфигурацию (например, база находится на поддержке без возможности редактирования), исправить ситуацию может сам пользователь непосредственно в режиме «1С:Предприятие»:
1.Проанализировав эти несложные шаги, мы видим, что проблема избыточной высоты строк легко решается как на уровне конфигурирования, так и через стандартный пользовательский интерфейс платформы 1С.