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

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

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

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

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

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

Что значит «документ заблокирован» в 1С

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

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

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

Определяем владельца по тексту ошибки

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

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

Обратите внимание на колонки «Компьютер», «Приложение» и «Начало сеанса». Если блокировку держит фоновое задание, в поле приложения будет «Фоновое задание», а не «Тонкий клиент» — это сразу меняет тактику: искать пользователя бессмысленно, нужно смотреть регламентные задания.

В тексте ошибки есть имя пользователяОбъектная блокировка

Попросите коллегу закрыть форму документа

Указан только номер сеансаНужно найти сеанс в списке активных

Откройте Активные пользователи и сопоставьте номер

Блокирует фоновое заданиеРегламентная операция или обмен

Проверьте расписание регламентных заданий

Ошибка повторяется, но сеансов нетВозможен зависший сеанс на сервере

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

Просмотр активных сеансов и зависших подключений

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

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

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

Порядок действий при ошибке блокировки
  1. 1
    Скопируйте полный текст ошибки, не закрывая окно
  2. 2
    Откройте Администрирование → Обслуживание → Активные пользователи
  3. 3
    Найдите сеанс по номеру из текста ошибки или по имени пользователя
  4. 4
    Определите тип сеанса: клиент, фоновое задание, веб-сервис
  5. 5
    Свяжитесь с владельцем сеанса или завершите зависший сеанс через консоль кластера
  6. 6
    Повторите запись документа и убедитесь, что ошибка исчезла

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

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

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

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

Версионирование объектов: кто менял документ последним

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

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

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

Программный способ: консоль кода и запросы

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

bsl
Сеансы = ПолучитьСеансыИнформационнойБазы();
Для Каждого Сеанс Из Сеансы Цикл
    Сообщить("" + Сеанс.НомерСеанса + " | " + Сеанс.Пользователь.Имя + " | " + Сеанс.ИмяПриложения);
КонецЦикла;

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

Сравнение способов поиска владельца блокировки

Список активных пользователей

Быстро и доступно без прав разработчика, но работает только в момент блокировки

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

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

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

Видит зависшие сеансы и позволяет их завершить, требует доступа к серверу

Версионирование объектов

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

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

Самая полная диагностика транзакционных конфликтов, требует навыков настройки и анализа

Что делать после того, как владелец найден

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

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

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

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

Частые вопросы о блокировках документов в 1С

Документ заблокирован, а пользователь говорит, что ничего не открывал. Как так?

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

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

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

Ошибка блокировки появляется в одно и то же время каждый день. Что это значит?

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

Опасно ли завершать чужой сеанс через консоль кластера?

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

Почему в файловой базе блокировки возникают чаще, чем в клиент-серверной?

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

Как узнать, кто изменил документ, если версионирование не включено?

Через журнал регистрации: отфильтруйте события по типу «Данные. Изменение» с указанием конкретного документа в поле «Данные». Там будут пользователь и время каждой записи. Полнота зависит от настроек регистрации событий в базе.

Итог

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

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