Заметки о модальности и асинхронности

Что на самом деле мы получили в 8.3.Х и почему это не очень радует. Поддерживающим большие нетиповые конфигурации посвящается.

Что на самом деле мы получили в 8.3.Х и почему это не очень радует. Поддерживающим большие нетиповые конфигурации посвящается.

В последних версиях, активно работающих в веб-клиенте и на мобильных приложениях, 1С начала агрессивно продвигать новый подход к модальности, к работе с модальными окнами и диалогами. На эту тему много и убедительно написано в методическом сопровождении, статьях на сайтах и в комментариях специалистов. Но не будем поддаваться, посмотрим критически на предлагаемые нам новшества. Причем рассуждать я хочу как типичный «одинэснег». Обойдусь без пересказа статей, копипаста Синтакс-помощника и раскрытия технических терминов, подразумевая, что читателю оно уже все известно.

Основные претензии:

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

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

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

Во-вторых, нам печально повествуют, что всплывающие окна, как нехорошее рекламное нечто, блокируются браузерами (т.е. требуют разрешения на включение) и вообще не поддерживаются мобильными устройствами, а значит, маст дай. Более того, авторы некоторых методических статей ненавязчиво намекают, что в будущем 1С намерена полностью отказаться от модальности, что это «генеральная линия партии», и хотя нам милостиво разрешено пока жить по-старинке, но будущее уже предрешено и в нем нет места для «Предупреждение(«Hello, World»)». Пугают, стало быть.

Необходимость применения модальных окон является данностью, избежать которой полностью невозможно, причем отнюдь не по техническим, а по идеологическим соображениям. Всегда возможна ситуация, когда пользователя нельзя пускать «дальше», позволить ему продвижение в его работе, пока не будут выполнены некоторые действия. В этом смысле модальными можно называть и окна пошаговых «мастеров», где кнопка «Далее» недоступна до удовлетворения неких условий. Модальность – не в том, что окно маячит поверх остальных и не дает переключиться (оно может выглядеть как угодно), а в том, что пользователь локализован в своих действиях более узко, чем в других случаях работы с приложением. Модальность – не реализация, не внутренние глубины, недоступные пользователю хитросплетения, а поведение интерфейса. Задумаемся: разве не так себя ведут все диалоги, инициированные пользователем и ждущие от него необходимых уточнений? Именно так. И браузеры не исключение – диалог загрузки файла, или запрос на разрешение cookies, или вопрос насчет сертификата – были и остаются модальными окнами. Настроечные аспекты, вопросы всяких FlashPlayer, антиспамы, антивирусные диалоги, принтеры и работа с печатью – модальны. И замечательно себя чувствуют в интернетах. Значит, не собирается мир пока уходить от модальности.

Теперь посмотрим, что нам предлагается – свойство, управляющее блокировкой интерфейса/окна. По сути, для нашего юзверя, то же самое. Нам в плюс, что поведение более управляемое, можно задавать в коде; нам в минус, что головной боли об этом чуть больше. Но пользователю, в общем, плевать, почему он не может, открыв окно «1», щелкнуть по кнопке в окне «2». Внимание, вопрос – где же пресловутый отказ от модальности?

Всплывающие окна. Pop-up. Всякая бяка из интернета. Да-да, конечно, пусть даже браузер совсем их не понимает и не поддерживает, но как тогда 1С реализует эти «блокируемые» окна? И что мешало тихо и незаметно реализовать функцию «Вопрос» так же, как реализуется рисуемая нами форма, блокирующая весь интерфейс, по аналогичной концепции? Ничего ровным счетом. Как-то ведь фирма 1С планирует отрабатывать эту блокировку, так отрабатывали бы и модальные диалоги.

Невинно пострадала процедура «Предупреждение». Полный аналог команды alert, которая отнюдь не является всплывающим окном, она, тем не менее, попала под запрет. Хорошо хоть, описание оповещения необязательное. Мне могут возразить, что в планах 1С есть вывод туда форматированной строки и вообще неизвестно, может, это тоже маленькая отдельная формочка, а не alert. Но тогда см.выше, что мешает ей быть такой формочкой с блокировкой интерфейса, не делая мне головной боли? И что мешает для вывода форматированной строки применить «ПоказатьОповещениеПользователя» (к которой тоже есть претензия именно ввиду ее совершеннейшей немодальности – помигало и исчезло, а юзверь мог и не заметить)?

