При работе с 1С через браузер (веб-клиент) пользователи часто сталкиваются с неприятным явлением: при запуске тяжелого отчета или длительной обработки интерфейс замирает, и через некоторое время браузер выдает стандартное системное сообщение: «Страница не отвечает. Вы можете дождаться ответа или закрыть её». Это пугает пользователей и создает ощущение нестабильности системы. В этой статье мы подробно разберем, почему это происходит и как правильно настроить систему, чтобы исключить появление этого окна.
Прежде чем приступать к настройкам, проанализируем ситуацию с технической стороны. Веб-клиент 1С — это сложное JavaScript-приложение, работающее в контексте браузера. Почти все современные браузеры (Chrome, Edge, Opera) построены на движке Chromium. У этого движка есть механизм Kill Pages. Он следит за «основным потоком» (Main Thread) выполнения скриптов.
Если веб-клиент отправляет синхронный запрос к серверу 1С, который выполняется долго (например, 20–40 секунд), основной поток JavaScript блокируется. Браузер перестает получать сигналы о том, что страница жива, и считает, что вкладка зависла. Наша задача — сделать так, чтобы основной поток оставался свободным, а длительные вычисления уходили «на задний план».
Это самый правильный и надежный архитектурный способ решения проблемы. Если операция длится более 2–3 секунд, она не должна выполняться непосредственно в обработчике нажатия кнопки. Рассмотрим, как реализовать механизм длительных операций с использованием Библиотеки стандартных подсистем (БСП).
Разберем по шагам логику работы:
Пример кода для запуска такой операции через БСП:
// Параметры выполнения процедуры на сервере
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = "Обработка тяжелых данных";
// Запуск фонового задания
РезультатЗапуска = ДлительныеОперации.ЗапуститьВыполнениеНаСервере(
"ИмяОбщегоМодуля.ИмяПроцедуры",
ПараметрыПроцедуры,
ПараметрыВыполнения
);
// Открытие формы ожидания
Если РезультатЗапуска.Статус = "Выполняется" Тогда
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ДлительныеОперацииКлиент.ОжидатьЗавершение(РезультатЗапуска, ПараметрыОжидания);
КонецЕсли;
Использование ДлительныеОперации.ЗапуститьВыполнениеНаСервере позволяет имитировать активность страницы для браузера, что предотвращает появление окна «Страница не отвечает».
Начиная с версии платформы 8.3.18, 1С поддерживает работу через WebSockets. Этот протокол обеспечивает полнодуплексную связь между браузером и веб-сервером. Это критически важно для веб-клиента, так как позволяет серверу самому «подталкивать» данные клиенту, минуя бесконечные циклы опроса через HTTP-запросы.
Для настройки WebSockets выполним следующие действия:
default.vrd (обычно находится в каталоге публикации на веб-сервере).wsEnable="true".httpd.conf найдем и раскомментируем (уберем символ #) строку:LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
После этого перезагрузим службу Apache. Это существенно снизит сетевые накладные расходы и повысит отзывчивость интерфейса.
Иногда браузер выдает ошибку, потому что веб-сервер обрывает соединение раньше, чем 1С успевает подготовить ответ. Проанализируем настройки тайм-аутов в конфигурационном файле Apache (httpd.conf).
Рассмотрим ключевые директивы:
Timeout стоит 60 секунд, соединение будет разорвано. Увеличим его до разумного предела (например, 300).Пример настройки:
# Время ожидания ответа в секундах
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
Часто причиной «фризов» (замираний) становятся синхронные модальные окна или вызовы расширений в браузере. Выясним причину: если в коде используется метод Вопрос() или Предупреждение(), веб-клиент останавливает выполнение скрипта до ответа пользователя. В некоторых конфигурациях браузера это может интерпретироваться как зависание.
Необходимо переписать такие участки на асинхронные методы:
Вопрос() используем ПоказатьВопрос().ОткрытьФормуМодально() используем ОткрытьФорму() с описанием оповещения о закрытии.Это позволит JavaScript-движку браузера оставаться активным, даже когда система ждет действий от человека.
Если проблема сохраняется даже на быстрых операциях, проанализируем влияние сетевых экранов и антивирусного ПО. Глубокое сканирование HTTP/HTTPS трафика (SSL Inspection) добавляет значительную задержку к каждому пакету данных. Для веб-клиента 1С, который обменивается множеством мелких пакетов, это критично.
Рекомендации:
Появление окна «Страница не отвечает» — это сигнал о том, что интерфейс заблокирован слишком долго. Самым эффективным методом борьбы является перенос тяжелых вычислений в фоновые задания. Настройка веб-сервера и протоколов связи (WebSockets) помогает сгладить сетевые задержки, но не заменяет правильную архитектуру разработки на платформе 1С. Совместное использование этих методов позволит сделать работу в веб-клиенте такой же комфортной, как и в тонком клиенте.