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

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

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

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

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

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

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

Как определить, кто заблокировал объект

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

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

Для глубокой диагностики используется технологический журнал: включите сбор событий блокировок (LOCK, TLOCK, TDEADLOCK) через файл logcfg.xml. Это вариант для администраторов, когда конфликты повторяются систематически и нужно найти источник.

Сеанс активен, пользователь работаетБлокировка штатная

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

Сеанс висит без активностиВероятный зависший сеанс

Проверить время бездействия и завершить сеанс

Блокировку держит фоновое заданиеИдёт регламентная операция

Дождаться завершения или отменить задание

Снятие блокировки в файловой базе

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

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

Крайний случай — когда список активных пользователей недоступен, а блокировка мешает всем: закройте все сеансы и перезапустите доступ к файлу базы. Убедитесь, что файл 1Cv8.1CD не открыт ни одним процессом, иначе данные могут повредиться.

Снятие блокировки через консоль кластера серверов

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

Порядок действий: раздел «Сеансы» → найдите сеанс владельца блокировки → контекстное меню «Удалить». Сеанс завершится принудительно, управляемые блокировки будут сняты. Если блокировка находится на уровне СУБД (например, транзакция в MS SQL Server), может потребоваться завершение процесса и на стороне сервера баз данных — но обычно удаление сеанса 1С приводит к откату транзакции автоматически.

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

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

Блокировки фоновыми и регламентными заданиями

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

Посмотреть выполняющиеся задания можно через обработку «Консоль заданий» (входит в состав инструментов разработчика на ИТС) или стандартный список фоновых заданий в конфигураторе: «Администрирование» → «Поддержка и обслуживание» → «Регламентные и фоновые задания». Зависшее задание можно отменить, после чего блокировка снимется.

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

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

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

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

bsl
Попытка
	НачатьТранзакцию();
	ДокОбъект = ДокументСсылка.ПолучитьОбъект();
	ДокОбъект.Записать();
	ЗафиксироватьТранзакцию();
Исключение
	ОтменитьТранзакцию();
	ЗаписьЖурналаРегистрации("Блокировка", УровеньЖурналаРегистрации.Предупреждение,,, ОписаниеОшибки());
КонецПопытки;

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

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

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

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

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

Повторное открытие объекта
Норма

Объект открывается и записывается без ошибок

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

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

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

Зависшего сеанса нет в списке

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

Сеанс снова появляется с того же компьютера

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

Нет новых ошибок транзакций

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

Конфликты блокировок фиксируются регулярно

Типичные ошибки при снятии блокировок

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

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

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

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

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

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

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

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

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

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

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

Проверьте, не установлена ли блокировка соединений с информационной базой (например, для обновления конфигурации). В консоли кластера откройте свойства базы и снимите флаг блокировки сеансов. Также проверьте, не осталось ли монопольного сеанса конфигуратора.

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

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

Как предотвратить конфликты блокировок в будущем?

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