Операция в 1С висит на блокировке: как найти виновника и освободить данные
Содержание
Чтобы разблокировать операцию в 1С, нужно найти сеанс, который держит нужные данные, и дождаться его завершения или завершить его принудительно. Отдельной кнопки «снять блокировку» в 1С нет: блокировка живёт ровно столько, сколько транзакция или сеанс, который её поставил.
На практике порядок такой: смотрите Активные пользователи, затем журнал регистрации, а в клиент-серверной базе — список блокировок в консоли кластера. Если операция «висит» постоянно, причина почти всегда в долгой транзакции или в одновременной работе нескольких тяжёлых процессов.
Всё ниже относится к платформе 1С:Предприятие 8.3 и не зависит от конфигурации: одинаково работает в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других типовых решениях.
Почему операция в 1С блокируется: виды блокировок
Под словом «блокировка» пользователи называют три разные ситуации. От того, какая у вас, зависит способ разблокировки.
| Вид блокировки | Как выглядит | Кто держит | Как снять |
|---|---|---|---|
| Объектная (на редактирование) | Не удается записать! Объект уже заблокирован или похожее сообщение при открытии/записи документа | Сеанс, в котором этот документ открыт и изменён | Закрыть форму у другого пользователя или завершить его сеанс |
| Транзакционная (блокировка данных) | Проведение долго «думает», затем Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировки | Транзакция другого сеанса: проведение, закрытие месяца, обмен, регламентное задание | Дождаться конца транзакции или завершить сеанс-виновник |
| Взаимоблокировка (deadlock) | Ошибка со словами взаимоблокировка или deadlock от СУБД | Две транзакции ждут друг друга | Повторить операцию; устранять причину в коде или в расписании |
Есть и четвёртый случай, который тоже называют блокировкой, — администратор запретил вход в базу. Это не конфликт данных, а запрет сеансов; о нём — в вопросах в конце.
Типичные причины транзакционных блокировок
- 🕐 Долгая операция у коллеги. Закрытие месяца , перепроведение за квартал, расчёт зарплаты по всей организации держат данные регистров минуты и десятки минут.
- 🔄 Обмен данными или загрузка. Синхронизация с другой базой, загрузка выписки или прайса пишет в те же регистры, что и пользователи.
- ⏰ Регламентные задания. Задание, запущенное днём, конкурирует с рабочими сеансами.
- 🧩 Доработки. Код, который открывает транзакцию и внутри неё ждёт ответа пользователя, внешнего сервиса или выполняет тяжёлый запрос.
- 💾 Файловая база. В файловом варианте блокировки ставятся на целые таблицы, поэтому два пользователя, проводящих разные документы, мешают друг другу заметно чаще, чем на сервере.
- 🐢 Медленная СУБД или диск. Транзакция выполняется дольше обычного — и дольше держит блокировки.
Сообщение о превышении времени ожидания — не поломка базы. Это штатная защита: платформа подождала, не дождалась освобождения данных и отменила вашу транзакцию, чтобы не испортить чужую.
Как разблокировать документ, занятый другим пользователем
Объектная блокировка возникает, когда двое открыли один и тот же документ или элемент справочника, и первый уже начал его менять. Второй не сможет записать изменения, пока первый не закроет форму.
- Прочитайте сообщение целиком. Часто в нём указано, каким пользователем и на каком компьютере занят объект.
- Попросите коллегу записать или закрыть документ. Блокировка снимается сразу после закрытия формы.
- Если человек ушёл, а форма открыта, завершите его сеанс (способы — в следующих разделах).
- Откройте документ заново и повторите запись.
Блокировка на редактирование принадлежит сеансу. Поэтому «отобрать» её из своего сеанса нельзя: сработает только закрытие формы у владельца или завершение его сеанса. После завершения сеанса все его блокировки освобождаются автоматически.
Кто держит данные: проверка через «Активные пользователи»
Первый и самый быстрый шаг — посмотреть, кто сейчас работает в базе.
Где найти список:
- В большинстве типовых конфигураций — в разделе
Администрирование → Обслуживание, группа отчётов администратора. - Универсальный путь для любой конфигурации:
Все функции → Стандартные → Активные пользователи. Если пунктаВсе функциинет в главном меню, включите его вСервис и настройки → Параметры → Отображать команду "Все функции".
На что смотреть в списке:
- 👤 пользователей, которые могут выполнять тяжёлую операцию прямо сейчас (бухгалтер, закрывающий месяц, зарплатник);
- 🤖 сеансы фоновых заданий и обменов — у них в колонке приложения указано «Фоновое задание» или похожий признак;
- 🕓 время начала сеанса: сеанс, открытый со вчерашнего вечера, — частый кандидат на «забытую» форму или зависший процесс;
- 💻 имя компьютера — помогает найти человека, даже если в базе несколько одинаковых пользователей.
В клиент-серверной базе форма активных пользователей в конфигурациях на БСП обычно позволяет завершить выбранный сеанс прямо из списка. Для этого нужны права администратора базы, а при установленном пароле администратора кластера программа его запросит.
Перед завершением чужого сеанса предупредите человека: несохранённые изменения в его открытых формах пропадут, а прерванная транзакция будет отменена целиком.
Журнал регистрации: что происходило в момент зависания
Активные пользователи показывают текущую картину. Если блокировка уже прошла, а разобраться нужно, кто мешал, откройте журнал регистрации: Все функции → Стандартные → Журнал регистрации или из того же раздела администрирования.
Как отфильтровать нужные записи
- Задайте интервал: 10–15 минут вокруг времени, когда у вас появилась ошибка.
- Отберите уровень «Ошибка» — найдёте собственную запись о конфликте блокировок и точное время отказа.
- Снимите отбор по уровню и посмотрите, какие пользователи и сеансы в те же минуты писали данные: проведение документов, записи регистров, события фоновых заданий.
- Обратите внимание на события отмены транзакций. Их всплеск в одно время у нескольких пользователей указывает на общую причину.
- Сравните с расписанием регламентных заданий и обменов. Совпадение по времени — главная улика.
Журнал регистрации не показывает, какую именно запись регистра держал каждый сеанс. Он даёт хронологию: кто что делал. Точный объект блокировки виден только в консоли кластера (в моменте) или в технологическом журнале (за прошлое время).
Мини-кейс
Бухгалтер жалуется: каждый день около 12:00 проведение реализаций зависает на 20 секунд и падает с ошибкой. В журнале регистрации видно, что в 11:58 стартует обмен с торговой базой, а у всех ошибок — регистр взаиморасчётов. Решение без программиста: перенести обмен на обеденный перерыв или на вечер, а днём запускать его реже.
Таблица блокировок в консоли кластера
В клиент-серверном варианте самый точный инструмент — консоль Администрирование серверов 1С Предприятия. В ней видно, какие блокировки сейчас установлены и каким сеансом.
Как посмотреть блокировки
- Запустите консоль администрирования на сервере или на машине администратора.
- Раскройте
Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы → <ваша база>. - Откройте ветку
Блокировки. В списке — объект блокировки, сеанс-владелец, пользователь, компьютер и время. - Перейдите в ветку
Сеансытой же базы и найдите сеанс по номеру или пользователю. - Если сеанс не отвечает и человек недоступен — выделите его и удалите через контекстное меню. Сеанс будет завершён, его транзакция откатится, блокировки исчезнут.
То же самое можно сделать утилитой rac с командной строки. Надёжно работают команды для просмотра:
rac cluster list
rac infobase summary list --cluster=<id_кластера>
rac session list --cluster=<id_кластера> --infobase=<id_базы>
rac lock list --cluster=<id_кластера> --infobase=<id_базы>
Для завершения сеанса используется режим session с командой terminate; точный набор параметров для вашей версии платформы смотрите в rac help session. Если на кластере задан администратор, к командам добавляются параметры логина и пароля администратора кластера.
Завершение сеанса в консоли обрывает работу пользователя без предупреждения. Не удаляйте сеансы фоновых заданий закрытия месяца и обновления без согласования: откат длинной транзакции займёт время и может потребовать перезапуска операции с нуля.
Технологический журнал — когда блокировки повторяются
Если конфликты случаются регулярно, но поймать их в консоли не удаётся, администратор включает технологический журнал. В файле настройки logcfg.xml достаточно собирать события:
TTIMEOUT— превышение времени ожидания блокировки; в свойствеWaitConnectionsзаписаны номера соединений, которые мешали;TDEADLOCK— взаимоблокировка, с описанием, какие ресурсы ждали обе стороны;TLOCK— установка управляемых блокировок (событий много, включайте на короткое время).
Пример минимальной настройки:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\1C_TechLog" history="24">
<event>
<eq property="name" value="TTIMEOUT"/>
</event>
<event>
<eq property="name" value="TDEADLOCK"/>
</event>
<property name="all"/>
</log>
</config>
Технологический журнал быстро растёт. Ограничьте срок хранения (history в часах), следите за местом на диске и отключите сбор после диагностики.
Программное снятие блокировок и таймаут ожидания
Программно «отпустить» чужую блокировку нельзя — это правило платформы. Код может управлять только своими блокировками и настройкой ожидания.
Объектные блокировки в своём сеансе
Если обработка блокирует объект методом Заблокировать(), после работы блокировку нужно снять. Для блокировки, установленной по ссылке, применяется РазблокироватьДанныеДляРедактирования:
ЗаблокироватьДанныеДляРедактирования(ДокументСсылка, , УникальныйИдентификатор);
// ... изменения ...
РазблокироватьДанныеДляРедактирования(ДокументСсылка, УникальныйИдентификатор);
Работает только для того же сеанса и того же идентификатора формы, которые поставили блокировку.
Управляемая блокировка в транзакции
Правильно написанный код блокирует ровно те данные, которые читает для контроля, и делает это в начале транзакции:
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.УстановитьЗначение("Склад", Склад);
Блокировка.Заблокировать();
// чтение остатков, контроль, запись движений
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Блокировки транзакции снимаются автоматически при ЗафиксироватьТранзакцию() или ОтменитьТранзакцию(). Отдельной команды «разблокировать» здесь нет и не нужно.
Время ожидания блокировки
По умолчанию платформа ждёт освобождения данных 20 секунд. Значение меняется в Конфигураторе: Администрирование → Параметры информационной базы, поле времени ожидания блокировки данных. Из кода его читают и задают функциями ПолучитьВремяОжиданияБлокировкиДанных() и УстановитьВремяОжиданияБлокировкиДанных().
| Действие | Когда помогает | Риск |
|---|---|---|
| Увеличить таймаут (например, до 40–60 с) | Короткие пики нагрузки, операции укладываются чуть дольше 20 с | Пользователи дольше смотрят на «песочные часы»; причина не устранена |
| Уменьшить таймаут | Нужно быстрее получать отказ, а не ждать | Больше отказов при обычной нагрузке |
| Оставить 20 с и разнести операции по времени | Регулярные конфликты из-за обменов и заданий | Нужно договориться о расписании |
Увеличение таймаута лечит симптом. Если операция держит данные минуту, люди будут ждать минуту — просто без сообщения об ошибке.
Как не допустить блокировок в будущем
Блокировки — нормальная часть многопользовательской работы. Задача не убрать их совсем, а сделать короткими.
Организационные меры
- 📅 Расписание тяжёлых операций. Закрытие месяца, перепроведение и групповой перерасчёт — вечером или в выходные, с предупреждением коллег.
- 🔁 Обмены и регламентные задания. Проверьте расписание в
Администрирование → Обслуживание → Регламентные операции(или аналогичном разделе вашей конфигурации); убирайте ненужные задания и сдвигайте тяжёлые с рабочего времени. - 🚪 Привычка закрывать формы. Открытый на ночь изменённый документ — источник объектных блокировок утром.
- 📦 Порции вместо «всё сразу». Перепроведение за квартал лучше делать по месяцам.
Технические меры
- 🖥️ Клиент-серверный вариант. Если в файловой базе работают больше 5–7 человек и конфликты ежедневные, переход на сервер с СУБД снимает большую часть проблем: блокировки ставятся на записи, а не на таблицы.
- ⚙️ Режим управления блокировками. В свойствах конфигурации задаётся автоматический, управляемый или смешанный режим. Современные типовые конфигурации работают в управляемом. Доработанные старые базы иногда остаются в автоматическом или смешанном — их перевод выполняет программист после проверки кода.
- 📊 Обслуживание СУБД. Регулярное обновление статистики и перестроение индексов ускоряют запросы, а значит, сокращают время удержания блокировок.
- 🧑💻 Аудит доработок. Ищите транзакции, внутри которых есть диалоги с пользователем, обращения к внешним сервисам, запись в файлы или тяжёлые отчёты.
Частые вопросы о блокировках в 1С
Помогает ли перезагрузка сервера снять блокировку?
Пользователь давно вышел из 1С, а его сеанс всё ещё висит. Что делать?
Вход в базу запрещён с сообщением о блокировке. Это то же самое?
/UC<код разрешения>.