Почему в 1С документ не записывается и пишет, что редактируется тем же пользователем?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Рассмотрим весьма распространенную и неприятную ситуацию при работе в 1С. Пользователь открывает документ, вносит в него данные, но при попытке сохранить или провести систему выдает предупреждение: «Документ невозможно записать, он уже редактируется пользователем...». При этом в сообщении об ошибке указано имя этого же самого пользователя, а с документом гарантированно больше никто не работает. Если подождать около 15–20 минут и попробовать снова — документ успешно записывается. Проанализируем эту ситуацию и выясним причину такого поведения базы данных.

Подобный симптом с характерным временем ожидания (около 15 минут) является классическим маркером работы механизма пессимистических блокировок платформы 1С, а также наличия так называемых «фантомных» сеансов или ошибок в логике программного кода. Разберем по шагам основные причины возникновения данной проблемы и способы ее решения.

Причина 1: Зависшие (фантомные) сеансы

Особенно часто эта проблема проявляется при работе через веб-клиент или при нестабильном подключении к серверу 1С. Посмотрим, как это происходит на практике:

  1. Пользователь работает с документом через браузер или тонкий клиент.
  2. Происходит некорректный разрыв соединения: пользователь закрывает вкладку браузера мимо кнопки закрытия программы, пропадает интернет, либо компьютер уходит в спящий режим.
  3. Платформа 1С не завершает сеанс моментально. Она переводит его в «спящий» режим и ждет восстановления связи. По умолчанию тайм-аут ожидания составляет примерно 15-20 минут.
  4. В течение этого времени старый (зависший) сеанс продолжает удерживать пессимистическую блокировку на ранее открытом документе.
  5. Пользователь заново открывает 1С, создается новый сеанс. При попытке записать тот же документ новый сеанс натыкается на блокировку от старого сеанса. Платформа видит совпадение имен и выдает ошибку, что объект редактируется этим же пользователем.
  6. Через 15 минут платформа принудительно убивает старый сеанс, блокировка снимается, и запись проходит успешно.

Причина 2: Фоновые и асинхронные задания

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

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

Причина 3: Двойное открытие объекта кодом

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

Например, в модуле формы или в подписках на события может встречаться подобная конструкция:


ОбъектДокумента = ДанныеФормыВЗначение(Объект, Тип("ДокументОбъект.РеализацияТоваровУслуг"));
ОбъектДокумента.Заблокировать();

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

Причина 4: Незавершенные транзакции

Еще одна возможная причина кроется в обработке исключений. Если при предыдущей попытке проведения документа возникла ошибка, которую скрыли с помощью конструкции Попытка ... Исключение ... КонецПопытки, но при этом программист забыл корректно откатить транзакцию через ОтменитьТранзакцию(), транзакционная блокировка СУБД или объектная блокировка 1С остается висеть в памяти.

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

Рассмотрим подробнее инструменты и методы, которые помогут локализовать и устранить ошибку:

  1. Проверка зависших сеансов в Консоли администратора: В момент появления ошибки откройте Консоль администрирования серверов 1С или список активных пользователей в режиме Предприятия. Если вы видите два сеанса под одним пользователем (один активный, второй зависший), проблема однозначно в разрывах связи. Зависший сеанс можно удалить вручную, не дожидаясь 15 минут.
  2. Анализ Журнала регистрации: Включите максимальный уровень логирования и проверьте журнал регистрации на предмет ошибок фоновых заданий, которые стартуют параллельно с открытием или записью проблемного документа.
  3. Замер производительности и отладка: Если зависших сеансов нет, включаем отладку. Запускаем «Замер производительности» и начинаем интерактивно работать с документом до тех пор, пока не словим ошибку «невозможно записать». Останавливаем замер и детально анализируем код, который выполнялся в этот период. Особое внимание обращаем на обработчики ожидания и серверные вызовы.
  4. Поиск потенциально опасного кода: Выполните глобальный поиск по конфигурации (особенно в модуле формы проблемного документа и в подписках) по следующим ключевым словам: ПолучитьОбъект(), Заблокировать() и ЗаблокироватьДанныеДляРедактирования(). Проанализируйте логику их применения — они не должны конфликтовать с интерактивной работой пользователя в форме.

Внимательно применяя эти шаги, вы сможете точно определить источник блокировки: будь то инфраструктурная особенность сети (фантомные сеансы) или логическая ошибка в коде конфигурации, и успешно решить проблему.

← На главную