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