Книга: Разработка интерфейса прикладных решений на платформе "1С:Предприятие 8"
Назад: Управление открываемой формой путем передачи параметров
Дальше: Второй вариант решения

Первый вариант решения

В данном решении мы получим форму на клиенте, установим нужные свойства этой формы и затем откроем ее.

Чтобы обеспечить подбор товаров в табличную часть приходной накладной, создадим форму документа и ее команду Подбор. Перетащим команду в командную панель таблицы формы Товары. Обработчик команды Подбор заполним следующим образом (листинг 4.20).

Листинг 4.20. Обработчик команды «Подбор»

&НаКлиенте

Процедура Подбор(Команда)

 

ФормаВыбора = ПолучитьФорму("Справочник.Товары.ФормаВыбора", , Элементы.Товары);

ФормаВыбора.Элементы.Список.МножественныйВыбор = Истина;

ФормаВыбора.Элементы.Список.Отображение = ОтображениеТаблицы.Дерево;

ФормаВыбора.Открыть();

 

КонецПроцедуры

В этом обработчике мы получаем основную форму выбора справочника Товары как подчиненную таблице Товары формы документа ПриходнаяНакладная. Таким образом, переменная ФормаВыбора будет содержать объект УправляемаяФорма. Используя коллекцию элементов (Элементы) этой формы, мы устанавливаем свойство МножественныйВыбор таблицы формы Список в значение Истина и свойство Отображение в значение системного перечисления ОтображениеТаблицы.Дерево.

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

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

Поэтому создадим обработчик события ОбработкаВыбора таблицы формы Товары и заполним его следующим образом (листинг 4.21).

Листинг 4.21. Обработчик события «ОбработкаВыбора» таблицы «Товары»

&НаКлиенте

Процедура ТоварыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

 

Для Каждого ВыбранныйЭлемент Из ВыбранноеЗначение Цикл

НоваяСтрока = Объект.Товары.Добавить();

НоваяСтрока.Товар = ВыбранныйЭлемент;

 

КонецЦикла;

 

КонецПроцедуры

В этом обработчике мы организуем цикл обхода массива переданных элементов (ВыбранноеЗначение). И в этом цикле добавим новую строку в табличную часть документа (Объект.Товары) и присвоим ее полю Товар значение очередного элемента массива выбранных товаров.

ПРИМЕЧАНИЕ

Этот пример можно посмотреть в демонстрационной конфигурации «05 (вар. 1) Управление открываемой формой путем передачи параметров».

Запустим «1С:Предприятие», откроем приходную накладную и нажмем кнопку Подбор. После этого форма выбора из справочника товаров будет открыта в режиме множественного выбора и иерархический список товаров будет представлен в виде дерева. При нажатии кнопки Выбрать выделенные записи из справочника товаров будут добавлены в табличную часть приходной накладной (рис. 4.38).

Если мы посмотрим на показатели производительности, то увидим, что при открытии формы выбора в процедуре Подбор() произойдут два вызова сервера (рис. 4.39).

Рис. 4.39. Показатели производительности

ПРИМЕЧАНИЕ

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

Для наглядности рассмотрим схему программного взаимодействия клиента и сервера (рис. 4.40).

Рис. 4.40. Схема программного взаимодействия сервера и клиента

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

А вот второго вызова, который происходит при изменении свойства Отображение таблицы формы Список, могло бы и не быть.

Ниже мы покажем, как этого избежать.

Назад: Управление открываемой формой путем передачи параметров
Дальше: Второй вариант решения