В процессе эксплуатации серверных версий 1С:Предприятие системные администраторы и разработчики иногда сталкиваются с аномальным поведением системы: вместо стандартного уведомления о том, что объект редактируется другим пользователем, программа аварийно завершает сеанс. Особенно часто эта проблема проявлялась на платформе ветки 8.3.13. В данной статье мы подробно разберем причины возникновения этой «пессимистичной» блокировки и шаги, которые помогут вернуть систему в стабильное состояние.
Рассмотрим ситуацию: серверная база работает на платформе 8.3.13.1926, используется MS SQL Server 2016, а в качестве операционной системы выступает Windows 10, настроенная для многопользовательской работы через RDP. При попытке двух пользователей открыть один и тот же документ система генерирует критическую ошибку. Вместо привычного диалогового окна «Объект заблокирован» происходит закрытие приложения 1cv8.exe.
Проанализируем основные факторы, провоцирующие такое поведение:
Managed Lock Manager (менеджер управляемых блокировок). При возникновении конфликта блокировок рабочий процесс rphost мог некорректно обрабатывать исключение, что приводило к падению всего потока.Как показывает практика, наиболее эффективным решением является отказ от проблемного релиза. Разберем, на какую версию лучше перейти. Платформа 8.3.13.1926 оказалась нестабильной во многих аспектах, поэтому рассмотрим два пути:
Вариант А: Откат на проверенную версию. Переход на ветку 8.3.12 (например, последние релизы этой ветки) часто решает проблему мгновенно, так как механизмы управления сеансами там работают по классической схеме без экспериментальных изменений 13-й ветки.
Вариант Б: Обновление до актуальных релизов. Рекомендуется переход на 8.3.14 или 8.3.15. В этих версиях ошибки менеджера блокировок были исправлены, а алгоритмы обработки таймаутов пересмотрены. Стоит избегать промежуточных нестабильных сборок и выбирать релизы с пометкой «финальный».
Простая переустановка платформы может не помочь, если в системе остались «битые» файлы кэша. Рассмотрим процедуру полной очистки по шагам:
Шаг 1. Очистка кэша пользователей на RDP-сервере.
Необходимо удалить содержимое папок, где 1С хранит временные данные для каждой информационной базы. Эти папки находятся по путям:
%AppData%\1C\1cv8\%LocalAppData%\1C\1cv8\Важно помнить, что при работе в терминальном режиме (RDP) эти действия нужно выполнить для профиля каждого пользователя.
Шаг 2. Очистка серверного кэша.
Для серверных баз критически важно очистить данные кластера. Остановите службу 1C:Enterprise 8.3 Server Agent. Перейдите в каталог реестра кластера (по умолчанию это C:\Program Files\1cv8\srvinfo). Найдите там папку snccntx — именно здесь хранятся данные менеджера управляемых блокировок. Удалите содержимое этой папки. Также стоит очистить папку reg_1541 (или другой порт вашего кластера), за исключением файла 1cv8wsrv.lst, который содержит список баз.
Иногда требуется «перезагрузить» связь между сервером 1С и SQL. Разберем, как правильно перерегистрировать базу:
Этот процесс гарантированно очищает серверные идентификаторы сеансов и позволяет платформе начать работу «с чистого листа».
Чтобы минимизировать вероятность конфликтов блокировок на уровне СУБД, проанализируем настройки вашего SQL-сервера. Для 1С рекомендуется использовать режим READ_COMMITTED_SNAPSHOT. Выясним, включен ли он, и при необходимости активируем его. Это позволит пользователям, читающим данные, не блокироваться пишущими пользователями.
Пример скрипта для проверки и включения режима:
-- Проверка текущего режима
SELECT name, is_read_committed_snapshot_on FROM sys.databases WHERE name = 'Имя_Вашей_Базы';
-- Включение режима (требуется монопольный доступ)
ALTER DATABASE [Имя_Вашей_Базы] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [Имя_Вашей_Базы] SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE [Имя_Вашей_Базы] SET MULTI_USER;
Также проверьте параметр Compatibility Level (Уровень совместимости). Для SQL 2016 он должен соответствовать значению 130. Если база была перенесена со старого сервера, уровень совместимости мог остаться низким, что мешает оптимизатору запросов работать корректно.
Если вы часто применяете изменения в конфигураторе через «Обновить конфигурацию базы данных» при активных пользователях, это неизбежно ведет к накоплению ошибок в таблице Config. Рассмотрим, как исправить последствия таких обновлений. Если база начала «вылетать», рекомендуется выполнить процедуру полного (не динамического) обновления:
Подведем итог: Аварийное завершение работы при блокировке в версии 8.3.13.1926 — это результат совокупности багов платформы и нестабильности окружения. Наилучшим выходом является переход на платформу 8.3.14 или возврат к 8.3.12 в сочетании с полной очисткой кэша srvinfo и пользовательских настроек.