Инструменты пользователя

Инструменты сайта


1c:база:опасность_использования_модальных_окон

Опасность использования модальных окон

Суть проблемы

При использовании модальных окон работа программы останавливается до того момента, пока пользователь не сделает выбор. Неправильное использование может привести к следующим последствиям:

  • Модальное окно блокирует все остальные окна. Если в процессе выбора пользователю понадобится дополнительная информация(например из отчетов), он не сможет ее получить, так как модальное окно блокирует все остальные окна.
  • Остановка большого объема вычислений. Если модальное окно будет вызвано когда система производит большой набор "тяжелых" вычислений, ее работа остановится до того момента как пользователь сделает выбор. Бывает, что пользователь отходит от компьютера или долгие вычисления оставляют на ночь.
  • Блокирование таблиц базы данных. Намного хуже когда система остановилась ожидая выбора пользователя в момент записи в транзакции. Система будет держать заблокированными таблицы базы, до тех пор пока пользователь не сделает выбор. Что по существу остановит работу других пользователей. Даже если пользователь будет делать выбор моментально, такой подход может сильно замедлить проведение документов(особенно групповое). Вызов модального окна в процессе проведения документов считается грубейшей ошибкой.
  • Сложности при работе мобильного и web клиента. Модальные окна в web клиенте реализованы всплывающими окнами, многие браузеры такие окна блокируют по умолчанию, не задавая вопросов пользователю. В мобильных браузерах, эта функция вообще не работает. Поэтому в последних релизах платформы 1С советует отказаться от модальных окон в пользу "блокирующих диалоговых окон" реализованных с помощью методов ПоказатьВопрос и СообщениеПользователю. Открытие формы модально предполагается заменить на открытие формы в "блокирующем режиме". Разница между "блокирующими" и "модальными" методами заключается в том, что блокирующие методы не останавливают работу системы до выбора пользователя, а реакция на действие пользователя происходит в отдельном обработчике.Более подробно об отказе от модальности. Сама реализация "блокирующих" методов требует реализации другой логики, что вызывает критику со стороны сообщества.

Рекомендации

Несмотря на вышесказанное, совсем отказаться от модальных окон не всегда представляется возможным. Вот возможные варианты, позволяющие избежать описанных выше проблем:

  • Не использовать модальные окна, а получать всю информацию от пользователя с формы которая запускает обработку, когда это возможно.
  • Вызывать модальное до начала работы вычислений\записи в базу данных. Получив сразу всю необходимую информацию, можно реализовать алгоритм который не будет требовать остановок в своей работе.
Только авторизованные участники могут оставлять комментарии.
1c/база/опасность_использования_модальных_окон.txt · Последнее изменение: 2014/12/24 13:50 — admin