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