При разработке интерфейсов для терминалов сбора данных (ТСД) или экранов с небольшим разрешением разработчики часто сталкиваются с ситуацией, когда длинные наименования в стандартном выпадающем списке поля ввода обрезаются и заменяются многоточием. Разберем особенности поведения платформы «1С:Предприятие» в обычных формах и рассмотрим практические способы решения этой проблемы.
Выясним причину такого поведения элементов интерфейса. В платформе «1С:Предприятие» стандартный выпадающий список (свойство СписокВыбора) спроектирован как строго однострочный элемент. Платформа не поддерживает многострочный режим или автоматический перенос строк (АвтопереносСтрок) внутри стандартного выпадающего меню выбора. Вставка символов переноса строки (Символы.ПС) не приводит к переносу текста на новую строку. Если физическая ширина списка меньше длины строки, окончание текста автоматически заменяется многоточием.
Рассмотрим несколько проверенных способов решения задачи для обычных форм.
Если ширина самого поля ввода на форме строго ограничена размерами компактного экрана ТСД, но при открытии списка есть возможность задействовать всю ширину экрана устройства, можно принудительно задать ширину выпадающего меню.
Для этого в расширении поля ввода предусмотрено свойство ШиринаВыпадающегоСписка (DropListWidth). Данное свойство определяет ширину выпадающего меню в символах, независимо от ширины самого поля ввода на форме.
Настроить свойство можно программно при инициализации формы:
Процедура ПриОткрытии()
// Устанавливаем ширину выпадающего списка в символах
ЭлементыФормы.ПолеВводаНоменклатура.ШиринаВыпадающегоСписка = 50;
КонецПроцедуры
Если экран устройства слишком узкий и ширина выпадающего списка не позволяет уместить весь текст без горизонтального скроллинга, разберем альтернативный вариант с модальным диалогом выбора из объекта СписокЗначений.
Пошагово выполним настройку:
КнопкаСпискаВыбора.КнопкаВыбора.НачалоВыбора и вызываем интерактивный выбор элемента.
Процедура ПолеВводаНоменклатураНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Формируем список для выбора
Список = Новый СписокЗначений;
Список.Добавить("Длинное наименование позиции номенклатуры 1");
Список.Добавить("Длинное наименование позиции номенклатуры 2");
// Вызываем стандартное окно выбора со скроллингом
ВыбранныйЭлемент = Список.ВыбратьЭлемент("Выберите значение:");
Если ВыбранныйЭлемент <> Неопределено Тогда
Элемент.Значение = ВыбранныйЭлемент.Значение;
КонецЕсли;
КонецПроцедуры
В отличие от стандартного выпадающего меню, системное диалоговое окно выбора поддерживает горизонтальную прокрутку, что позволяет оператору ТСД прочитать полное наименование.
Когда требуется обеспечить полноценный перенос длинного текста на 2–3 строки без обрезания, проанализируем замену поля ввода на компактный элемент ТабличноеПоле.
Алгоритм настройки:
ТабличноеПоле, привязанное к реквизиту формы с типом СписокЗначений или ТаблицаЗначений.АвтопереносСтрок = Истина.АвтоВысотаЯчейки = Истина или явно задаем ВысотаЯчейки (например, 2 или 3 строки).В этом случае текст в строках будет автоматически адаптироваться под границы экрана ТСД и переноситься по словам.
Для создания максимально удобного интерфейса на небольших дисплеях оптимальным решением является разработка собственной формы выбора.
Разберем этапы реализации:
НачалоВыбора и открываем созданную форму модально:
Процедура ПолеВводаНоменклатураНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ФормаВыбора = ПолучитьФорму("Обработка.АРМ_ТСД.Форма.ФормаВыбораПозиций");
ФормаВыбора.ТекущееЗначение = Элемент.Значение;
РезультатВыбора = ФормаВыбора.ОткрытьМодально();
Если РезультатВыбора <> Неопределено Тогда
Элемент.Значение = РезультатВыбора;
КонецЕсли;
КонецПроцедуры
Если выбор уже сделан, но оператору необходимо постоянно видеть полный неотсеченный текст, можно использовать вспомогательный элемент управления Надпись (Label) или многострочное поле ввода только для чтения.
Разберем пример реализации:
Надпись.АвтопереносСтрок = Истина и увеличиваем её высоту по вертикали.ПриИзменении поля ввода обновляем текст надписи:
Процедура ПолеВводаНоменклатураПриИзменении(Элемент)
ЭлементыФормы.НадписьПолноеНаименование.Заголовок = Строка(Элемент.Значение);
КонецПроцедуры
Итог: Стандартный выпадающий список в обычных формах 1С не поддерживает многострочный текст. Для интерфейсов ТСД рекомендуется использовать отдельную форму выбора с автопереносом строк либо диалог СписокЗначений.ВыбратьЭлемент().