«Ошибка блокировки объекта. Объект уже заблокирован» в 1С: что делать
Объект (документ, элемент справочника) уже открыт на редактирование в другом сеансе, и платформа не даёт изменить его параллельно. В сообщении указаны компьютер, пользователь, номер и время начала сеанса, который держит блокировку.
Текст ошибки
Причины
- Документ или элемент открыт и изменяется у другого пользователя
- Тот же пользователь открыл объект во втором окне или втором сеансе
- Сеанс завис или пользователь закрыл программу аварийно, а сеанс остался на сервере
- Фоновое задание или обработка меняет объект в тот же момент
- Код блокирует объект для редактирования и не снимает блокировку
Для пользователя
- Посмотрите в тексте ошибки, у кого открыт объект: там указаны имя компьютера, пользователь и номер сеанса.
- Попросите коллегу закрыть документ или сохранить изменения. После закрытия формы блокировка снимается.
- Если указан ваш собственный пользователь, проверьте, не открыт ли объект в другом окне или во втором запущенном экземпляре программы.
Для администратора: сеанс завис
Если пользователь уже вышел, а блокировка осталась, значит его сеанс продолжает существовать.
- Клиент-серверная база. Откройте консоль администрирования серверов 1С, найдите базу, раздел «Сеансы», и удалите сеанс с номером из текста ошибки. То же можно сделать утилитой
rac:rac session listиrac session terminate. - Файловая база. Проверьте список активных пользователей в конфигураторе («Администрирование» → «Активные пользователи»). Если пользователь числится, но программа у него закрыта, завершите процесс 1cv8 на его компьютере через диспетчер задач.
- Типовые конфигурации на БСП. Обработка «Активные пользователи» позволяет завершить сеанс прямо из программы, если у вас есть административные права.
- 1С:Фреш и облака. Завершите сеансы приложения через личный кабинет сервиса.
Для разработчика
Объектная блокировка устанавливается при начале редактирования в форме или явным вызовом. Если код блокирует объекты сам, обязательно снимайте блокировку и обрабатывайте ошибку:
ДокументОбъект = Ссылка.ПолучитьОбъект();
Попытка
ДокументОбъект.Заблокировать();
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
"Документ " + Ссылка + " редактируется другим пользователем");
Возврат;
КонецПопытки;
ДокументОбъект.Комментарий = "Обработано";
ДокументОбъект.Записать();
ДокументОбъект.Разблокировать();
В управляемых формах для блокировки по ссылке используйте ЗаблокироватьДанныеДляРедактирования(Ссылка, , УникальныйИдентификатор) и снимайте её через РазблокироватьДанныеДляРедактирования(). Если передать уникальный идентификатор формы, блокировка снимется автоматически при закрытии формы.
Групповые обработки, которые меняют много документов, лучше запускать в нерабочее время и пропускать занятые объекты с записью в журнал, а не останавливаться на первом.
Частые вопросы
Блокировка снимется сама?
Да, когда сеанс, который её держит, закроет форму или завершится. Зависшие сеансы на сервере могут оставаться долго, тогда их завершают через консоль кластера.
Это то же самое, что конфликт блокировок?
Нет. Здесь речь об объектной блокировке на время редактирования формы. Конфликт блокировок относится к транзакционным блокировкам данных при записи.