Как в 1С:ERP 2.4 установить фильтр номенклатуры для реквизита?

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

При работе в 1С:ERP 2.4 программисты часто сталкиваются с необходимостью ограничить выбор данных в справочнике Номенклатура. Стандартное поведение системы предполагает открытие полноценной формы выбора, где слева отображается дерево видов и свойств. Это удобно для подбора товара в заказ, но избыточно, если реквизит на форме жестко привязан к конкретному типу объектов (например, только услуги или только тара). Рассмотрим подробно, как реализовать фильтрацию по виду номенклатуры и сделать интерфейс выбора максимально лаконичным.

Способ 1: Программная инициализация формы выбора (через НачалоВыбора)

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

Разберем по шагам логику, предложенную в решении задачи. Нам необходимо создать обработчик события НачалоВыбора для нашего реквизита на форме.


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

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

Способ 2: Настройка через свойства реквизита (без программирования)

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

Рассмотрим порядок настройки в конфигураторе:

  1. Найдем нужный реквизит в метаданных (в документе или справочнике) или непосредственно на форме.
  2. В палитре свойств найдем пункт Параметры выбора.
  3. Нажмем на кнопку выбора (лупа) и добавим новую строку.
  4. В колонке "Имя параметра" укажем Отбор.ВидНоменклатуры, а в колонке "Значение" выберем конкретный вид номенклатуры из справочника.

Важное преимущество: при такой настройке фильтрация будет работать не только в форме выбора, но и при "вводе по строке" (когда пользователь начинает печатать название прямо в поле ввода). Метод из Способа 1 (через код) на ввод по строке не влияет.

Способ 3: Фильтрация при вводе по строке (Автоподбор)

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

Выясним, как дополнить решение для обеспечения полной целостности данных:


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

Этот код гарантирует, что в подсказках (выпадающем списке при наборе текста) появятся только те позиции, которые соответствуют заданному виду номенклатуры.

Способ 4: Использование механизма "Связи параметров выбора"

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

Разберем ситуацию на примере. Допустим, у нас на форме есть поле КатегорияТоваров, и мы хотим, чтобы в поле Номенклатура отображались только товары этой категории:

  1. В свойствах реквизита Номенклатура найдем поле Связи параметров выбора.
  2. Добавим связь: в качестве "Параметра выбора" укажем Отбор.ВидНоменклатуры (или любой другой реквизит, по которому нужно фильтровать), а в "Поле формы" выберем имя нашего реквизита КатегорияТоваров.
  3. Теперь при изменении категории список доступной номенклатуры будет обновляться автоматически без единой строчки кода.

Управление визуальной частью: как скрыть дерево видов номенклатуры

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

Посмотрим на пример расширенной настройки параметров формы:


ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура("ВидНоменклатуры", ВидОбъекта));
// Специальный параметр для отключения иерархии в типовых формах выбора ERP
ПараметрыФормы.Вставить("РежимВыбораИерархии", Ложь); 
// Если форма поддерживает настройки БСП, можно попробовать:
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина);

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

← На главную