Добавление кнопки «Подбор» в табличные части документов или справочников 1С:Предприятие — одна из самых востребованных задач среди разработчиков и пользователей системы. Эта функция значительно упрощает работу с большими объемами данных, позволяя быстро выбирать нужные элементы из справочников без ручного ввода. Однако реализация кнопки требует не только знания конфигуратора, но и понимания механизмов взаимодействия форм, табличных частей и обработчиков событий.
В этой статье мы разберем три основных способа добавления кнопки «Подбор»: через конструктор форм, ручное программирование и использование расширений. Особое внимание уделим типичным ошибкам, которые приводят к сбоям при открытии форм подбора, а также оптимизации кода для ускорения работы. Примеры будут приведены для актуальных версий платформы 1С:Предприятие 8.3 (включая управляемые формы и обычные).
Если вы никогда раньше не работали с табличными частями или формами в 1С, рекомендуем сначала ознакомиться с базовыми понятиями — это сэкономит время и поможет избежать распространенных ошибок при настройке подбора.
1. Подготовка: что нужно знать перед созданием кнопки «Подбор»
Прежде чем приступать к добавлению кнопки, важно понять контекст её использования. Кнопка «Подбор» может применяться в разных объектах 1С:
- 📄 Документы (например, подбор товаров в табличную часть «Товары» документа «Реализация»)
- 📋 Справочники (подбор элементов в подчиненные справочники)
- 📊 Отчеты и обработки (для фильтрации данных)
От типа объекта зависит логика работы кнопки и набор доступных методов. Например, в документах часто требуется проверка остатков товаров при подборе, а в справочниках — фильтрация по иерархии.
Также учтите, что для управляемых и обычных форм 1С:Предприятие 8.3 используются разные подходы:
- 🖥️ Управляемые формы: настройка через конструктор форм или программно в модуле формы.
- 🖥️ Обычные формы: требуется ручное редактирование модуля формы и работа с элементами управления.
Если вы работаете с управляемой формой, используйте метод ПоказатьВыбор() — он автоматически формирует диалог подбора с учетом текущих прав пользователя.
Перед началом работы проверьте:
Открыты ли права на изменение конфигурации|
Создана ли резервная копия базы данных|
Определен ли справочник или документ, для которого нужна кнопка|
Проверена ли актуальность платформы 1С (не ниже 8.3.10 для управляемых форм)-->
2. Способ 1: Добавление кнопки «Подбор» через конструктор форм (для управляемых форм)
Самый простой способ — использовать встроенный конструктор форм. Он доступен для управляемых форм и позволяет добавить кнопку «Подбор» без написания кода. Рассмотрим процесс на примере документа «Заказ клиента»:
1. Откройте конфигуратор и найдите документ, в который нужно добавить кнопку. Перейдите в раздел Формы → Форма документа.
2. В конструкторе формы выделите табличную часть (например, Товары) и нажмите правой кнопкой мыши. Выберите Добавить команду → Подбор.
3. В открывшемся окне укажите параметры:
- 📌 Источник данных: справочник или документ, откуда будет осуществляться подбор (например, «Номенклатура»).
- 🔍 Фильтр: при необходимости задайте условия отбора (например, только товары с остатками).
- 📤 Поле связи: укажите, какое поле табличной части будет заполняться (обычно это
Номенклатура).
4. Сохраните форму и обновлите конфигурацию базы данных. Кнопка «Подбор» появится в заголовке табличной части.
Что делать, если кнопка не отображается?
Убедитесь, что в настройках табличной части включен параметр Показывать команды таблицы. Также проверьте, не скрыта ли кнопка через настройки видимости в модуле формы.
⚠️ Внимание: Если в справочнике или документе, откуда осуществляется подбор, есть дополнительные реквизиты (например, характеристики номенклатуры), их нужно явным образом указать в параметрах команды «Подбор», иначе они не будут доступны для выбора.
3. Способ 2: Ручное программирование кнопки «Подбор» (для обычных форм)
Если вы работаете с обычными формами или нужна более гибкая настройка, кнопку «Подбор» придется добавлять вручную. Этот метод требует знания языка 1С и работы с модулем формы.
Рассмотрим пример для табличной части Товары в документе «Поступление товаров»:
1. Откройте форму документа в конфигураторе и добавьте новую кнопку в командную панель табличной части. Задайте ей имя, например, КнопкаПодборТоваров.
2. В модуле формы создайте обработчик события ПриНажатии для этой кнопки:
&НаКлиенте
Процедура КнопкаПодборТоваровПриНажатии(Элемент)
// Открываем форму подбора номенклатуры
Результат = ПоказатьВыборЗначения(
Новый ОписаниеОпцийВыбора(
Новый ИсточникДанныхВыбора(Справочники.Номенклатура.ПустаяСсылка()),
Новый Структура("ФильтрПоГруппе, ТолькоСОстатками", Истина, Истина)
),
Истина
);
// Если пользователь выбрал элемент, добавляем его в табличную часть
Если НЕ Результат.Отказ Тогда
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = Результат.ВыбранноеЗначение;
НоваяСтрока.Количество = 1;
КонецЕсли;
КонецПроцедуры
3. Обновите конфигурацию и проверьте работу кнопки. При нажатии откроется стандартное окно подбора 1С с возможностью фильтрации и выбора элементов.
Для более сложных сценариев (например, подбор с учетом характеристик или серий) потребуется расширить код. Например, чтобы при подборе автоматически заполнялись цены из справочника, добавьте после выбора:
НоваяСтрока.Цена = Результат.ВыбранноеЗначение.ЦенаПродажи;
⚠️ Внимание: При ручном программировании легко допустить ошибку в типах данных. Например, если в табличной части поле Номенклатура имеет тип «СправочникСсылка.Номенклатура», а вы пытаетесь записать в него значение типа «Строка», возникнет ошибка выполнения. Всегда проверяйте соответствие типов!
4. Способ 3: Использование расширений для добавления кнопки «Подбор»
Если вы не хотите изменять основную конфигурацию или нуждаетесь в гибкой настройке без перезаписи типовой логики, можно использовать расширения конфигурации. Этот метод подходит для 1С:Предприятие 8.3.11 и выше.
Алгоритм действий:
- Создайте новое расширение через меню
Конфигурация → Поддержка → Расширения конфигурации. - В расширении найдите форму документа или справочника, куда нужно добавить кнопку, и скопируйте её в расширение.
- В скопированной форме добавьте кнопку «Подбор» так же, как в первом способе (через конструктор или программно).
- Сохраните расширение и обновите конфигурацию базы данных.
Преимущества этого метода:
- 🔄 Совместимость с обновлениями: при обновлении типовой конфигурации ваши изменения не затрутся.
- 🛠️ Гибкость: можно добавлять кнопки только для определенных ролей или условий.
- 📦 Модульность: расширения легко переносить между базами.
Пример кода для расширения, где кнопка «Подбор» появляется только для пользователей с ролью «Менеджер по продажам»:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если НЕ ГлобальныйКонтекст.Пользователь.Роли.Найти("МенеджерПоПродажам") Тогда
ЭлементыФормы.КнопкаПодбор.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
5. Типичные ошибки и их решение
Даже опытные разработчики сталкиваются с проблемами при настройке кнопки «Подбор». Рассмотрим наиболее распространенные ошибки и способы их исправления:
| Ошибка | Причина | Решение |
|---|---|---|
| Кнопка не отображается в форме | Не включен показ команд таблицы или ошибка в модуле формы | Проверьте свойство ПоказыватьКомандыТаблицы и синтаксис обработчика |
| При нажатии ничего не происходит | Не указан обработчик события или ошибка в коде | Проверьте имя процедуры и наличие ключевого слова &НаКлиенте |
| Подбор открывается, но не фильтрует данные | Не переданы параметры фильтра в ПоказатьВыбор() |
Явно укажите структуру фильтра, например: Новый Структура("ТолькоГруппы, Поиск", Ложь, "Товар*") |
| После выбора элемент не добавляется в табличную часть | Ошибка в логике добавления строки или неверное поле связи | Отладьте код пошагово, проверьте соответствие типов данных |
Одна из самых коварных ошибок — когда подбор работает в режиме «1С:Предприятие», но не работает в веб-клиенте. Это связано с ограничениями платформы при работе через браузер. В таком случае используйте метод ПоказатьВыборНаСервере() вместо ПоказатьВыбор():
&НаСервере
Функция ПоказатьПодборНаСервере()
Возврат ПоказатьВыборЗначенияНаСервере(Новый ОписаниеОпцийВыбора(...));
КонецФункции
⚠️ Внимание: При работе с большими справочниками (более 10 000 элементов) стандартный механизм подбора 1С может тормозить. В этом случае рекомендуется использовать отложенную загрузку данных или настраивать предварительную фильтрацию на сервере.
6. Оптимизация и расширенные возможности кнопки «Подбор»
Базовая реализация кнопки «Подбор» покрывает большинство задач, но иногда требуются дополнительные функции:
- 🔄 Множественный подбор: возможность выбора нескольких элементов за один раз.
- 📈 Подбор с учетом остатков: автоматическая проверка наличия товара на складе.
- 🔍 Контекстный фильтр: динамическая фильтрация в зависимости от текущих данных документа.
- 📊 Подбор по шаблону: заполнение нескольких полей табличной части (например, цена, скидка) на основе выбранного элемента.
Пример кода для множественного подбора:
&НаКлиенте
Процедура КнопкаПодборМножественныйПриНажатии(Элемент)
МассивВыбранных = Новый Массив;
ОпцииВыбора = Новый ОписаниеОпцийВыбора(
Новый ИсточникДанныхВыбора(Справочники.Номенклатура.ПустаяСсылка()),
Новый Структура("МножественныйВыбор", Истина)
);
Результат = ПоказатьВыборЗначения(ОпцииВыбора, Истина);
Если НЕ Результат.Отказ Тогда
Для Каждого ВыбранныйЭлемент Из Результат.ВыбранныеЗначения Цикл
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = ВыбранныйЭлемент;
НоваяСтрока.Количество = 1;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Для подбора с учетом остатков модифицируйте фильтр:
Фильтр = Новый Структура();
Фильтр.Вставить("ТолькоСОстатками", Истина);
Фильтр.Вставить("Склад", Объект.Склад); // Текущий склад из документа
ОпцииВыбора = Новый ОписаниеОпцийВыбора(
Новый ИсточникДанныхВыбора(Справочники.Номенклатура.ПустаяСсылка()),
Фильтр
);
Используйте серверные функции для сложных фильтров — это разгрузит клиентскую часть и ускорит работу подбора.
7. Примеры реальных задач и их решение
Разберем три практических примера, с которыми часто сталкиваются пользователи и разработчики:
Задача 1: Нужно добавить кнопку «Подбор» в табличную часть Услуги документа «Акт выполненных работ», но так, чтобы подбирались только услуги из определенной группы справочника «Номенклатура».
Решение: В параметрах команды «Подбор» или в коде обработчика укажите фильтр по группе:
Фильтр = Новый Структура("Родитель", Справочники.Номенклатура.НайтиПоНаименованию("Услуги"));
Задача 2: При подборе товаров в документ «Заказ покупателя» нужно автоматически проставлять цену из прайс-листа, привязанного к контрагенту.
Решение: После выбора номенклатуры добавьте код заполнения цены:
НоваяСтрока.Цена = ПолучитьЦенуДляКонтрагента(Объект.Контрагент, Результат.ВыбранноеЗначение);
Задача 3: Кнопка «Подбор» должна открывать не стандартную форму выбора, а кастомную обработку с дополнительными полями (например, фотографией товара).
Решение: Вместо ПоказатьВыбор() используйте ОткрытьФорму() для своей обработки:
ПараметрыФормы = Новый Структура("Режим, ТекущийДокумент", "Подбор", Объект);
ОткрытьФорму("Обработка.ПодборТоваровСФото", ПараметрыФормы, ЭтотОбъект);
Для последнего примера потребуется создать отдельную обработку с формой, которая будет возвращать выбранные элементы в основной документ.
8. Частые вопросы и ответы (FAQ)
Можно ли добавить кнопку «Подбор» в табличную часть отчета?
Да, но с ограничениями. В отчетах табличные части обычно не редактируются, поэтому кнопка «Подбор» там не имеет смысла. Однако вы можете добавить её в форму настроек отчета для фильтрации данных. Например, в отчете «Ведомость по товарам» можно сделать подбор номенклатуры для фильтра.
Почему при подборе не показываются все элементы справочника?
Это связано с неявными фильтрами, которые применяет платформа. Проверьте:
- Настройки видимости элементов в справочнике (права доступа).
- Фильтры по умолчанию в форме подбора (например, может быть установлен фильтр «Только группы»).
- Настройки отбора в коде (если используете
ОписаниеОпцийВыбора).
Чтобы сбросить все фильтры, передайте пустую структуру в параметры выбора.
Как сделать, чтобы при подборе автоматически заполнялось несколько полей (например, цена и скидка)?
Для этого после выбора элемента добавьте код заполнения дополнительных реквизитов. Пример для цены и скидки:
НоваяСтрока.Цена = Результат.ВыбранноеЗначение.ЦенаПродажи;
НоваяСтрока.Скидка = ПолучитьСкидкуДляКлиента(Объект.Контрагент, Результат.ВыбранноеЗначение);
Функцию ПолучитьСкидкуДляКлиента() нужно реализовать отдельно в общем модуле.
Можно ли изменить внешний вид окна подбора?
В стандартном окне подбора 1С возможности кастомизации ограничены. Вы можете:
- Изменить заголовок окна через параметры
ОписаниеОпцийВыбора. - Добавить дополнительные колонки в список выбора (например, остатки или артикул).
- Создать собственную форму подбора и открывать её вместо стандартной.
Для полной кастомизации используйте второй или третий вариант.
Как сделать кнопку «Подбор» видимой только для определенных пользователей?
Используйте проверку ролей в обработчике события ПриОткрытии формы:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
КнопкаПодбор.Видимость = ГлобальныйКонтекст.Пользователь.Роли.Найти("Администратор");
КонецПроцедуры
Для управляемых форм можно также настроить видимость через условное оформление.