Как избавиться от окна "Страница не отвечает" при работе в веб-клиенте 1С?

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

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

Выясним причину появления окна «Страница не отвечает»

Прежде чем приступать к настройкам, проанализируем ситуацию с технической стороны. Веб-клиент 1С — это сложное JavaScript-приложение, работающее в контексте браузера. Почти все современные браузеры (Chrome, Edge, Opera) построены на движке Chromium. У этого движка есть механизм Kill Pages. Он следит за «основным потоком» (Main Thread) выполнения скриптов.

Если веб-клиент отправляет синхронный запрос к серверу 1С, который выполняется долго (например, 20–40 секунд), основной поток JavaScript блокируется. Браузер перестает получать сигналы о том, что страница жива, и считает, что вкладка зависла. Наша задача — сделать так, чтобы основной поток оставался свободным, а длительные вычисления уходили «на задний план».

Решение №1: Использование фоновых заданий (БСП)

Это самый правильный и надежный архитектурный способ решения проблемы. Если операция длится более 2–3 секунд, она не должна выполняться непосредственно в обработчике нажатия кнопки. Рассмотрим, как реализовать механизм длительных операций с использованием Библиотеки стандартных подсистем (БСП).

Разберем по шагам логику работы:

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

Пример кода для запуска такой операции через БСП:


// Параметры выполнения процедуры на сервере
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = "Обработка тяжелых данных";

// Запуск фонового задания
РезультатЗапуска = ДлительныеОперации.ЗапуститьВыполнениеНаСервере(
    "ИмяОбщегоМодуля.ИмяПроцедуры", 
    ПараметрыПроцедуры, 
    ПараметрыВыполнения
);

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

Использование ДлительныеОперации.ЗапуститьВыполнениеНаСервере позволяет имитировать активность страницы для браузера, что предотвращает появление окна «Страница не отвечает».

Решение №2: Включение протокола WebSockets

Начиная с версии платформы 8.3.18, 1С поддерживает работу через WebSockets. Этот протокол обеспечивает полнодуплексную связь между браузером и веб-сервером. Это критически важно для веб-клиента, так как позволяет серверу самому «подталкивать» данные клиенту, минуя бесконечные циклы опроса через HTTP-запросы.

Для настройки WebSockets выполним следующие действия:

  1. Откроем файл публикации default.vrd (обычно находится в каталоге публикации на веб-сервере).
  2. Убедимся, что в корневом теге установлен параметр wsEnable="true".
  3. Если используется веб-сервер Apache, необходимо активировать модуль проксирования туннелей. В файле httpd.conf найдем и раскомментируем (уберем символ #) строку:

LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

После этого перезагрузим службу Apache. Это существенно снизит сетевые накладные расходы и повысит отзывчивость интерфейса.

Решение №3: Тонкая настройка веб-сервера Apache

Иногда браузер выдает ошибку, потому что веб-сервер обрывает соединение раньше, чем 1С успевает подготовить ответ. Проанализируем настройки тайм-аутов в конфигурационном файле Apache (httpd.conf).

Рассмотрим ключевые директивы:

Пример настройки:


# Время ожидания ответа в секундах
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15

Решение №4: Отказ от синхронных вызовов в коде

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

Необходимо переписать такие участки на асинхронные методы:

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

Решение №5: Настройка сетевой среды и антивирусов

Если проблема сохраняется даже на быстрых операциях, проанализируем влияние сетевых экранов и антивирусного ПО. Глубокое сканирование HTTP/HTTPS трафика (SSL Inspection) добавляет значительную задержку к каждому пакету данных. Для веб-клиента 1С, который обменивается множеством мелких пакетов, это критично.

Рекомендации:

  1. Добавим адрес публикации 1С в исключения антивируса (White List) на рабочих станциях пользователей.
  2. В настройках браузера (Chrome/Edge) отключим функции энергосбережения памяти для вкладки с 1С. В новых версиях Chromium есть функция «Экономия памяти» (Memory Saver), которая может «выгружать» неактивные вкладки 1С, вызывая ошибки при попытке к ним вернуться.
  3. По возможности настроим работу веб-сервера по протоколу HTTP/2, что позволит браузеру загружать статические ресурсы (картинки, стили 1С) параллельно в одном соединении.

Подведем итоги

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

← На главную