При разработке и сопровождении конфигураций на обычных (неуправляемых) формах разработчики часто сталкиваются с ситуацией, когда в элементе управления ПолеВвода, привязанном к реквизиту с типом СписокЗначений, длинные наименования выбранных элементов автоматически обрезаются платформой с добавлением многоточия. Рассмотрим подробно, почему так происходит и какими способами можно обойти данное ограничение платформы.
Проанализируем поведение элемента формы: если связать реквизит типа СписокЗначений с элементом управления ПолеВвода, платформа берет на себя автоматическое формирование сводной строки через запятую. Однако во внутренний движок отрисовки обычного приложения зашит жесткий лимит длины строкового представления одного элемента — примерно 25–26 символов. Если представление элемента превышает этот порог, платформа принудительно обрезает строку и дописывает троеточие.
Важно понимать: в палитре свойств элемента управления ПолеВвода нет штатных настроек (формата, маски или длины строки), которые могли бы отключить это поведение. Включение свойства МногострочныйРежим = Истина также не решает задачу — платформа лишь начинает переносить текст на новые строки, продолжая сокращать сами элементы до 25 символов. Обойти эту особенность стандартными галочками в конфигураторе невозможно, поэтому разберем практические способы доработки формы.
Если требуется сохранить стандартное поле ввода и не переписывать логику выбора элементов через список, наиболее аккуратным решением будет вывод полного текста в подсказку элемента управления. Пользователь сможет видеть обрезанный текст в поле, но при наведении мыши получит полный перечень без сокращений.
Разберем по шагам, как это реализовать:
ПолеВвода и его связь с реквизитом СписокЗначений без изменений.ПриИзменении поля ввода.Посмотрим на пример реализации кода:
Функция ПолучитьПолныйТекстСписка(Список)
Результат = "";
Для Каждого ЭлементСписка Из Список Цикл
Если Не ПустаяСтрока(Результат) Тогда
Результат = Результат + ", ";
КонецЕсли;
Результат = Результат + СокрЛП(ЭлементСписка.Представление);
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура СписокОрганизацийПриИзменении(Элемент)
ЭлементыФормы.СписокОрганизаций.Подсказка = ПолучитьПолныйТекстСписка(СписокОрганизаций);
КонецПроцедуры
Если требования пользователей категоричны и обрезанные строки не должны отображаться вовсе, применим схему разделения интерфейсного представления и данных. В качестве отображаемого реквизита на форме используем обычную строку, а сам СписокЗначений будем хранить в памяти модуля или отдельном невидимом реквизите формы.
Разберем алгоритм решения:
КнопкаВыбора = Истина.НачалоВыбора отключаем стандартную обработку и вызываем форму редактирования исходного списка значений с помощью метода ОтметитьЭлементы().Посмотрим, как выглядит программная обработка такого поля:
Процедура ПолеВводаСтрокаНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// М_СписокЗначений - список с реальными объектами, хранящийся в модуле
Если М_СписокЗначений.ОтметитьЭлементы("Выберите элементы") Тогда
СтроковоеПредставление = "";
Для Каждого ТекЭлемент Из М_СписокЗначений Цикл
Если ТекЭлемент.Пометка Тогда
Если Не ПустаяСтрока(СтроковоеПредставление) Тогда
СтроковоеПредставление = СтроковоеПредставление + ", ";
КонецЕсли;
СтроковоеПредставление = СтроковоеПредставление + СокрЛП(ТекЭлемент.Представление);
КонецЕсли;
КонецЦикла;
Элемент.Значение = СтроковоеПредставление;
КонецЕсли;
КонецПроцедуры
Когда выбранных значений много и они имеют длинные наименования, вывод их через запятую в одну строку часто бывает неудобен для восприятия. В таких ситуациях хорошей альтернативой является замена одиночного поля ввода на элемент управления ТабличноеПоле.
Табличное поле связывается напрямую с объектом СписокЗначений. В отличие от поля ввода, табличное поле отображает значения построчно в колонке, где ширина текста не ограничивается искусственным лимитом ядра платформы, а полностью адаптируется под размер колонки или формы. Пользователь получает возможность просматривать полные наименования и управлять флажками выбора элементов непосредственно на форме документа или отчета.