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

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

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

Анализируем причины автоматического раскрытия списка

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

  1. Свойство «Быстрый выбор» (QuickChoice): Это наиболее вероятный «виновник». Если данное свойство установлено в значение Да (Истина), система открывает список сразу при получении фокуса.
  2. Заполнение списка при создании формы: Если СписокВыбора для поля уже заполнен на сервере (например, в процедуре ПриСозданииНаСервере), платформа «видит» наличие данных и готова их отобразить.
  3. Режим редактирования колонки: Свойства РежимРедактирования в табличной части определяют, когда ячейка переходит в состояние ввода текста.
  4. Тип данных: Если у поля составной тип данных, при активации может выпадать меню выбора типа, что визуально похоже на выпадающий список.

Решение 1: Отключение свойства «Быстрый выбор»

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

Выполним следующие шаги в конфигураторе:

  1. Откроем управляемую форму и выберем нужный элемент — поле ввода в табличной части.
  2. В палитре свойств найдем раздел «Использование».
  3. Установим свойство Быстрый выбор в значение Нет.
  4. Дополнительно проверим свойство Режим выбора из списка. Если оно включено, попробуем его отключить, если логика программы позволяет вводить значения, не входящие в предопределенный набор.

После этих настроек платформа перестанет проявлять избыточную «инициативу» при добавлении новой строки.

Решение 2: Изменение режима редактирования табличной части

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

Рассмотрим варианты:

Попробуем изменить это свойство программно или в конфигураторе, чтобы протестировать поведение системы в конкретной версии платформы. Часто сочетание БыстрыйВыбор = Ложь и РежимРедактирования = Вход дает нужный результат. Для быстрой проверки и изменения параметров элементов прямо в пользовательском сеансе подойдёт обработка для редактирования свойств форм в режиме предприятия.

Решение 3: Динамическое заполнение списка в событии НачалоВыбораИзСписка

Если манипуляции со свойствами в конфигураторе не помогают (что иногда случается на определенных релизах платформы 8.3), применим более продвинутый программный метод. Суть его заключается в том, чтобы держать СписокВыбора пустым до тех пор, пока пользователь сам не нажмет на кнопку выбора.

Проанализируем ситуацию: если в поле нет списка, то платформе нечего показывать автоматически при добавлении строки. Мы заполним список «на лету». Рассмотрим пример кода:


&НаКлиенте
Процедура ТЧТоварыЗначениеНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
    
    // Сначала очищаем список, чтобы не было дублей
    Элемент.СписокВыбора.Очистить();
    
    // Вызываем серверную функцию для получения актуальных данных
    ДанныеДляВыбора = ПолучитьСписокЗначенийДляПоля();
    
    // Заполняем список выбора элемента формы
    Для Каждого Вариант Из ДанныеДляВыбора Цикл
        Элемент.СписокВыбора.Добавить(Вариант.Значение, Вариант.Представление);
    КонецЦикла;
    
КонецПроцедуры

При таком подходе при добавлении новой строки поле будет считаться «пустым» с точки зрения вариантов выбора, и автоматического раскрытия не произойдет. Список сформируется и отобразится только тогда, когда сработает событие НачалоВыбораИзСписка, вызванное кликом пользователя.

Решение 4: Подавление стандартной обработки в событии АвтоПодбор

Разберем еще одну ситуацию: когда список раскрывается из-за механизмов автоподбора. Если вы программно установили связь параметров выбора или используете сложные типы, система может пытаться «подсказать» значение. Чтобы это предотвратить, можно использовать обработчик АвтоПодбор.

Посмотрим на пример реализации:


&НаКлиенте
Процедура ТЧТоварыЗначениеАвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка)
    
    // Если мы не хотим, чтобы список выпадал сам при вводе или активации
    // можно управлять флагом СтандартнаяОбработка
    Если ПустаяСтрока(Текст) Тогда
        СтандартнаяОбработка = Ложь;
    КонецЕсли;
    
КонецПроцедуры

Это позволит более тонко контролировать моменты, когда платформа решает показать выпадающее окно.

Решение 5: Уточнение типа данных (для составных типов)

Выясним причину, связанную с составными типами. Если колонка табличной части может содержать и СправочникСсылка.Склады, и СправочникСсылка.Подразделения, то при добавлении строки 1С обязана спросить пользователя: «Какой тип данных вы будете вводить?». Это выглядит как выпадающий список.

Чтобы этого избежать, выполним следующие действия:

  1. В свойстве поля Ограничение типа укажите конкретный тип, если это возможно.
  2. Если тип должен меняться динамически, устанавливайте тип значения программно сразу после добавления строки в обработчике ПриИзменении или ПередНачаломДобавления.

Рассмотрим код инициализации типа в новой строке:


&НаКлиенте
Процедура ТЧПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметры)
    
    // Мы можем заранее подготовить структуру новой строки
    // Чтобы система уже знала тип значения в будущей ячейке
    // Это предотвратит вызов диалога выбора типа
    
КонецПроцедуры

Подведем итоги

Мы рассмотрели несколько методов борьбы с нежелательным раскрытием списка выбора. Самым надежным и рекомендуемым является комбинация отключения свойства «Быстрый выбор» и использование события «НачалоВыбораИзСписка» для динамического наполнения данных. Это гарантирует, что интерфейс будет вести себя предсказуемо, а ресурсы сервера будут тратиться на получение списка только тогда, когда это действительно нужно пользователю.

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

← На главную