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

01.03.18

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

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

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

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

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

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

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

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

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

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

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4431    dsdred    53    

70

Как готовить и есть массивы

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

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

24.01.2024    5271    YA_418728146    25    

62

Планы обмена VS История данных

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

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6389    dsdred    36    

111

1С-ная магия

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

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

06.10.2023    18463    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

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

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12073    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    8799    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

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

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6271    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

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

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15959    SeiOkami    31    

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

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

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

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

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

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