Добавление кнопки «Подбор» в табличные части документов или справочников 1С:Предприятие — одна из самых востребованных задач среди разработчиков и пользователей системы. Эта функция значительно упрощает работу с большими объемами данных, позволяя быстро выбирать нужные элементы из справочников без ручного ввода. Однако реализация кнопки требует не только знания конфигуратора, но и понимания механизмов взаимодействия форм, табличных частей и обработчиков событий.

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

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

📊 Какой тип формы вы чаще используете в 1С?
Управляемые формы
Обычные формы
Работаю только с отчетами
Не знаю разницы

1. Подготовка: что нужно знать перед созданием кнопки «Подбор»

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

  • 📄 Документы (например, подбор товаров в табличную часть «Товары» документа «Реализация»)
  • 📋 Справочники (подбор элементов в подчиненные справочники)
  • 📊 Отчеты и обработки (для фильтрации данных)

От типа объекта зависит логика работы кнопки и набор доступных методов. Например, в документах часто требуется проверка остатков товаров при подборе, а в справочниках — фильтрация по иерархии.

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

  • 🖥️ Управляемые формы: настройка через конструктор форм или программно в модуле формы.
  • 🖥️ Обычные формы: требуется ручное редактирование модуля формы и работа с элементами управления.
💡

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

Перед началом работы проверьте:

Открыты ли права на изменение конфигурации|

Создана ли резервная копия базы данных|

Определен ли справочник или документ, для которого нужна кнопка|

Проверена ли актуальность платформы 1С (не ниже 8.3.10 для управляемых форм)-->

2. Способ 1: Добавление кнопки «Подбор» через конструктор форм (для управляемых форм)

Самый простой способ — использовать встроенный конструктор форм. Он доступен для управляемых форм и позволяет добавить кнопку «Подбор» без написания кода. Рассмотрим процесс на примере документа «Заказ клиента»:

1. Откройте конфигуратор и найдите документ, в который нужно добавить кнопку. Перейдите в раздел Формы → Форма документа.

2. В конструкторе формы выделите табличную часть (например, Товары) и нажмите правой кнопкой мыши. Выберите Добавить команду → Подбор.

3. В открывшемся окне укажите параметры:

  • 📌 Источник данных: справочник или документ, откуда будет осуществляться подбор (например, «Номенклатура»).
  • 🔍 Фильтр: при необходимости задайте условия отбора (например, только товары с остатками).
  • 📤 Поле связи: укажите, какое поле табличной части будет заполняться (обычно это Номенклатура).

4. Сохраните форму и обновлите конфигурацию базы данных. Кнопка «Подбор» появится в заголовке табличной части.

Что делать, если кнопка не отображается?

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

⚠️ Внимание: Если в справочнике или документе, откуда осуществляется подбор, есть дополнительные реквизиты (например, характеристики номенклатуры), их нужно явным образом указать в параметрах команды «Подбор», иначе они не будут доступны для выбора.

3. Способ 2: Ручное программирование кнопки «Подбор» (для обычных форм)

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

Рассмотрим пример для табличной части Товары в документе «Поступление товаров»:

1. Откройте форму документа в конфигураторе и добавьте новую кнопку в командную панель табличной части. Задайте ей имя, например, КнопкаПодборТоваров.

2. В модуле формы создайте обработчик события ПриНажатии для этой кнопки:

&НаКлиенте

Процедура КнопкаПодборТоваровПриНажатии(Элемент)

// Открываем форму подбора номенклатуры

Результат = ПоказатьВыборЗначения(

Новый ОписаниеОпцийВыбора(

Новый ИсточникДанныхВыбора(Справочники.Номенклатура.ПустаяСсылка()),

Новый Структура("ФильтрПоГруппе, ТолькоСОстатками", Истина, Истина)

),

Истина

);

// Если пользователь выбрал элемент, добавляем его в табличную часть

Если НЕ Результат.Отказ Тогда

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

НоваяСтрока.Номенклатура = Результат.ВыбранноеЗначение;

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

КонецЕсли;

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

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

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

    НоваяСтрока.Цена = Результат.ВыбранноеЗначение.ЦенаПродажи;