Тем более ни при чем действия с выпадающим списком, в режиме списка и меню. Если 1С оставила такую штуку, как подменю любой вложенности, и в природе существуют поля ввода с выпадающими списками, то причем тут борьба с модальностью? Где в подменю и выпадающем списке модальность? Нигде, чистая произвольная навигация по предоставленным данным в рамках интерфейса. Есть ли разница между «ВыбратьИзМеню» и статичным подменю? Никакой. Тогда почему надо заставлять всех делать «ПоказатьВыборИзМеню» и перелопачивать ради этого и код, и логику?

Ладно, нам объяснили, что «ВыбратьЭлемент» это теперь очень плохо. Но тогда почему остались диалоговые методы различных объектов? Почему никто не посягнул на «ДиалогВыбораФайла.Выбрать»? Модальность же неимоверная! А это далеко не единственный пример. Почему не отказались от мини-диалогов, возникающих при нажатии на «педальку» поля ввода - например, от календаря или калькулятора, от выбора типа значения? Они ведь интерфейсно ровно то же, что выбор из списка или меню. Загадка!

Вернемся к асинхронности исполнения. «Тупой одинэснег» внимательно читает методические статьи и видит, что теперь после вызова «Показать…» исполнение кода продолжается, а отдельная ветка уходит на обработку действий согласно описанию оповещения. Супер, можно разделить поток исполнения! Можно выполнить действие «а», в то время как «немодальное» окно будет пройдено пользователем и согласно ему выполнится действие «б». Асинхрон!

Не тут-то было. Простейшая проверка показывает, что асинхронность, заявленная идеологически, на практике отсутствует. Достаточно поставить бесконечный цикл после вызова «Показать…» и – здравствуй, перезапуск приложения. Асинхронностью я бы это не назвал ни в коем случае. Нижеприведенное также привело к зависанию:

Процедура НекаяКоманда(Команда)
    опоп=Новый ОписаниеОповещения("ЗавершениеНекойКоманды",ЭтотОбъект,);
    ПоказатьПредупреждение(опоп,"Hell, world!");
    Пока НекийКлюч Цикл
        ОбработкаПрерыванияПользователя();
    КонецЦикла;
КонецПроцедуры

Процедура ЗавершениеНекойКоманды(Параметр1)
    НекийКлюч=Ложь;
КонецПроцедуры

Более того, авторы статей аккуратно намекают, что после вызова «немодальных» диалогов вообще лучше бы прекратить исполнение кода и вообще выйти из процедуры/функции, т.е. ставить такой вызов последней строкой кода. На красивых картинках нам показывают, как переключается туда-сюда-обратно ход процесса, как передается управление, как надо работать со вложенными процедурами и т.д. Но вдумайтесь – где здесь асинхрон? Перед нами просто более запутанное, но все такое же последовательное, плоское и однопоточное выполнение кода! Пресловутая «асинхронность» не чисто программная, а программно-интерфейсная силами платформы. Здесь нет ожидания успешности или неуспешности, нет их перехвата. Есть приостановка выполнения нашего кода на период «висения» некоего окна. И где разница с тем, что было до сих пор? Почему мы лишены возможности продолжить там же, в той же процедуре? Почему нам, на худой конец, не дали меток наподобие Goto, и обязательно теперь прыгать в другую процедуру? Напомню, второго потока по сути нет и не подразумевается!

Да и зачем нам в интерфейсах асинхронность вместо main flow? Ладно, тяжелые серверные действия, уходящие фоновыми заданиями в настоящие асинхроны, но на клиенте (а описание оповещения живет только на клиенте) таких задач пока нет и особо не предвидится. Подчеркну – именно применительно к взаимодействию с интерфейсом, а не к работе с данными, т.к. платформа отрисовывает и показывает все за нас. Приведите мне пример, позволяющий убедить главбуха, отчего теперь код пишется втрое дольше!

