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