В начало

Владельцы и обработки выбора документа Расходная

 

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

 

Листинг. Структура функции ПолучитьФорму

ПолучитьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>, <НавигационнаяСсылка>)

 

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

 

Рис. Дерево элементов формы документа Расходная накладная

 

            Существует как минимум три более-менее подходящих Владельца:

ЭтаФорма

СписокНоменклатуры

СписокНоменклатурыНоменклатура.

            Далее показан текст процедуры для вызова формы выбора через кнопку на форме документа Расходная накладная.

 

Листинг. Процедура вызова формы выбора справочника Номенклатура

&НаКлиенте

Процедура ОткрытьФормуВыбора(Команда)

ПараметрыФормы = Новый Структура("РежимВыбора,ЗакрыватьПриВыборе, МножественныйВыбор", Истина, Истина, Истина);

     

Владелец=ЭтаФорма; //1-й вариант

Владелец=Элементы.СписокНоменклатуры; //2-й вариант

Владелец=Элементы.СписокНоменклатурыНоменклатура; //3-й вариант

     

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

Ф.Список.Параметры.УстановитьЗначениеПараметра("Подразделение", Объект.Поставщик);

Ф.Открыть();       

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

 

            Указывая разных владельцев для функции ПолучитьФорму() будут срабатывать разные события ОбработкаВыбора в разных местах.

 

Таблица. Срабатывания событий обработки выбора при вызове формы выбора функцией ПолучитьФорму()

Владелец

Расположение события ОбработкаВыбора

Результат

ЭтаФорма

Свойства формы

Срабатывает

Элементы.СписокНоменклатуры

Свойства таблицы СписокНоменклатуры

Срабатывает

Элементы.СписокНоменклатурыНоменклатура

Поле Номенклатура

НЕ срабатывает

 

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

 

Листинг. Обработчики выбора в разных местах

На форме документа Расходная накладная

 

&НаКлиенте

Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

      Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда

      Для каждого ТекЗнач Из ВыбранноеЗначение Цикл

            Стр=Элементы.СписокНоменклатуры.ТекущиеДанные;

            Стр.Номенклатура=ТекЗнач;

            Элементы.СписокНоменклатуры.ДобавитьСтроку();

      КонецЦикла;

      КонецЕсли;

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

На таблице СписокНоменклатура

 

&НаКлиенте

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

      Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда

      Для каждого ТекЗнач Из ВыбранноеЗначение Цикл

            Стр=Элементы.СписокНоменклатуры.ТекущиеДанные;

            Стр.Номенклатура=ТекЗнач;

            Элементы.СписокНоменклатуры.ДобавитьСтроку();

      КонецЦикла;

      КонецЕсли;

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

На элементе СписокНоменклатурыНоменклатура

 

&НаКлиенте

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

      Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда

      Для каждого ТекЗнач Из ВыбранноеЗначение Цикл

            Стр=Элементы.СписокНоменклатуры.ТекущиеДанные;

            Стр.Номенклатура=ТекЗнач;

            Элементы.СписокНоменклатуры.ДобавитьСтроку();

      КонецЦикла;

      КонецЕсли;

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

 

            Обработки абсолютно идентичны, ибо обрабатывают они ВыбранноеЗначение, которое является возвращаемым результатом с формы выбора справочника Номенклатура.