К статье
Практический материал

Разработка и Конфигурация · 13 мин

Режим использования модальности в 1С 8.3: как включить и проверить

Как включить режим использования модальности в 1С 8.3: настройка свойства конфигурации, поведение в тонком и веб-клиенте, типичные ошибки и проверка результата.

Свойство конфигурации «Режим использования модальности» определяет, разрешено ли прикладному коду открывать модальные окна — такие, которые блокируют работу с остальным интерфейсом до их закрытия. К ним относятся вызовы Вопрос, Предупреждение, ОткрытьЗначение, модальное открытие форм и диалоги выбора файлов без обработчиков оповещения.

По умолчанию в новых конфигурациях платформа предлагает значение «Не использовать», потому что модальные вызовы не поддерживаются в веб-клиенте и замедляют интерфейс. Однако в старых конфигурациях, доработанных типовых решениях и при переносе кода с платформы 8.2 без включения этого режима система будет выдавать ошибки вида «Использование модальных окон в данном режиме запрещено».

Включить режим можно за пару минут через свойства корневого узла конфигурации, но важно понимать последствия: решение влияет на совместимость с веб-клиентом, тонким клиентом и на дальнейшую поддержку конфигурации. Ниже разобраны все значения свойства, пошаговая настройка, проверка результата и типичные ошибки.

Что такое модальность и зачем платформа её ограничивает

Модальное окно — это окно, которое перехватывает управление и не даёт пользователю работать с другими окнами приложения, пока он не ответит. Классический пример — диалог «Сохранить изменения?» с кнопками «Да», «Нет», «Отмена», вызванный методом Вопрос() в синтаксисе 8.2.

Платформа 1С:Предприятие 8.3 по умолчанию ориентирована на асинхронную модель: вместо блокирующих вызовов используются методы ПоказатьВопрос, ПоказатьПредупреждение, ПоказатьВводЗначения с описанием оповещения. Такой подход единообразно работает в тонком, толстом и веб-клиенте, где технически невозможно остановить выполнение кода до ответа пользователя.

Свойство «Режим использования модальности» — это компромисс для переходного периода. Оно позволяет старым конфигурациям продолжать работать без полной переработки кода, но сохраняет ограничения для веб-клиента и мобильной платформы.

Значения свойства и их отличия

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

ЗначениеПоведениеКогда выбирать
Не использоватьЛюбой модальный вызов завершается ошибкой «Использование модальных окон в данном режиме запрещено»Новые конфигурации, решения для веб-клиента и мобильной платформы
ИспользоватьМодальные окна работают без дополнительных сообщенийСтарые конфигурации, эксплуатируемые только в толстом и тонком клиенте
Использовать с предупреждениямиМодальные окна работают, но при каждом вызове в журнал регистрации и пользователю выводится предупреждениеПереходный период: код ещё старый, но ведётся постепенная переработка

Вариант «Использовать с предупреждениями» удобен как диагностический инструмент: по журналу регистрации можно собрать полный список мест, где ещё остались модальные вызовы, и планомерно заменять их на асинхронные аналоги.

Как включить режим использования модальности: пошагово

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

Порядок действий
  1. 1
    Откройте базу в конфигураторе и выполните команду «Конфигурация — Открыть конфигурацию», если окно конфигурации ещё не открыто.
  2. 2
    В дереве конфигурации щёлкните правой кнопкой по корневому узлу с именем конфигурации и выберите «Свойства» (или нажмите Alt+Enter).
  3. 3
    В палитре свойств найдите параметр «Режим использования модальности» — он находится в группе «Совместимость».
  4. 4
    Установите значение «Использовать» или «Использовать с предупреждениями».
  5. 5
    Сохраните конфигурацию (Ctrl+S) и выполните «Конфигурация — Обновить конфигурацию базы данных» (F7).
  6. 6
    Перезапустите сеанс пользователей и проверьте работу модального вызова.

