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

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

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

Разберемся с механизмом начала выбора

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


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

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

Настройка «АвтоПодбора» для контроля ввода по строке

Часто возникают ситуации, когда отбор в «Форме выбора» работает корректно, а при вводе текста в ячейке («быстрый выбор») список всё равно показывает всю номенклатуру. Чтобы синхронизировать оба метода выбора, воспользуемся обработчиком АвтоПодбор.

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

Рекомендации по настройке элементов формы

Чтобы минимизировать проблемы с нежелательным «быстрым выбором», проанализируем настройки реквизита в конфигураторе:

  1. Установите свойство КнопкаВыпадающегоСписка в значение Нет — это уберет лишние элементы интерфейса.
  2. Для строгого ограничения редактирования установите РедактированиеТекста в Ложь, если бизнес-задача требует исключить ввод вручную и оставить только выбор из списка.
  3. Если ввод по строке необходим, но он должен быть ограничен, используйте ИсторияВыбораПриВводе со значением Не использовать, чтобы система не предлагала ранее выбранные позиции, которые могут уже не подходить под текущие условия остатков.

Комплексный подход к задаче

Чтобы добиться идеальной работы механизма, рекомендуем следовать алгоритму:

Помните, что полное блокирование функционала платформы (например, через ПриАктивизацииЯчейки) может негативно сказаться на пользовательском опыте, делая документ менее удобным для быстрого заполнения. Лучший путь — это «обучение» механизма подбора правильным фильтрам, которые будут отрабатывать в любой ситуации, будь то быстрый ввод или полноценное открытие формы.

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

← На главную