В конфигураторе в свойства конфигурации, есть параметр «Режим использования модальности»

Режим использования модальности

Если установить Не использовать, то – принципе весь код, который после ОткрытьФормуМодально() Вопрос(), Предупреждение(), Выборов и диалогов открытия-сохранения станет работать с ошибками!

Рассмотрим пример с Использовать:

[wp_ad_camp_3]  

В режиме Предприятие получаем

Тест модального окна Вопрос

Если мы поставим Режим использования модальности = Не использовать то получим ошибку: Использование модальных окон в данном режиме запрещено

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

Теперь код нужно писать по новому:

 

в результате

Почему 1С решила отказаться от использования модальных окон ?

[wp_ad_camp_3]

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

 

Источник: helpf.pro

21 комментарий: 1С 8.3 : Использование модальных окон в данном режиме запрещено! Модальные окна не работают, как быть?

  • А как быть и что делать, если при разрешенных модальных окнах все браузеры, кроме FireFox и iExplore говорят, что “Использование модальных окон в данном режиме запрещено” ?

    • Для работы через web можно использовать только конструкцию:

      &НаКлиенте
      Процедура КомандаВопросПоНовому(Команда)
      Оповещение = Новый ОписаниеОповещения(“ОтветНаВопросЗавершение”, ЭтотОбъект);
      ТекстВопроса = “Ну что скажешь?”;
      ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
      КонецПроцедуры

      &НаКлиенте
      Процедура ОтветНаВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт
      Если Результат = КодВозвратаДиалога.Да Тогда
      Сообщить(“Ответили ДА”);
      КонецЕсли;
      КонецПроцедуры

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

      • Вопрос принципа – конфигурация на поддержке и снимать нельзя.

        Модальные разрешены, но браузеры ругаются, не смотря на свою же настройку.

        Я ответ уже нашёл – http://rarus.ru/forum/forum14/topic6662 – придётся бразуер ставить человеческий, который на свои настройки не забывает.

        • Это временный вариант, не решающий проблему.
          Можно решить проблему модальности не снимая конфигурацию с поддержки путем применения механизма “Расширения конфигурации”, где выполнить подмену типового кода модуля на свой, с применением диалоговых окон без модальности (в 8.3.9 уже можно подменять код)

          • 8.3.9.
            Но это не решает проблему – почему – опишу.

            Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)

            Задаём вопрос и ставим отказ, если надо остаться.
            В новом варианте с описанием оповещения нет возможности поставить отказ, так как из процедуры мы уже вышли.
            Как с этим бороться тогда – подскажите.

  • Пример реализации можно подсмотреть в любой из последних версий программ на управляемых формах, к примеру в Управление небольшой фирмой, редакция 1.6 (1.6.9.29)

    Общий модуль:
    СтандартныеПодсистемыКлиент

    Процедура:
    ПередЗавершениемРаботыСистемы(Отказ = Ложь, ТекстПредупреждения = “”) Экспорт

    • Если я верно понимаю – то там используются 2 новых параметра, в результате которых мы можем только ДА\НЕТ ответить на ТекстПредупреждения.
      В вопросе можно получить несколько больше вариантов ответа и выполнить ещё несколько действий, в отличие от завершать работу или нет при использовании ЗавершениеРаботы+ТекстПредупреждения.
      Плюс к тому – если это не ЗавершениеРаботы – то ТекстПредупреждения игнорируется.

      • Что мешает вызвать произвольную форму? Там хоть 20 вариантов ответа можно прописать 🙂

        • Смотрите выше – после выхода из процедуры – я уже не смогу манипулировать её переменными (ОТКАЗ в частности).

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

          • В указанном примере НЕТУ реализации возврата обратно – там только вопрос средствами платформы и только ДА\НЕТ.
            при вызове НачатьПоказ…. невозможно вернуться обратно. Увы. Это Асинхронный вызов.

  • Процедура ФормаОтчетаОбработкаРасшифровки(ФормаОтчета, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт
    ВариантРасшифровки = Новый СписокЗначений;
    ВариантРасшифровки.Добавить(“СведенияОРегламентномЗадании”, НСтр(“ru = ‘Сведения о регламентном задании'”));
    ВариантРасшифровки.Добавить(“ОткрытьЖурналРегистрации”, НСтр(“ru = ‘Перейти к журналу регистрации'”));

    ПараметрыОбработчика = Новый Структура;
    ПараметрыОбработчика.Вставить(“Расшифровка”, Расшифровка);
    ПараметрыОбработчика.Вставить(“ФормаОтчета”, ФормаОтчета);
    Обработчик = Новый ОписаниеОповещения(“РезультатОбработкаРасшифровкиЗавершение”, ЭтотОбъект, ПараметрыОбработчика);
    ФормаОтчета.ПоказатьВыборИзМеню(Обработчик, ВариантРасшифровки);
    КонецПроцедуры

    Процедура РезультатОбработкаРасшифровкиЗавершение(ВыбранныйВариант, ПараметрыОбработчика) Экспорт
    Если ВыбранныйВариант = Неопределено Тогда
    Возврат;
    КонецЕсли;

    Действие = ВыбранныйВариант.Значение;
    Если Действие = “СведенияОРегламентномЗадании” Тогда

    СписокТочек = ПараметрыОбработчика.ФормаОтчета.ОтчетТабличныйДокумент.Области.ДиаграммаГанта.Объект.Точки;
    Для Каждого ТочкаДиаграммыГанта Из СписокТочек Цикл

    РасшифровкаТочки = ТочкаДиаграммыГанта.Расшифровка;
    Если ТочкаДиаграммыГанта.Значение = НСтр(“ru = ‘Фоновые задания'”) Тогда
    Продолжить;
    КонецЕсли;

    Если РасшифровкаТочки.Найти(ПараметрыОбработчика.Расшифровка.Получить(2)) <> Неопределено Тогда
    ПоказатьСведенияОРегламентномЗадании(РасшифровкаТочки);
    Прервать;
    КонецЕсли;

    КонецЦикла;

    ИначеЕсли Действие = “ОткрытьЖурналРегистрации” Тогда

    СеансРегламентногоЗадания = Новый СписокЗначений;
    СеансРегламентногоЗадания.Добавить(ПараметрыОбработчика.Расшифровка.Получить(1));
    ДатаНачала = ПараметрыОбработчика.Расшифровка.Получить(3);
    ДатаОкончания = ПараметрыОбработчика.Расшифровка.Получить(4);
    ОтборЖурналаРегистрации = Новый Структура(“Сеанс, ДатаНачала, ДатаОкончания”,
    СеансРегламентногоЗадания, ДатаНачала, ДатаОкончания);
    ОткрытьФорму(“Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации”, ОтборЖурналаРегистрации);

    КонецЕсли;

    КонецПроцедуры

    • Это всё красиво и понятно – суть вопроса совсем в другом.
      Это нужно вызвать не по кнопке в процессе работы.
      Это нужно вызвать в ПередЗаписью или ПередЗакрытием и по результату не дать записать или закрыть форму.

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

        • Что мешает – в порядке приоритетов:
          1. Перво-наперво – это КОСТЫЛЬ.
          2. Это решает только при закрытии формы (и нагружает читабельность кода – согласитесь – обработать вопрос сразу намного приятнее).
          3. Перед записью – вот тут куча вариантов может быть. Не спрашивать же повторно – какое действие вызвало запись ? Пользователь просто не поймёт, что он него хотят.

  • Откройте любую типовую последнюю конфигурацию на упр. формах, там море примеров!!! Не ужели так сложно?

    • Буду признателен за указание типовой, на 8.3.8+.
      И если не сложно, где используется вопрос при закрытии формы (перед записью) с вариантами больше 2 (Да\НЕТ).

  • Про – http://its.1c.ru/docs/v8nonmodal/.
    Тото же – сами придумали, и сами не знают как быть:
    1. С закрытием показывают в документации как правильно писать костыли.
    2. С записью сами не смогли придумать как быть.

    Резюме: вот вам новый костыль, дорогие разработчики – как хотите – так и пишите.

    п.с.: УНФ новую докачаю посмотрю, но, уверен, с учетом ссылки – там вряд ли будет что-то бОльшее, чем в этой ссылке.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

48 − 44 =

Подписаться на блог по эл. почте

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

Присоединиться к еще 5 подписчикам

Рейтинг@Mail.ru