Отказ от модальности
Современные конфигурации 1с используют управляемые формы и почти всегда оптимизированы под веб-клиент, для этого в свойствах конфигурации режим использования модальности включен в положение не использовать.
Две основные причины отказа от модальности это асинхронное выполнение программного кода и блокировка модальных окон в браузерах.
1с начала пропаганду отказа от модальности в 2013 году, но модальные окна до сих пор встречаются.
Отказ от модальности, заметка от 1с от января 2013 года.
Использование модальных окон в данном режиме запрещено!
Ошибка при использовании модальных функций
На днях в работе столкнулся вот с таким кодом.
&НаКлиенте Процедура СоздатьЗаказНаПроизводство(Команда Если Модифицированность Тогда Режим = РежимДиалогаВопрос.ДаНет; Ответ = Вопрос(НСтр("ru = 'В документе есть изменения. Записать?';" + " en = 'Do you want to continue?'"), Режим, 0); Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; Иначе Записать(); КонецЕсли; КонецЕсли; //Код прикладного решения КонецПроцедуры
Код будет работать в толстом клиенте, на обычных формах, но в современных конфигурациях выдаст ошибку «Использование модальных окон в данном режиме запрещено!».
Что бы убрать модальность, нужно заменить функцию «Вопрос» на функцию «ПоказатьВопрос».
Разница в синтаксисе
Синтаксис команд очень похож, но из-за асинхронности команды показать вопрос, он немного отличается.
Вопрос()
Вопрос(<ТекстВопроса>, <Кнопки>, <Таймаут>, <КнопкаПоУмолчанию>, <Заголовок>, <КнопкаТаймаута>)
Работает в 1с начиная с версии 8.0.
ПоказатьВопрос()
ПоказатьВопрос(<ОписаниеОповещенияОЗавершении>, <ТекстВопроса>, <Кнопки>, <Таймаут>, <КнопкаПоУмолчанию>, <Заголовок>, <КнопкаТаймаута>)
Работает в 1с начиная с версии 8.3.3.
Отказываемся от модальности
Для того что бы убрать модальность перепишем код используя асинхронную функцию 1с показатьвопрос.
&НаКлиенте Процедура СоздатьЗаказНаПроизводство(Команда) Если Модифицированность Тогда Режим = РежимДиалогаВопрос.ДаНет; Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект, Параметры); ПоказатьВопрос(Оповещение, НСтр("ru = 'В документе есть изменения. Записать?';" + " en = 'Do you want to continue?'"), Режим, 0); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт Если Результат = КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли; Записать(); //Код прикладного решения КонецПроцедуры
Запускаем и проверяем код.
Ошибка про модальное окно ушла, программа работает как надо.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.