Почему «прыгает» список выбора с множественным выбором в 1С и как это исправить?

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

При разработке интерфейсов на управляемых формах вы могли столкнуться с неприятным визуальным эффектом: когда в поле ввода включено расширенное редактирование множественных значений, при установке флажков в выпадающем списке сам список «прыгает» или смещается в сторону. Это поведение платформы, связанное с пересчетом ширины элемента управления в момент отрисовки состояния выбранных данных.

Давайте разберемся, почему это происходит и какие существуют способы сделать работу интерфейса более комфортной для пользователя.

Понимание природы проблемы

Основная причина такого поведения заключается в том, как 1С обрабатывает РасширенноеРедактированиеМножественныхЗначений. Когда пользователь отмечает пункт флажком, платформа не просто обновляет внутреннее состояние списка, она пытается мгновенно пересчитать геометрию элемента, чтобы отобразить выбранные значения в поле ввода. В процессе этого «пересчета» происходит сдвиг области выпадающего окна, что и воспринимается нами как «прыгающий» список.

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

Метод №1: Попытка отключения расширенного редактирования

Первое, что мы можем предпринять — это проверить свойство РасширенноеРедактированиеМножественныхЗначений у поля ввода. Иногда разработчики включают этот режим по умолчанию, даже если функционал множественного выбора не используется в полном объеме или пользовательский интерфейс может быть реализован иначе.

  1. Откройте нужную форму в Конфигураторе.
  2. Выберите элемент управления (поле ввода).
  3. Перейдите в палитру свойств.
  4. Найдите свойство РасширенноеРедактированиеМножественныхЗначений и попробуйте установить его в значение Ложь.

Если для вашей бизнес-задачи это допустимо, данный метод полностью устранит проблему «прыжков», так как платформа перейдет к стандартному алгоритму отрисовки списка.

Метод №2: Технические «заглушки» для корректной отрисовки

Если отказаться от множественного выбора нельзя, мы можем попробовать визуально «стабилизировать» список. Некоторые разработчики применяют метод добавления пробелов в представление значений.

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


// Пример программного заполнения списка с корректировкой представлений
СписокВыбора = Новый СписокЗначений;
Для Каждого Элемент Из ВашаКоллекция Цикл
    // Добавляем невидимые отступы или спецсимволы, чтобы выровнять ширину
    ПредставлениеЭлемента = "    " + Элемент.Наименование; 
    СписокВыбора.Добавить(Элемент.Значение, ПредставлениеЭлемента);
КонецЦикла;

Также эффективным «хаком» является изменение общей ширины элемента формы. Поэкспериментируйте с шириной поля ввода, задав ей фиксированное значение, отличное от Авто. Часто жесткое задание ширины через свойство Ширина помогает платформе зафиксировать границы окна выбора.

Метод №3: Кардинальная смена UI-паттерна (Рекомендуемый подход)

Если эстетика интерфейса критична для ваших пользователей, и «прыгающий» список вызывает нарекания, лучше всего отказаться от встроенного выпадающего списка в пользу более надежных механизмов:

Выбор такого подхода требует написания дополнительного кода для передачи данных между формами, но это гарантирует стабильное поведение интерфейса во всех версиях платформы 1С.

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

← На главную