← На главную
Проанализируем распространенную техническую проблему, с которой сталкиваются системные администраторы и пользователи при работе с конфигурациями 1С (например, 1С:Розница 2.2 или 1С:Управление нашей фирмой), опубликованными через веб-сервер IIS. При попытке редактирования любого документа или справочника возникает окно с критическим сбоем: Ошибка блокировки объекта. Объект уже заблокирован: пользователь ..., приложение: Тонкий клиент. При этом система предлагает выбор только из двух вариантов: Завершить работу или Перезапустить, вынуждая пользователя заново открывать программу.
Выясним причины возникновения ложных блокировок
Разберем, почему тонкий клиент ругается на блокировку объекта собственным же сеансом пользователя. Взаимодействие тонкого клиента с базой данных по протоколу HTTP/HTTPS не является постоянным соединением. Вся коммуникация состоит из коротких независимых запросов.
Состояние сеанса и его блокировки удерживаются веб-сервером IIS через специальный модуль расширения (wsisapi.dll). Ложные самоблокировки возникают по следующим основным причинам:
- Перезапуск пула приложений IIS (AppPool Recycling): По умолчанию IIS регулярно перезапускает рабочий процесс
w3wp.exe по таймеру или при превышении лимитов. В момент переработки сбрасывается контекст текущего соединения. При следующем действии пользователя тонкий клиент вынужден создавать новый сеанс, а старый сеанс зависает в кластере 1С и продолжает удерживать пессимистическую блокировку объекта (вызов метода ЗаблокироватьДанныеДляРедактирования).
- Тайм-аут простоя (Idle Time-out): Если пользователь отвлекся от работы, IIS завершает рабочий процесс приложения при достижении лимита времени простоя. После возобновления кликов в форме создается дублирующий сеанс («фантомный сеанс»), который сталкивается с блокировкой от предыдущего.
- Несовместимость режима управляемого конвейера и разрядности: Использование 64-разрядной версии веб-модуля IIS со встроенным (Integrated) режимом конвейера в некоторых релизах платформы 1С (в частности, ветки 8.3.10) приводит к некорректной передаче токенов сеанса.
- Накопление служебного кеша кластера: В клиент-серверных базах во временных файлах кластера (в каталогах вида
snccntx...) могут сохраняться устаревшие записи о блокировках, не снятые вовремя сервером приложений.
Способ 1. Настройка пула приложений IIS для файловых информационных баз
Рассмотрим пошагово, какие параметры пула приложений в IIS необходимо изменить, чтобы устранить самоблокировки тонкого клиента в файловых базах 1С:
- Откроем оснастку Диспетчер служб IIS (Internet Information Services Manager).
- В левом дереве навигации перейдем в раздел Пулы приложений (Application Pools) и найдем пул, используемый вашей публикацией 1С.
- Откроем окно Дополнительные параметры... (Advanced Settings) для выбранного пула.
- В группе параметров Общие (General) найдем пункт Разрешить 32-разрядные приложения (Enable 32-Bit Applications) и установим его значение в
True.
- В строке Режим управляемого конвейера (Managed Pipeline Mode) поменяем режим с
Integrated (Встроенный) на Classic (Классический).
- В разделе Модель процесса (Process Model) найдем параметр Тайм-аут по отсутствию активности (минуты) (Idle Time-out) и заменим стандартное значение на
0. Это запретит IIS отключать процесс при временном простое пользователей.
- В группе Переработка (Recycling) откроем настройки и обнулим параметр Регулярный интервал времени (установим
0), а также убедимся, что отключены регулярные перезапуски по расписанию в течение рабочего дня.
Способ 2. Решение проблемы для клиент-серверных баз данных
Если информационная база работает в клиент-серверном режиме (под управлением MS SQL Server или PostgreSQL), одной лишь настройки IIS может быть недостаточно. Проанализируем дополнительные шаги по устранению проблемы:
- Обновление платформы 1С:Предприятие: Ошибки с некорректным освобождением блокировок через ISAPI-модуль веб-сервера были полностью переработаны и исправлены в более поздних релизах платформы (начиная с версий 8.3.12, 8.3.14 и новее). Обновление сервера и клиентов до актуального релиза является наиболее надежным решением.
- Очистка кеша блокировок кластера 1С:
Остановим службу агента сервера 1С (1C:Enterprise 8.3 Server Agent). Перейдем в каталог служебных данных кластера (по умолчанию C:\ProgramData\1C\1CEstart или C:\ProgramFiles\1cv8\srvinfo\reg_1541\). Найдем и удалим каталоги с именами вида snccntx..., в которых хранятся контексты сеансов. После этого запустим службу агента сервера снова.
- Переход на веб-сервер Apache: Публикация информационных баз 1С на веб-сервере Apache 2.4 демонстрирует более высокий уровень стабильности при обработке длительных и засыпающих HTTP-сеансов тонкого клиента, предотвращая спонтанное создание дублирующих сессий.
- Временный перевод пользователей в терминальный режим (RDP): Если быстро обновить платформу не удается, переведите активных пользователей из тонкого клиента по HTTP в терминальные сеансы RDP с прямым подключением к кластеру 1С. Это полностью исключит веб-сервер из цепочки взаимодействия и избавит пользователей от сбоев блокировки.