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

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

Блокировка данных в 1С: как определить причину и разблокировать

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

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

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

Ниже разобраны виды блокировок, способы их диагностики и безопасного снятия — от простых действий в конфигураторе до работы с консолью кластера серверов 1С и СУБД.

Какие виды блокировок существуют в 1С

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

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

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

Как определить, кто или что держит блокировку

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

В клиент-серверном варианте основной инструмент — консоль кластера серверов 1С. Откройте ветку нужной базы, раздел «Сеансы»: здесь видны все подключения, их длительность, текущий вызов и спящие сеансы. Зависший сеанс часто имеет признак «Спящий» с длительным временем бездействия или застрявший фоновый вызов.

Если подозреваете блокировки на уровне СУБД, используйте штатные средства: в MS SQL Server — Activity Monitor или запросы к sys.dm_tran_locks и sys.dm_exec_requests, в PostgreSQL — представление pg_locks и pg_stat_activity. Там видно, какой процесс кого блокирует и какой запрос выполняется.

Ошибка у одного пользователя на одном документеОбъектная блокировка

Кто редактирует этот объект прямо сейчас

Ошибки у многих при проведении документовТранзакционная блокировка или зависший сеанс

Список сеансов в консоли кластера

Никто не может войти в базуАдминистративная блокировка соединений

Свойства базы в консоли кластера

Ошибка 'взаимоблокировка' в журналеКонфликт транзакций в СУБД

Журнал регистрации и логи СУБД

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

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

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

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

Порядок действий при занятом объекте
  1. 1
    Прочитайте текст ошибки: там указано, кто держит блокировку
  2. 2
    Попросите пользователя закрыть объект и проверьте доступ
  3. 3
    Если пользователь недоступен — откройте список сеансов (активные пользователи или консоль кластера)
  4. 4
    Завершите зависший сеанс принудительно
  5. 5
    Повторите операцию и убедитесь, что объект открывается на редактирование

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

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

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

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

Как снять административную блокировку соединений

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

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

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

Что делать при ошибках «Конфликт блокировок» и взаимоблокировках

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

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

На уровне СУБД убедитесь, что для базы включён режим READ COMMITTED SNAPSHOT (для MS SQL Server) — это стандартная рекомендация для 1С, существенно снижающая количество блокировок чтения. Взаимоблокировки, которые повторяются на одних и тех же операциях, — повод для анализа кода конфигурации разработчиком: типичная причина — разный порядок обращения к таблицам в разных процедурах.

Типичные ошибки
01
Перезагрузка сервера 1С или СУБД 'на всякий случай' — теряются несохранённые данные всех пользователей, а причина остаётся невыясненной
02
Удаление сеанса, выполняющего закрытие месяца или обновление — длительный откат транзакции и риск рассогласования данных
03
Снятие блокировки соединений во время обновления конфигурации — вход пользователей в момент реструктуризации
04
Ручное удаление записей в таблицах СУБД для 'снятия блокировки' — прямое повреждение данных и потеря поддержки
05
Игнорирование повторяющихся взаимоблокировок — со временем проблема перерастает в регулярные сбои у всех пользователей

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

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

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

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

Итог

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

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

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

Что делать, если при входе написано «Информационная база заблокирована»?

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

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

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

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

В клиент-серверном варианте сеанс живёт в кластере серверов, а не на компьютере пользователя. Перезагрузка ПК сеанс не завершает — найдите его в консоли кластера и удалите вручную.

Ошибка «Конфликт блокировок при выполнении транзакции» — это опасно?

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

Как узнать, какой запрос держит блокировку в MS SQL Server?

Откройте Activity Monitor в SQL Server Management Studio (разделы Processes и Resource Waits) или выполните запрос к представлениям sys.dm_tran_locks и sys.dm_exec_requests — там видно блокирующий процесс (blocking session id) и текст его запроса.

Блокировки появляются каждый день в одно и то же время — в чём причина?

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