Администрирование · 8 мин
Как в 1С узнать, кто заблокировал объект
Разбираем, как в 1С узнать, кто заблокировал объект: журнал регистрации, сеансы, консоль кластера и программные способы снятия блокировки.
Сообщение «Конфликт блокировок при выполнении транзакции» или «Объект заблокирован другим пользователем» — типичная ситуация в многопользовательской 1С. Чтобы устранить проблему, сначала нужно понять, какой сеанс или пользователь удерживает блокировку, и только потом решать: дождаться освобождения, завершить сеанс или снять блокировку программно.
Способ поиска зависит от режима работы: файловая база ограничена в инструментах, а клиент-серверный вариант с СУБД (MS SQL, PostgreSQL) позволяет видеть блокировки в консоли кластера и на уровне самой СУБД. Ниже разобраны все практические варианты — от журнала регистрации до запросов к SQL-серверу.
Какие бывают блокировки в 1С и почему это важно
Прежде чем искать виновника, стоит понять, с каким типом блокировки вы столкнулись. В 1С существуют управляемые блокировки, которые платформа ставит автоматически при проведении документов и записи объектов, и объектные блокировки данных — они возникают, когда пользователь открыл форму объекта на редактирование и не закрыл её.
Отдельный случай — блокировка информационной базы целиком: её устанавливает администратор при обновлении конфигурации или регламентных операциях. В этом случае пользователи не могут войти вообще, а вопрос «кто заблокировал» решается через консоль кластера или функциональность «Блокировка установки соединений».
Поиск виновника через журнал регистрации
Самый доступный способ, не требующий прав администратора кластера, — журнал регистрации. Откройте его через меню «Администрирование — Обслуживание — Журнал регистрации» (в типовых конфигурациях) или через конфигуратор.
Настройте отбор: укажите период, когда возникла ошибка, и отфильтруйте события по уровню «Ошибка». Ошибки конфликта блокировок содержат текст вида «Конфликт блокировок при выполнении транзакции» и указывают сеанс, который удерживал блокировку, а также пользователя, столкнувшегося с ней.
- 1Откройте журнал регистрации и задайте период, близкий к моменту ошибки
- 2Установите отбор по уровню событий «Ошибка»
- 3Найдите запись с текстом про конфликт блокировок и раскройте детали
- 4По номеру сеанса и имени компьютера определите, кто удерживал объект
- 5Соотнесите сеанс с пользователем через список активных пользователей
Ограничение метода: журнал регистрации показывает событие постфактум. Если блокировка держится прямо сейчас и ошибок ещё не было (например, пользователь просто держит открытой форму документа), журнал может не содержать нужной записи — тогда переходите к анализу активных сеансов.
Анализ активных сеансов и консоль кластера
В клиент-серверном варианте откройте консоль кластера серверов 1С (утилита «Администрирование серверов 1С Предприятия»). Разверните нужный кластер, затем информационную базу и посмотрите списки «Сеансы» и «Соединения». Здесь видно, какой пользователь с какого компьютера работает и как давно начат сеанс.
Диалоговое окно с ошибкой блокировки в самой 1С часто содержит кнопку «Подробно», где указывается пользователь и компьютер, удерживающие блокировку. Если конфликт с объектной блокировкой данных, платформа обычно прямо пишет: «объект редактируется пользователем Иванов И.И., компьютер WS-05». Это самый быстрый ответ на вопрос «кто заблокировал».
В типовых конфигурациях на базе БСП есть обработка «Активные пользователи» (Администрирование — Обслуживание — Активные пользователи), которая показывает сеансы внутри самой программы без доступа к консоли кластера.
Поиск блокировок на уровне СУБД
Если работа идёт через MS SQL Server, блокировки видны штатными средствами СУБД. Активные блокировки и ожидающие запросы можно посмотреть через Activity Monitor в SQL Server Management Studio или запросами к системным представлениям sys.dm_tran_locks и sys.dm_exec_sessions.
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С связан с соединением к СУБД.
Как корректно снять блокировку
Если виновник найден и это объектная блокировка (открытая форма), попросите пользователя закрыть форму или завершить работу. Это самый безопасный путь: данные сохранятся корректно, транзакции завершатся штатно.
Если пользователь недоступен (ушёл, компьютер завис), завершите его сеанс через консоль кластера: выделите сеанс и выберите «Удалить». Перед этим можно отправить пользователю сообщение прямо из консоли. В файловом режиме аналогичная возможность есть в конфигураторе: «Администрирование — Активные пользователи».
Если блокировку держит фоновое задание (обмен, регламентная операция), проверьте список фоновых заданий в консоли кластера или в разделе «Регламентные и фоновые задания» типовой конфигурации. Зависшее задание можно отменить, после чего блокировка снимется.
Профилактика повторных блокировок
Если конфликты блокировок возникают регулярно на одних и тех же документах, проблема обычно не в конкретном пользователе, а в архитектуре: длительные транзакции, проведение больших пакетов документов в рабочее время, обмены данными в часы пик.
Практические меры: переносите тяжёлые обмены и групповые перепроведения на ночное время, включайте режим управляемых блокировок там, где он ещё не включён, и следите за тем, чтобы пользователи не держали формы документов открытыми подолгу. Для диагностики системных проблем используйте технологический журнал с событием TLOCK — он фиксирует все конфликты блокировок с деталями.
Что важно запомнить
Виновника блокировки ищут в журнале регистрации, в списке сеансов консоли кластера или средствами СУБД. Снимать блокировку безопаснее всего штатным завершением сеанса, а не перезапуском сервера или обрывом соединений на уровне СУБД.
Частые вопросы
В файловой базе нет консоли кластера — как узнать, кто заблокировал объект?
Используйте конфигуратор: «Администрирование — Активные пользователи» покажет всех подключённых. Также помогает журнал регистрации с отбором по ошибкам, а в типовых конфигурациях — обработка «Активные пользователи» в разделе администрирования.
Сообщение об ошибке не показывает имя пользователя, только сеанс. Что делать?
Запомните номер сеанса из текста ошибки и найдите его в списке сеансов консоли кластера — там указаны пользователь, компьютер и время начала сеанса.
Можно ли программно определить, кто заблокировал объект?
Да, через метод ПолучитьСеансыИнформационнойБазы() или COM-соединение с агентом сервера. Для объектных блокировок данных платформа при ошибке возвращает информацию о сеансе-владельце, которую можно обработать в коде и показать пользователю.
Блокировка не снимается даже после завершения сеанса. Почему?
Возможно, блокировку удерживает фоновое задание или «зависшее» соединение на уровне СУБД. Проверьте список фоновых заданий и соединений в консоли кластера, при необходимости — активные сессии в СУБД.
Опасно ли удалять сеанс пользователя из консоли кластера?
Для базы данных это безопасно — транзакции откатятся корректно. Риск только в потере несохранённых данных самого пользователя, поэтому по возможности предупредите его или отправьте сообщение из консоли.
Что такое технологический журнал и зачем его включать?
Это механизм платформы, записывающий низкоуровневые события в текстовые файлы. Событие TLOCK фиксирует все конфликты блокировок с указанием сеансов — полезно, когда блокировки возникают хаотично и поймать виновника вручную не получается.