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