К статье
Практический материал

Администрирование · 8 мин

Как в 1С узнать, кто заблокировал объект

Разбираем, как в 1С узнать, кто заблокировал объект: журнал регистрации, сеансы, консоль кластера и программные способы снятия блокировки.

Сообщение «Конфликт блокировок при выполнении транзакции» или «Объект заблокирован другим пользователем» — типичная ситуация в многопользовательской 1С. Чтобы устранить проблему, сначала нужно понять, какой сеанс или пользователь удерживает блокировку, и только потом решать: дождаться освобождения, завершить сеанс или снять блокировку программно.

Способ поиска зависит от режима работы: файловая база ограничена в инструментах, а клиент-серверный вариант с СУБД (MS SQL, PostgreSQL) позволяет видеть блокировки в консоли кластера и на уровне самой СУБД. Ниже разобраны все практические варианты — от журнала регистрации до запросов к SQL-серверу.

Какие бывают блокировки в 1С и почему это важно

Прежде чем искать виновника, стоит понять, с каким типом блокировки вы столкнулись. В 1С существуют управляемые блокировки, которые платформа ставит автоматически при проведении документов и записи объектов, и объектные блокировки данных — они возникают, когда пользователь открыл форму объекта на редактирование и не закрыл её.

Отдельный случай — блокировка информационной базы целиком: её устанавливает администратор при обновлении конфигурации или регламентных операциях. В этом случае пользователи не могут войти вообще, а вопрос «кто заблокировал» решается через консоль кластера или функциональность «Блокировка установки соединений».

Поиск виновника через журнал регистрации

Самый доступный способ, не требующий прав администратора кластера, — журнал регистрации. Откройте его через меню «Администрирование — Обслуживание — Журнал регистрации» (в типовых конфигурациях) или через конфигуратор.

Настройте отбор: укажите период, когда возникла ошибка, и отфильтруйте события по уровню «Ошибка». Ошибки конфликта блокировок содержат текст вида «Конфликт блокировок при выполнении транзакции» и указывают сеанс, который удерживал блокировку, а также пользователя, столкнувшегося с ней.

Порядок поиска в журнале регистрации
  1. 1
    Откройте журнал регистрации и задайте период, близкий к моменту ошибки
  2. 2
    Установите отбор по уровню событий «Ошибка»
  3. 3
    Найдите запись с текстом про конфликт блокировок и раскройте детали
  4. 4
    По номеру сеанса и имени компьютера определите, кто удерживал объект
  5. 5
    Соотнесите сеанс с пользователем через список активных пользователей

Ограничение метода: журнал регистрации показывает событие постфактум. Если блокировка держится прямо сейчас и ошибок ещё не было (например, пользователь просто держит открытой форму документа), журнал может не содержать нужной записи — тогда переходите к анализу активных сеансов.

Анализ активных сеансов и консоль кластера

В клиент-серверном варианте откройте консоль кластера серверов 1С (утилита «Администрирование серверов 1С Предприятия»). Разверните нужный кластер, затем информационную базу и посмотрите списки «Сеансы» и «Соединения». Здесь видно, какой пользователь с какого компьютера работает и как давно начат сеанс.

Диалоговое окно с ошибкой блокировки в самой 1С часто содержит кнопку «Подробно», где указывается пользователь и компьютер, удерживающие блокировку. Если конфликт с объектной блокировкой данных, платформа обычно прямо пишет: «объект редактируется пользователем Иванов И.И., компьютер WS-05». Это самый быстрый ответ на вопрос «кто заблокировал».

В типовых конфигурациях на базе БСП есть обработка «Активные пользователи» (Администрирование — Обслуживание — Активные пользователи), которая показывает сеансы внутри самой программы без доступа к консоли кластера.

Поиск блокировок на уровне СУБД

Если работа идёт через MS SQL Server, блокировки видны штатными средствами СУБД. Активные блокировки и ожидающие запросы можно посмотреть через Activity Monitor в SQL Server Management Studio или запросами к системным представлениям sys.dm_tran_locks и sys.dm_exec_sessions.

