Администрирование · 9 мин
Режим использования модальности в 1С: что это и как настроить
Что такое режим использования модальности в 1С, где находится эта настройка, чем отличаются варианты «Использовать» и «Не использовать», и как исправить ошибки модальных окон.
Режим использования модальности — это параметр конфигурации 1С:Предприятие, который определяет, разрешено ли прикладному решению открывать модальные окна. Модальное окно блокирует работу со всей остальной программой, пока пользователь не ответит на вопрос или не закроет диалог: классические примеры — «Вопрос», «Предупреждение», «Ввести значение».
Эта настройка появилась в связи с развитием веб-клиента: в браузерах модальные окна технически не поддерживаются или работают через эмуляцию, поэтому платформа 1С перешла на асинхронную модель с описаниями оповещений. Конфигурации, написанные под старый синхронный код, при запуске в веб-клиенте или с отключённой модальностью выдают ошибки.
Параметр задаётся в конфигураторе на уровне всей конфигурации, а также может быть переопределён в тонком и веб-клиенте. От его значения зависит, будет ли работать старый код с методами Вопрос(), Предупреждение(), ОткрытьЗначение() или потребуется доработка на асинхронные аналоги ПоказатьВопрос(), ПоказатьПредупреждение().
Что такое модальные окна и почему от них отказались
Модальное окно — это диалог, который захватывает управление и не даёт пользователю переключиться на другие формы программы, пока не будет дан ответ. В толстом клиенте под Windows такие окна реализуются средствами операционной системы и работают естественно. Проблема возникает в веб-клиенте: браузеры не позволяют остановить выполнение скрипта в ожидании ответа пользователя, поэтому классическая модальность там невозможна в принципе.
Фирма «1С» перевела платформу на асинхронную модель: вместо вызова, который «зависает» до ответа, код вызывает метод ПоказатьВопрос() и передаёт в него описание оповещения — процедуру, которая выполнится, когда пользователь нажмёт кнопку. Такой подход одинаково работает в тонком, толстом и веб-клиенте.
Где находится настройка и какие значения бывают
Свойство «Режим использования модальности» находится в конфигураторе: откройте дерево конфигурации, щёлкните правой кнопкой по корневому узлу с именем конфигурации и выберите «Свойства». Параметр расположен в разделе «Совместимость». Доступны три значения:
- Использовать — модальные окна разрешены, старый синхронный код работает без доработки;
- Использовать с предупреждениями — модальные вызовы работают, но платформа выводит предупреждение о нежелательности такого подхода;
- Не использовать — модальные вызовы запрещены, при их выполнении возникает ошибка времени выполнения.
Дополнительно режим можно ограничить на уровне клиентского приложения: в параметрах запуска тонкого клиента и в настройках веб-клиента. Если конфигурация разрешает модальность, а клиент — нет, приоритет у запрета.
Сравнение значений
Подходит для старых конфигураций на синхронном коде. Ограничение: проблемы при работе через веб-клиент и мобильную платформу.
Временный вариант на период миграции: код работает, но пользователи видят предупреждения, что раздражает при массовой работе.
Целевой вариант для современных решений и веб-клиента. Требует переписывания синхронных вызовов на асинхронные.
Какую ошибку вызывает запрет модальности
Типичный симптом: после обновления платформы или при запуске через браузер пользователь видит сообщение вида «Использование модальных окон в данном режиме запрещено» либо «Модальные окна запрещены в данном режиме работы конфигурации». Ошибка возникает в момент вызова методов Вопрос(), Предупреждение(), ВвестиЗначение(), ОткрытьФормуМодально() и им подобных.
Есть два пути решения. Быстрый — разрешить модальность в свойствах конфигурации, если решение не планируется запускать в веб-клиенте. Правильный — заменить синхронные вызовы на асинхронные аналоги. Например, Вопрос("Продолжить?", РежимДиалогаВопрос.ДаНет) заменяется на ПоказатьВопрос(ОписаниеОповещения, "Продолжить?", РежимДиалогаВопрос.ДаНет), где обработка ответа переносится в отдельную процедуру.
Как проверить конфигурацию на модальные вызовы
Перед сменой режима на «Не использовать» полезно найти все места, где код сломается. В конфигураторе есть штатный инструмент: меню «Конфигурация» → «Проверка конфигурации», где нужно включить флажок проверки использования модальных и синхронных вызовов. Проверка покажет список модулей и строк, требующих доработки.
Дополнительно можно выполнить глобальный поиск по текстам модулей по ключевым словам: Вопрос(, Предупреждение(, ВвестиЗначение, ОткрытьФормуМодально, ОткрытьЗначение. Это поможет оценить объём работ, особенно в самописных и сильно доработанных конфигурациях.
- 1Сделайте резервную копию информационной базы или выгрузку cf.
- 2Запустите проверку конфигурации с контролем модальных и синхронных вызовов, сохраните список проблемных мест.
- 3Замените синхронные методы на асинхронные аналоги с описаниями оповещений.
- 4Установите в свойствах конфигурации режим «Не использовать».
- 5Протестируйте ключевые сценарии в тонком и веб-клиенте: проведение документов, печать, обмены.
Когда какой режим выбирать
Если у вас типовая современная конфигурация (актуальные редакции «Управление торговлей», «Бухгалтерия предприятия», «Зарплата и управление персоналом»), режим уже настроен поставщиком, и менять его не требуется — вмешательство может нарушить поддержку и обновление.
Для старых самописных решений, работающих только в толстом или тонком клиенте внутри локальной сети, допустимо оставить «Использовать» — это самый дешёвый способ сохранить работоспособность. Если планируется переход на веб-клиент, публикация базы на веб-сервере или обновление до современной типовой конфигурации, перевод кода на асинхронную модель неизбежен, и начинать стоит с проверки конфигурации.
Как выбрать действие
Ограничения и риски самостоятельной настройки
Смена режима в свойствах конфигурации — это изменение конфигурации базы данных, оно требует монопольного доступа и обновления конфигурации базы. На типовых решениях это снимает конфигурацию с полной поддержки или усложняет обновления. Перед любыми изменениями сделайте выгрузку базы или файла конфигурации.
Учтите, что запрет модальности затрагивает не только явные диалоги: некоторые механизмы платформы и библиотек внутренне используют модальные вызовы. Поэтому после смены режима тестирование должно охватывать реальные бизнес-сценарии, а не только запуск программы.
FAQ
Чем «Режим использования модальности» отличается от «Режима использования синхронных вызовов»?
Это два разных свойства конфигурации. Первое управляет модальными окнами, второе — синхронными обращениями к файловой системе и внешним компонентам. Для полноценной работы в веб-клиенте оба должны быть настроены на отказ от устаревших механизмов.
Почему ошибка о модальных окнах появилась после обновления платформы?
В новых версиях платформы ужесточается контроль устаревших механизмов, а настройки клиента могли сброситься. Проверьте режим модальности в свойствах конфигурации и параметры запуска клиентского приложения.
Можно ли запретить модальность только для части пользователей?
Напрямую по пользователям режим не настраивается: свойство общее для конфигурации. Ограничение возможно косвенно — через режим запуска клиента, поскольку веб-клиент и мобильная платформа не поддерживают модальность в любом случае.
Что делать, если модальный вызов находится в закрытом модуле поставщика?
Самостоятельно исправить защищённый модуль нельзя. Варианты: установить режим «Использовать», обновиться на версию конфигурации, где проблема устранена, или обратиться к разработчику решения с описанием ошибки.
Влияет ли режим модальности на производительность?
Нет, это настройка совместимости, а не оптимизации. На скорость работы она не влияет; её назначение — определить, какие программные интерфейсы доступны коду конфигурации.
Что важно запомнить
Режим использования модальности определяет, разрешены ли в конфигурации блокирующие диалоги. «Использовать» — для старых решений в толстом и тонком клиенте, «Не использовать» — обязательное условие для веб-клиента и современных конфигураций. Перед сменой режима проверьте код штатной проверкой конфигурации и сделайте резервную копию.