Книга знаний

1С:Предприятие / Приемы программирования / Формы

Параметр и контекст формы. Передача параметра и работа с ним. Передача контекста, как параметра.

Параметр и контекст формы. Передача параметра и работа с ним. Передача контекста, как параметра.Автор статьи: Ангел-Хоронитель | Редакторы: Волшебник, Ангел-Хранитель,
Последняя редакция №6 от 22.04.06 | История
URL: http://kb.mista.ru/article.php?id=172

Ключевые слова: параметр, контекст, форма, передача, передать, обновить, значение, как, получить, элемент, реквизит, объект


Итак, что же такое параметр?

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


Зачем нужен параметр?

Параметр нужен для передачи в форму дополнительных значений. Например: откуда открыта форма.


Как передать параметр?

Параметр передается в форму при открытии. Например:
     ОткрытьФорму(“Документ.ПеремещениеТМЦ”,”Розница”);
Или еще пример:
     Товар = ВыбранныйТовар;
     ОткрытьФормуМодально(“Отчет.ДвиженияТМЦ”,Товар);


Как получить параметр в открывшейся форме?

Получит параметр, переданный в форму, мы можем таким образом:
     Процедура ПриОткрытии()
           ПолучПараметр = Форма.Параметр;
     КонецПроцедуры // ПриОткрытии
Совет: для параметра лучше объявить переменную в форме, в процедуре ПриОткрытии присвоить ей переданный параметр, и потом работать с этой переменной, поскольку параметр формы в процессе работы может смениться.


Как передать несколько значений?

Поскольку параметр может принимать любое значение, он может принимать значение типа Список. Пример
     Параметр = СоздатьОбъект(“СписокЗначений”);
     Параметр.ДобавитьЗначение(Товар,”Товар”);
     Параметр.ДобавитьЗначение(ВыбДата,”ДатаНачала”);
     ОткрытьФорму (“Отчет.ДвиженияТМЦ”, Параметр);
Пример обработки его в открывшейся форме:
     Процедура ПриОткрытии()
           ПолучПараметр = Форма.Параметр;
           ВыбТовар = ПолучПараметр.ПолучитьЗначение(“Товар”);
           ВыбДата = ПолучПараметр.ПолучитьЗначение(“ДатаНачала”);
     КонецПроцедуры // ПриОткрытии


Что такое контекст формы?

Контекст – это идентификатор формы, что-то вроде ее имени. Он используется для того, чтобы точно указать программе, к какой форме вы обращаетесь. То есть с помощью контекста можно обращаться к одной форме из другой.


Как работать с контекстом?

Все довольно просто. Для того, чтобы с контекстом работать, его надо сначала передать.
Передается он с помощью параметра. Например:
     ОткрытьФорму (“Отчет.ДвиженияТМЦ”, Контекст);



Для закрепления полученных знаний приведем практический пример.

Создадим тестовую обработку, и назовем ее Пример. Добави на нее кнопку Закрыть для закрытия формы. Теперь добавим на нее Текстовый реквизит и пропишем  ему в поле Формула ТР. Также в модуле формы пропишем:
     Перем ТР;
     Процедура ПриОткрытии()
             Если ПустоеЗначение(Форма.Параметр) = 0 Тогда          
               ТР = Форма.Параметр.Наименование;
           КонецЕсли;
     КонецПроцедуры
Теперь откроем форму списка справочника Номенклатура и добавим туда кнопку. В формуле кнопки напишем
     ОткрытьФорму(“Обработка.Пример”,ТекущийЭлемент())
Запустите 1С, откройте справочник номенклатуры, нажмите кнопку. Откроется форма и там будет наименование выбранной номенклатуры. Мы передали параметр.
Теперь передадим несколько значений. У кнопки поменяем формулу на ОткрытьПример(). Опишем процедуру:
Процедура ОткрытьПример()        
       Парам = СоздатьОбъект("СписокЗначений");
       Парам.ДобавитьЗначение(ТекущийЭлемент().ЭтоГруппа(),"Группа");  
       Парам.ДобавитьЗначение(ТекущийЭлемент(),"Элемент");
       ОткрытьФорму("Обработка.Пример",Парам);    
КонецПроцедуры //ОткрытьПример    
В обработке перепишем:
Процедура ПриОткрытии()      
   Если ТипЗначенияСтр(Форма.Параметр) = "СписокЗначений" Тогда          
       Если Форма.Параметр.Получить("Группа") = 1 Тогда
           ТР = Форма.Параметр.Получить("Элемент").ПолноеНаименование();
       Иначе
           ТР = Форма.Параметр.Получить("Элемент").Наименование;    
       КонецЕсли;    
   КонецЕсли;
КонецПроцедуры
Пробуем. В зависимости от того, группа или нет, текущий элемент, в обработке пишется полное наименование или обычное.

Теперь поработаем  с контекстом. Перепишем процедуру ОткрытьПример:
Процедура ОткрытьПример()        
   Парам = СоздатьОбъект("СписокЗначений");
   Парам.ДобавитьЗначение(Контекст,"Конт");  
   ОткрытьФорму("Обработка.Пример",Парам);
   ПримерКонт = Парам;    
КонецПроцедуры //ОткрытьПример    
Изменим и обработку:
Перем Влад;              
Функция Надпись()
   Возврат(?(ПустоеЗначение(Влад)=0,Влад.ТекущийЭлемент(),""));
КонецФункции //Надпись

Процедура ПриОткрытии()
   Влад = Форма.Параметр.Получить("Конт");
КонецПроцедуры
В текстовом реквизите на обработке в формулу пропишем Надпись() и приделаем туда еще одну кнопку Обновить у которой в формулу пропишем Форма.Обновить()
Запускаем. При открытии в текстовом реквизите высвечивается текущий элемент справочника, но при его смене надпись не меняется, а меняется она только после нажатия кнопки Обновить. То есть текстовый реквизит на форме не обновляется. Незадача? Давайте решим и ее. Оказывается, при открытии формы можно получить и ее контекст из места открытия. В форме списка справочника объявим переменную ПримерКонт. Перепишем процедуру ОткрытьПример:
Процедура ОткрытьПример()        
   Парам = СоздатьОбъект("СписокЗначений");
   Парам.ДобавитьЗначение(Контекст,"Конт");  
   ОткрытьФорму("Обработка.Пример",Парам);
   ПримерКонт = Парам;    
КонецПроцедуры //ОткрытьПример    
Теперь в функции какого-нить текстового реквизита (например ИнформационнаяНадпись()), пропишем такие строки:
   Если ТипЗначения(ПримерКонт) = 100 Тогда
ПримерКонт.Форма.Обновить()
КонецЕсли;
Запускаем, открываем и… О, ЧУДО! при смене элемента изменяется и надпись.
Теперь поясним: рассмотрим процедуру ОткрытьПример. После ОткрытьФорму переменная Парам имеет значение контекста открытой формы (значение передалось) и мы присваиваем его переменной ПримерКонт. А выражение  ТипЗначения(ПримерКонт) будет равно 100 пока будет открыта форма.

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика