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