Организация подборов в табличную часть документа

24.04.2018

Теги: 1С:ПредприятиеВладелецОбработкаВыбораОповеститьОВыбореОткрытьФормуУправляемаяФорма

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

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

Результат подбора будет доступен в обработчике события ОбработкаВыбора формы документа или элемента формы (в зависимости от того, чему мы подчиним форму справочника при открытии). Событие ОбработкаВыбора в форме документа будет вызвано в двух случаях:

  • когда в форме справочника будет выполнен интерактивный выбор;
  • когда в форме справочника будет вызван метод ОповеститьОВыборе.

Одиночный подбор

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

Откроем форму документа ПриходнаяНакладная, создадим команду Подбор и назначим для нее обработчик:

&НаКлиенте
Процедура ВыборОдногоЭлемента(Команда)
    // Форма выбора закрывается после двойного клика
    // по выбранному элементу
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора",,Элементы.Материалы);
КонецПроцедуры

В этой процедуре мы открываем форму выбора для справочника Номенклатура, указывая, что она подчинена таблице Материалы формы документа ПриходнаяНакладная (Элементы.Материалы). При выборе из формы выбора справочника выбранное значение будет передано в обработчик события ОбработкаВыбора таблицы формы Материалы, так как она является владельцем открытой формы выбора.

Поэтому откроем палитру свойств таблицы Материалы и создадим обработчик события ОбработкаВыбора:

&НаКлиенте
Процедура МатериалыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    Элементы.Материалы.ДобавитьСтроку();
    Элементы.Материалы.ТекущиеДанные.Материал = ВыбранноеЗначение;
КонецПроцедуры

В этой процедуре мы добавляем новую строку в таблицу Материалы и присваиваем колонке Материал в новой строке выбранное в форме выбора справочника значение. Это значение передается в обработчик события в параметре ВыбранноеЗначение.

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

При множественном подборе форма справочника будет открыта до тех пор, пока пользователь не закроет ее интерактивно или не будет вызван метод формы Закрыть().

Обработчик команды Подбор:

&НаКлиенте
Процедура ВыборЭлементовБезЗакрытияФормы(Команда)
    // Не закрывать форму после двойного клика; можно выбрать
    // несколько элементов, дважды кликая на каждом
    ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе", Ложь);
    ОткрытьФорму(
        "Справочник.Номенклатура.ФормаВыбора",
        ПараметрыФормы,
        Элементы.Материалы
    );
КонецПроцедуры

Обработчик события ОбработкаВыбора остается без изменений.

Подбор с использованием множественного выбора

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

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

Обработчик команды Подбор:

&НаКлиенте
Процедура МножественныйВыбор(Команда)
    // Позволяем выделить и выбрать несколько элементов; в обработчик
    // ОбработкаВыбора() передается массив элементов
    ПараметрыФормы = Новый Структура("МножественныйВыбор", Истина);
    ОткрытьФорму(
        "Справочник.Номенклатура.ФормаВыбора",
        ПараметрыФормы,
        Элементы.Материалы
    );
КонецПроцедуры

Обработчик события ОбработкаВыбора:

&НаКлиенте
Процедура МатериалыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    Для Каждого ВыбранныйЭлемент Из ВыбранноеЗначение Цикл
        НоваяСтрока = Объект.Материалы.Добавить();
        НоваяСтрока.Материал = ВыбранныйЭлемент;
    КонецЦикла;
КонецПроцедуры

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

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

Обработчик команды Подбор:

&НаКлиенте
Процедура МножественныйВыборБезЗакрытияФормы(Команда)
    // Позволяем выделить и выбрать несколько элементов несколько раз; в
    // обработчик ОбработкаВыбора() передается массив элементов; после
    // каждого выбора форма не закрывается
    ПараметрыФормы = Новый Структура(
        "ЗакрыватьПриВыборе,МножественныйВыбор",
        Ложь,
        Истина
    );
    ОткрытьФорму(
        "Справочник.Номенклатура.ФормаВыбора",
        ПараметрыФормы,
        Элементы.Материалы
    );
КонецПроцедуры

Обработчик события ОбработкаВыбора остается без изменений.

Использование метода ОповеститьОВыборе()

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

Метод ОповеститьОВыборе() посылает оповещение владельцу формы о выполнении выбора или подбора, передает ему выбранное значение и закрывает форму, если она открыта не в режиме множественного выбора.

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

Справка

ТабличноеПоле.ДобавитьСтроку()

ТабличноеПоле.ДобавитьСтроку()

Добавляет строку в табличное поле, аналогично выполнению команды «Добавить».

  • Если табличное поле связано с таблицей или деревом значений, метод добавляет строку в таблицу или дерево значений (аналогично соответствующим методам этих объектов).
  • Если табличное поле связано со списком объектов, хранимых в базе данных, метод начинает редактирование нового объекта этого списка. (Например, список объектов в форме списка справочника, или документа).
  • Если табличное поле связано с набором записей или табличной частью, то метод начинает редактирование новой записи. (Например, список записей в форме списка регистра сведений; табличная часть документа или справочника).

Доступность: Толстый клиент.

ДанныеФормыКоллекция.Добавить()

ДанныеФормыКоллекция.Добавить()

Добавляет элемент в конец коллекции и возвращает его в качестве результата метода. Возвращаемое значение: ДанныеФормыЭлементКоллекции.

Доступность: тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).

Поиск: 1С:Предприятие • Владелец • Обработка выбора • Оповестить о выборе • Открыть форму • Управляемая форма

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.