В конфигураторе в свойства конфигурации, есть параметр «Режим использования модальности»
Если установить Не использовать, то — принципе весь код, который после ОткрытьФормуМодально() Вопрос(), Предупреждение(), Выборов и диалогов открытия-сохранения станет работать с ошибками!
Рассмотрим пример с Использовать:
[wp_ad_camp_3]
1 2 3 4 5 6 7 |
&НаКлиенте Процедура КомандаВопрос(Команда) Ответ = Вопрос("Ну что скажешь? ", РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда Сообщить("Ответили ДА!"); КонецЕсли; КонецПроцедуры |
В режиме Предприятие получаем
Если мы поставим Режим использования модальности = Не использовать то получим ошибку: Использование модальных окон в данном режиме запрещено
Теперь код нужно писать по новому:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
&НаКлиенте Процедура КомандаВопросПоНовому(Команда) Оповещение = Новый ОписаниеОповещения("ОтветНаВопросЗавершение", ЭтотОбъект); ТекстВопроса = "Ну что скажешь?"; ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет); КонецПроцедуры &НаКлиенте Процедура ОтветНаВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда Сообщить("Ответили ДА"); КонецЕсли; КонецПроцедуры |
в результате
Почему 1С решила отказаться от использования модальных окон ?
[wp_ad_camp_3]
В наш век развития мобильных технологий все идет к тому — что скоро все будут работать на планшетах и телефонах. 1С сделала для этого «Web Клиент» и «Мобильное приложение». И чтобы успешно двигаться вперед нужно решать такие проблемы как, блокировка всплывающих окон. Ведь даже обычные браузеры по умолчанию блокируют модальные (всплывающие) окна!
Источник: helpf.pro
1С 8.3 : Использование модальных окон в данном режиме запрещено! Модальные окна не работают, как быть?: 21 комментарий
А как быть и что делать, если при разрешенных модальных окнах все браузеры, кроме 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. Перед записью — вот тут куча вариантов может быть. Не спрашивать же повторно — какое действие вызвало запись ? Пользователь просто не поймёт, что он него хотят.
http://its.1c.ru/docs/v8nonmodal/
Откройте любую типовую последнюю конфигурацию на упр. формах, там море примеров!!! Не ужели так сложно?
Буду признателен за указание типовой, на 8.3.8+.
И если не сложно, где используется вопрос при закрытии формы (перед записью) с вариантами больше 2 (Да\НЕТ).
Почитайте ответы! Уже писал название с точным номером релиза
Спасибо — попробую последнюю.
В версии 1.6.2 — ничего такого нету.
Про — http://its.1c.ru/docs/v8nonmodal/.
Тото же — сами придумали, и сами не знают как быть:
1. С закрытием показывают в документации как правильно писать костыли.
2. С записью сами не смогли придумать как быть.
—
Резюме: вот вам новый костыль, дорогие разработчики — как хотите — так и пишите.
—
п.с.: УНФ новую докачаю посмотрю, но, уверен, с учетом ссылки — там вряд ли будет что-то бОльшее, чем в этой ссылке.
Обсуждение закрыто.