Дочитавшие до этого места могут возразить, что, мол, интернеты-веяния времени, и вообще новомодные геопозиционирования и прочая. Насчет интернета и веяний времени я комментировать не буду, т.к. версия встроенного в платформу браузера ниже всякой критики, свойство parentWindow не советовали к применению прям даже в СП, а уж какая мешанина вышла из его свойств/методов и свойств/методов Dociment в итоговом «Документ» я вообще молчу. Прогресс беспредельный, ага.

Что касается настоящей «интернетности». Да, хорошо, что объект «ОписаниеОповещения» уже напоминает известную в JavaScript возможность перекинуть процедуру как параметр и выполнить где-то в другом месте. Да, теперь мы можем вызвать процедуру из некоей формы, находясь в совсем другом месте, имея лишь оповещение, а значит, имея саму эту УФ, нужный контекст и тд. Но вот достучаться до команды так пока не получается – известно, что модуль общей команды это «черный ящик», и находящийся там код программно вызвать нельзя.

А главное, что нет настоящих Promise, хорошо известных в JS. Следующим логичным шагом было бы сделать нечто вроде: 

ОбъектИлиМенеджер.ПроцедураИлиМетод(Параметры).ЕслиУспешно Тогда
    ДействияПриУспешности(Параметры);
ЕслиНеуспешно Тогда
    ДействияПриНеуспешности(Параметры);
ЕслиУспешностьНеясна Тогда
    ДействияПриНеясности(Параметры);
Конец

об1=Новый Обещание(ОписаниеОповщения1,ОписаниеОповещения2);

Но пока "обещаний" нам не обещают.

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

Итак, мы пока что имеем однопоточное, не-асинхронное (просто запутанное) выполнение кода, и якобы немодальные диалоги, чье поведение ничем не отличается от модальных, а в ряде случаев вообще не модально по определению. Просто прибавилось хлопот.

В заключение отмечу, что 1С сама не очень соблюдает собственные рекомендации. Так, в http://its.1c.ru/docs/v8nonmodal/ сказано, цитирую, «Другой сценарий, который является крайне нежелательным - это немодальный диалог в обработчике ПередЗавершениемРаботыСистемы. Во-первых потому, что в условиях веб-клиента браузеры очень негативно относятся к показу каких-либо сообщений при закрытии приложений и блокируют их. Во-вторых потому, что наличие такого диалога не позволит реализовать некоторые сценарии работы.». Вспомним, как себя ведет БП 3.0 при закрытии? То-то же.

В ряде мест этой замечательной статьи откровенно признано, что 1С и сами еще не вполне представляют, какое решение будет эффективным, красивым и вообще «правильным» для многих случаев. И случаи эти частые, общеупотребительные, всем нам нужные. Более всего такие места статьи походят на «ну, мы сделали, а вы уж как-нибудь выкрутитесь». При том, что можно было реализовать то же самое, т.е. обойти проблемы работы в браузерах и мобильных устройствах, на уровне платформы, вообще не затрагивая уровень разработки конфигураций. Безо всякой псевдоасинхронности и ненужного умножения и усложнения кода.

Комментарии

1
  • НатальяС
    В 8-8.2 слишком легко было, бухгалтеры сами себе писали обработки и печатные формы, меньше денег программистам шло. Надо запутать, 8.3 придумали управляемую.

Социальные предприниматели зарабатывают в РФ миллиарды: какие это сферы деятельности

Выручка индивидуальных предпринимателей, который работают в социальной сфере, составила 17,9 млрд рублей, а юридических лиц — 84,6 млрд.

Курсы повышения
квалификации

20
Официальное удостоверение с занесением в госреестр Рособрнадзора
Банки

Вклады теперь застрахованы более надежно

Размер повышенной дополнительной ставки составит 300% от базовой. С первого квартала 2022 года дополнительная ставка была нулевой.

Уведомление по ЕНП

❗ Минюст зарегистрировал изменение правил заполнения уведомлений по ЕНП

Порядок заполнения ЕНП-уведомления и электронный формат этого документа обновили. Новые правила заработают со 2 мая. Впрочем, их применяют и сейчас.

6
Лучшие спикеры, новый каждый день

