Версия для печати темы (https://pro1c.org.ua/index.php?s=98247c5182ee2e5f333d3c4132330815&showtopic=53058)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Дождаться закрытия формы и выполнить код в документе открытия этой формы

Автор: Constantus 16.07.19, 9:57

Приветствую, Форумчане!
1с8.3.12, самопис, БСП, УФ

Из формы одного документа открываем другой документ. После его проведения и закрытия нужно выполнить код документа открытия (модуль формы):

&НаКлиенте
Процедура Контроль(Команда)
    ВвестиДокументКонтроля();
    УстановитьДоступностьПоПравамИСтатусам();

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


ВвестиДокументКонтроля(); - создает новый документ, что-то там творят, проводят и закрывают.

УстановитьДоступностьПоПравамИСтатусам(); - обновляет форму, из которой открывался новый документ (открывает/закрывает доступ к элементам формы и т.д.)

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

Как дождаться закрытия формы нового документа и перечитать, обновить данные родной формы?

Автор: sava1 16.07.19, 10:01

При закрытии 2й формы Оповестить()
в 1й обработать оповещение.

Автор: Constantus 16.07.19, 10:23

sava1 @ Сегодня, 13:01 * ,

А детальней можно? Куда положить Оповестить и как и где обработать оповещение?

Спасибо, разобрался...

Автор: mut 16.07.19, 13:40

в метод ОткрытьФорму нужно передать ОписаниеОповещения, оно выполнится при закрытии формы, разве это не подходит?

Вот пример. После того как форму Обработка.РабочееМестоПродавца.Форма.ПоискТовара закроют, выполнится процедура ОбработатьВводПримечанияСтроки в модуле текущей формы, из которой мы открывали вторую

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

Автор: awp 16.07.19, 18:11

Пример:

В форме которая вызывает ......

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "Задачи_Обновить" Тогда
        Элементы.тчЗадачиПоСогласованию.Обновить();
    ИначеЕсли ИмяСобытия = "Калькуляции_Обновить" Тогда
        Элементы.тчКалькуляции.Обновить();
    ИначеЕсли ИмяСобытия = "Контакты_Обновить" Тогда
        Элементы.тчКонтакты.Обновить();
    ИначеЕсли ИмяСобытия = "Напоминания_Обновить" Тогда    
        Элементы.тчНапоминания.Обновить();
    ИначеЕсли ИмяСобытия = "Обращения_Обновить" Тогда        
        Элементы.тчОбращения.Обновить();
    ИначеЕсли ИмяСобытия = "Проекты_Обновить" Тогда            
        Элементы.тчПроекты.Обновить();
    Конецесли;
КонецПроцедуры


В форме которая оповещает:
Вы выполняете код что вам нужен и при закрытии(событие что вам нужно) просто вызываете процедуру
Оповестить("Задачи_Обновить")


Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua