Имя: Пароль:
1C
1С v8
Обработка оповещения при закрытии формы
0 Lagster
 
06.05.20
14:39
Добрый день, есть вопрос, который никак не поддается решению:

1. Есть общий модуль (клиент). Внутри процедура:

Процедура Процедура1(Автозаполнение)
    Обработчик = Новый ОписаниеОповещения("Процедура2", ЭтотОбъект);
    ОткрытьФорму("Обработка.МояОбработка.Форма.МояФорма", Автозаполнение, , , , , Обработчик);
КонецПроцедуры


2. Также в этом же модуле еще одна процедура:

Процедура Процедура2(Данные) Экспорт
    //Код процедуры
КонецПроцедуры


3. Модуль формы из обработки (МояОбработка.МояФорма). На форме одна кнопка ("ОК"):

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Автозаполнение = Параметры.Автозаполнение; //Реквизит формы        
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Если Автозаполнение Тогда
        ОК(Неопределено);
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ОК(Команда) //Команда нажатия на кнопку
    СтруктураВозврата.Вставить("КакиеТоДанные", "Данные для возврата");
    Закрыть(СтруктураВозврата);
КонецПроцедуры


Задача очень простая:
Выполняется Процедура1, которая должна открыть форму, на ней обработать данные и вернуть обратно структуру (эта структура возвращается в процедуру Процедура2).
Здесь возможны 2 варианта. В Процедура1 в качестве параметра передается свойство "Автозаполнение":
    1. Если параметр "Ложь", открывается форма, а затем пользователь самостоятельно нажимает на кнопку "ОК", которая формирует необходимую структуру данные, а затем закрывать форму процедурой "Закрыть", где в качестве параметра возвращает структуру. После чего курсор переходит на "Процедура2" и корректно отрабатывается.
    2. Если параметр "Истина", при открытии формы на клиенте программно вызывается нажатие кнопки "ОК", но почему то в этом варианте обработка оповещения не отрабатывает.
    
Проверил отладкой, код отрабатывает корректно, но обработка оповещения при закрытии формы не происходит. Прошу вашей помощи в решении этого вопроса. Пример сильно упростил, чтобы оставить только суть вопроса. Глобально ничего менять нельзя (вопрос касается банковских продуктов и системы "ДиректБанк").
1 RomaH
 
naïve
06.05.20
14:44
странно ... очередная фича?
обработчик ожидания подключить - поможет?

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Если Автозаполнение Тогда
    ПодключитьОбработчикОжидания("НажатьОК",0.1,Истина);
КонецЕсли;
КонецПроцедуры
2 Lagster
 
06.05.20
15:54
Спасибо! Решение с обработчиком ожидания помогло.
Фича связана с автоматическим заполнением паролей банковских ключей, которое по умолчанию запрещено (разрешено в пределах сессии). Возможно есть и другие варианты, но нарушать стандартную логику работы системы обмена с банками определенно не хочется