Почему в веб-клиенте 1С 8.3.15 возникает ошибка использования модальных окон и как это исправить

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

В этой статье мы подробно разберем причины такого поведения платформы, проанализируем настройки конфигурации и выясним, как правильно адаптировать код под новые требования безопасности современных браузеров и архитектуры 1С.

Разберем причину: изменения в платформе 8.3.15

Начиная с версии 8.3.15, компания 1С внедрила жесткие ограничения на использование модальности и синхронных вызовов в веб-клиенте. Это связано с тем, что современные браузеры (Chrome, Firefox, Safari) планомерно отказываются от поддержки синхронных операций, которые блокируют поток выполнения и ухудшают пользовательский опыт. Платформа 1С теперь принудительно исполняет эти правила.

Даже если ваш код выглядит современным, как в примере ниже, он может вызывать ошибку:


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

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

Шаг 1. Проверка свойств конфигурации

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

  1. Откройте Конфигуратор.
  2. Нажмите правой кнопкой мыши на корневой объект конфигурации (самая верхняя строка в дереве метаданных) и выберите Свойства.
  3. Найдите раздел Основные.
  4. Проверьте свойство Режим использования модальности. Если там установлено «Запрещено», это правильный вектор для современной разработки, но он требует, чтобы абсолютно весь код в системе был асинхронным.
  5. Обратите внимание на свойство Режим использования синхронных вызовов расширений платформы и внешних компонент. В версии 8.3.15 оно должно быть установлено в значение «Запрещено» для стабильной работы в веб-клиенте.
  6. Проверьте Режим совместимости. Если у вас стоит версия «8.3.6» или ниже (как упоминалось в обсуждении), платформа может некорректно эмулировать работу новых асинхронных методов в среде веб-браузера. Рекомендуется постепенно повышать режим совместимости до актуального.

Шаг 2. Анализ скрытой модальности в коде

Если свойства настроены верно, но ошибка сохраняется, значит, внутри цепочки вызовов спрятан «синхронный» код. Рассмотрим ситуацию автора темы: в процедуре ПослеЗакрытияВопроса вызывается метод Очистить().


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

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

Шаг 3. Использование автоматической проверки

Чтобы не искать ошибки вручную во всей конфигурации, воспользуемся встроенным инструментом платформы. Рассмотрим, как это сделать:

  1. В меню конфигуратора выберите Конфигурация — Проверка конфигурации.
  2. В открывшемся окне установите галочки:
    • Проверка использования модальных вызовов;
    • Проверка использования синхронных вызовов;
    • Поиск потенциальных проблем при работе в веб-клиенте.
  3. Нажмите «ОК» и внимательно изучите список предупреждений. Платформа подсветит все строки, где используются старые методы, недопустимые в веб-клиенте на версии 8.3.15.

Шаг 4. Проблема COM-объектов в веб-клиенте

В ходе обсуждения автор столкнулся с еще одной критической проблемой: попыткой создания COMОбъект("Word.Application") в веб-клиенте. Рассмотрим ситуацию подробнее. Технология COM является проприетарной технологией Windows. Она может работать в Internet Explorer через ActiveX, но категорически не поддерживается в современных браузерах, таких как Chrome или мобильные клиенты.

Если ваша задача — формировать документы по шаблону в веб-клиенте, забудьте про COM на стороне клиента. Проанализируем правильные альтернативы:

Пример правильного подхода для печати документа (серверный метод):


&НаСервере
Функция СформироватьДокументНаСервере()
    // Логика заполнения шаблона Word в виде двоичных данных
    ДвоичныеДанныеФайла = Обработки.ПечатьДокументов.ПолучитьМакет("ШаблонWord");
    // ... заполнение параметров через XML или замену текста ...
    АдресФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла);
    Возврат АдресФайла;
КонецФункции

&НаКлиенте
Процедура Печать(Команда)
    Адрес = СформироватьДокументНаСервере();
    ПолучитьФайл(Адрес, "СчетНаОплату.docx", Истина);
КонецПроцедуры

Шаг 5. Настройка отладки в веб-клиенте

Посмотрим на жалобу автора о невозможности отладки. В 1С 8.3.15 для отладки в веб-клиенте недостаточно просто запустить сеанс. Выясним, что нужно настроить:

  1. Найдите файл default.vrd в каталоге публикации вашей базы на веб-сервере (IIS или Apache).
  2. Убедитесь, что в нем прописан параметр отладки. Секция должна выглядеть примерно так: <debug enable="true" url="tcp://localhost" /> (для протокола TCP) или используйте протокол HTTP, который является предпочтительным для новых версий.
  3. В настройках Конфигуратора (Сервис — Параметры — Отладка) установите переключатель в положение «Протокол HTTP».
  4. Перезапустите веб-сервер после внесения изменений в default.vrd.

Итоги и рекомендации

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

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

← На главную