Разработка и Конфигурация · 13 мин
Режим использования модальности в 1С 8.3: как включить и проверить
Как включить режим использования модальности в 1С 8.3: настройка свойства конфигурации, поведение в тонком и веб-клиенте, типичные ошибки и проверка результата.
Свойство конфигурации «Режим использования модальности» определяет, разрешено ли прикладному коду открывать модальные окна — такие, которые блокируют работу с остальным интерфейсом до их закрытия. К ним относятся вызовы Вопрос, Предупреждение, ОткрытьЗначение, модальное открытие форм и диалоги выбора файлов без обработчиков оповещения.
По умолчанию в новых конфигурациях платформа предлагает значение «Не использовать», потому что модальные вызовы не поддерживаются в веб-клиенте и замедляют интерфейс. Однако в старых конфигурациях, доработанных типовых решениях и при переносе кода с платформы 8.2 без включения этого режима система будет выдавать ошибки вида «Использование модальных окон в данном режиме запрещено».
Включить режим можно за пару минут через свойства корневого узла конфигурации, но важно понимать последствия: решение влияет на совместимость с веб-клиентом, тонким клиентом и на дальнейшую поддержку конфигурации. Ниже разобраны все значения свойства, пошаговая настройка, проверка результата и типичные ошибки.
Что такое модальность и зачем платформа её ограничивает
Модальное окно — это окно, которое перехватывает управление и не даёт пользователю работать с другими окнами приложения, пока он не ответит. Классический пример — диалог «Сохранить изменения?» с кнопками «Да», «Нет», «Отмена», вызванный методом Вопрос() в синтаксисе 8.2.
Платформа 1С:Предприятие 8.3 по умолчанию ориентирована на асинхронную модель: вместо блокирующих вызовов используются методы ПоказатьВопрос, ПоказатьПредупреждение, ПоказатьВводЗначения с описанием оповещения. Такой подход единообразно работает в тонком, толстом и веб-клиенте, где технически невозможно остановить выполнение кода до ответа пользователя.
Свойство «Режим использования модальности» — это компромисс для переходного периода. Оно позволяет старым конфигурациям продолжать работать без полной переработки кода, но сохраняет ограничения для веб-клиента и мобильной платформы.
Значения свойства и их отличия
У свойства три возможных значения. Выбор зависит от того, планируете ли вы постепенно отказываться от модальности или просто хотите сохранить работоспособность унаследованного кода.
| Значение | Поведение | Когда выбирать |
|---|---|---|
| Не использовать | Любой модальный вызов завершается ошибкой «Использование модальных окон в данном режиме запрещено» | Новые конфигурации, решения для веб-клиента и мобильной платформы |
| Использовать | Модальные окна работают без дополнительных сообщений | Старые конфигурации, эксплуатируемые только в толстом и тонком клиенте |
| Использовать с предупреждениями | Модальные окна работают, но при каждом вызове в журнал регистрации и пользователю выводится предупреждение | Переходный период: код ещё старый, но ведётся постепенная переработка |
Вариант «Использовать с предупреждениями» удобен как диагностический инструмент: по журналу регистрации можно собрать полный список мест, где ещё остались модальные вызовы, и планомерно заменять их на асинхронные аналоги.
Как включить режим использования модальности: пошагово
Настройка выполняется в конфигураторе и требует монопольного доступа к базе для обновления конфигурации базы данных. Порядок действий одинаков для файловых и клиент-серверных баз.
- 1Откройте базу в конфигураторе и выполните команду «Конфигурация — Открыть конфигурацию», если окно конфигурации ещё не открыто.
- 2В дереве конфигурации щёлкните правой кнопкой по корневому узлу с именем конфигурации и выберите «Свойства» (или нажмите Alt+Enter).
- 3В палитре свойств найдите параметр «Режим использования модальности» — он находится в группе «Совместимость».
- 4Установите значение «Использовать» или «Использовать с предупреждениями».
- 5Сохраните конфигурацию (Ctrl+S) и выполните «Конфигурация — Обновить конфигурацию базы данных» (F7).
- 6Перезапустите сеанс пользователей и проверьте работу модального вызова.
Если конфигурация находится на поддержке с запретом изменений, свойство корня изменить не удастся — сначала потребуется включить возможность изменений через «Конфигурация — Поддержка — Настройка поддержки». Учтите, что снятие с полной поддержки усложняет последующие обновления типового решения.
В клиент-серверном варианте обновление конфигурации базы данных потребует завершения активных сеансов. Запланируйте операцию на нерабочее время и предупредите пользователей — иначе платформа откажет в обновлении или сеансы будут разорваны принудительно.
Как проверить, что режим заработал
Простейшая проверка — выполнить модальный вызов, который раньше выдавал ошибку. Например, откройте обработку или документ, при работе с которыми возникало сообщение о запрете модальных окон, и повторите действие.
Для быстрой технической проверки можно выполнить в консоли кода или во внешней обработке вызов Предупреждение("Тест"). Если режим включён, появится стандартное окно предупреждения; если нет — система выдаст ошибку выполнения.
Дополнительно убедитесь, что значение свойства сохранилось именно в конфигурации базы данных, а не только в основной конфигурации: откройте «Конфигурация — Конфигурация базы данных — Свойства» и сравните значения. Расхождение означает, что обновление не было выполнено.
Как проверить результат
Открывается окно с сообщением
Ошибка «Использование модальных окон запрещено»
Совпадает с основной конфигурацией
Старое значение — обновление БД не выполнено
Есть записи о модальных вызовах
Записей нет при активной работе — проверьте, тот ли режим выбран
Ограничения: где модальность не поможет
Включение режима не делает модальные вызовы универсальными. В веб-клиенте модальные окна не работают в принципе — это ограничение браузерной модели, а не настройки конфигурации. Если пользователи работают через браузер, единственный путь — переписать код на асинхронные методы.
То же относится к мобильной платформе: она не поддерживает модальный режим. Кроме того, в тонком клиенте модальные вызовы выполняются с серверным вызовом, что заметно медленнее асинхронного варианта и при нестабильном канале связи даёт ощутимые паузы.
Наконец, значение «Использовать» влияет на совместимость с будущими версиями платформы и требованиями к публикации решений. Фирма «1С» рекомендует асинхронную модель как целевую, поэтому включение модальности стоит рассматривать как временную меру.
Альтернатива: перевод кода на асинхронные вызовы
Если есть ресурсы на доработку, правильное решение — заменить модальные методы асинхронными аналогами. Соответствие прямое: Вопрос заменяется на ПоказатьВопрос, Предупреждение — на ПоказатьПредупреждение, ВвестиЗначение — на ПоказатьВводЗначения, модальное ОткрытьФормуМодально — на ОткрытьФорму с описанием оповещения о закрытии.
Ключевое отличие в структуре кода: логика, которая раньше шла после модального вызова, переносится в отдельную процедуру — обработчик оповещения. Это требует внимательности при переносе переменных: всё, что нужно обработчику, передаётся через параметр «ДополнительныеПараметры».
&НаКлиенте
Процедура КомандаУдалить(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеВопросаОбУдалении", ЭтотОбъект);
ПоказатьВопрос(Оповещение, "Удалить выбранные строки?", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВопросаОбУдалении(Результат, ДопПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
УдалитьСтрокиНаСервере();
КонецЕсли;
КонецПроцедурыРежим «Использовать с предупреждениями» хорошо сочетается с такой постепенной переработкой: система сама подсвечивает оставшиеся модальные места, и вы можете отслеживать прогресс по журналу регистрации, не ломая работу пользователей.
Типичные ошибки при настройке режима
Чаще всего проблемы возникают не из-за самого свойства, а из-за незавершённых действий вокруг него. Ниже — ситуации, которые регулярно встречаются на практике.
Отдельная ситуация — внешние обработки и отчёты. Они выполняются в контексте режима той конфигурации, в которой запущены: если в базе модальность запрещена, обработка с вызовом Вопрос() упадёт с ошибкой независимо от того, где она была разработана. При распространении внешних обработок это стоит учитывать.
Как выбрать подходящий вариант
Как выбрать действие
Общий принцип прост: чем меньше в системе модальных вызовов, тем шире список клиентов, в которых она корректно работает, и тем проще её сопровождать. Включение модальности оправдано как быстрое восстановление работоспособности, но не как долгосрочная архитектурная стратегия.
Перед массовой переработкой кода полезно включить режим «Использовать с предупреждениями» на копии базы и собрать журнал регистрации за несколько дней реальной работы. Так вы получите фактический список модальных вызовов, отсортированный по частоте использования, и сможете начать с самых критичных мест, а не с поиска по текстам модулей.
Часто задаваемые вопросы
Где именно находится свойство «Режим использования модальности»?
В конфигураторе откройте дерево конфигурации, щёлкните правой кнопкой по самому верхнему узлу (имя конфигурации) и выберите «Свойства». Параметр находится в палитре свойств в группе «Совместимость», рядом с «Режимом совместимости». Если палитра свойств закрыта, она откроется автоматически при выборе пункта «Свойства».
Нужно ли перезапускать сервер 1С после изменения свойства?
Перезапуск сервера не требуется — достаточно обновить конфигурацию базы данных (F7 в конфигураторе) и перезапустить клиентские сеансы. В клиент-серверном варианте обновление БД потребует отсутствия активных сеансов, поэтому пользователей придётся отключить, но сама служба агента сервера продолжает работать.
Почему ошибка о модальности осталась после включения режима?
Наиболее вероятные причины: конфигурация базы данных не была обновлена после изменения свойства, сеанс пользователя не перезапущен, либо ошибка возникает в веб-клиенте, где модальные окна не поддерживаются ни при каком значении свойства. Проверьте значение свойства в конфигурации базы данных, а не только в основной конфигурации.
Чем отличается «Режим использования модальности» от «Режима совместимости»?
Это независимые свойства. Режим совместимости определяет, с поведением какой версии платформы работает конфигурация в целом, а режим использования модальности управляет только запретом модальных вызовов. Можно работать в режиме совместимости с 8.2 и при этом запретить модальность, и наоборот.
Можно ли разрешить модальность только для отдельных пользователей или ролей?
Нет, свойство задаётся на уровне всей конфигурации и действует на все сеансы одинаково. Если разным пользователям нужно разное поведение, это реализуется прикладной логикой: например, веб-пользователям показывается один интерфейс, а пользователям тонкого клиента — другой, но само свойство остаётся единым.
Что будет, если оставить «Использовать с предупреждениями» в рабочей базе?
Функционально всё будет работать, но при каждом модальном вызове пользователь увидит дополнительное предупреждение, а в журнал регистрации будет записываться событие. На активно используемой базе это заметно раздувает журнал и раздражает пользователей, поэтому такой режим стоит применять только на период диагностики и постепенной переработки кода.
Что важно запомнить
Режим включается в свойствах корня конфигурации: «Использовать» — для стабильной работы старого кода в толстом и тонком клиенте, «Использовать с предупреждениями» — на период перехода. После изменения обязательно обновите конфигурацию базы данных и перезапустите сеансы. В веб-клиенте модальность не работает никогда — там единственный путь это асинхронные методы с оповещениями.