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

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

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

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

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

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

Ниже разобраны практические шаги для обоих режимов, способы определить, кто именно держит объект, и безопасные методы снятия зависшей блокировки.

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

Платформа 1С использует два типа блокировок. Управляемые блокировки устанавливаются платформой и прикладным кодом при записи объектов в транзакции — они видны в консоли кластера и снимаются при завершении сеанса. Транзакционные блокировки накладывает сама СУБД (MS SQL, PostgreSQL) при чтении и изменении данных — они живут внутри транзакции и снимаются при её фиксации или откате.

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

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

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

Чтобы увидеть конкретные блокировки, выделите сеанс и откройте его свойства или контекстное меню — в зависимости от версии платформы список блокировок доступен в отдельной вкладке либо через ветку «Блокировки» внутри информационной базы. Там указано, какой объект заблокирован (таблица, пространство блокировок) и каким сеансом.

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

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

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

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

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

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

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

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

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

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

Разработчикам и администраторам с доступом к конфигуратору доступны программные методы. Функция ПолучитьСеансыИнформационнойБазы() возвращает массив сеансов с их свойствами — имя пользователя, приложение, время начала, текущее фоновое задание. Метод ПолучитьБлокировкиСеансов() показывает управляемые блокировки по каждому сеансу.

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

bsl
Сеансы = ПолучитьСеансыИнформационнойБазы();
Для Каждого Сеанс Из Сеансы Цикл
    Сообщить(Сеанс.ИмяПользователя + " | " + Сеанс.ИмяПриложения + " | начат: " + Сеанс.НачалоСеанса);
КонецЦикла;

Как снять зависшую блокировку без потери данных

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

Если пользователь недоступен, завершите сеанс принудительно через консоль кластера (команда «Удалить» в списке сеансов). Платформа откатит незавершённую транзакцию и освободит блокировки. Для блокировок на уровне СУБД, которые не снимаются, может потребоваться завершение процесса на стороне SQL-сервера — это задача администратора СУБД, выполнять её без понимания, какая транзакция прерывается, не следует.

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

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

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

Открытие объекта
Норма

Объект открывается на редактирование без сообщений о блокировке

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

Ошибка «объект заблокирован» повторяется — сеанс не завершён или есть вторая блокировка

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

Зависшего сеанса нет, активность остальных сеансов меняется

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

Сеанс снова появляется с тем же компьютера — клиент переподключается автоматически

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

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

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

Ошибки повторяются — ищите фоновое задание или обмен, создающий длительную транзакцию

Частые ошибки и профилактика блокировок

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

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

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

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

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

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

Как узнать, кто заблокировал документ, если ошибка появляется только у одного пользователя?

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

Снимется ли блокировка сама, если ничего не делать?

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

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

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

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

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

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

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

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

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

Итог

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

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