Как отобразить длинный текст в выпадающем списке на обычной форме 1С?

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

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

Причина ограничения платформы

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

Рассмотрим несколько проверенных способов решения задачи для обычных форм.

Способ 1. Увеличение ширины выпадающего списка

Если ширина самого поля ввода на форме строго ограничена размерами компактного экрана ТСД, но при открытии списка есть возможность задействовать всю ширину экрана устройства, можно принудительно задать ширину выпадающего меню.

Для этого в расширении поля ввода предусмотрено свойство ШиринаВыпадающегоСписка (DropListWidth). Данное свойство определяет ширину выпадающего меню в символах, независимо от ширины самого поля ввода на форме.

Настроить свойство можно программно при инициализации формы:


Процедура ПриОткрытии()
    // Устанавливаем ширину выпадающего списка в символах
    ЭлементыФормы.ПолеВводаНоменклатура.ШиринаВыпадающегоСписка = 50;
КонецПроцедуры

Способ 2. Использование диалога выбора из списка значений

Если экран устройства слишком узкий и ширина выпадающего списка не позволяет уместить весь текст без горизонтального скроллинга, разберем альтернативный вариант с модальным диалогом выбора из объекта СписокЗначений.

Пошагово выполним настройку:

  1. В палитре свойств поля ввода отключаем флажок КнопкаСпискаВыбора.
  2. Включаем флажок КнопкаВыбора.
  3. Создаем обработчик события НачалоВыбора и вызываем интерактивный выбор элемента.

Процедура ПолеВводаНоменклатураНачалоВыбора(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    
    // Формируем список для выбора
    Список = Новый СписокЗначений;
    Список.Добавить("Длинное наименование позиции номенклатуры 1");
    Список.Добавить("Длинное наименование позиции номенклатуры 2");
    
    // Вызываем стандартное окно выбора со скроллингом
    ВыбранныйЭлемент = Список.ВыбратьЭлемент("Выберите значение:");
    Если ВыбранныйЭлемент <> Неопределено Тогда
        Элемент.Значение = ВыбранныйЭлемент.Значение;
    КонецЕсли;
КонецПроцедуры

В отличие от стандартного выпадающего меню, системное диалоговое окно выбора поддерживает горизонтальную прокрутку, что позволяет оператору ТСД прочитать полное наименование.

Способ 3. Замена поля ввода на табличное поле с переносом строк

Когда требуется обеспечить полноценный перенос длинного текста на 2–3 строки без обрезания, проанализируем замену поля ввода на компактный элемент ТабличноеПоле.

Алгоритм настройки:

  1. Размещаем на форме ТабличноеПоле, привязанное к реквизиту формы с типом СписокЗначений или ТаблицаЗначений.
  2. В свойствах колонки табличного поля устанавливаем свойство АвтопереносСтрок = Истина.
  3. Включаем свойство АвтоВысотаЯчейки = Истина или явно задаем ВысотаЯчейки (например, 2 или 3 строки).

В этом случае текст в строках будет автоматически адаптироваться под границы экрана ТСД и переноситься по словам.

Способ 4. Создание отдельной формы выбора для экрана ТСД

Для создания максимально удобного интерфейса на небольших дисплеях оптимальным решением является разработка собственной формы выбора.

Разберем этапы реализации:

  1. Создаем новую форму обработки или документа, оптимизированную под габариты экрана ТСД.
  2. Размещаем на ней таблицу с включенным автопереносом строк и крупные кнопки навигации.
  3. В основном поле ввода перехватываем событие НачалоВыбора и открываем созданную форму модально:

Процедура ПолеВводаНоменклатураНачалоВыбора(Элемент, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    
    ФормаВыбора = ПолучитьФорму("Обработка.АРМ_ТСД.Форма.ФормаВыбораПозиций");
    ФормаВыбора.ТекущееЗначение = Элемент.Значение;
    
    РезультатВыбора = ФормаВыбора.ОткрытьМодально();
    Если РезультатВыбора <> Неопределено Тогда
        Элемент.Значение = РезультатВыбора;
    КонецЕсли;
КонецПроцедуры

Способ 5. Вывод полного наименования в отдельную надпись

Если выбор уже сделан, но оператору необходимо постоянно видеть полный неотсеченный текст, можно использовать вспомогательный элемент управления Надпись (Label) или многострочное поле ввода только для чтения.

Разберем пример реализации:

  1. Под полем выбора размещаем элемент Надпись.
  2. Устанавливаем для надписи свойства АвтопереносСтрок = Истина и увеличиваем её высоту по вертикали.
  3. В обработчике события ПриИзменении поля ввода обновляем текст надписи:

Процедура ПолеВводаНоменклатураПриИзменении(Элемент)
    ЭлементыФормы.НадписьПолноеНаименование.Заголовок = Строка(Элемент.Значение);
КонецПроцедуры

Итог: Стандартный выпадающий список в обычных формах 1С не поддерживает многострочный текст. Для интерфейсов ТСД рекомендуется использовать отдельную форму выбора с автопереносом строк либо диалог СписокЗначений.ВыбратьЭлемент().

← На главную