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

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

Кто заблокировал объект в 1С: как найти виновника и снять блокировку

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

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

Блокировки в 1С бывают двух типов: объектные (пессимистичные), которые возникают при интерактивном редактировании объекта в форме, и транзакционные, которые накладываются при записи данных в рамках транзакции. В первом случае ошибка появляется сразу при открытии или попытке изменения, во втором — при проведении документов, когда несколько пользователей затрагивают одни и те же регистры или справочники.

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

Как устроены блокировки объектов в 1С

Когда пользователь открывает документ или элемент справочника на редактирование, платформа устанавливает объектную блокировку: другие пользователи могут просматривать объект, но не могут его изменить. Блокировка снимается автоматически при закрытии формы или завершении сеанса. Если сеанс завершился аварийно — например, пропала сеть или пользователь выключил компьютер кнопкой питания — блокировка может «зависнуть», особенно в файловом режиме.

Транзакционные блокировки работают иначе. При проведении документа платформа блокирует затрагиваемые записи регистров и объектов до конца транзакции. Если два пользователя одновременно проводят документы, изменяющие одни и те же данные (например, остатки по одному складу или расчеты с одним контрагентом), один из сеансов ждет, а при превышении таймаута получает ошибку «Конфликт блокировок при выполнении транзакции».

Как быстро узнать, кто работает с базой

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

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

Порядок поиска виновника блокировки
  1. 1
    Откройте Администрирование → Активные пользователи и найдите подозрительные сеансы
  2. 2
    Сопоставьте время начала сеанса с моментом появления ошибки
  3. 3
    Проверьте журнал регистрации по событию ошибки блокировки
  4. 4
    В клиент-серверном режиме откройте консоль кластера и просмотрите блокировки по сеансам
  5. 5
    Попросите пользователя завершить работу или завершите сеанс принудительно

Поиск блокировок в консоли кластера серверов

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

Также полезна вкладка «Сеансы»: по ней видно все подключения к базе, время бездействия каждого сеанса и объем прочитанных данных. Сеанс, который давно не проявляет активности, но удерживает блокировку, — типичный кандидат на принудительное завершение. Для этого выделите сеанс и выберите «Удалить» в контекстном меню: пользователь получит сообщение о разрыве соединения, а блокировки будут сняты.

Для глубокой диагностики транзакционных конфликтов используйте технологический журнал с событием TLOCK или средства СУБД. В MS SQL Server активные блокировки видны через динамическое представление sys.dm_tran_locks и Activity Monitor, в PostgreSQL — через представление pg_locks. Это требует прав администратора СУБД и понимания структуры хранения данных 1С.

sql
SELECT * FROM pg_locks l JOIN pg_stat_activity a ON l.pid = a.pid WHERE NOT l.granted;

Журнал регистрации как источник информации

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

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

Блокировки в файловой базе

В файловом режиме нет консоли кластера, а блокировками управляет сама платформа через служебный файл 1Cv8.1CL в каталоге базы. При аварийном завершении сеанса записи в этом файле могут остаться, и другие пользователи будут получать ошибку, хотя «виновник» давно вышел из программы.

Порядок действий такой: попросите всех пользователей выйти из базы, проверьте список активных пользователей (если получится войти монопольно) и убедитесь, что сеансов нет. Если ошибка сохраняется, остановите доступ к базе и удалите файл 1Cv8.1CL из каталога информационной базы — он будет создан заново при следующем подключении. Сам файл базы 1Cv8.1CD трогать нельзя.

Если база опубликована на веб-сервере или используется через общий сетевой ресурс, дополнительно проверьте, не осталось ли зависших процессов 1cv8.exe на компьютерах пользователей — их можно найти в диспетчере задач и завершить.

Типичные причины зависших блокировок и их профилактика

Чаще всего блокировки «зависают» по трем причинам: аварийное завершение клиентского приложения (отключение питания, обрыв сети, снятие процесса), длительные фоновые задания, удерживающие данные, и ошибки в коде конфигурации, когда транзакция не завершается корректно. Реже виноваты настройки СУБД — например, слишком маленький таймаут ожидания блокировки при высокой конкуренции пользователей.

Для профилактики настройте в консоли кластера автоматическое завершение простаивающих сеансов: в свойствах информационной базы задайте интервал «Завершать спящие сеансы через» и «Разрывать соединение при превышении времени простоя». Проверьте расписание регламентных заданий — тяжелые операции должны выполняться в нерабочее время, а не в разгар рабочего дня.

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

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

Как проверить, что блокировка снята

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

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

Контрольные точки

Как проверить результат

Повторная попытка проведения документа
Норма

Документ проводится без ошибок

Тревожный признак

Ошибка блокировки возникает снова

Вкладка «Блокировки» в консоли кластера
Норма

По объекту нет активных блокировок

Тревожный признак

Блокировка удерживается другим сеансом

Список активных пользователей
Норма

Зависший сеанс отсутствует

Тревожный признак

Старый сеанс снова появился или не удаляется

Журнал регистрации за последний час
Норма

Нет новых ошибок конфликта блокировок

Тревожный признак

Ошибки продолжают накапливаться

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

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

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

Почему блокировка не снимается даже после выхода пользователя?

В клиент-серверном режиме сеанс может оставаться активным на сервере после закрытия клиента — проверьте вкладку «Сеансы» в консоли кластера и завершите его вручную. В файловом режиме при аварийном завершении остаются записи в файле 1Cv8.1CL, который нужно удалить при всех вышедших пользователях.

Чем отличается «Конфликт блокировок» от «Ошибка разделенного доступа»?

«Конфликт блокировок» означает, что два сеанса одновременно пытаются изменить одни данные в транзакциях. «Разделенный доступ» — сообщение о том, что база переведена в монопольный режим или режим выполнения регламентных операций, и обычные сеансы временно не допускаются. Причины и способы решения у этих ситуаций разные.

Может ли фоновое задание блокировать объект для пользователей?

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

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

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

Как снизить количество конфликтов блокировок в целом?

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

Итог

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

Виновника блокировки ищут через активных пользователей, консоль кластера и журнал регистрации. Зависший сеанс завершают точечно, в файловой базе удаляют только 1Cv8.1CL. Перед принудительными действиями убедитесь, что не прерываете важные операции, и сделайте резервную копию.