С 1 мая новые контрольные соотношения в отчетности! 👀«Ночной бухгалтер» № 1670

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

Иллюстрация: Вера Ревина / Клерк.ру
Общество

Шашлык подорожал на 10-20%. Опрос

Заметнее всего подорожал шашлык из курицы. Стоимость блюда выросла на 20%, до 389 рублей.

Экономика России

Мишустин: доходы бюджета выросли более чем на 50%

Минэкономразвития ждет, что за 2024 год ВВП превысит 191 трлн рублей, реальные доходы населения вырастут на 5,3%, а безработица сохранится в пределах 3%.

Опытом делятся эксперты-практики, без воды
Адвокат

👔 Новый закон ужесточил требования к адвокатам, и будет их единый реестр. Сами адвокаты приветствуют это и считают крайне полезным

Президент подписал изменения в федеральный закон «Об адвокатской деятельности и адвокатуре в РФ».

Многодетные семьи

Правительство на 7 лет продлит выплаты многодетным на погашение ипотеки

В 2024 году многодетные получат порядка 50 млрд рублей на погашение жилищного кредита.

С 1 мая банкам запретили брать комиссию за переводы клиента самому себе

Все банки с 1 мая 2024 года должны отменить комиссию с переводов до 30 млн рублей между собственными счетами клиента, в том числе в разных банках.

Обзоры новостей

⚡️ Итоги дня: школьников научат управлять беспилотниками, золото упало в цене, а в России сделали люксовую машину на водородном топливе

Подготовили обзор главных событий дня. Все самое интересное, что писали и обсуждали в сети, в одной подборке.

Бесплатно с Отпуска

Можно ли брать отпуск, разбивая его по несколько дней, в частности между праздниками. Мини-курс

Можно ли разделить отпуск, и какими частями работник может использовать дни отпуска, разбираем в сегодняшнем мини-курсе.

Можно ли брать отпуск, разбивая его по несколько дней, в частности между праздниками. Мини-курс
Бесплатно с Защита персональных данных

Штрафы за нарушения по персональным данным в 2024 году

В 2024 году штрафы за нарушение работы с персональными данными могут составлять до 1,5 млн руб., появились и новые составы правонарушений. Рассмотрим, как и на что обратить внимание, чтобы избежать миллионных санкций. 

Штрафы за нарушения по персональным данным в 2024 году
Миникурсы, текстовые и видеоинструкции для бухгалтеров

9 менеджеров, которые приведут вашу компанию в проектный ад

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

9 менеджеров, которые приведут вашу компанию в проектный ад
Больничные

Что нового в правилах работы с электронными больничными

Электронные больничные стали обязательными, бумажных листков нетрудоспособности больше нет. С 1 мая 2024 года меняются правила работы с электронными больничными листами. На основании принятых изменений, запрашивать информацию из электронных больничных в СФР будет возможно только при наличии машиночитаемой доверенности, выданной страхователем.

Иллюстрация: Вера Ревина/Клерк.ру

С 1 мая очередной вид продуктов питания подлежит обязательной маркировке

С 1 мая 2024 года икра осетровых и лососевых (красная) будет подлежать обязательной маркировке.

Ведение бизнеса

Фриланс, аутстаффинг, аутсорсинг: что это за модели и как бизнесу выбрать подходящую

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

 Иллюстрация: создано с помощью ИИ OpenAI © Вера Ревина/Клерк.ру

Учет убытков в 2024 году

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

Иллюстрация: Вера Ревина/Клерк.ру
Инвестиции

Компании из каких сфер активнее всего инвестируют на бирже: результаты исследования

За год суммарный доход компаний-клиентов Тинькофф на Мосбирже превысил 1 млрд рублей. Самые активные инвесторы на бирже — компании из оптовой торговли, строительства и химической отрасли.

КоАП РФ

Бизнесу поднимут штрафы за отсутствие уведомлений о начале предпринимательской деятельности

Власти хотят на 145% поднять размер административного штрафа для бизнесменов, которые не сообщают о своей деятельности. Санкции не менялись с 2010 года.

Интересные материалы

ВЭД

Валютная оговорка в договоре

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

Иллюстрация: freepik/freepik