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

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

Как в 1С узнать, кем заблокирован объект

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

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

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

Важно различать два вида блокировок: объектные (управляемые), которые платформа ставит при редактировании объекта в форме, и транзакционные, возникающие при записи данных в СУБД. Диагностируются они по-разному, и смешивать их не стоит.

Что означает сообщение о блокировке объекта

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

Транзакционная блокировка возникает на уровне СУБД в момент записи: два сеанса пытаются изменить одни и те же записи таблиц. Такие блокировки обычно кратковременны, но при взаимоблокировке (deadlock) СУБД принудительно завершает одну из транзакций с ошибкой.

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

«Объект заблокирован» при открытии формыОбъектная блокировка

Кто-то редактирует объект в форме; в сообщении указан сеанс и компьютер

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

Конкурирующая запись данных; искать сеанс в консоли кластера или в СУБД

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

Сеанс держит блокировку слишком долго или завис

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

Проверяйте фоновые задания, обмены и регламентные операции

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

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

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

Если ветка «Блокировки» пуста, а ошибка у пользователя есть, блокировка может быть на уровне СУБД. В этом случае смотрите активные запросы средствами самой СУБД: например, в MS SQL Server — через Activity Monitor или запрос к представлению sys.dm_tran_locks, где видно блокирующий процесс (blocking session id).

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

Как определить блокировку в файловой базе

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

Если сообщение указывает сеанс, который в списке активных пользователей отсутствует, вероятно, блокировка осталась от аварийно завершённого сеанса. Такие «зависшие» блокировки в файловой базе снимаются завершением процесса 1cv8.exe на компьютере, указанном в сообщении, либо перезапуском всех сеансов с базой.

При работе файловой базы через веб-сервер блокировки обслуживает процесс веб-сервера, и зависшие сеансы снимаются перезапуском пула приложений или службы веб-сервера.

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

Журнал регистрации помогает восстановить картину задним числом: кто и когда изменял объект, какие сеансы завершались аварийно. Откройте «Администрирование» → «Обслуживание» → «Журнал регистрации» и отфильтруйте по времени возникновения ошибки, имени объекта или пользователю.

Технологический журнал — более мощный инструмент для анализа транзакционных блокировок и взаимоблокировок. Он включается настройкой файла logcfg.xml в каталоге конфигурации сервера или клиента: добавляются события TLOCK, TDEADLOCK, TTIMEOUT с указанием контекста. После воспроизведения ошибки в логе видны оба участника конфликта, тексты запросов и заблокированные таблицы.

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

xml
<config xmlns="http://v8.1c.ru/v8/tech-log"><log location="C:\1clogs" history="24"><event><eq property="name" value="TLOCK"/></event><event><eq property="name" value="TDEADLOCK"/></event><event><eq property="name" value="TTIMEOUT"/></event><property name="all"/></log></config>

Программные способы и типовые механизмы

Во встроенном языке есть методы для работы с блокировками. Функция ПолучитьСеансыИнформационнойБазы() возвращает массив сеансов с пользователем, компьютером и временем начала — это позволяет программно сопоставить номер сеанса из текста ошибки с конкретным сотрудником.

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

Для анализа взаимоблокировок в MS SQL Server полезны системные представления: запрос к sys.dm_tran_locks и sys.dm_exec_sessions покажет блокирующий сеанс, его логин и текст запроса. Аналогичные средства есть в PostgreSQL (pg_locks, pg_stat_activity).

Сравнение способов диагностики

Консоль кластера

Быстро и наглядно, но только для клиент-серверного режима и в реальном времени

Активные пользователи

Доступно в любом режиме, но показывает только сеансы, без самих блокировок

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

Позволяет анализировать прошлые события, но не отображает транзакционные блокировки СУБД

Технологический журнал

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

Средства СУБД

Точная картина по транзакционным блокировкам, требует прав администратора СУБД

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

Штатный сценарий: найти пользователя-владельца сеанса и попросить его закрыть форму объекта или завершить работу с программой. В большинстве случаев этого достаточно — блокировка снимается автоматически при закрытии формы или завершении транзакции.

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

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

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

Контроль результата и границы самостоятельных действий

После снятия блокировки проверьте результат: пользователь должен открыть и записать объект без ошибки. Дополнительно убедитесь в консоли кластера, что ветка «Блокировки» очищена, а завершённый сеанс исчез из списка.

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

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

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

Запись объекта пользователем
Норма

Объект записывается без сообщения о конфликте

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

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

Вкладка «Блокировки» в консоли кластера
Норма

Список пуст или нет нужного объекта

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

Объект числится заблокированным — ищите сеанс-владелец повторно

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

Зависший сеанс завершён

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

Сеанс снова появляется — на компьютере пользователя работает фоновый процесс 1С

Итог

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

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

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

Почему в сообщении об ошибке указан компьютер, но не пользователь?

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

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

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

Что делать, если блокировку держит фоновое задание?

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

Блокировка появляется регулярно в одно и то же время — в чём причина?

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

Опасно ли завершать сеанс другого пользователя через консоль кластера?

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

Как включить технологический журнал для анализа взаимоблокировок?

Создайте файл logcfg.xml в каталоге conf сервера 1С (или рядом с исполняемым файлом клиента) с событиями TLOCK, TDEADLOCK, TTIMEOUT и каталогом для логов. После воспроизведения ошибки изучите записи: они содержат оба конфликтующих сеанса и тексты запросов. После диагностики настройку удалите или отключите.