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

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

Блокировка данных в 1С: когда снимается и что делать при зависании

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

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

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

Какие бывают блокировки в 1С

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

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

Транзакционные блокировки устанавливаются на время выполнения транзакции — проведения документа, записи набора данных, обмена. Они живут ровно столько, сколько выполняется транзакция, и снимаются при её фиксации (commit) или откате (rollback).

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

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

В штатных ситуациях вмешательство не требуется. Платформа освобождает данные в следующих случаях.

Завершение транзакции

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

Закрытие формы объекта

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

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

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

Таймаут кластера

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

Почему блокировка может «зависнуть»

Типовые причины, из-за которых блокировка не снимается вовремя:

  • пользователь открыл объект на редактирование и оставил форму открытой (ушёл на обед, свернул программу);
  • сеанс завис: клиентское приложение не отвечает, но соединение с кластером ещё живо;
  • аварийное завершение клиента без корректного закрытия соединения — блокировка будет жить до срабатывания таймаута кластера;
  • длительная транзакция: тяжёлая обработка, обмен данными, групповое перепроведение удерживают блокировки всё время своей работы;
  • взаимоблокировка (deadlock): два сеанса ждут друг друга — в этом случае СУБД или платформа принудительно завершает одну из транзакций с ошибкой, и её блокировки снимаются при откате.
Сообщение «объект редактируется»Объектная блокировка

Кто-то держит открытой форму объекта — найдите пользователя и попросите закрыть форму

«Конфликт блокировок при выполнении транзакции»Транзакционная блокировка

Проверьте, не выполняется ли длительная обработка или обмен; повторите операцию позже

«Превышено время ожидания блокировки»Долгое ожидание ресурса

Найдите зависший сеанс в консоли кластера и завершите его

Ошибка повторяется у всех пользователейЗависшая блокировка

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

Как найти и снять зависшую блокировку

Если блокировка не снимается сама, действуйте от мягких методов к жёстким.

Через консоль кластера серверов 1С

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

Через раздел «Активные пользователи»

В клиентском режиме (Функции для технического специалиста или стандартная обработка «Активные пользователи» в типовых конфигурациях) можно увидеть, кто сейчас работает в базе, и при наличии прав завершить сеанс. Это удобно, когда нет доступа к серверной консоли.

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

Если непонятно, кто держит блокировку, включите технологический журнал с событием TLOCK и TDEADLOCK — он покажет, какие сеансы конфликтуют и по каким объектам. Это основной инструмент для диагностики повторяющихся конфликтов.

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

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

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

  • перевести конфигурацию в режим управляемых блокировок (в типовых решениях он уже включён);
  • не проводить массовые обработки и обмены в часы пиковой работы пользователей;
  • в собственных доработках минимизировать время транзакции: не делать внутри транзакции запросы к пользователю, внешние вызовы и длительные вычисления;
  • приучить пользователей закрывать формы документов после редактирования, а не оставлять их открытыми;
  • настроить регламентные задания на ночное время, если они затрагивают те же данные, что и пользователи.
Типичные ошибки
01
Принудительное завершение сеанса с идущим обменом — риск рассинхронизации данных между базами
02
Перезапуск сервера 1С «для снятия блокировки» — грубый метод, прерывающий работу всех пользователей, когда достаточно завершить один сеанс
03
Игнорирование повторяющихся конфликтов — если одна и та же ошибка возникает регулярно, нужен анализ технологического журнала, а не постоянное ручное снятие
04
Длительные транзакции в собственном коде — вызов вопроса пользователю или обращение к внешнему сервису внутри транзакции удерживает блокировки минутами

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

Через какое время зависшая блокировка снимется сама?

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

Почему документ «заблокирован», хотя пользователь уже вышел из программы?

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

Чем отличается «конфликт блокировок» от «превышения времени ожидания»?

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

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

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

Что такое взаимоблокировка и как она разрешается?

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

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

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

Итог

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

Блокировка в 1С снимается автоматически при завершении транзакции, закрытии формы или завершении сеанса. Зависшие блокировки убираются принудительным завершением сеанса через консоль кластера или «Активных пользователей». Главное правило: сначала убедитесь, что сеанс не выполняет важную операцию, и только потом завершайте его.