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

01.03.18

Разработка - Механизмы платформы 1С

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

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

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

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

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

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

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

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

немодальный модальный ПоказатьВопрос ПоказатьВводЗначения ПоказатьВводДаты ПоказатьВводСтроки ПоказатьВводЧисла ПоказатьВыборДействия ПоказатьВыборИзМеню ПоказатьВыборИзСписка ПоказатьВыборЭлемента

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    7748    bayselonarrend    20    

156

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    6111    dsdred    16    

80

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    18378    YA_418728146    26    

72

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    23930    SeiOkami    48    

135

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    14967    YA_418728146    7    

168
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dj_serega 393 24.07.15 17:13 Сейчас в теме
За "ВЦОСНИК" + однозначно :)
Gazz; SagittariusA; корум; kuzyara; nSpirit2; CyberCerber; k_vasil; Aleksey.Bochkov; +8 Ответить
3. dmpas 418 24.07.15 18:46 Сейчас в теме
За находчивость плюс, но...
задать более одного вопроса, то линейный по своей сути код

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

ну и опять же процедура должна делать что-то одно и её название должно отражать, что она делает.
SagittariusA; корум; Irwin; awk; delete; bonv; zqzq; Yashazz; +8 Ответить
7. herfis 513 28.07.15 15:21 Сейчас в теме
(3) baton_pk,
Насчет линейности - возможно не очень удачная формулировка. Но мне кажется все поняли, что подразумевалось на самом деле.
Соглашусь, что такая потребность (более одного окна диалога в одном блоке) возникает нечасто.
Чего уж там - очень редко возникает. Но если уж возникла необходимость даже двух диалогов, то этот вариант показался мне значительно меньшим злом.
Может, кто-то когда-то спасибо и скажет :)
adhocprog; +1 Ответить
4. Yashazz 4794 24.07.15 20:33 Сейчас в теме
Если мне склероз не изменяет, среди обработчиков оповещений есть парочка процедур, НЕ подразумевающих второй параметр или подразумевающих третий. Нэ?

Ну и согласен, более 2 вопросов означает неверную организацию диалога с юзером, надо делать спецформу.
8. herfis 513 28.07.15 15:30 Сейчас в теме
(4) Yashazz,
Да, универсальность не стопроцентная для всех видов немодальных диалогов.
Обработчики для ПоказатьВводДаты, ПоказатьВводЗначения, ПоказатьВводСтроки, ПоказатьВводЧисла, ПоказатьВопрос, ПоказатьВыборИзМеню, ПоказатьВыборИзСписка, ПоказатьВыборЭлемента - имеют одинаковые сигнатуры (значение и ДопПараметры).
А вот более специфичные системные диалоги, такие как ПоказатьВыборДействия для расшифровки или НачатьПомещениеФайла - там больше параметров.
5. mszsuz 335 24.07.15 20:40 Сейчас в теме
Откройте свой ВЦОсник через год и попытайтесь разобраться
корум; +1 Ответить
9. herfis 513 28.07.15 15:31 Сейчас в теме
(5) mszsuz, Комментарии никто не отменял.
6. nSpirit2 27.07.15 13:11 Сейчас в теме
Кажется что отказ от модальности должен еще и сопровождаться отказам от показа 100 окон вопросов после того как вы уже тыкнули в кнопку "записать" :)
Меня честно как пользователя очень бесят такие программы которые выкидывают кучу окон с вопросами :)
10. herfis 513 28.07.15 15:39 Сейчас в теме
(6) nSpirit2, Мне нечего возразить. Всё так.
Как правило, такой необходимости не возникает.
Давно разрабатываю на УФ и никаких проблем с этим не возникало.
Но вот недавно встал перед выбором - рисовать специальную промежуточную форму (чего задача явно не стоила в своем текущем виде) или обойтись вводом единичного значения и подтверждением операции.
Выбрал второе и умылся слезами. Так и родилась идея.
11. 1cmax 153 28.07.15 22:26 Сейчас в теме
Сначала подумал, причем здесь ВЦИОМ.. показалось (trollface)
а вообще пока активно не начал работать с немодальностью, но понял, что усложнение кода - не подарок.
так что идея правильная
12. herfis 513 16.09.16 09:53 Сейчас в теме
Кстати, по-поводу маловероятности длинных цепочек на практике.
В БСП при сохранении файла обработки из справочника дополнительных отчетов и обработок:

- ВыгрузитьВФайл
- ПоказатьВопросОбУстановкеРасширенияРаботыСФайламиПриУстановк­еРасширения
- ПоказатьВопросОбУстановкеРасширенияРаботыСФайламиЗавершение
- ВыгрузитьВФайлЗавершение
- ДиалогСохраненияФайла.Показать
- ВыгрузитьФайлВыборФайла
- НачатьПолучениеФайлов
- ВыгрузитьФайлПолучениеФайла

То есть линейный по смыслу и логике выполнениия код, который при синхронном выполнении находился бы в одной процедуре, вследствие асинхронности исполнения размазан как минимум на восемь.
14. sikuda 677 26.08.20 16:02 Сейчас в теме
(12) Асинхронность должна быть только в одном месте, а здесь мы видим большую битву 1С против своей реализации "модальности" ;)
13. practik1c 90 17.04.18 12:58 Сейчас в теме
Пригодилось, спасибо.
Оставьте свое сообщение