Почему зависают сессии в веб-клиенте 1С и как снять блокировку документов?

Системный администратор 1С v8.3 (Управляемые формы) Управленческий учет
← На главную

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

В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем поведение современных веб-браузеров, рассмотрим правильные настройки параметров информационной базы в Конфигураторе, а также изучим особенности конфигурирования веб-серверов IIS и Apache для предотвращения подобных внештатных ситуаций.

Причина №1: Особенности работы современных браузеров (Google Chrome и другие)

Выясним причину, по которой обычное закрытие вкладки браузера не приводит к моментальному закрытию сессии на сервере 1С. В веб-клиенте 1С используется специальный JavaScript-код, разработанный для перехвата события закрытия страницы (события onbeforeunload и unload). В момент закрытия вкладки этот код должен отправить на сервер быстрый синхронный запрос о завершении сеанса и немедленном снятии всех пессимистических блокировок.

Однако современные версии браузеров на движке Chromium (включая Google Chrome, Microsoft Edge, Opera, Яндекс.Браузер) в целях безопасности и ускорения работы интерфейса блокируют выполнение любых синхронных AJAX-запросов во время выгрузки страницы. Браузер считает такие запросы вредными, так как они могут приводить к зависанию интерфейса при закрытии вкладки. В итоге веб-клиент 1С физически не успевает сообщить серверу о том, что пользователь закрыл вкладку, и сервер продолжает считать данное соединение активным.

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

  1. Нажать на имя пользователя в правом верхнем углу интерфейса 1С.
  2. Выбрать пункт меню «Завершить работу» (или воспользоваться главным меню «Файл» -> «Выход»).

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

Причина №2: Параметры спящих сеансов в информационной базе 1С

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

Посмотрим на жизненный цикл сессии в этот момент:

  1. Сеанс признается неактивным.
  2. Через определенное время сеанс переходит в категорию «пассивного».
  3. Затем сеанс засыпает и переходит в статус «спящего».
  4. По истечении времени завершения спящего сеанса сервер окончательно удаляет его.

Важный нюанс: Пока сеанс находится в пассивном состоянии, все пессимистические блокировки объектов (например, открытых документов), которые удерживал пользователь, остаются активными! По умолчанию в платформе 1С установлены следующие таймауты: время засыпания пассивного сеанса — 1200 секунд (20 минут), а время завершения спящих сеансов — 86400 секунд (24 часа). Это значит, что блокировка с документа может не сниматься в течение 20 минут после закрытия браузера, а лицензия будет удерживаться целые сутки!

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

  1. Запустите базу 1С в режиме Конфигуратора с правами администратора.
  2. Откройте меню «Администрирование» -> «Параметры информационной базы».
  3. Найдите параметр «Время засыпания пассивных сеансов». Рекомендуется установить его значение в диапазоне от 600 до 1200 секунд (от 10 до 20 минут). Устанавливать значение менее 10 минут (600 секунд) крайне не рекомендуется для веб-клиентов, так как при малейших сетевых задержках сеансы активных пользователей начнут ошибочно засыпать.
  4. Найдите параметр «Время завершения спящих сеансов». Сократите его значение до 60–300 секунд (от 1 до 5 минут). Как только сеанс перейдет в спящий режим, сервер практически сразу уничтожит его, освободив лицензию и сняв все зависшие блокировки.

Причина №3: Настройки веб-сервера (IIS или Apache)

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

Таймауты Keep-Alive и Idle Timeout: Если веб-сервер (в частности Microsoft IIS) настроен на бесконечное удержание неактивных TCP-соединений, модуль расширения веб-сервера 1С (wsisapi.dll для IIS или wsap24.dll для Apache) может продолжать слать серверу 1С ложные сигналы о том, что клиент подключен. Из-за этого сеанс в консоли кластера 1С даже не переходит в пассивный режим.

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

Параметры файла публикации 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 ограничивает максимальное время жизни сессии веб-сервера в секундах, помогая своевременно уничтожать брошенные сеансы.

Причина №4: Ошибки платформы (Баги релиза)

Проанализируем программные сбои самой платформы 1С. В старых релизах платформы (включая ветку 8.3.13, которая упоминается в вопросе автора, а также в некоторых релизах веток 8.3.14 и 8.3.15) существовали зарегистрированные ошибки, связанные с утечкой и зависанием блокировок в веб-клиенте.

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

Решение: Единственным надежным способом решения этой проблемы является обновление платформы 1С:Предприятие на актуальный и стабильный релиз (например, из современных веток 8.3.22 или 8.3.24, где большинство критических багов веб-клиента уже исправлено).

Дополнительный контроль: Использование консоли администрирования кластера 1С

Рассмотрим, как системный администратор может оперативно выявить и завершить зависший сеанс вручную, не дожидаясь срабатывания автоматических таймаутов. Для этого проанализируем возможности утилиты «Администрирование серверов 1С Предприятия»:

  1. Запустим консоль администрирования кластера серверов 1С.
  2. Перейдем в ветку нашего кластера, откроем раздел «Информационные базы» и выберем интересующую нас базу данных.
  3. Развернем список «Сеансы». Здесь мы увидим всех пользователей, подключенных к системе в данный момент.
  4. Для удобства анализа отсортируем список по колонке «Приложение». У сеансов, запущенных через браузер, в этой колонке будет указано Web-client (Веб-клиент).
  5. Обратим внимание на колонки «Время начала», «Время последнего захвата СУБД» и «Заснувший сеанс». Если колонка Заснувший сеанс имеет значение Да, это означает, что платформа уже перевела сеанс в спящий режим.
  6. Чтобы принудительно удалить зависший сеанс и снять блокировки, выделим строку сеанса, нажмем правую кнопку мыши и выберем команду «Удалить» (или нажмем клавишу Del).

Альтернативный вариант: Использование Тонкого клиента

Если специфика работы компании позволяет, рассмотрите возможность перевода ключевых пользователей (менеджеров с высокой интенсивностью работы) с веб-клиента (через браузер) на Тонкий клиент 1С. Для удобного запуска опубликованной информационной базы через тонкий клиент подойдёт лаунчер для запуска тонкого клиента через веб-сервер.

Тонкий клиент также может подключаться к базе через интернет по протоколам HTTP/HTTPS через веб-сервер. При этом он обладает рядом неоспоримых преимуществ:

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

← На главную