#Что означает ошибка
Конфликт блокировок при выполнении транзакции
«Конфликт блокировок при выполнении транзакции» возникает, когда два сеанса одновременно пытаются изменить одни и те же данные, а режим управляемых блокировок не позволяет одному из них подождать. Бывает также таймаут ожидания блокировки.
Для решения нужно выяснить, кто блокирует и какой ресурс. Не перезапускайте сервер: проблема вернётся.
Сначала зафиксируйте конфликт и его источник в журналах; завершение сеанса — рискованная мера после согласования.
Конфликт может возникать при ожидании блокировки и взаимоблокировке; устраняется анализом транзакций, а не обязательным завершением пользователей.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Зависший сеанс пользователя | Сеанс действительно удерживает блокировку по журналу | Договоритесь с пользователем о штатном завершении, принудительно только в крайнем случае. |
| Одновременное проведение документов | Одновременно проводятся документы, изменяющие общие регистры | Изучите конкурирующие транзакции, длительность и порядок обращения. |
| Регламентные задания | Регламентное задание совпадает по времени с конфликтом | Сверьте расписание, при необходимости согласуйте время выполнения. |
| Нехватка ресурсов сервера | При нагрузке увеличивается длительность транзакций | Проверьте СУБД и медленные операции; оптимизируйте после измерений. |
#Пошаговое решение
- Найдите блокирующий сеансЕсли 1С сообщает о конфликте блокировок, сохраните точный текст, время и название действия (проведение документа, обмен, отчёт). Обычный пользователь закрывает только свою операцию и сообщает администратору; сервер не перезапускает. Администратор кластера 1С открывает средство администрирования серверов своей версии, выбирает нужную информационную базу и смотрит сеансы/соединения; сопоставляет пользователя и время с сообщением. Наличие долгого сеанса само по себе ещё не означает, что он блокировщик — нужны журналы и признаки ожидания.
- Завершите зависший сеансЕсли по журналам подтверждён зависший конкретный сеанс, свяжитесь с его владельцем и попросите сохранить документы и завершить работу самостоятельно. Принудительное завершение из консоли кластера допустимо только администратору при согласованном простое; оно может отменить транзакцию и уничтожить несохранённые изменения. После действия проверьте, что другой пользователь может повторить операцию. Не завершайте все сеансы или все процессы 1С из Диспетчера задач ради одной блокировки.
- Включите технологический журналДля повторяющегося конфликта администратор настраивает технологический журнал 1С через
logcfg.xmlв фактическом каталоге конфигурации платформы; имя, место и доступные события зависят от версии. На тестовом контуре включите только нужные события и ограничьте сбор по времени: подробный журнал может быстро занять диск и содержать чувствительную информацию. Ищите события блокировок, ожиданий и взаимоблокировок (например, TLOCK/TTIMEOUT/TDEADLOCK, если поддерживаются версией); сохраните связку сеанс — ресурс — время для разработчика. - ПроанализируйтеЕсли используется клиент-серверная база PostgreSQL или SQL Server, дополнительно проверьте блокировки на стороне именно этой СУБД в её штатных средствах. PostgreSQL: в psql доступны
pg_stat_activity,pg_blocking_pids(pid); SQL Server: представленияsys.dm_tran_locksиsys.dm_exec_requestsс соответствующими правами. Таблица блокировок не показывает автоматически исходный код 1С: сопоставьте время и SQL с журналом 1С. Не запускайте скрипты массового завершения запросов. - Исправьте кодРазработчик конфигурации после воспроизведения на тестовой базе проверяет длительность транзакций, порядок записи регистров/объектов, вложенные вызовы и внешние сетевые операции. Уменьшайте время удержания блокировок, выбирайте единый порядок обращения к объектам, затем проведите тест одновременной работы нескольких пользователей. Увеличение тайм-аутов или перезапуск сервера без анализа лишь скрывает причину. Пользователь рабочего места не должен самостоятельно менять обработчики конфигурации.
#Быстрое снятие
Администратор кластера сопоставляет конкретные сеансы с временем и журналами блокировки; долгий сеанс не равен зависшему. Принудительное завершение допускается лишь после согласования с владельцем сеанса и осознания риска потери незаписанных документов; массово останавливать 1С нельзя.
#Поиск источника
Технологический журнал 1С включается администратором после проверки версии платформы, места расположения logcfg.xml, свободного места и требований конфиденциальности. События и способы анализа различаются; при SQL Server либо PostgreSQL можно параллельно изучить блокирующие процессы штатными диагностическими запросами, не завершая их.
#Исправление кода
Разработчик на тестовой копии находит долгие операции в транзакциях, согласует единый порядок обращения к объектам и исключает внешние сетевые вызовы внутри длительных транзакций. Рекомендации по механизму блокировок должны соответствовать версии платформы и режиму конфигурации; смена режима вслепую недопустима.
-- MS SQL: текущие блокировкиSELECT request_session_id, resource_type, request_mode, request_statusFROM sys.dm_tran_locks;