Метод «ОткрытьПодбор» и предопределенная процедура модуля формы ОбработкаПодбора()
Рассмотрим другой метод заполнения форм объектов на примере заполнения табличной части документа «Приход».
Если Вы хотите при открытии формы списка выбирать сразу несколько значений, а не открывать её по каждой строке документа, можно использовать метод «ОткрытьПодбор», который открывает форму списка для множественного подбора и передает выбранное значение предопределенной процедуре ОбработкаПодбора().
Метод
ОткрытьПод6ор(<Объект>,<ИмяФормы>,<Контекстформы>,<ФлагМножВыбора>,<ТекЗнач>)
открывает форму для подбора значений.
<Объект> - строка с именем объекта агрегатного типа для подбора. Можно указывать:
"Справочник.ХХХХХ" или "Документ.ХХХХХ" или "Журнал.ХХХХХ" или "Журнал.Подчиненные" или
"ЖурналОпераций.ХХХХХ", "ПланСчетов.ХХХХХ" (если ХХХХХ не задан, то открывается подбор из
любого(всех) плана счетов) или "Отчет.ХХХХХХ' или, "Обработка.ХХХХХХ", где ХХХХХ - имя вида
соответствующего объекта, как он задан в конфигураторе.
<Имяформы> - строка с именем Формы подбора;
<Контекстформы> - необязательный параметр. Имя переменной, куда можно задать значение любого
типа для передачи в открываемую форму. Данное значение будет доступно в открытой форме как
атрибут Форма.Параметр. После исполнения данного метода система вернет в данную переменную
контекст формы подбора. С помощью значения этого контекста можно затем произвольно
манипулировать формой подбора, пока она открыта. Пока форма открыта, тип значения данного
параметра равен 100 (см. ТипЗначения), если закрыта - 0.
<ФлагМножВыбора> - число: 1 - выбор нескольких значений; 0 - выбор одного значения, после чего
окно закрывается;
<ТекЗнэч> - необязательный параметр. В случае выбора из списка, здесь можно передать значение, на
которое следует изначально установить курсор при открытии формы подбора.
Доступ к методу возможен только в контексте Модуля формы.
Предопределенная процедура обработки подбора значения
ОбработкаПодбора(<Элемент>,<КонтФормы>)
<Элемент> - элемент справочника подбора или документ, передаваемый для обработки.
<КонтФормы> - контекст той формы, из которой шел подбор. Процедура может располагаться только в
программном модуле формы.
//Пример использования метода «ОткрытьПодбор» в форме документа «Приход».
Перем НомСтроки,СписокРасчетов;
Перем СписокРасчетов, НомСтр;
// В шапке модуля
//___________________________________________
Процедура Подбор()
СписокРасчетов=Создать0бъект("СписокЗначений");
Для н=1 по ГруппаРасчетов. ДляОборудования.Количество() Цикл
расч= ГруппаРасчетов. ДляОборудования.ПолучитьРасчет(н);
Приложение 1________________________________________________________________ 205
СписокРасчетов.ДобавитьЗначение(расч, расч.Наименование); КонецЦикла;
ОткрытьПодбор("Справочник.Оборудование", " ДляПодбора " , , 1, ); КонецПроцедуры //Подбор
//------
Процедура ОбработкаПодбора(ВыбранноеЗначение)
Перем ЗначениеРасчета, Позиция;
Если ВыбранноеЗначение.Выбран()=1 Тогда
Если ВыбранноеЗначение.Вид()="Оборудование" Тогда
НоваяСтрока();
НомСтр=НомерСтроки; Оборудование=ВыбранноеЗначение;
Контф_мы=ВыбранноеЗначение;
ОткрытьПодбор("Справочник.Единицы","",Контф_мы,0);
Иначе
ПолучитьСтрокуПоНомеру(НомСтр;
Единица=ВыбранноеЗначение;
цена_=Оборудование.Цена.Получить(ДатаДок);
Кол_во=1;
Если ВвестиЧисло(Кол_во,"Введите количество",6,2)=1 Тогда
Количество=Кол_во;
Если ВвестиЧисло(цена_,"Введите цену",10,2)=1 Тогда
НовЦена=цена_;
КонецЕсли;
КонецЕсли;
Сумма=Кол_во*цена_*Единица. Коэффициент;
Если СписокРасчетов.ВыбратьЗначение(ЗначениеРасчета,
"Выберите расчет".Позиция,,0)=1 Тогда
Расчет= ЗначениеРасчета;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
206______________________ 1С:Предприятие. Практика программирования на платформе V7
Процедуру Подбор() надо поместить в соответствующую кнопку, аналогично кнопке «Печать».В форме списка справочника Единицы надо определить Владельца при её программном открытии методом ОткрытьПодбор("Справочник.Единицы", «», Контф_мы, 0). Значение Владельца передается через параметр Контф_мы.
Для этого опишем в модуле формы списка справочника Единицы предопределенную процедуру ПриОткрытии(). Значение параметра формы в открываемой форме списка равно значению «Контекста формы» (Контфмы), ТипЗначения()=11 — это справочник.
Процедура ПриОткрытии()
Если (ТипЗначения(Форма.Параметр)=11) Тогда
//Для метода ОткрытьПодбор из документа
// Передаём значение типа справочник ИспользоватьВладельца(Форма.Параметр,0);
КонецЕсли;
КонецПроцедуры //ПриОткрытии
Приложение 2________________________________________________________________ 207