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