Если конфигурация находится на поддержке с запретом изменений, свойство корня изменить не удастся — сначала потребуется включить возможность изменений через «Конфигурация — Поддержка — Настройка поддержки». Учтите, что снятие с полной поддержки усложняет последующие обновления типового решения.

В клиент-серверном варианте обновление конфигурации базы данных потребует завершения активных сеансов. Запланируйте операцию на нерабочее время и предупредите пользователей — иначе платформа откажет в обновлении или сеансы будут разорваны принудительно.

Как проверить, что режим заработал

Простейшая проверка — выполнить модальный вызов, который раньше выдавал ошибку. Например, откройте обработку или документ, при работе с которыми возникало сообщение о запрете модальных окон, и повторите действие.

Для быстрой технической проверки можно выполнить в консоли кода или во внешней обработке вызов Предупреждение("Тест"). Если режим включён, появится стандартное окно предупреждения; если нет — система выдаст ошибку выполнения.

Дополнительно убедитесь, что значение свойства сохранилось именно в конфигурации базы данных, а не только в основной конфигурации: откройте «Конфигурация — Конфигурация базы данных — Свойства» и сравните значения. Расхождение означает, что обновление не было выполнено.

Контрольные точки

Как проверить результат

Вызов Предупреждение() из кода
Норма

Открывается окно с сообщением

Тревожный признак

Ошибка «Использование модальных окон запрещено»

Свойство в конфигурации базы данных
Норма

Совпадает с основной конфигурацией

Тревожный признак

Старое значение — обновление БД не выполнено

Журнал регистрации при режиме «с предупреждениями»
Норма

Есть записи о модальных вызовах

Тревожный признак

Записей нет при активной работе — проверьте, тот ли режим выбран

Ограничения: где модальность не поможет

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

То же относится к мобильной платформе: она не поддерживает модальный режим. Кроме того, в тонком клиенте модальные вызовы выполняются с серверным вызовом, что заметно медленнее асинхронного варианта и при нестабильном канале связи даёт ощутимые паузы.

Наконец, значение «Использовать» влияет на совместимость с будущими версиями платформы и требованиями к публикации решений. Фирма «1С» рекомендует асинхронную модель как целевую, поэтому включение модальности стоит рассматривать как временную меру.

Альтернатива: перевод кода на асинхронные вызовы

Если есть ресурсы на доработку, правильное решение — заменить модальные методы асинхронными аналогами. Соответствие прямое: Вопрос заменяется на ПоказатьВопрос, Предупреждение — на ПоказатьПредупреждение, ВвестиЗначение — на ПоказатьВводЗначения, модальное ОткрытьФормуМодально — на ОткрытьФорму с описанием оповещения о закрытии.

Ключевое отличие в структуре кода: логика, которая раньше шла после модального вызова, переносится в отдельную процедуру — обработчик оповещения. Это требует внимательности при переносе переменных: всё, что нужно обработчику, передаётся через параметр «ДополнительныеПараметры».

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

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

Режим «Использовать с предупреждениями» хорошо сочетается с такой постепенной переработкой: система сама подсвечивает оставшиеся модальные места, и вы можете отслеживать прогресс по журналу регистрации, не ломая работу пользователей.

Типичные ошибки при настройке режима

Чаще всего проблемы возникают не из-за самого свойства, а из-за незавершённых действий вокруг него. Ниже — ситуации, которые регулярно встречаются на практике.

Типичные ошибки
01
Изменили свойство, но не обновили конфигурацию базы данных — ошибка модальности сохраняется, потому что исполняется старая конфигурация БД.
02
Включили режим «Использовать» и ожидали работу в веб-клиенте — модальные окна там не поддерживаются никак, нужна переработка кода.
03
Сняли типовую конфигурацию с поддержки ради одного свойства и потеряли возможность автоматического обновления, хотя свойство можно было изменить и в режиме поддержки с разрешением изменений.
04
Оставили режим «Использовать с предупреждениями» в рабочей базе навсегда — пользователи постоянно видят лишние сообщения, а журнал регистрации разрастается.
05
Проверяли результат в том же сеансе — после обновления конфигурации БД сеанс нужно перезапустить, иначе клиент продолжает работать со старыми метаданными.

