Хром использование модальных окон в данном режиме запрещено. Почему возникает ошибка "Использование модальных окон в данном режиме запрещено"? Правильное решение задачи

Реализовано в версии 8.3.3.641.

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

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

Как правило "десктопные" браузеры лучше или хуже, но поддерживают модальные окна и открывают их в новом окне браузера как "всплывающее окно":

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

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

В такой ситуации вариант работы интерфейса 1С:Предприятия без использования модальных окон снимает все перечисленные выше проблемы.

При этом не происходит отказа от функциональности, которая обеспечивалась ранее модальными окнами. Но эта функциональность реализуется другими технологиями, которые не препятствуют работе 1С:Предприятия в браузерах.

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

В результате:

  • не происходит открытия новых окон браузера, что повышает производительность и стабильность веб-клиента;
  • во многих случаях дополнительная настройка браузера становится ненужной, так как 1С:Предприятие больше не использует всплывающие окна;
  • любая конфигурация, используя веб-клиент, может работать на iPad и других мобильных устройствах.

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

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

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

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

В новом варианте для формы ФормаВводТекста (которая будет открываться в блокирующем окне) нужно установить свойство РежимОткрытияОкна в значение БлокироватьВесьИнтерфейс . Это обеспечит модальность для пользователя:

А программный код вместо одной процедуры, как раньше, будет содержать уже две процедуры:

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

Когда пользователь введёт данные и закроет форму, они будут обработаны в указанной нами второй процедуре, в которую мы просто перенесли "старый" код, обрабатывающий полученные данные.

Кроме форм, которые разработчик может открыть в модальном режиме (по своему желанию), существуют методы встроенного языка, которые всегда, независимо от желания разработчика, открывали модальные формы для ввода или выбора данных. Например, метод ВвестиЗначение() .

Использовать такие методы в немодальном режиме ещё проще. Для всех таких методов в платформе сделаны методы-дублёры, при вызове которых нужно так же указать местонахождение процедуры, которая будет выполнена после того, как пользователь закроет окно.

Например, ниже показано использование старого метода ВвестиЗначение() и его нового метода-дублёра ПоказатьВводЗначения() :

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

Поэтому все такие системные диалоги платформы также переведены на немодальный вариант работы.

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

Если в процессе выполнения уроков у вас появилась такая ошибка - исправить её очень легко.

Вернитесь в конфигуратор и выберите пункт меню "Конфигурация" -> "Открыть конфигурацию":

В открывшемся окне нажмите правой кнопкой на пункте "Конфигурация" и выберите из раскрывшегося меню пункт "Свойства":

Откроется окно со свойствами конфигурации (справа):

Пролистайте его в самый низ и найдите там пункт "Режим использования модальности":

Установите его значение в "Использовать" :

Внимание! Обратите внимание, что если вы используете платформу 1С, отличную от той, что мы скачивали в первом уроке (более поздней версии), то у вас также будет присутствовать поле "Режим использования синхронных вызовов...". Его также нужно установить в "Использовать".

Наконец, выберите пункт меню "Конфигурация" -> "Сохранить конфигурацию":

Готово! Теперь ошибки больше не возникнет.

Пояснения ниже - для тех кому интересно, что мы сделали.

Мы включили режим использования модальности в нашей конфигурации. По умолчанию этот режим выключен и это не позволяет нам использовать такие команды как ВвестиЧисло, ВвестиСтроку, ВвестиДату, ОткрытьЗначение.

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

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

Мы же можем смело включать его, так как пишем учебные примеры, не рассчитанные на работу в интернете.

14
Для принудительного запуска предприятия в Обычном или Управляемом приложении используются следующие ключи: /RunModeOrdinaryApplication запуск толстого клиента в обычном режиме, несмотря на настройки конфигурации и... 3
Нужно чтобы пользователи не могли менять настроенный для них интерфейс! Решение: Для отключения нужно в правах доступа у корневого элемента конфигурации убрать право " Сохранение данных пользователя ". ... 2
В текущей работе пользователь обычно открывает несколько объектов. Это может быть документ, справочник, отчет и т.д. В предыдущем интерфейсе не было проблем быстро найти открытый объект и актуализировать его для... 2
В прошлой статье: Установка адресного классификатора (KLADR) в 1С я рассказал Вам что такое Кладр и как его загрузить в 1С обычные формы (8.0-8.2). В данной статье я расскажу как загрузить Адресный классификатор (KLADR) в... 2
Часто разрабатывая некую конфигурацию, пользователи хотят прикреплять к элементу справочника фото и чтобы они хранились в базе данных. В этой статье я расскажу как к справочнику объекты строительства подключить...

Внедрение нового интерфейса платформы 1С 8.3 — "такси" — привело к тому, что пользователи и программисты столкнулись с ошибкой следующего содержания: "Использование модальных окон в данном режиме запрещено".
Рис. 1

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

Модальные и всплывающие окна, будучи признаком дурного тона, уже давно были признаны недопустимыми при разработке софта. В сознании пользователей твердо укоренилась потребность работы "в одном окне".

Разработчики платформы 1С предприняли попытку приобщить разработчиков прикладных решений к работе "по-новому". С внедрением нового интерфейса "такси", они дополнили новую платформу новой функцией — "режим использование модальности".

Быстрое исправление проблемы

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

С этой целью зайдите в систему в режим конфигуратор, откройте конфигурацию:

После этого нажатием на корень конфигурации правой кнопкой мыши откройте контекстное меню, выберите "Свойства":


Рис. 3

В открывшихся свойствах конфигурации во вкладках найдите "Режим использования модальности", в нем выберите "Использовать":


Рис. 4

Сохраните и примените совершенные изменения нажатием клавиши "F7".



Просмотров