Администрирование · 9 мин
Блокировка данных в 1С: когда снимается и что делать при зависании
Когда снимается блокировка данных в 1С: виды блокировок, автоматическое снятие, зависшие сеансы, консоль кластера и принудительное удаление блокировок.
Блокировка данных в 1С — это механизм, который не даёт двум пользователям или фоновым заданиям одновременно изменить один и тот же объект: документ, элемент справочника, запись регистра. Пока объект заблокирован, другие сеансы получают сообщение вида «Конфликт блокировок при выполнении транзакции» или «Объект заблокирован» и вынуждены ждать либо завершаться с ошибкой.
В норме блокировка снимается автоматически: когда транзакция завершена, сеанс закрыт или пользователь отпустил объект. Проблемы начинаются, когда блокировка «зависает» — сеанс аварийно завершился, а запись в таблице блокировок осталась. Разберём, в какие моменты 1С снимает блокировки сама, а когда требуется вмешательство администратора.
Какие бывают блокировки в 1С
Прежде чем говорить о снятии, важно различать виды блокировок, потому что механика их освобождения разная.
Объектные (прикладные) блокировки возникают, когда пользователь открывает объект на редактирование: документ, элемент справочника. Пока форма открыта в режиме изменения, другой пользователь увидит сообщение, что объект редактируется. Такая блокировка снимается при закрытии формы без сохранения или после записи объекта.
Транзакционные блокировки устанавливаются на время выполнения транзакции — проведения документа, записи набора данных, обмена. Они живут ровно столько, сколько выполняется транзакция, и снимаются при её фиксации (commit) или откате (rollback).
Управляемые блокировки (в режиме автоматических управляемых блокировок, используемом в современных конфигурациях) накладываются явно через менеджер блокировок данных и также привязаны к транзакции.
Когда блокировка снимается автоматически
В штатных ситуациях вмешательство не требуется. Платформа освобождает данные в следующих случаях.
Завершение транзакции
Как только транзакция зафиксирована (записана в базу) или отменена, все наложенные внутри неё блокировки снимаются. Это касается и транзакционных, и управляемых блокировок. Если проведение документа заняло 3 секунды — блокировка жила 3 секунды.
Закрытие формы объекта
Объектная блокировка редактирования снимается, когда пользователь закрывает форму документа или элемента справочника. Если пользователь просто свернул окно и ушёл — блокировка остаётся активной, пока открыт сеанс и форма.
Завершение сеанса
При корректном выходе пользователя из программы кластер серверов 1С освобождает все ресурсы сеанса, включая блокировки. То же происходит при завершении фонового задания или сеанса веб-сервиса.
Таймаут кластера
Если клиентское приложение «умерло» без корректного завершения (завис компьютер, оборвалась сеть, сняли процесс через диспетчер задач), кластер обнаруживает потерю соединения и принудительно завершает сеанс. Время, через которое это происходит, регулируется настройками кластера (проверка неактивности сеансов) — обычно это несколько минут. После принудительного завершения сеанса его блокировки снимаются.
Почему блокировка может «зависнуть»
Типовые причины, из-за которых блокировка не снимается вовремя:
- пользователь открыл объект на редактирование и оставил форму открытой (ушёл на обед, свернул программу);
- сеанс завис: клиентское приложение не отвечает, но соединение с кластером ещё живо;
- аварийное завершение клиента без корректного закрытия соединения — блокировка будет жить до срабатывания таймаута кластера;
- длительная транзакция: тяжёлая обработка, обмен данными, групповое перепроведение удерживают блокировки всё время своей работы;
- взаимоблокировка (deadlock): два сеанса ждут друг друга — в этом случае СУБД или платформа принудительно завершает одну из транзакций с ошибкой, и её блокировки снимаются при откате.
Кто-то держит открытой форму объекта — найдите пользователя и попросите закрыть форму
Проверьте, не выполняется ли длительная обработка или обмен; повторите операцию позже
Найдите зависший сеанс в консоли кластера и завершите его
Проверьте список сеансов и блокировок в консоли администрирования
Как найти и снять зависшую блокировку
Если блокировка не снимается сама, действуйте от мягких методов к жёстким.
Через консоль кластера серверов 1С
Откройте консоль администрирования серверов 1С, перейдите к нужной информационной базе и посмотрите список сеансов. Найдите сеанс пользователя, который держит блокировку (по имени пользователя или приложению). Завершите сеанс через контекстное меню — все его блокировки будут сняты.
Через раздел «Активные пользователи»
В клиентском режиме (Функции для технического специалиста или стандартная обработка «Активные пользователи» в типовых конфигурациях) можно увидеть, кто сейчас работает в базе, и при наличии прав завершить сеанс. Это удобно, когда нет доступа к серверной консоли.
Через журнал регистрации и технологический журнал
Если непонятно, кто держит блокировку, включите технологический журнал с событием TLOCK и TDEADLOCK — он покажет, какие сеансы конфликтуют и по каким объектам. Это основной инструмент для диагностики повторяющихся конфликтов.
- 1Уточните текст ошибки и объект, по которому возник конфликт
- 2Откройте список активных сеансов (консоль кластера или «Активные пользователи»)
- 3Найдите сеанс, удерживающий блокировку, и проверьте, не выполняет ли он важную операцию
- 4Свяжитесь с пользователем и попросите закрыть форму или завершить работу
- 5Если сеанс завис — завершите его принудительно через консоль
- 6Повторите операцию и убедитесь, что ошибка блокировки исчезла
Как снизить количество конфликтов блокировок
Полностью исключить блокировки нельзя — это механизм целостности данных. Но снизить частоту конфликтов можно:
- перевести конфигурацию в режим управляемых блокировок (в типовых решениях он уже включён);
- не проводить массовые обработки и обмены в часы пиковой работы пользователей;
- в собственных доработках минимизировать время транзакции: не делать внутри транзакции запросы к пользователю, внешние вызовы и длительные вычисления;
- приучить пользователей закрывать формы документов после редактирования, а не оставлять их открытыми;
- настроить регламентные задания на ночное время, если они затрагивают те же данные, что и пользователи.
Частые вопросы
Через какое время зависшая блокировка снимется сама?
Если сеанс потерял связь с кластером, тот завершит его по своим настройкам допустимого времени неактивности — обычно это занимает от нескольких минут до десятков минут в зависимости от параметров кластера. Универсального фиксированного срока нет: при необходимости быстрее завершить сеанс вручную через консоль администрирования.
Почему документ «заблокирован», хотя пользователь уже вышел из программы?
Вероятно, клиентское приложение завершилось аварийно, и кластер ещё не успел зафиксировать разрыв соединения. Подождите несколько минут или завершите зависший сеанс в консоли кластера — после этого блокировка снимется.
Чем отличается «конфликт блокировок» от «превышения времени ожидания»?
«Конфликт блокировок» означает, что сеанс попытался захватить ресурс, уже занятый другой транзакцией, и операция была прервана. «Превышено время ожидания» — сеанс ждал освобождения ресурса, но не дождался за отведённый интервал. В обоих случаях причина одна — другой сеанс удерживает данные слишком долго.
Можно ли снять блокировку без прав администратора?
Без административных прав доступен только один путь: найти пользователя, который держит объект открытым, и попросить его закрыть форму. Завершение чужих сеансов и работа с консолью кластера требуют соответствующих прав.
Что такое взаимоблокировка и как она разрешается?
Взаимоблокировка возникает, когда два сеанса захватили разные ресурсы и каждый ждёт освобождения чужого. СУБД автоматически выбирает одну из транзакций «жертвой» и откатывает её с ошибкой — её блокировки снимаются, вторая транзакция завершается нормально. Повторяющиеся взаимоблокировки — повод анализировать порядок обращения к данным в коде.
Опасно ли для данных принудительное завершение сеанса?
Для обычного сеанса с открытой формой — нет: незавершённые транзакции будут откачены, данные останутся в согласованном состоянии. Риск есть только при прерывании длительных процессов: обменов, обновлений, массовых обработок, где прерывание может оставить частично выполненную операцию.
Что важно запомнить
Блокировка в 1С снимается автоматически при завершении транзакции, закрытии формы или завершении сеанса. Зависшие блокировки убираются принудительным завершением сеанса через консоль кластера или «Активных пользователей». Главное правило: сначала убедитесь, что сеанс не выполняет важную операцию, и только потом завершайте его.