⚠️ Внимание: При ручном программировании легко допустить ошибку в типах данных. Например, если в табличной части поле Номенклатура имеет тип «СправочникСсылка.Номенклатура», а вы пытаетесь записать в него значение типа «Строка», возникнет ошибка выполнения. Всегда проверяйте соответствие типов!

4. Способ 3: Использование расширений для добавления кнопки «Подбор»

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

Алгоритм действий:

  1. Создайте новое расширение через меню Конфигурация → Поддержка → Расширения конфигурации.
  2. В расширении найдите форму документа или справочника, куда нужно добавить кнопку, и скопируйте её в расширение.
  3. В скопированной форме добавьте кнопку «Подбор» так же, как в первом способе (через конструктор или программно).
  4. Сохраните расширение и обновите конфигурацию базы данных.

Преимущества этого метода:

  • 🔄 Совместимость с обновлениями: при обновлении типовой конфигурации ваши изменения не затрутся.
  • 🛠️ Гибкость: можно добавлять кнопки только для определенных ролей или условий.
  • 📦 Модульность: расширения легко переносить между базами.

Пример кода для расширения, где кнопка «Подбор» появляется только для пользователей с ролью «Менеджер по продажам»:

&НаКлиенте

Процедура ПриОткрытии(Отказ)

Если НЕ ГлобальныйКонтекст.Пользователь.Роли.Найти("МенеджерПоПродажам") Тогда

ЭлементыФормы.КнопкаПодбор.Видимость = Ложь;

КонецЕсли;

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

5. Типичные ошибки и их решение

Даже опытные разработчики сталкиваются с проблемами при настройке кнопки «Подбор». Рассмотрим наиболее распространенные ошибки и способы их исправления:

Ошибка Причина Решение
Кнопка не отображается в форме Не включен показ команд таблицы или ошибка в модуле формы Проверьте свойство ПоказыватьКомандыТаблицы и синтаксис обработчика
При нажатии ничего не происходит Не указан обработчик события или ошибка в коде Проверьте имя процедуры и наличие ключевого слова &НаКлиенте
Подбор открывается, но не фильтрует данные Не переданы параметры фильтра в ПоказатьВыбор() Явно укажите структуру фильтра, например: Новый Структура("ТолькоГруппы, Поиск", Ложь, "Товар*")
После выбора элемент не добавляется в табличную часть Ошибка в логике добавления строки или неверное поле связи Отладьте код пошагово, проверьте соответствие типов данных

Одна из самых коварных ошибок — когда подбор работает в режиме «1С:Предприятие», но не работает в веб-клиенте. Это связано с ограничениями платформы при работе через браузер. В таком случае используйте метод ПоказатьВыборНаСервере() вместо ПоказатьВыбор():

&НаСервере

Функция ПоказатьПодборНаСервере()

Возврат ПоказатьВыборЗначенияНаСервере(Новый ОписаниеОпцийВыбора(...));

КонецФункции

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

6. Оптимизация и расширенные возможности кнопки «Подбор»

Базовая реализация кнопки «Подбор» покрывает большинство задач, но иногда требуются дополнительные функции:

  • 🔄 Множественный подбор: возможность выбора нескольких элементов за один раз.
  • 📈 Подбор с учетом остатков: автоматическая проверка наличия товара на складе.
  • 🔍 Контекстный фильтр: динамическая фильтрация в зависимости от текущих данных документа.
  • 📊 Подбор по шаблону: заполнение нескольких полей табличной части (например, цена, скидка) на основе выбранного элемента.

Пример кода для множественного подбора:

&НаКлиенте

Процедура КнопкаПодборМножественныйПриНажатии(Элемент)

МассивВыбранных = Новый Массив;

ОпцииВыбора = Новый ОписаниеОпцийВыбора(

Новый ИсточникДанныхВыбора(Справочники.Номенклатура.ПустаяСсылка()),

Новый Структура("МножественныйВыбор", Истина)

);

Результат = ПоказатьВыборЗначения(ОпцииВыбора, Истина);

Если НЕ Результат.Отказ Тогда

Для Каждого ВыбранныйЭлемент Из Результат.ВыбранныеЗначения Цикл

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

