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

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

Объект заблокирован в 1С: как узнать, кем, и что делать

Почему 1С пишет «объект заблокирован», как узнать, какой пользователь или сеанс держит блокировку, и как безопасно её снять без потери данных.

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

Задача администратора — быстро определить, кем заблокирован объект, и решить: дождаться освобождения, попросить пользователя закрыть форму или принудительно завершить сеанс. Ниже разобраны способы для файловой и клиент-серверной базы, а также типичные сценарии, когда блокировка возникает «сама по себе».

Что означает сообщение о блокировке объекта

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

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

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

Как быстро узнать, кто держит блокировку

Самый простой путь — внимательно прочитать текст ошибки. В конфигурациях на Библиотеке стандартных подсистем сообщение обычно содержит имя пользователя и компьютер: «Не удалось заблокировать объект... Он редактируется пользователем Иванов И.И. (компьютер WS-045)». Если такая информация есть — дальше достаточно связаться с коллегой и попросить закрыть форму.

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

Когда в сообщении пользователя нет (типично для конфликтов транзакций), источники информации такие:

  • консоль кластера серверов 1С — раздел «Сеансы» и «Блокировки»;
  • журнал регистрации — события с ошибками блокировок и действия пользователей по объекту;
  • технологический журнал — события TLOCK, TDEADLOCK для глубокой диагностики;
  • типовая обработка «Активные пользователи» (Администрирование → Обслуживание) — список сеансов с возможностью завершения.
Порядок действий при ошибке блокировки
  1. 1
    Прочитайте текст ошибки: часто там уже указан пользователь и компьютер
  2. 2
    Откройте список активных сеансов (консоль кластера или «Активные пользователи»)
  3. 3
    Найдите сеанс пользователя и проверьте, жив ли он: время последнего вызова, открытые объекты
  4. 4
    Попросите пользователя закрыть форму объекта или завершите зависший сеанс
  5. 5
    Повторите операцию и убедитесь, что объект записывается без ошибок

Диагностика в клиент-серверной базе

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

Полезно сопоставить сеанс 1С с процессом на SQL-сервере. В Microsoft SQL Server активные блокировки видны через Activity Monitor или запрос к sys.dm_tran_locks и sys.dm_exec_sessions — по ним видно, какой процесс держит ресурс и кого он блокирует. В PostgreSQL аналогичную картину даёт представление pg_locks в связке с pg_stat_activity.

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

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

Диагностика в файловой базе

В файловом варианте консоли кластера нет, поэтому остаются два инструмента: журнал регистрации и список активных пользователей из самой базы (Администрирование → Обслуживание → Активные пользователи). Там видно, кто сейчас подключён, с какого компьютера и когда была последняя активность.

Характерная ситуация для файловой базы: пользователь закрыл 1С аварийно (обрыв сети, перезагрузка, снятие процесса), а сеанс в списке остался. Такой «мёртвый» сеанс может удерживать блокировку и мешать другим. Решение — завершить его из списка активных пользователей или перезапустить службу/процесс, обслуживающий файловую базу, если публикация идёт через веб-сервер.

Ещё один признак проблемы — файл 1Cv8.1CL в каталоге базы при отсутствии реальных подключений. Удалять его вручную можно только когда точно никто не работает с базой, иначе есть риск повредить данные.

Типовые сценарии возникновения блокировок

Пользователь открыл объект и отошёл

Самый частый случай. Форма документа открыта в режиме редактирования, сотрудник ушёл на совещание, а коллега не может провести тот же документ или связанный заказ. Решение — попросить закрыть форму; на будущее полезно донести до пользователей правило: закончил работу — закрой объект.

Зависший сеанс

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

Фоновые и регламентные задания

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

Взаимоблокировка (deadlock)

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

Маршрут решения

Как выбрать действие

В ошибке указан пользователь, и он на местеПопросите закрыть форму объекта — блокировка снимется сразу
Пользователь указан, но сеанс зависЗавершите сеанс через консоль кластера или «Активные пользователи»
Блокировку держит фоновое заданиеДождитесь завершения или перенесите задание на нерабочее время
Конфликты повторяются регулярно в разных местахВключите технологический журнал и привлеките разработчика для анализа кода и индексов

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

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

Порядок безопасного снятия блокировки:

  1. Идентифицируйте сеанс, удерживающий объект (пользователь, компьютер, время активности).
  2. Свяжитесь с пользователем и попросите завершить работу с объектом штатно.
  3. Если сеанс завис — завершите его принудительно из консоли кластера или списка активных пользователей.
  4. Подождите 1–2 минуты: СУБД должна откатить незавершённую транзакцию и освободить ресурсы.
  5. Повторите операцию. Если ошибка сохраняется — ищите второй сеанс или фоновое задание.

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

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

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

Повторная запись объекта
Норма

Документ или элемент записывается без ошибок

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

Ошибка блокировки возвращается — сеанс не завершён или есть второй держатель

Список сеансов
Норма

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

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

Сеанс снова появляется без активности пользователя — проверяйте фоновые задания и подключения

Журнал регистрации
Норма

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

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

Ошибки повторяются регулярно — нужен анализ технологического журнала

Профилактика: как снизить число конфликтов

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

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

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

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

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

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

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

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

Сеанс пользователя завершён, а объект всё равно заблокирован. Что делать?

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

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

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

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

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

Можно ли настроить 1С так, чтобы блокировок не было совсем?

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

Что делать, если ошибка «объект заблокирован» появляется при обмене данными?

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