Администрирование · 11 мин
Как в 1С узнать, кем заблокирован объект
Как в 1С узнать, кем заблокирован объект: журнал регистрации, консоль кластера, технологический журнал, код на встроенном языке и способы снять блокировку.
При попытке записать документ или изменить элемент справочника пользователь 1С нередко сталкивается с сообщением вида «Конфликт блокировок при выполнении транзакции» или «Объект заблокирован другим пользователем». В тексте ошибки обычно указан сеанс или компьютер, но не всегда понятно, кто именно держит блокировку и как её аккуратно снять, не потеряв данные.
Способ выяснить владельца блокировки зависит от режима работы информационной базы: файловый или клиент-серверный. В клиент-серверном варианте основной инструмент — консоль кластера серверов 1С, в файловом — журнал регистрации и список активных пользователей. Дополнительно помогают технологический журнал и программные методы встроенного языка.
Важно различать два вида блокировок: объектные (управляемые), которые платформа ставит при редактировании объекта в форме, и транзакционные, возникающие при записи данных в СУБД. Диагностируются они по-разному, и смешивать их не стоит.
Что означает сообщение о блокировке объекта
Когда пользователь открывает документ на редактирование, платформа устанавливает объектную блокировку, чтобы другой сеанс не изменил те же данные одновременно. При попытке второго пользователя открыть или записать объект появляется сообщение с указанием сеанса, компьютера и иногда имени пользователя.
Транзакционная блокировка возникает на уровне СУБД в момент записи: два сеанса пытаются изменить одни и те же записи таблиц. Такие блокировки обычно кратковременны, но при взаимоблокировке (deadlock) СУБД принудительно завершает одну из транзакций с ошибкой.
Типичный текст ошибки содержит полезные данные: номер сеанса, имя компьютера, время начала блокировки. Прежде чем искать виновника, перепишите или скопируйте полный текст сообщения — это сократит поиск.
Кто-то редактирует объект в форме; в сообщении указан сеанс и компьютер
Конкурирующая запись данных; искать сеанс в консоли кластера или в СУБД
Сеанс держит блокировку слишком долго или завис
Проверяйте фоновые задания, обмены и регламентные операции
Как найти владельца блокировки через консоль кластера
В клиент-серверном режиме основной инструмент — консоль администрирования серверов 1С:Предприятия. Откройте консоль, раскройте нужный кластер, затем информационную базу и перейдите на вкладку «Сеансы». Здесь видно всех подключённых пользователей с указанием компьютера, времени начала сеанса и текущей активности.
Для просмотра самих блокировок выберите ветку «Блокировки» в дереве информационной базы. Список покажет заблокированные объекты, номер сеанса-владельца и соединение. Сопоставив номер сеанса со вкладкой «Сеансы», вы получите имя пользователя и его компьютер.
Если ветка «Блокировки» пуста, а ошибка у пользователя есть, блокировка может быть на уровне СУБД. В этом случае смотрите активные запросы средствами самой СУБД: например, в MS SQL Server — через Activity Monitor или запрос к представлению sys.dm_tran_locks, где видно блокирующий процесс (blocking session id).
- 1Откройте консоль администрирования серверов 1С и раскройте нужный кластер
- 2Выберите информационную базу и перейдите на вкладку «Блокировки»
- 3Найдите заблокированный объект и запомните номер сеанса
- 4Откройте вкладку «Сеансы» и найдите сеанс с этим номером
- 5Свяжитесь с пользователем и попросите завершить редактирование
- 6Если пользователь недоступен, а сеанс завис — завершите сеанс через контекстное меню
Как определить блокировку в файловой базе
В файловом режиме консоли кластера нет, поэтому диагностика опирается на штатные средства конфигуратора и предприятия. Откройте в режиме «1С:Предприятие» список активных пользователей (в типовых конфигурациях: «Администрирование» → «Обслуживание» → «Активные пользователи»). Сообщение об ошибке обычно содержит имя компьютера — сопоставьте его со списком.
Если сообщение указывает сеанс, который в списке активных пользователей отсутствует, вероятно, блокировка осталась от аварийно завершённого сеанса. Такие «зависшие» блокировки в файловой базе снимаются завершением процесса 1cv8.exe на компьютере, указанном в сообщении, либо перезапуском всех сеансов с базой.
При работе файловой базы через веб-сервер блокировки обслуживает процесс веб-сервера, и зависшие сеансы снимаются перезапуском пула приложений или службы веб-сервера.
Поиск через журнал регистрации и технологический журнал
Журнал регистрации помогает восстановить картину задним числом: кто и когда изменял объект, какие сеансы завершались аварийно. Откройте «Администрирование» → «Обслуживание» → «Журнал регистрации» и отфильтруйте по времени возникновения ошибки, имени объекта или пользователю.
Технологический журнал — более мощный инструмент для анализа транзакционных блокировок и взаимоблокировок. Он включается настройкой файла logcfg.xml в каталоге конфигурации сервера или клиента: добавляются события TLOCK, TDEADLOCK, TTIMEOUT с указанием контекста. После воспроизведения ошибки в логе видны оба участника конфликта, тексты запросов и заблокированные таблицы.
По умолчанию технологический журнал отключён, поэтому для разовой диагностики его нужно включить заранее. После сбора данных настройку рекомендуется убрать: постоянная запись подробного лога снижает производительность и быстро расходует дисковое пространство.
<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).
Сравнение способов диагностики
Быстро и наглядно, но только для клиент-серверного режима и в реальном времени
Доступно в любом режиме, но показывает только сеансы, без самих блокировок
Позволяет анализировать прошлые события, но не отображает транзакционные блокировки СУБД
Максимум деталей по конфликтам, но требует настройки и снижает производительность
Точная картина по транзакционным блокировкам, требует прав администратора СУБД
Как снять блокировку и предотвратить повторение
Штатный сценарий: найти пользователя-владельца сеанса и попросить его закрыть форму объекта или завершить работу с программой. В большинстве случаев этого достаточно — блокировка снимается автоматически при закрытии формы или завершении транзакции.
Если сеанс завис (пользователь ушёл, компьютер выключен, но сеанс числится активным), завершите его через консоль кластера: вкладка «Сеансы» → контекстное меню → «Завершить сеанс». Для файловой базы помогает завершение процесса на компьютере пользователя или установка блокировки сеансов с последующим снятием.
Чтобы конфликты повторялись реже, разберитесь с причиной: длительные транзакции в коде, обмены, выполняющиеся в рабочее время, массовое проведение документов одновременно с работой пользователей. Перенос тяжёлых регламентных операций на нерабочие часы и оптимизация кода (минимизация времени между началом транзакции и фиксацией) существенно снижают число блокировок.
Контроль результата и границы самостоятельных действий
После снятия блокировки проверьте результат: пользователь должен открыть и записать объект без ошибки. Дополнительно убедитесь в консоли кластера, что ветка «Блокировки» очищена, а завершённый сеанс исчез из списка.
Если конфликты блокировок возникают систематически и связаны с взаимоблокировками на уровне СУБД, самостоятельных действий администратора базы может не хватить — потребуется анализ запросов и индексов, а иногда и доработка кода конфигурации. Это работа для разработчика 1С совместно с администратором СУБД.
Как проверить результат
Объект записывается без сообщения о конфликте
Ошибка повторяется — блокировка держится другим сеансом или есть зависший процесс
Список пуст или нет нужного объекта
Объект числится заблокированным — ищите сеанс-владелец повторно
Зависший сеанс завершён
Сеанс снова появляется — на компьютере пользователя работает фоновый процесс 1С
Что важно запомнить
Владельца блокировки быстрее всего найти в консоли кластера на вкладке «Блокировки» с сопоставлением сеанса на вкладке «Сеансы». В файловой базе помогают список активных пользователей и журнал регистрации, а для транзакционных конфликтов — технологический журнал и средства СУБД. Снимайте блокировку штатно, а зависшие сеансы завершайте осознанно.
Частые вопросы
Почему в сообщении об ошибке указан компьютер, но не пользователь?
Платформа в тексте ошибки приводит данные сеанса, а не учётной записи. На терминальном сервере у всех пользователей один компьютер, поэтому ориентируйтесь на номер сеанса: по нему в консоли кластера или через ПолучитьСеансыИнформационнойБазы() определяется конкретный пользователь.
Можно ли снять блокировку без завершения сеанса пользователя?
Да, если пользователь просто закроет форму объекта или завершит редактирование — объектная блокировка снимется сама. Транзакционная блокировка исчезает после завершения транзакции. Принудительное завершение сеанса — крайняя мера для зависших сеансов.
Что делать, если блокировку держит фоновое задание?
Найдите его в консоли кластера на вкладке «Сеансы» (тип сеанса — фоновое задание) или в списке фоновых заданий конфигурации. Дождитесь завершения либо отмените задание, если оно зависло. Затем проверьте расписание регламентного задания, чтобы оно не пересекалось с рабочим временем пользователей.
Блокировка появляется регулярно в одно и то же время — в чём причина?
Чаще всего это регламентные операции: обмен данными, расчёт итогов, закрытие месяца, резервное копирование. Сопоставьте время ошибки с расписанием регламентных заданий в консоли заданий или с планами обмена и перенесите тяжёлые операции на нерабочие часы.
Опасно ли завершать сеанс другого пользователя через консоль кластера?
Если пользователь в этот момент записывает данные, принудительное завершение может оборвать транзакцию. Платформа и СУБД откатывают незавершённые транзакции, поэтому потери уже зафиксированных данных обычно не происходит, но несохранённые данные формы будут утрачены. Всегда сначала предупреждайте пользователя.
Как включить технологический журнал для анализа взаимоблокировок?
Создайте файл logcfg.xml в каталоге conf сервера 1С (или рядом с исполняемым файлом клиента) с событиями TLOCK, TDEADLOCK, TTIMEOUT и каталогом для логов. После воспроизведения ошибки изучите записи: они содержат оба конфликтующих сеанса и тексты запросов. После диагностики настройку удалите или отключите.