К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как реализовать подбор в 1С: настройка и программная реализация

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

Подбор — это механизм, который позволяет пользователю выбирать позиции номенклатуры из отдельной формы и переносить их в табличную часть документа, не создавая каждую строку вручную. В типовых конфигурациях 1С (Управление торговлей, ERP, Комплексная автоматизация, Управление нашей фирмой) подбор уже встроен в документы продажи, закупки и складские операции, однако его часто требуется настроить под свои задачи или реализовать в самописной конфигурации.

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

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

Как работает типовой подбор и где его искать

В конфигурациях на управляемых формах подбор реализован как общая форма или обработка, встроенная в командный интерфейс документов. В документе «Реализация товаров и услуг», «Заказ клиента», «Приобретение товаров и услуг» и аналогичных над табличной частью есть кнопка «Подобрать товары» (иногда — «Заполнить» → «Подобрать товары»). В Управлении нашей фирмой команда называется «Подбор» и доступна также по сочетанию клавиш.

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

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

Настройка типовой формы подбора

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

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

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

Реализация подбора в собственной конфигурации

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

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

bsl
&НаКлиенте
Процедура ПодобратьНоменклатуру(Команда)
	ПараметрыФормы = Новый Структура("Склад, ЗакрыватьПриВыборе", Объект.Склад, Ложь);
	ОткрытьФорму("Обработка.ПодборНоменклатуры.Форма", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	НоваяСтрока = Объект.Товары.Добавить();
	НоваяСтрока.Номенклатура = ВыбранноеЗначение.Номенклатура;
	НоваяСтрока.Количество = ВыбранноеЗначение.Количество;
КонецПроцедуры

Чтобы форма подбора не закрывалась после каждого выбора, в неё передаётся параметр ЗакрыватьПриВыборе = Ложь, а добавление позиции выполняется кодом вида ОповеститьОВыборе(Новый Структура("Номенклатура, Количество", ...)). В форме документа у корневого элемента формы должно быть установлено свойство обработчика ОбработкаВыбора — иначе оповещение не будет получено.

Запрос для списка подбора: остатки и цены

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

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

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

Проверка результата и типичные ошибки

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

Типичные ошибки
01
Форма подбора не получает параметры документа — цены и остатки показываются не по тому складу или виду цен
02
Отсутствует обработчик ОбработкаВыбора в форме документа — выбранные позиции не попадают в табличную часть
03
Внутреннее соединение с регистром остатков — номенклатура без остатков исчезает из списка подбора
04
Дублирование строк при повторном выборе той же позиции без проверки на существование
05
Запись документа внутри обработки выбора — конфликты блокировок при множественном подборе
Контрольные точки

Как проверить результат

Открытие формы подбора
Норма

Форма открывается с отбором по складу и виду цен документа

Тревожный признак

Форма открывается без отборов или с ошибкой параметра

Добавление позиции
Норма

Строка появляется в табличной части документа, форма подбора остаётся открытой

Тревожный признак

Строка не добавляется или форма закрывается после первого выбора

Запись документа
Норма

Документ записывается, проведение учитывает подобранные строки

Тревожный признак

При записи ошибки блокировки или потеря строк

Альтернативы самостоятельной разработке

Не всегда подбор нужно программировать. В типовых конфигурациях часть задач закрывается другими механизмами: заполнение по остаткам, по продажам за период, по заказу-поставщику, загрузка из внешнего файла (Excel) через типовую обработку загрузки табличных частей. Если цель — быстро заполнить документ известным набором позиций, загрузка из файла может оказаться проще интерактивного подбора.

Сравнение вариантов

Типовой подбор

Подходит для стандартных продаж и закупок; ограничение — состав колонок и логика заданы конфигурацией

Расширение конфигурации

Подходит, когда нужно добавить колонки или отборы в типовой подбор без снятия с поддержки

Собственная форма подбора

Полный контроль над логикой; требует разработки и сопровождения запросов и форм

Загрузка из файла

Быстрое заполнение по заранее подготовленному списку; нет интерактивного выбора с остатками

Выбор зависит от масштаба задачи: для разовой доработки типового документа достаточно расширения, для отраслевого решения со специфическим интерфейсом (например, подбор по аналогам и применяемости) оправдана собственная форма.

FAQ

Почему кнопка «Подобрать товары» неактивна в документе?

Чаще всего не заполнены реквизиты шапки, от которых зависит подбор: склад, соглашение, организация или вид операции. Заполните обязательные поля документа — команда станет доступна. Также проверьте права пользователя и видимость команды в меню «Ещё».

Как добавить в подбор колонку с резервом или свободным остатком?

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

Можно ли сделать подбор с картинками товаров?

Да. Для этого в запрос динамического списка добавляют поле со ссылкой на файл изображения (в типовых — присоединенные файлы номенклатуры), а в форме настраивают отображение списка в режиме с картинками. Учтите, что вывод изображений замедляет работу при больших списках.

Как при подборе автоматически подставлять цену из соглашения?

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

Что делать, если подбор работает медленно на большой базе?

Проверьте запрос динамического списка: отборы по складу и дате должны передаваться параметрами виртуальных таблиц, а не условием ГДЕ. Уберите вывод изображений и лишние соединения, ограничьте список группой номенклатуры. Замер производительности в конфигураторе покажет, какой именно запрос тормозит форму.

Итог

Что важно запомнить

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