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

Развитие продуктов «1С» и платформы «1С:Предприятие»

Проблемы web-клиета

Ограничения программ, используемых для работы в Интернете

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

Проблемы поддержки модальных окон в среде Интернет

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

Общие принципы при переходе на асинхронную модель построения бизнес-логики

В синхронной модели код, зависящий от выбора пользователя, выполняется последовательно и модальность обеспечивается как для разработчика, так и для пользователя

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

Механизмы платформы для отказа от модальности

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

механизмы, помогающие перейти в этот режим

Новый режим интерфейса

"Не использовать" - это новый, немодальный режим работы, стандартный режим для новых конфигураций

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

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

Новый режим открытия окна формы

ОписаниеОповещенияОЗакрытии – В него передаётся то описание оповещения, которое указано в методе ОткрытьФорму(). После закрытия формы исполнение кода продолжается с процедуры, указанной в этом описании оповещения.

РежимОткрытияОкна - появилось новое значение БлокироватьВесьИнтерфейс, которое следует использовать для того, чтобы из всего интерфейса пользователю была бы доступна только одна открытая форма.

Новые асинхронные средства платформы для взаимодействия с пользователем

Для реализации асинхронной модели в первую очередь требуется возможность описания процедур-обработчиков оповещений, которые будут вызваны системой при завершении выбора пользователя

ИмяПроцедуры

Модуль

ДополнительныеПараметры

В некоторых случаях результат выбора может отсутствовать или передаваться несколькими параметрами

Их имена начинаются со слова Показать либо Начать, например, ПоказатьВопрос() вместо Вопрос(), НачатьПомещениеФайла() вместо ПоместитьФайл(), и так далее

Первым параметром принимают объект ОписаниеОповещения, указывающий на процедуру модуля, которая будет выполнена после того как пользователь сделает выбор в блокирующем окне

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

Дополнительно реализован новый метод глобального
контекста

Разработка конфигурации в немодальном режиме

Не надо беспокоиться о свойствах самой конфигурации

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

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

чтобы открыть форму в блокирующем режиме вместо метода
ОткрытьФормуМодально() нужно использовать метод ОткрытьФорму()

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

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

Типовые сценарии при переходе на асинхронную модель

Вопрос в модуле команды, формы или в общем модуле

Наиболее частым сценарием является получение информации от пользователя во время исполнения какой-либо команды

Вопрос в модуле управляемого приложения

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