НоваяСтрока.Номенклатура = ВыбранныйЭлемент;

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

КонецЦикла;

КонецЕсли;

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

Для подбора с учетом остатков модифицируйте фильтр:

Фильтр = Новый Структура();

Фильтр.Вставить("ТолькоСОстатками", Истина);

Фильтр.Вставить("Склад", Объект.Склад); // Текущий склад из документа

ОпцииВыбора = Новый ОписаниеОпцийВыбора(

Новый ИсточникДанныхВыбора(Справочники.Номенклатура.ПустаяСсылка()),

Фильтр

);

💡

Используйте серверные функции для сложных фильтров — это разгрузит клиентскую часть и ускорит работу подбора.

7. Примеры реальных задач и их решение

Разберем три практических примера, с которыми часто сталкиваются пользователи и разработчики:

Задача 1: Нужно добавить кнопку «Подбор» в табличную часть Услуги документа «Акт выполненных работ», но так, чтобы подбирались только услуги из определенной группы справочника «Номенклатура».

Решение: В параметрах команды «Подбор» или в коде обработчика укажите фильтр по группе:

Фильтр = Новый Структура("Родитель", Справочники.Номенклатура.НайтиПоНаименованию("Услуги"));

Задача 2: При подборе товаров в документ «Заказ покупателя» нужно автоматически проставлять цену из прайс-листа, привязанного к контрагенту.

Решение: После выбора номенклатуры добавьте код заполнения цены:

    НоваяСтрока.Цена = ПолучитьЦенуДляКонтрагента(Объект.Контрагент, Результат.ВыбранноеЗначение);

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

Решение: Вместо ПоказатьВыбор() используйте ОткрытьФорму() для своей обработки:

    ПараметрыФормы = Новый Структура("Режим, ТекущийДокумент", "Подбор", Объект);

ОткрытьФорму("Обработка.ПодборТоваровСФото", ПараметрыФормы, ЭтотОбъект);

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

8. Частые вопросы и ответы (FAQ)

Можно ли добавить кнопку «Подбор» в табличную часть отчета?

Да, но с ограничениями. В отчетах табличные части обычно не редактируются, поэтому кнопка «Подбор» там не имеет смысла. Однако вы можете добавить её в форму настроек отчета для фильтрации данных. Например, в отчете «Ведомость по товарам» можно сделать подбор номенклатуры для фильтра.

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

Это связано с неявными фильтрами, которые применяет платформа. Проверьте:

  • Настройки видимости элементов в справочнике (права доступа).
  • Фильтры по умолчанию в форме подбора (например, может быть установлен фильтр «Только группы»).
  • Настройки отбора в коде (если используете ОписаниеОпцийВыбора).

Чтобы сбросить все фильтры, передайте пустую структуру в параметры выбора.

Как сделать, чтобы при подборе автоматически заполнялось несколько полей (например, цена и скидка)?

Для этого после выбора элемента добавьте код заполнения дополнительных реквизитов. Пример для цены и скидки:

    НоваяСтрока.Цена = Результат.ВыбранноеЗначение.ЦенаПродажи;

НоваяСтрока.Скидка = ПолучитьСкидкуДляКлиента(Объект.Контрагент, Результат.ВыбранноеЗначение);

Функцию ПолучитьСкидкуДляКлиента() нужно реализовать отдельно в общем модуле.

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

В стандартном окне подбора возможности кастомизации ограничены. Вы можете:

  • Изменить заголовок окна через параметры ОписаниеОпцийВыбора.
  • Добавить дополнительные колонки в список выбора (например, остатки или артикул).
  • Создать собственную форму подбора и открывать её вместо стандартной.

Для полной кастомизации используйте второй или третий вариант.

Как сделать кнопку «Подбор» видимой только для определенных пользователей?

Используйте проверку ролей в обработчике события ПриОткрытии формы:

&НаКлиенте

Процедура ПриОткрытии(Отказ)

КнопкаПодбор.Видимость = ГлобальныйКонтекст.Пользователь.Роли.Найти("Администратор");

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

Для управляемых форм можно также настроить видимость через условное оформление.