Работа пользователей с базами данных 1С:Предприятие через веб-клиент приобретает всё большую популярность благодаря своей мобильности и отсутствию необходимости развертывания полноценной платформы на каждом рабочем месте. Тем не менее при таком подходе технические специалисты часто сталкиваются со специфической проблемой: менеджеры закрывают вкладку браузера с базой данных, а их сессия продолжает «висеть» на сервере. В результате документы, которые были открыты этими сотрудниками, остаются заблокированными для редактирования остальными коллегами. На экранах пользователей появляется системное предупреждение о том, что объект заблокирован.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем поведение современных веб-браузеров, рассмотрим правильные настройки параметров информационной базы в Конфигураторе, а также изучим особенности конфигурирования веб-серверов IIS и Apache для предотвращения подобных внештатных ситуаций.
Выясним причину, по которой обычное закрытие вкладки браузера не приводит к моментальному закрытию сессии на сервере 1С. В веб-клиенте 1С используется специальный JavaScript-код, разработанный для перехвата события закрытия страницы (события onbeforeunload и unload). В момент закрытия вкладки этот код должен отправить на сервер быстрый синхронный запрос о завершении сеанса и немедленном снятии всех пессимистических блокировок.
Однако современные версии браузеров на движке Chromium (включая Google Chrome, Microsoft Edge, Opera, Яндекс.Браузер) в целях безопасности и ускорения работы интерфейса блокируют выполнение любых синхронных AJAX-запросов во время выгрузки страницы. Браузер считает такие запросы вредными, так как они могут приводить к зависанию интерфейса при закрытии вкладки. В итоге веб-клиент 1С физически не успевает сообщить серверу о том, что пользователь закрыл вкладку, и сервер продолжает считать данное соединение активным.
Решение для пользователей: Единственным надежным способом мгновенного завершения сеанса силами самого пользователя является корректный выход из системы. Приучите сотрудников использовать штатные механизмы платформы:
При таком сценарии веб-клиент отправляет штатный асинхронный запрос на сервер 1С до начала процесса закрытия страницы, сессия завершается корректно, а все удерживаемые блокировки документов снимаются моментально.
Разберем, как ведет себя сервер 1С, если пользователь всё-таки просто закрыл вкладку браузера или у него временно пропало интернет-соединение. Веб-клиент во время работы отправляет фоновые запросы («пинги») на сервер каждые несколько секунд для подтверждения своей активности. Если эти «пинги» прекращаются, сервер запускает механизм ожидания.
Посмотрим на жизненный цикл сессии в этот момент:
Важный нюанс: Пока сеанс находится в пассивном состоянии, все пессимистические блокировки объектов (например, открытых документов), которые удерживал пользователь, остаются активными! По умолчанию в платформе 1С установлены следующие таймауты: время засыпания пассивного сеанса — 1200 секунд (20 минут), а время завершения спящих сеансов — 86400 секунд (24 часа). Это значит, что блокировка с документа может не сниматься в течение 20 минут после закрытия браузера, а лицензия будет удерживаться целые сутки!
Рассмотрим по шагам, как изменить эти параметры в Конфигураторе для оптимизации работы:
600 до 1200 секунд (от 10 до 20 минут). Устанавливать значение менее 10 минут (600 секунд) крайне не рекомендуется для веб-клиентов, так как при малейших сетевых задержках сеансы активных пользователей начнут ошибочно засыпать.60–300 секунд (от 1 до 5 минут). Как только сеанс перейдет в спящий режим, сервер практически сразу уничтожит его, освободив лицензию и сняв все зависшие блокировки.Иногда виновником удержания «фантомных» сессий является сам веб-сервер, через который опубликована база данных 1С. Проанализируем настройки веб-сервера:
Таймауты Keep-Alive и Idle Timeout: Если веб-сервер (в частности Microsoft IIS) настроен на бесконечное удержание неактивных TCP-соединений, модуль расширения веб-сервера 1С (wsisapi.dll для IIS или wsap24.dll для Apache) может продолжать слать серверу 1С ложные сигналы о том, что клиент подключен. Из-за этого сеанс в консоли кластера 1С даже не переходит в пассивный режим.
Для исправления ситуации выполните следующие действия:
5 или 10 минут. Также рекомендуется настроить регулярную утилизацию (Recycle) пула приложений раз в сутки (например, в 3 часа ночи), чтобы полностью очищать накопившиеся зависшие процессы.httpd.conf проверьте директиву KeepAliveTimeout. Установите её значение в диапазоне от 5 до 15 секунд, чтобы веб-сервер своевременно закрывал неактивные соединения.Параметры файла публикации default.vrd: Файл публикации содержит конфигурацию веб-подключения к 1С. В нем можно принудительно задать параметры управления временем жизни сессий веб-сервера. Рассмотрим пример структуры файла default.vrd с указанием параметра sessionMaxAge:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/unf"
ib="Srvr="server1c";Ref="unf_db";">
<ws>
<point name="WebServices" alias="ws.1cws" enable="true"/>
</ws>
<httpServices>
<sessionMaxAge>1200</sessionMaxAge>
</httpServices>
</point>
Параметр sessionMaxAge ограничивает максимальное время жизни сессии веб-сервера в секундах, помогая своевременно уничтожать брошенные сеансы.
Проанализируем программные сбои самой платформы 1С. В старых релизах платформы (включая ветку 8.3.13, которая упоминается в вопросе автора, а также в некоторых релизах веток 8.3.14 и 8.3.15) существовали зарегистрированные ошибки, связанные с утечкой и зависанием блокировок в веб-клиенте.
Иногда пользователь корректно нажимал кнопку «Закрыть» в самой форме документа внутри веб-клиента, но из-за внутреннего бага платформы команда снятия блокировки (вызов метода РазблокироватьДанные на стороне сервера) попросту не отправлялась или завершалась с ошибкой. При этом сеанс пользователя оставался абсолютно активным, но документ блокировался «намертво» для всех остальных.
Решение: Единственным надежным способом решения этой проблемы является обновление платформы 1С:Предприятие на актуальный и стабильный релиз (например, из современных веток 8.3.22 или 8.3.24, где большинство критических багов веб-клиента уже исправлено).
Рассмотрим, как системный администратор может оперативно выявить и завершить зависший сеанс вручную, не дожидаясь срабатывания автоматических таймаутов. Для этого проанализируем возможности утилиты «Администрирование серверов 1С Предприятия»:
Web-client (Веб-клиент).Заснувший сеанс имеет значение Да, это означает, что платформа уже перевела сеанс в спящий режим.Del).Если специфика работы компании позволяет, рассмотрите возможность перевода ключевых пользователей (менеджеров с высокой интенсивностью работы) с веб-клиента (через браузер) на Тонкий клиент 1С. Для удобного запуска опубликованной информационной базы через тонкий клиент подойдёт лаунчер для запуска тонкого клиента через веб-сервер.
Тонкий клиент также может подключаться к базе через интернет по протоколам HTTP/HTTPS через веб-сервер. При этом он обладает рядом неоспоримых преимуществ:
Применяя комплексный подход — от обучения пользователей корректному выходу из системы до настройки таймаутов в Конфигураторе и оптимизации веб-сервера — вы сможете навсегда избавить своих сотрудников от проблемы зависших сессий и заблокированных документов.