Как устранить ошибку ложной блокировки объектов в тонком клиенте 1С при работе через IIS

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

Проанализируем распространенную техническую проблему, с которой сталкиваются системные администраторы и пользователи при работе с конфигурациями 1С (например, 1С:Розница 2.2 или 1С:Управление нашей фирмой), опубликованными через веб-сервер IIS. При попытке редактирования любого документа или справочника возникает окно с критическим сбоем: Ошибка блокировки объекта. Объект уже заблокирован: пользователь ..., приложение: Тонкий клиент. При этом система предлагает выбор только из двух вариантов: Завершить работу или Перезапустить, вынуждая пользователя заново открывать программу.

Выясним причины возникновения ложных блокировок

Разберем, почему тонкий клиент ругается на блокировку объекта собственным же сеансом пользователя. Взаимодействие тонкого клиента с базой данных по протоколу HTTP/HTTPS не является постоянным соединением. Вся коммуникация состоит из коротких независимых запросов.

Состояние сеанса и его блокировки удерживаются веб-сервером IIS через специальный модуль расширения (wsisapi.dll). Ложные самоблокировки возникают по следующим основным причинам:

  1. Перезапуск пула приложений IIS (AppPool Recycling): По умолчанию IIS регулярно перезапускает рабочий процесс w3wp.exe по таймеру или при превышении лимитов. В момент переработки сбрасывается контекст текущего соединения. При следующем действии пользователя тонкий клиент вынужден создавать новый сеанс, а старый сеанс зависает в кластере 1С и продолжает удерживать пессимистическую блокировку объекта (вызов метода ЗаблокироватьДанныеДляРедактирования).
  2. Тайм-аут простоя (Idle Time-out): Если пользователь отвлекся от работы, IIS завершает рабочий процесс приложения при достижении лимита времени простоя. После возобновления кликов в форме создается дублирующий сеанс («фантомный сеанс»), который сталкивается с блокировкой от предыдущего.
  3. Несовместимость режима управляемого конвейера и разрядности: Использование 64-разрядной версии веб-модуля IIS со встроенным (Integrated) режимом конвейера в некоторых релизах платформы 1С (в частности, ветки 8.3.10) приводит к некорректной передаче токенов сеанса.
  4. Накопление служебного кеша кластера: В клиент-серверных базах во временных файлах кластера (в каталогах вида snccntx...) могут сохраняться устаревшие записи о блокировках, не снятые вовремя сервером приложений.

Способ 1. Настройка пула приложений IIS для файловых информационных баз

Рассмотрим пошагово, какие параметры пула приложений в IIS необходимо изменить, чтобы устранить самоблокировки тонкого клиента в файловых базах 1С:

  1. Откроем оснастку Диспетчер служб IIS (Internet Information Services Manager).
  2. В левом дереве навигации перейдем в раздел Пулы приложений (Application Pools) и найдем пул, используемый вашей публикацией 1С.
  3. Откроем окно Дополнительные параметры... (Advanced Settings) для выбранного пула.
  4. В группе параметров Общие (General) найдем пункт Разрешить 32-разрядные приложения (Enable 32-Bit Applications) и установим его значение в True.
  5. В строке Режим управляемого конвейера (Managed Pipeline Mode) поменяем режим с Integrated (Встроенный) на Classic (Классический).
  6. В разделе Модель процесса (Process Model) найдем параметр Тайм-аут по отсутствию активности (минуты) (Idle Time-out) и заменим стандартное значение на 0. Это запретит IIS отключать процесс при временном простое пользователей.
  7. В группе Переработка (Recycling) откроем настройки и обнулим параметр Регулярный интервал времени (установим 0), а также убедимся, что отключены регулярные перезапуски по расписанию в течение рабочего дня.

Способ 2. Решение проблемы для клиент-серверных баз данных

Если информационная база работает в клиент-серверном режиме (под управлением MS SQL Server или PostgreSQL), одной лишь настройки IIS может быть недостаточно. Проанализируем дополнительные шаги по устранению проблемы:

  1. Обновление платформы 1С:Предприятие: Ошибки с некорректным освобождением блокировок через ISAPI-модуль веб-сервера были полностью переработаны и исправлены в более поздних релизах платформы (начиная с версий 8.3.12, 8.3.14 и новее). Обновление сервера и клиентов до актуального релиза является наиболее надежным решением.
  2. Очистка кеша блокировок кластера 1С:

    Остановим службу агента сервера 1С (1C:Enterprise 8.3 Server Agent). Перейдем в каталог служебных данных кластера (по умолчанию C:\ProgramData\1C\1CEstart или C:\ProgramFiles\1cv8\srvinfo\reg_1541\). Найдем и удалим каталоги с именами вида snccntx..., в которых хранятся контексты сеансов. После этого запустим службу агента сервера снова.

  3. Переход на веб-сервер Apache: Публикация информационных баз 1С на веб-сервере Apache 2.4 демонстрирует более высокий уровень стабильности при обработке длительных и засыпающих HTTP-сеансов тонкого клиента, предотвращая спонтанное создание дублирующих сессий.
  4. Временный перевод пользователей в терминальный режим (RDP): Если быстро обновить платформу не удается, переведите активных пользователей из тонкого клиента по HTTP в терминальные сеансы RDP с прямым подключением к кластеру 1С. Это полностью исключит веб-сервер из цепочки взаимодействия и избавит пользователей от сбоев блокировки.
← На главную