Администрирование · 9 мин
Как снять блокировку с объекта в 1С
Как снять блокировку с объекта в 1С: причины ошибки, способы разблокировки через консоль кластера, завершение сеансов и программные методы.
Ошибка «Конфликт блокировок при выполнении транзакции» или сообщение о том, что объект заблокирован другим пользователем, — одна из самых частых проблем при работе в 1С. Блокировка появляется, когда сеанс удерживает объект (документ, элемент справочника, запись регистра), а второй пользователь или фоновое задание пытается изменить те же данные.
Причины бывают разными: пользователь открыл документ на редактирование и отошёл, сеанс «завис» после аварийного закрытия клиента, регламентное задание выполняется дольше обычного или обмен данными удерживает таблицы. Способ снятия блокировки зависит от того, кто её удерживает и в каком режиме работает база — файловом или клиент-серверном.
Важно понимать: принудительное снятие блокировки — административная операция. Если просто «убить» сеанс, который выполнял проведение документа или обмен, можно получить незавершённую транзакцию и рассогласованные данные. Поэтому сначала нужно выяснить, кто держит объект, и только потом выбирать способ разблокировки.
Как определить, кто заблокировал объект
Прежде чем что-то снимать, нужно найти владельца блокировки. В сообщении об ошибке 1С обычно указывает, какой объект конфликтует, но не всегда показывает виновника. Самый простой способ — открыть список активных пользователей: в режиме «Предприятие» перейдите в раздел «Администрирование» → «Обслуживание» → «Активные пользователи» (в некоторых конфигурациях путь отличается).
В клиент-серверном варианте полную картину даёт консоль кластера серверов 1С. Откройте ветку нужной информационной базы, раздел «Сеансы» — там видно, какой пользователь, с какого компьютера и как долго работает. Колонка «Время вызова СУБД» и признаки активности помогают отличить живой сеанс от зависшего.
Для глубокой диагностики используется технологический журнал: включите сбор событий блокировок (LOCK, TLOCK, TDEADLOCK) через файл logcfg.xml. Это вариант для администраторов, когда конфликты повторяются систематически и нужно найти источник.
Попросить пользователя закрыть объект или записать документ
Проверить время бездействия и завершить сеанс
Дождаться завершения или отменить задание
Снятие блокировки в файловой базе
В файловом режиме механизм проще: блокировку удерживает сеанс конкретного пользователя, и достаточно его завершить. Попросите пользователя закрыть объект — это самый безопасный путь. Если человек недоступен, а сеанс явно завис, администратор может удалить сеанс из списка активных пользователей.
Если база открыта в монопольном доступе или пользователь завершил работу аварийно (выключили компьютер, оборвалась сеть), «мёртвый» сеанс может оставаться в списке несколько минут. Дождитесь таймаута или завершите сеанс вручную: выделите его в списке активных пользователей и нажмите «Завершить сеанс».
Крайний случай — когда список активных пользователей недоступен, а блокировка мешает всем: закройте все сеансы и перезапустите доступ к файлу базы. Убедитесь, что файл 1Cv8.1CD не открыт ни одним процессом, иначе данные могут повредиться.
Снятие блокировки через консоль кластера серверов
В клиент-серверном режиме основной инструмент — консоль администрирования серверов 1С. Откройте её на сервере или с компьютера администратора, найдите нужный кластер и информационную базу.
Порядок действий: раздел «Сеансы» → найдите сеанс владельца блокировки → контекстное меню «Удалить». Сеанс завершится принудительно, управляемые блокировки будут сняты. Если блокировка находится на уровне СУБД (например, транзакция в MS SQL Server), может потребоваться завершение процесса и на стороне сервера баз данных — но обычно удаление сеанса 1С приводит к откату транзакции автоматически.
Обратите внимание на раздел «Соединения»: иногда сеанс удалён, а соединение с рабочим процессом осталось. Такие «потерянные» соединения тоже можно удалить вручную.
- 1Откройте консоль администрирования серверов 1С и найдите нужную информационную базу
- 2Перейдите в раздел «Сеансы» и найдите сеанс, удерживающий объект
- 3Убедитесь, что сеанс завис: нет активности, давнее время простоя
- 4Удалите сеанс через контекстное меню
- 5Проверьте, что блокировка снята: повторите операцию, вызвавшую ошибку
Блокировки фоновыми и регламентными заданиями
Частый источник конфликтов — регламентные задания: обмены с другими системами, расчёт итогов, полнотекстовое индексирование, загрузка курсов валют. Такое задание может удерживать таблицы продолжительное время, и пользователи получают ошибки при попытке провести документы.
Посмотреть выполняющиеся задания можно через обработку «Консоль заданий» (входит в состав инструментов разработчика на ИТС) или стандартный список фоновых заданий в конфигураторе: «Администрирование» → «Поддержка и обслуживание» → «Регламентные и фоновые задания». Зависшее задание можно отменить, после чего блокировка снимется.
Если конфликты с заданиями повторяются, решение не в ручном снятии блокировок, а в настройке расписания: перенесите тяжёлые операции на нерабочее время или разведите задания по времени, чтобы они не пересекались.
Программное снятие блокировки и работа через код
Во встроенном языке 1С есть объект УправляемаяБлокировка и методы для работы с блокировками данных, однако «снять чужую блокировку» программно из прикладного кода нельзя — платформа это запрещает осознанно. Управляемые блокировки автоматически освобождаются при завершении транзакции или сеанса.
Что можно сделать разработчику: корректно обрабатывать ошибки блокировок через попытку/исключение и повторять операцию с паузой, а также сокращать время транзакций — чем короче транзакция, тем меньше шанс конфликта. Для массовых обработок полезен режим разделения данных и запись объектов порциями.
Попытка
НачатьТранзакцию();
ДокОбъект = ДокументСсылка.ПолучитьОбъект();
ДокОбъект.Записать();
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации("Блокировка", УровеньЖурналаРегистрации.Предупреждение,,, ОписаниеОшибки());
КонецПопытки;Как проверить, что блокировка снята
После завершения сеанса или задания повторите операцию, которая вызывала ошибку: откройте документ на редактирование или запустите проведение. Если ошибка исчезла — блокировка снята. Если ошибка повторяется с тем же объектом, значит, его держит другой сеанс, и поиск нужно продолжить.
Дополнительная проверка — журнал регистрации: в нём фиксируются события завершения сеансов и ошибки транзакций. По ним можно убедиться, что завершён именно нужный сеанс, и отследить повторные конфликты.
Как проверить результат
Объект открывается и записывается без ошибок
Ошибка блокировки появляется снова
Зависшего сеанса нет в списке
Сеанс снова появляется с того же компьютера
Нет новых ошибок транзакций
Конфликты блокировок фиксируются регулярно
Типичные ошибки при снятии блокировок
Самая распространённая ошибка — завершение сеансов «наугад», без анализа. Так можно прервать важную операцию и получить больше проблем, чем было. Вторая ошибка — перезагрузка сервера 1С или СУБД как «универсальное средство»: это действительно снимает все блокировки, но прерывает работу всех пользователей и не решает причину.
Третья ошибка — игнорирование повторяющихся конфликтов. Если блокировки возникают регулярно в одном и том же месте, проблема в архитектуре: длинные транзакции, неоптимальные запросы, одновременные обмены. Здесь нужна доработка, а не ручное снятие.
Что важно запомнить
Блокировку всегда снимает завершение её владельца: сеанса пользователя или фонового задания. Сначала определите владельца через список активных пользователей или консоль кластера, убедитесь, что сеанс завис, и только потом завершайте его. Повторяющиеся конфликты — сигнал оптимизировать транзакции и расписание заданий.
Частые вопросы
Можно ли снять блокировку без прав администратора?
Нет. Завершение чужого сеанса и доступ к консоли кластера требуют административных прав. Обычный пользователь может только дождаться освобождения объекта или попросить коллегу закрыть его. Если блокировки мешают работе регулярно, обратитесь к администратору базы.
Почему блокировка появляется снова после снятия?
Значит, источник конфликта не устранён: сеанс пользователя пересоздаётся автоматически, фоновое задание запускается по расписанию или обмен данными стартует повторно. Найдите процесс, который регулярно захватывает объект, и скорректируйте его расписание или логику.
Что делать, если заблокирована вся база, а не один объект?
Проверьте, не установлена ли блокировка соединений с информационной базой (например, для обновления конфигурации). В консоли кластера откройте свойства базы и снимите флаг блокировки сеансов. Также проверьте, не осталось ли монопольного сеанса конфигуратора.
Опасно ли завершать зависший сеанс?
Для действительно зависшего сеанса — безопасно: незавершённые транзакции откатываются, данные в целости. Риск есть только если сеанс не завис, а выполнял длительную операцию — тогда часть работы придётся повторить. Поэтому перед завершением проверяйте время бездействия сеанса.
Как предотвратить конфликты блокировок в будущем?
Сокращайте длительность транзакций в прикладном коде, разносите регламентные задания по времени, настройте у пользователей привычку закрывать документы после редактирования. При систематических конфликтах включите сбор событий блокировок в технологическом журнале и передайте результаты разработчику на анализ.