Как разработать подбор номенклатуры в табличную часть документа на управляемых формах?

Программист 1С v8.3 (Управляемые формы)
← На главную

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

Концепция формы подбора

Для реализации подбора нам потребуется создать отдельную управляемую форму. Основная идея заключается в том, чтобы не перегружать интерфейс самого документа, а вынести выбор данных в специальное окно. Рассмотрим основные элементы, которые должны быть на такой форме:

  1. Список источников данных: Это могут быть динамические списки, отображающие документы-основания (например, заказы или поступления).
  2. Список номенклатуры: Отображение табличных частей выбранных документов.
  3. Корзина: Дополнительная табличная часть на форме подбора, куда пользователь будет переносить выбранные позиции перед финальным переносом в документ.

Реализация логики выбора данных

Разберем процесс по шагам. Самый эффективный способ передачи выбранных данных из формы подбора в форму документа — использование механизма Оповестить и ОбработкаОповещения.

Когда пользователь выбирает нужную позицию в форме подбора (например, двойным кликом по строке списка номенклатуры), форма подбора должна сформировать структуру с данными и оповестить основную форму:


// Код в модуле формы подбора при выборе элемента
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("Номенклатура", ВыбраннаяНоменклатура);
СтруктураДанных.Вставить("Цена", Цена);
СтруктураДанных.Вставить("Количество", Количество);

Оповестить("ВыборНоменклатуры", СтруктураДанных);

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


&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "ВыборНоменклатуры" Тогда
        // Добавляем строку в табличную часть
        НоваяСтрока = Объект.Товары.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, Параметр);
    КонецЕсли;
КонецПроцедуры

Выбор архитектуры: Дерево или Списки?

В ходе обсуждения мы выяснили, что существует два основных подхода к отображению данных на форме подбора:

Важные рекомендации по разработке

При создании формы подбора обязательно учитывайте следующие моменты:

1. Использование «Корзины»: Лучшей практикой считается создание на форме подбора видимой табличной части «Корзина». Пользователь может набрать несколько позиций из разных документов, проверить их количество и цены, и только потом нажать кнопку «Перенести в документ». Это исключает многократные открытия и закрытия формы.

2. Проверка остатков: Если бизнес-логика требует контроля наличия товаров, реализуйте проверку прямо на форме подбора. Гораздо эффективнее проинформировать пользователя о нехватке товара в момент выбора, чем после попытки проведения документа.

3. Отборы: Обязательно используйте фильтры (по контрагенту, по дате документа, по складу). Без них динамические списки будут содержать слишком много записей, что замедлит работу формы.

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

Разработка подбора — это баланс между удобством пользователя и производительностью платформы. Начните с создания формы подбора, откройте ее методом ОткрытьФорму() из основной формы документа и настройте передачу данных через Оповестить. Такой подход является наиболее «чистым» и современным для платформы 1С v8.3.

← На главную