Как оповестить форму о событиях в другой форме

Учебник 1С Как оповестить форму о событиях в другой форме

Для примера рассмотрим справочник "Страны Мира".

im5

У этого справочника есть несколько форм, в том числе ФормаСписка и Классификатор. Грубо говоря в форме классификатора содержаться сведения о всех странах.

im8

Из формы классификатора мы можем выбрать интересующую нас страну

im6

и поместить её в ФормуСписка.

im7Как же одна форма узнает о том, что происходит в другой?

Рассмотрим обе формы. В Классификаторе нас будет интересовать событие  "Выбор". Обратите внимание - это событие относится не к форме, а к основному реквизиту формы - таблице значений Классификатор.

im9

А в ФормеСписка событие так же основного реквизита Список (тип ДинамическийСписок) "ОбработкаВыбора"

im10

Процедура которая срабатывает при выборе из Классификатора называется КлассификаторВыбор.

&НаКлиенте
Процедура КлассификаторВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;
    ВсеДанныеСтроки = Классификатор.НайтиПоИдентификатору(ВыбраннаяСтрока);
    Если ВсеДанныеСтроки<>Неопределено Тогда
        ДанныеСтроки = Новый Структура(ПоляКлассификатора);
        ЗаполнитьЗначенияСвойств(ДанныеСтроки, ВсеДанныеСтроки);
       
        ДанныеВыбора =ДанныеВыбораЭлементаКлассификатора(ДанныеСтроки);
        ОповеститьОВыборе(ДанныеВыбора.Ссылка);        
    КонецЕсли;

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

Сообственно здесь нас интересует событие

ОповеститьОВыборе

Именно это событие закроет форму Классификатора и "сообщит"  ФормеСписка, что выбор произведен.

В ФормеСписка же отработает событие  ОбработкаВыбора  с процедурой СписокОбработкаВыбора. Которая просто обновит список.

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