Имя: Пароль:
1C
1С v8
8.3, УФ, отказ от модальности
0 Тихий омут
 
19.08.15
09:35
Прошу сильно не пинать за длинную портянку, разве что в направлении чего почитать и где подсмотреть:)

Для конфы без отказа от модальности был разработан такой участок кода одной из форм, все процедуры &НаКлиенте (код привожу в сокращении, передавая только важную для вопроса суть):

Функция ВвестиСтроковыеДанные()
    Рез=ВвестиСтроку();
    #Область СпецДействияФункцииВвестиСтроковыеДанные
    ///...некоторые действия
    #КонецОбласти
    Возврат Рез;
КонецФункции

Процедура П1()
    Рез=ВвестиСтроковыеДанные();
    Если НЕ Рез Тогда Возврат КонецЕсли;
    ///...некоторые действия, специфичные именно для процедуры П1
КонецПроцедуры //П1

Процедура П2()
    Рез=ВвестиСтроковыеДанные();
    Если НЕ Рез Тогда Возврат КонецЕсли;
    ///...некоторые действия, специфичные именно для процедуры П2
КонецПроцедуры //П2

Процедура П3()
    Рез=ВвестиСтроковыеДанные();
    Если НЕ Рез Тогда Возврат КонецЕсли;
    ///...некоторые действия, специфичные именно для процедуры П3
КонецПроцедуры //П3

новая версия функции ввода строки с отказом от модальности:

Процедура ВвестиСтроковыеДанные(ОписаниеОповещенияПослеВводаСтроки)
    Стр="";
    ПоказатьВводСтроки(ОписаниеОповещенияПослеВводаСтроки,Стр);
КонецФункции

Процедура П1()
    ОписаниеОповещения=Новый ОписаниеОповещения("ПослеВводаСтрокиДляП1");
    ВвестиСтроковыеДанные(ОписаниеОповещения);
    ///...здесь БЫЛИ некоторые действия, специфичные именно для процедуры П1 после ввода строки
КонецПроцедуры //П1

Процедура ПослеВводаСтрокиДляП1(Результат,ДопПараметры)
    #Область СпецДействияФункцииВвестиСтроковыеДанные
    ///...некоторые действия
    #КонецОбласти

    ///...некоторые действия, специфичные именно для процедуры П1
КонецПроцедуры

При переводе кода в режим отказа от модальности проблема в том, как избавиться от дублирования кода, выполняемого в функции ВвестиСтроковыеДанные в области #СпецДействияФункцииВвестиСтроковыеДанные.
Хотелось бы, только не представляю, как - сам вопрос в комментарии перед концом последней процедуры:

Процедура П1()
    ОписаниеОповещения=Новый ОписаниеОповещения("ПослеВводаСтрокиДляП1");
    ВвестиСтроковыеДанные(ОписаниеОповещения);
КонецПроцедуры //П1

Процедура ПослеВводаСтрокиДляП1(Результат,ДопПараметры)
    ///...некоторые действия, специфичные именно для процедуры П1
КонецПроцедуры

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

Процедура ОбработкаОповещенияВводаСтроковыхДанных(Результат, ДопПараметры)
    #Область СпецДействияФункцииВвестиСтроковыеДанные
    ///...некоторые действия
    #КонецОбласти
    
    ОписаниеОповещения=ДопПараметры.ПроцедураВызываемаяПослеВвода;
    ///и вот как здесь вызвать процедуру, заданную в описании оповещения?
КонецПроцедуры
1 Nuobu
 
19.08.15
09:50
Процедура П1()
    ОписаниеОповещения=Новый ОписаниеОповещения("ПослеВводаСтрокиДляП1");
    ВвестиСтроковыеДанные(ОписаниеОповещения);
КонецПроцедуры//П1


Процедура ПослеВводаСтрокиДляП1(Результат,ДопПараметры)
    ///...некоторые действия, специфичные именно для процедуры П1

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

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

Процедура ОбработкаОповещенияВводаСтроковыхДанных(Результат, ДопПараметры)
    #Область СпецДействияФункцииВвестиСтроковыеДанные

    ///...некоторые действия

    #КонецОбласти

    
    //Берешь и пишешь!!!!

КонецПроцедуры
2 Тихий омут
 
19.08.15
09:59
(1) юмор оценил:) это-то понятно, хочется как-то элегантнее, что ли... что-то вроде ВыполнитьОповещение(ОписаниеОповещения), а не вульгарное многоэтажное Если-ИначеЕсли:)
Выполнить - оно бы вроде хорошо, но для веб клиента, увы, неприменимо, а оно как раз в нём и нужно
3 Господин ПЖ
 
19.08.15
10:05
ВыполнитьОбработкуОповещения
4 Господин ПЖ
 
19.08.15
10:05
?
5 Тихий омут
 
19.08.15
10:19
(3) Друг, огромное спасибо! То, что надо. По справке лазил, но не увидел:)
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший