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