sql
SELECT s.session_id, s.login_name, s.host_name, t.request_mode, t.resource_type FROM sys.dm_tran_locks t JOIN sys.dm_exec_sessions s ON t.request_session_id = s.session_id WHERE t.request_status = 'WAIT'

Такой запрос покажет сессии, ожидающие освобождения блокировки, и позволит вычислить сессию-блокировщика по цепочке. Для PostgreSQL аналогичную информацию даёт представление pg_locks в связке с pg_stat_activity.

Учтите: на уровне СУБД вы видите технические сессии, а не пользователей 1С напрямую. Сопоставление выполняется через имя компьютера или через консоль кластера, где сеанс 1С связан с соединением к СУБД.

Как корректно снять блокировку

Если виновник найден и это объектная блокировка (открытая форма), попросите пользователя закрыть форму или завершить работу. Это самый безопасный путь: данные сохранятся корректно, транзакции завершатся штатно.

Если пользователь недоступен (ушёл, компьютер завис), завершите его сеанс через консоль кластера: выделите сеанс и выберите «Удалить». Перед этим можно отправить пользователю сообщение прямо из консоли. В файловом режиме аналогичная возможность есть в конфигураторе: «Администрирование — Активные пользователи».

Если блокировку держит фоновое задание (обмен, регламентная операция), проверьте список фоновых заданий в консоли кластера или в разделе «Регламентные и фоновые задания» типовой конфигурации. Зависшее задание можно отменить, после чего блокировка снимется.

Типичные ошибки
01
Завершение сеанса без проверки, что в нём делалось — можно потерять несохранённые данные пользователя
02
Перезапуск сервера 1С вместо точечного завершения сеанса — страдают все пользователи
03
Поиск виновника только по журналу регистрации, когда блокировка активна прямо сейчас и ошибок ещё нет
04
Игнорирование фоновых заданий как источника блокировки — их не видно среди интерактивных сеансов в привычных списках

Профилактика повторных блокировок

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

Практические меры: переносите тяжёлые обмены и групповые перепроведения на ночное время, включайте режим управляемых блокировок там, где он ещё не включён, и следите за тем, чтобы пользователи не держали формы документов открытыми подолгу. Для диагностики системных проблем используйте технологический журнал с событием TLOCK — он фиксирует все конфликты блокировок с деталями.

Итог

Что важно запомнить

Виновника блокировки ищут в журнале регистрации, в списке сеансов консоли кластера или средствами СУБД. Снимать блокировку безопаснее всего штатным завершением сеанса, а не перезапуском сервера или обрывом соединений на уровне СУБД.

Частые вопросы

В файловой базе нет консоли кластера — как узнать, кто заблокировал объект?

Используйте конфигуратор: «Администрирование — Активные пользователи» покажет всех подключённых. Также помогает журнал регистрации с отбором по ошибкам, а в типовых конфигурациях — обработка «Активные пользователи» в разделе администрирования.

Сообщение об ошибке не показывает имя пользователя, только сеанс. Что делать?

Запомните номер сеанса из текста ошибки и найдите его в списке сеансов консоли кластера — там указаны пользователь, компьютер и время начала сеанса.

Можно ли программно определить, кто заблокировал объект?

Да, через метод ПолучитьСеансыИнформационнойБазы() или COM-соединение с агентом сервера. Для объектных блокировок данных платформа при ошибке возвращает информацию о сеансе-владельце, которую можно обработать в коде и показать пользователю.

Блокировка не снимается даже после завершения сеанса. Почему?

Возможно, блокировку удерживает фоновое задание или «зависшее» соединение на уровне СУБД. Проверьте список фоновых заданий и соединений в консоли кластера, при необходимости — активные сессии в СУБД.

Опасно ли удалять сеанс пользователя из консоли кластера?

Для базы данных это безопасно — транзакции откатятся корректно. Риск только в потере несохранённых данных самого пользователя, поэтому по возможности предупредите его или отправьте сообщение из консоли.

Что такое технологический журнал и зачем его включать?

Это механизм платформы, записывающий низкоуровневые события в текстовые файлы. Событие TLOCK фиксирует все конфликты блокировок с указанием сеансов — полезно, когда блокировки возникают хаотично и поймать виновника вручную не получается.