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

Администрирование · 13 мин

Как включить режим модальности в 1С

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

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

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

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

Что такое режим модальности и зачем он нужен

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

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

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

Где находится настройка и как её включить

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

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

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

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

Значения параметра и чем они отличаются

Параметр принимает три значения, и выбор между ними зависит от того, как используется конфигурация и какие клиенты нужны пользователям.

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

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

Сравнение вариантов

Использовать

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

Использовать с предупреждениями

Подходит на время миграции: всё работает, но видно, где код требует переработки; ограничение — рост журнала регистрации.

Не использовать

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

Как проверить результат после включения

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

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

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

Повтор операции, вызывавшей ошибку
Норма

Открывается модальный диалог, операция завершается

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

Исключение сохраняется — клиент не перезапущен или изменён другой узел конфигурации

Журнал регистрации
Норма

Нет новых ошибок о запрете модальных окон

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

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

Свойства конфигурации
Норма

Стоит нужное значение и конфигурация базы данных обновлена

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

Значение изменено только в конфигурации, но обновление базы не выполнено

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

Ограничения и риски включения модальности

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

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

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

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

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

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

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

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

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

Как выбрать стратегию для вашей базы

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

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

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

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

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

Итог

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

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

Частые вопросы

Где именно в конфигураторе находится параметр режима модальности?

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

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

Чаще всего не выполнено обновление конфигурации базы данных (F7) или пользователь не перезапустил клиентское приложение. Реже причина в том, что изменён не тот узел дерева или конфигурация базы данных отличается от основной конфигурации — проверьте это через «Конфигурация → Конфигурация базы данных».

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

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

Что делать, если свойство недоступно для редактирования?

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

Работают ли модальные окна в веб-клиенте после включения режима?

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

Как найти в коде все места с модальными вызовами?

Используйте глобальный поиск по конфигурации (Ctrl+Shift+F) по именам методов: Вопрос, Предупреждение, ОткрытьЗначение, ОткрытьФормуМодально, ПоместитьФайл. Дополнительно включите режим «Использовать с предупреждениями» — реальные вызовы зафиксируются в журнале регистрации при работе пользователей.