Отдельная ситуация — внешние обработки и отчёты. Они выполняются в контексте режима той конфигурации, в которой запущены: если в базе модальность запрещена, обработка с вызовом Вопрос() упадёт с ошибкой независимо от того, где она была разработана. При распространении внешних обработок это стоит учитывать.

Как выбрать подходящий вариант

Маршрут решения

Как выбрать действие

Пользователи работают только в толстом или тонком клиенте, код старый и переработка не планируетсяУстановите «Использовать» — это минимальный по трудозатратам вариант
Ведётся постепенная замена модальных вызовов на асинхронныеУстановите «Использовать с предупреждениями» и отслеживайте остаточные вызовы в журнале регистрации
Часть пользователей работает через веб-клиент или планируется переход на негоНе включайте модальность — переписывайте проблемные места на ПоказатьВопрос и оповещения
Ошибка возникает только в одной внешней обработкеТочечно перепишите обработку на асинхронные методы вместо изменения свойства всей конфигурации

Общий принцип прост: чем меньше в системе модальных вызовов, тем шире список клиентов, в которых она корректно работает, и тем проще её сопровождать. Включение модальности оправдано как быстрое восстановление работоспособности, но не как долгосрочная архитектурная стратегия.

Перед массовой переработкой кода полезно включить режим «Использовать с предупреждениями» на копии базы и собрать журнал регистрации за несколько дней реальной работы. Так вы получите фактический список модальных вызовов, отсортированный по частоте использования, и сможете начать с самых критичных мест, а не с поиска по текстам модулей.
ПЗ
Практическое замечание

Часто задаваемые вопросы

Где именно находится свойство «Режим использования модальности»?

В конфигураторе откройте дерево конфигурации, щёлкните правой кнопкой по самому верхнему узлу (имя конфигурации) и выберите «Свойства». Параметр находится в палитре свойств в группе «Совместимость», рядом с «Режимом совместимости». Если палитра свойств закрыта, она откроется автоматически при выборе пункта «Свойства».

Нужно ли перезапускать сервер 1С после изменения свойства?

Перезапуск сервера не требуется — достаточно обновить конфигурацию базы данных (F7 в конфигураторе) и перезапустить клиентские сеансы. В клиент-серверном варианте обновление БД потребует отсутствия активных сеансов, поэтому пользователей придётся отключить, но сама служба агента сервера продолжает работать.

Почему ошибка о модальности осталась после включения режима?

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

Чем отличается «Режим использования модальности» от «Режима совместимости»?

Это независимые свойства. Режим совместимости определяет, с поведением какой версии платформы работает конфигурация в целом, а режим использования модальности управляет только запретом модальных вызовов. Можно работать в режиме совместимости с 8.2 и при этом запретить модальность, и наоборот.

Можно ли разрешить модальность только для отдельных пользователей или ролей?

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

Что будет, если оставить «Использовать с предупреждениями» в рабочей базе?

Функционально всё будет работать, но при каждом модальном вызове пользователь увидит дополнительное предупреждение, а в журнал регистрации будет записываться событие. На активно используемой базе это заметно раздувает журнал и раздражает пользователей, поэтому такой режим стоит применять только на период диагностики и постепенной переработки кода.

Итог

Что важно запомнить

Режим включается в свойствах корня конфигурации: «Использовать» — для стабильной работы старого кода в толстом и тонком клиенте, «Использовать с предупреждениями» — на период перехода. После изменения обязательно обновите конфигурацию базы данных и перезапустите сеансы. В веб-клиенте модальность не работает никогда — там единственный путь это асинхронные методы с оповещениями.