Разработка и Конфигурация · 12 мин
Как сделать кнопку «Подбор» в 1С
Как добавить кнопку «Подбор» в документ 1С: настройка команды формы, открытие формы выбора номенклатуры, обработка подобранных позиций и типичные ошибки.
Кнопка «Подбор» в документах 1С открывает форму выбора номенклатуры (или другого справочника) и позволяет добавлять в табличную часть сразу несколько позиций, не создавая строку за строкой. В типовых конфигурациях такая кнопка уже есть в большинстве документов, но в самописных или доработанных формах её часто приходится добавлять вручную.
Реализация зависит от режима работы: в управляемых формах (тонкий клиент, «Управление торговлей 11», «Бухгалтерия 3.0») используется команда формы и обработчик оповещения, а в обычных формах — метод «ОткрытьФормуМодально» или обработка выбора. Ниже разобраны оба подхода, но основной акцент сделан на управляемом приложении, так как оно используется в подавляющем большинстве современных решений.
Перед началом работы убедитесь, что у вас есть права на изменение конфигурации и создана резервная копия информационной базы. Изменение форм документов — безопасная операция при соблюдении порядка действий, но ошибка в обработчике может привести к потере введённых данных в открытом документе.
Что такое подбор и когда он нужен
Подбор — это механизм множественного выбора элементов справочника с переносом их в табличную часть документа. В отличие от обычного выбора в поле ввода, подбор позволяет открыть список номенклатуры, отметить несколько позиций, указать количество и цены, а затем одним действием перенести всё в документ.
Механизм особенно полезен, когда в документе десятки строк: приходные накладные, заказы покупателей, инвентаризации, списания. Без подбора пользователь вынужден для каждой строки заново открывать список, искать позицию и вводить количество, что многократно увеличивает время работы и число ошибок.
В типовых конфигурациях кнопка обычно называется «Подбор», «Подобрать товары» или «Добавить подбором» и располагается в командной панели табличной части. Если вы дорабатываете типовую форму, сначала проверьте, нет ли уже готовой команды — возможно, достаточно вывести её на форму через «Изменить форму».
Подготовка: что проверить перед настройкой
Сначала определите, в каком режиме работает ваша конфигурация. Откройте свойства конфигурации в конфигураторе и посмотрите параметр «Режим использования модальности» и «Основной режим запуска». Если приложение запускается в режиме «Управляемое приложение» — используйте механизм оповещений, описанный ниже. Для обычного приложения логика строится на модальном открытии формы.
Далее уточните, какая форма справочника будет использоваться для подбора. У справочника «Номенклатура» должна существовать форма выбора — либо основная, либо специально созданная для подбора (например, «ФормаПодбора»). В типовых конфигурациях форма подбора часто содержит дополнительные поля: остаток на складе, цену, характеристику.
Также проверьте имя табличной части документа, в которую будут добавляться позиции. Чаще всего это «Товары» или «Материалы», но в самописных конфигурациях имя может быть любым — точное значение понадобится в коде обработчика.
Свойства конфигурации → Основной режим запуска
Справочник Номенклатура → Формы → ФормаВыбора
Документ → Данные → Табличные части
Нужна роль с правом на конфигурирование или расширение
Создаём команду и кнопку на форме документа
Откройте конфигуратор, найдите нужный документ и перейдите на закладку «Формы». Откройте основную форму документа. В редакторе формы перейдите на вкладку «Команды» → «Команды формы» и добавьте новую команду с именем «Подбор». В свойствах команды укажите заголовок «Подбор» и при необходимости картинку.
После создания команды перетащите её из дерева команд в дерево элементов формы — в командную панель табличной части. Если табличная часть называется «Товары», найдите элемент «ТоварыКоманднаяПанель» и поместите кнопку туда. Кнопка появится над списком товаров в документе.
Для команды автоматически создаётся обработчик. Если конфигуратор предложил создать действие — соглашайтесь, будет создана процедура «Подбор(Команда)» в модуле формы. В неё мы добавим код открытия формы выбора.
- 1Откройте форму документа в конфигураторе
- 2Добавьте команду формы с именем Подбор
- 3Перетащите команду в командную панель табличной части
- 4Создайте обработчик команды Подбор(Команда)
- 5Добавьте код открытия формы выбора с оповещением
- 6Создайте обработчик ОбработкаВыбора на форме документа
- 7Обновите конфигурацию и проверьте работу в режиме предприятия
Код открытия формы подбора
В управляемом приложении модальные вызовы запрещены или нежелательны, поэтому форма выбора открывается с описанием оповещения о закрытии. В обработчике команды укажите параметры: режим выбора, множественный выбор и, при необходимости, отбор по признакам (например, только товары, без услуг).
Типовой вариант обработчика выглядит так: создаётся структура параметров, в которой включается режим выбора и множественный подбор, затем вызывается «ОткрытьФорму» с указанием формы выбора справочника и описанием оповещения, которое сработает после закрытия формы подбора.
&НаКлиенте
Процедура Подбор(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ПараметрыФормы.Вставить("МножественныйВыбор", Истина);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
Оповещение = Новый ОписаниеОповещения("ПодборЗавершение", ЭтотОбъект);
ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",
ПараметрыФормы, ЭтотОбъект, , , , Оповещение,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
Параметр «ЗакрыватьПриВыборе = Ложь» оставляет форму подбора открытой после каждого выбора — пользователь может добавлять позиции подряд. Если нужно, чтобы форма закрывалась после одного выбора, установите значение «Истина» или уберите параметр.
Обработка результата подбора
Результат подбора обрабатывается в процедуре, указанной в описании оповещения. В ней проверяется, что пользователь что-то выбрал, и каждая выбранная позиция добавляется новой строкой в табличную часть. Если результат — массив (при множественном выборе), проходим по нему циклом; если одиночная ссылка — добавляем одну строку.
&НаКлиенте
Процедура ПодборЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(Результат) = Тип("Массив") Тогда
Для Каждого Элемент Из Результат Цикл
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = Элемент;
КонецЦикла;
Иначе
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = Результат;
КонецЕсли;
Модифицированность = Истина;
КонецПроцедуры
Установка признака «Модифицированность» важна: без неё документ может закрыться без вопроса о сохранении, и подобранные позиции потеряются. Если в табличной части есть цены и количества, после добавления строки обычно вызывают типовые процедуры расчёта — например, подстановку цены из регистра или пересчёт суммы. В типовых конфигурациях для этого существуют экспортные процедуры модулей формы.
Альтернатива оповещению — стандартное событие формы «ОбработкаВыбора». Оно срабатывает автоматически, если форма выбора открыта с параметром «РежимВыбора» и владельцем указана текущая форма. В событии доступны параметры «ВыбранноеЗначение» и «ИсточникВыбора». Этот вариант проще, но менее гибкий: сложно передавать дополнительные параметры и различать несколько кнопок подбора на одной форме.
Подбор в обычных формах и через расширение
В обычном приложении (конфигурации на платформе 8.2 и ранние 8.3 в режиме обычного клиента) форма выбора открывается модально методом «ОткрытьМодально», а результат возвращается напрямую. Код короче, но такой подход несовместим с веб-клиентом и тонким клиентом в режиме отказа от модальности.
Если конфигурация типовая и находится на поддержке, прямое изменение формы затруднит обновление. В этом случае используйте расширение конфигурации: создайте расширение, заимствуйте форму документа, добавьте команду и кнопку с аннотацией «&После» или «&Вместо» для существующих обработчиков. Расширение сохранит возможность штатного обновления конфигурации.
Способы реализации подбора
Гибкий вариант для управляемых форм: можно передавать параметры и обрабатывать несколько кнопок. Требует отдельной экспортной процедуры.
Проще в реализации, срабатывает автоматически. Неудобно, если на форме несколько разных подборов.
Подходит только для обычных форм. В управляемом приложении блокируется настройками платформы.
Правильный путь для типовых конфигураций на поддержке. Требует аккуратности при обновлении релизов.
Типичные ошибки и проверка результата
Самая частая ошибка — забытый признак «МножественныйВыбор»: пользователь выбирает одну позицию, форма закрывается, и механизм выглядит сломанным. Вторая распространённая проблема — неверное имя табличной части в коде: программа завершается ошибкой «Поле объекта не обнаружено» при попытке добавить строку.
Ещё одна типичная ситуация — дубли строк: пользователь подбирает позицию, которая уже есть в документе, и она добавляется повторно. Решите заранее, как должна работать форма: либо перед добавлением проверять наличие строки и увеличивать количество, либо открыто допускать дубли. В типовых конфигурациях обычно действует первый вариант.
После внедрения проверьте механизм в нескольких сценариях: подбор одной позиции, подбор нескольких позиций, отмена выбора, повторный подбор той же номенклатуры. Убедитесь, что цены и количества рассчитываются корректно и документ проводится без ошибок.
Как проверить результат
Форма подбора открывается поверх документа
Ошибка или форма не реагирует на кнопку
Можно отметить несколько позиций
Форма закрывается после первого выбора
Все позиции попадают в табличную часть
Строки пустые или появляется ошибка
Закрытие без выбора ничего не меняет
Добавляется пустая строка
Документ предлагает записать изменения
Документ закрывается без вопроса
Часто задаваемые вопросы
Почему кнопка «Подбор» не отображается на форме, хотя команда создана?
Команда не появляется на форме автоматически — её нужно перетащить из списка команд в дерево элементов формы, обычно в командную панель табличной части. Также проверьте свойство «Видимость» кнопки и права пользователя на команду.
Как передать в форму подбора склад или организацию для отбора остатков?
Добавьте нужные значения в структуру параметров перед вызовом «ОткрытьФорму», например ПараметрыФормы.Вставить("Склад", Объект.Склад). В модуле формы подбора эти параметры доступны через объект «Параметры» и могут использоваться для установки отбора динамического списка.
Можно ли сделать подбор без программирования в типовой конфигурации?
Если кнопка «Подбор» предусмотрена типовой конфигурацией, но скрыта, откройте документ, нажмите «Ещё» → «Изменить форму» и включите видимость нужной команды. Если команды нет вовсе — без доработки конфигурации или расширения не обойтись.
Почему после подбора не подставляются цены?
Добавление строки через «Объект.Товары.Добавить()» заполняет только те поля, которые вы указали в коде. Подстановку цены, ставки НДС и пересчёт суммы нужно вызывать явно — обычно это те же процедуры, которые срабатывают при ручном выборе номенклатуры в строке.
Как избежать дублей при повторном подборе одной позиции?
Перед добавлением строки выполните поиск по табличной части методом «НайтиСтроки» с отбором по номенклатуре. Если строка найдена — увеличьте в ней количество, если нет — добавьте новую. Логику следует согласовать с пользователями, так как иногда дубли допустимы.
Что важно запомнить
Кнопка «Подбор» — это команда формы документа, открывающая форму выбора справочника с множественным выбором, плюс обработчик, переносящий выбранные позиции в табличную часть. Для типовых конфигураций делайте доработку через расширение и обязательно проверяйте механизм на копии базы.