Как правильно реализовать фильтр по складу в подборе номенклатуры в 1С:УТ 10.3?

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

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

Понимание архитектуры механизма подбора

Механизм подбора в УТ 10 — это чаще всего отдельная обработка (или форма), которая открывается модально. Основная ошибка заключается в попытке изменить логику переноса данных (в модуле объекта документа), тогда как влиять нужно на процесс формирования списка товаров до того, как пользователь увидит его на экране.

Вариант 1: Использование стандартной настройки списка

Если форма подбора использует стандартное табличное поле, привязанное к объекту СправочникСписок или РегистрНакопленияСписок, мы можем воспользоваться механизмом отборов. Разберем, как это сделать программно в модуле формы подбора:

В событии ПриОткрытии формы подбора мы можем принудительно установить отбор для пользователя:


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

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

Вариант 2: Доработка запроса к остаткам

Для более глубокой и профессиональной реализации, особенно если требуется отображать реальные остатки по складу, необходимо проанализировать запрос, формирующий таблицу остатков. В УТ 10 данные об остатках на складах чаще всего берутся из регистра накопления ТоварыНаСкладах.

Чтобы отбор работал максимально эффективно, рекомендуем внести изменения в текст запроса, который выполняется при обновлении списка товаров. Найдите функцию, отвечающую за получение данных (обычно она находится в модуле формы или в модуле менеджера обработки подбора), и дополните условие ГДЕ:


ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура,
    ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &Склад) КАК ТоварыНаСкладахОстатки

Использование параметра &Склад в виртуальной таблице Остатки — это наиболее производительный способ фильтрации в 1С. Система сама отсечет ненужные записи на уровне обращения к базе данных, что значительно ускорит работу формы.

Ключевые рекомендации по реализации

  1. Передача параметров: При вызове формы подбора из документа (через ОткрытьФормуМодально), передавайте склад в структуру параметров. Это позволит форме подбора «знать», какой склад был выбран пользователем в документе-основании.
  2. Не изменяйте ОбработкаПодбора для фильтрации: Помните, что процедура ОбработкаПодбора предназначена только для добавления строки в табличную часть документа, а не для управления видимостью товаров в справочнике.
  3. Гибкость настроек: Если склад может меняться прямо в форме подбора, предусмотрите на форме элемент управления (поле выбора), при изменении которого будет выполняться пересчет данных (вызов метода Обновить() или переформирование запроса).

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

← На главную