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

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

Кнопка «Подбор» в табличной части 1С: пошаговая инструкция

Как добавить кнопку «Подбор» в табличную часть документа 1С: команда формы, обработчик подбора номенклатуры, код на встроенном языке и типовые ошибки.

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

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

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

Как работает механизм подбора и когда он нужен

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

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

Проверка: есть ли типовой подбор в вашей конфигурации

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

В конфигураторе откройте форму документа и посмотрите список команд формы. Если там есть команда вида «ПодборТовары» или общая команда подбора — достаточно перетащить её в дерево элементов формы, в командную панель табличной части. Это самый быстрый и безопасный вариант: типовой обработчик уже умеет заполнять цены, ставки НДС и единицы измерения.

Создание команды и кнопки на форме

Если типового подбора нет, создайте его сами. Откройте в конфигураторе форму документа, перейдите на вкладку «Команды» → «Команды формы» и добавьте новую команду, например Подбор. Задайте заголовок «Подбор» и при желании картинку — в типовых используется иконка с лупой или списком.

Затем перетащите команду из дерева команд в дерево элементов формы — в командную панель табличной части (например, в группу «ТоварыКоманднаяПанель»). Кнопка появится рядом с «Добавить» и «Удалить». Проверьте, что свойство кнопки «ТолькоВоВсехДействиях» установлено в «Нет», иначе кнопка уйдёт в меню «Ещё» и потеряет смысл.

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

Порядок создания кнопки подбора
  1. 1
    Откройте форму документа в конфигураторе
  2. 2
    Создайте команду формы «Подбор» с заголовком и картинкой
  3. 3
    Перетащите команду в командную панель табличной части
  4. 4
    Создайте клиентский обработчик команды
  5. 5
    В обработчике откройте форму выбора справочника с оповещением
  6. 6
    В обработчике оповещения добавьте строку в табличную часть
  7. 7
    Обновите конфигурацию и проверьте в режиме предприятия

Код обработчиков: открытие формы и добавление строки

Обработчик команды открывает форму выбора справочника «Номенклатура» с параметром, запрещающим закрытие после выбора, и назначает оповещение, которое сработает при каждом выборе элемента.

&НаКлиенте

Процедура Подбор(Команда)

ПараметрыФормы = Новый Структура;

ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);

ПараметрыФормы.Вставить("РежимВыбора", Истина);

Оповещение = Новый ОписаниеОповещения("ПодборЗавершение", ЭтотОбъект);

ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",

ПараметрыФормы, ЭтотОбъект, , , , Оповещение);

КонецПроцедуры

Обработчик оповещения получает выбранную ссылку и добавляет строку в табличную часть. Количество по умолчанию ставится равным единице; цену и другие реквизиты можно заполнить вызовом серверной процедуры.

&НаКлиенте

Процедура ПодборЗавершение(Результат, ДопПараметры) Экспорт

Если Результат = Неопределено Тогда

Возврат;

КонецЕсли;

НоваяСтрока = Объект.Товары.Добавить();

НоваяСтрока.Номенклатура = Результат;

НоваяСтрока.Количество = 1;

КонецПроцедуры

Если нужно запретить дубли, перед добавлением проверьте наличие позиции: НайденныеСтроки = Объект.Товары.НайтиСтроки(Новый Структура("Номенклатура", Результат)) — и при совпадении увеличивайте количество в существующей строке вместо добавления новой.

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

Доработка формы выбора под подбор

Базовый вариант передаёт только ссылку на номенклатуру. Если пользователь должен сразу указывать количество и цену, понадобится отдельная форма подбора: создайте у справочника дополнительную форму, добавьте на неё поля «Количество» и «Цена», а при выборе элемента формируйте структуру с этими значениями и передавайте её через ОповеститьОВыборе(СтруктураРезультата).

В простом варианте можно обойтись без своей формы: включите в форме выбора множественный выбор (параметр МножественныйВыбор = Истина), тогда в оповещение придёт массив выбранных элементов, и вы добавите все строки циклом. Количество при этом придётся править уже в табличной части.

Варианты реализации подбора

Форма выбора с ЗакрыватьПриВыборе = Ложь

Минимум кода, подходит когда достаточно ссылки на элемент. Количество и цену пользователь правит в табличной части.

Множественный выбор

Пользователь отмечает несколько элементов, они добавляются массивом. Не подходит, если у позиций разное количество.

Отдельная форма подбора

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

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

После обновления конфигурации откройте документ в режиме предприятия и проверьте сценарий целиком: кнопка видна, форма выбора открывается, при двойном щелчке по элементу строка появляется в табличной части, форма выбора остаётся открытой, при закрытии формы ошибок не возникает. Отдельно проверьте проведение документа — если обязательные реквизиты строки (цена, ставка НДС, склад) не заполнены, документ не проведётся.

Частая ошибка — создание обработчика команды на сервере: ОткрытьФорму там недоступен, и команда завершится с ошибкой. Директива должна быть &НаКлиенте. Вторая типичная проблема — обработчик оповещения без ключевого слова Экспорт: платформа не сможет его вызвать, и выбор будет «молча» игнорироваться.

Типичные ошибки
01
Обработчик команды создан на сервере — ОткрытьФорму недоступен, команда падает с ошибкой
02
Нет Экспорт у обработчика оповещения — выбор элемента игнорируется без сообщений
03
Неверное имя табличной части в коде — строка добавляется не туда или возникает ошибка обращения
04
Не заполняются цены и ставки НДС — документ не проводится, хотя строки добавлены
05
Кнопка ушла в меню «Ещё» из-за свойства ТолькоВоВсехДействиях
Контрольные точки

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

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

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

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

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

Добавление строки
Норма

Строка с номенклатурой и количеством появляется в табличной части

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

Строка пустая, дублируется или не появляется

Проведение документа
Норма

Документ проводится без сообщений о незаполненных реквизитах

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

Ошибки «Не заполнена цена/ставка НДС» при проведении

Ограничения и безопасные границы доработки

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

Не изменяйте типовые общие модули подбора ради мелкой правки — это почти гарантированно создаст конфликт при обновлении. Любые изменения делайте сначала на копии базы, особенно если документ уже используется в учёте.

FAQ

Кнопка «Подбор» есть, но не видна на форме. Что делать?

Проверьте, что кнопка добавлена именно в командную панель табличной части, а не в общую командную панель формы, и что свойство «ТолькоВоВсехДействиях» выключено. Также проверьте видимость самой кнопки и права пользователя на команду.

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

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

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

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

Почему выбранный элемент не добавляется в табличную часть?

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

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

Перед добавлением строки выполните поиск: Объект.Товары.НайтиСтроки(Новый Структура("Номенклатура", Результат)). Если массив не пуст — увеличьте количество в найденной строке или покажите пользователю предупреждение, вместо создания новой строки.

Работает ли этот подход в обычных формах?

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

Итог

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

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