Каталог решений - Прием программирования для компактного оформления последовательных немодальных диалогов (ПоказатьВопрос, ПоказатьВводЗначения и прочее)

Прием программирования для компактного оформления последовательных немодальных диалогов (ПоказатьВопрос, ПоказатьВводЗначения и прочее)

Прием программирования для компактного оформления последовательных немодальных диалогов (ПоказатьВопрос, ПоказатьВводЗначения и прочее)

В наличии

С отказом от модальности в конфигурациях 1С:Предприятие 8.3 усложнилось взаимодействие с пользователем, которое ранее выполнялось с помощью модальных диалогов. Анализ реакции пользователя теперь выносится в отдельный обработчик. Всё, вроде бы, логично. Но если, скажем, пользователю нужно последовательно задать более одного вопроса, то линейный по своей сути код разбивается на цепочку обработчиков, разбросанных по программному модулю. Что, согласитесь, очень неудобно. Предлагаемый прием позволяет логически сгруппировать такой код. Итак…

Категория:

Описание

Суть идеи предельно проста — указать в качестве обработчика результата диалога ту же процедуру, в которой происходит вызов диалога.

Самый серьезный недостаток, возникающий при этом  — ограничения на состав параметров процедуры, которые должны соответствовать составу параметров процедуры-обработчика. Все входные данные для такой процедуры придется передавать через структуру дополнительных параметров (второй параметр обработчика).

Очевидны также и другие сопутствующие особенности такой реализации:

  • процедура должна быть экспортной
  • все данные, которые необходимо передавать между этапами, нужно также помещать в структуру дополнительных параметров
  • каждый очередной этап выполнения начинается с анализа ответа пользователя на предыдущий диалог и завершается вызовом очередного диалога

Примерная реализация подхода:

// ВЦОСНИК - Выполнить Цепочку Операций С Немодальным Интерактивом Компактно
Процедура ВЦОСНИК(Значение = Неопределено, ДопПараметры = Неопределено) Экспорт
    
    Если ДопПараметры = Неопределено Тогда
        ДопПараметры = Новый Структура("НомерЭтапа", 0);
    КонецЕсли;
    
    ДопПараметры.НомерЭтапа = ДопПараметры.НомерЭтапа + 1;

	Если ДопПараметры.НомерЭтапа = 1 Тогда
		// начало первой операции
		...
	    Показать...(Новый ОписаниеОповещения("ВЦОСНИК", ЭтаФорма, ДопПараметры), ...);
	ИначеЕсли ДопПараметры.НомерЭтапа = 2 Тогда
		// анализ ответа пользователя в диалоге из предыдущей операции и начало
		// следующей операции
		.....................................
	    Показать...(Новый ОписаниеОповещения("ВЦОСНИК", ЭтаФорма, ДопПараметры), ...);
	ИначеЕсли ДопПараметры.НомерЭтапа = N-1 Тогда
		// анализ ответа пользователя в диалоге предпоследней операции и начало
		// последней операции
		.....................................
	КонецЕсли;
    
КонецПроцедуры
has been added to your cart:
Оформление заказа