Ошибка 1С: Конфликт блокировок (Deadlock) — как устранить проблему
- Бухгалтеры получают сообщение:
Конфликт блокировок при выполнении транзакции. Превышено время ожидания предоставления блокировки. - Ошибка
Взаимоблокировка (Deadlock)при одновременном проведении документов несколькими операторами. - Один пользователь пытается провести реализацию, а второй в этот момент списывает тот же товар на складе.
- Массовые сбои проведения при обмене данными или групповой обработке.
Что такое Конфликт блокировок (Аналогия с дверью)
Представьте узкую комнату с документами, куда есть две двери. Пользователь А вошел через первую дверь и держит вторую, чтобы никто не зашел. Пользователь Б зашел через вторую и держит первую. Они оба ждут действий друг от друга и не могут сдвинуться с места. Это и есть Deadlock (Взаимоблокировка). СУБД видит тупик и принудительно аварийно завершает операцию одного из пользователей.
Чем отличаются блокировки:
- Автоматические блокировки (устаревшие): СУБД сама грубо блокирует целые таблицы или большие диапазоны строк «на всякий случай». Если один человек проводит документ, остальные ждут.
- Управляемые блокировки (современный стандарт): Программа 1С блокирует ровно одну строчку (например, только один конкретный товар на складе), позволяя сотням других сотрудников одновременно работать с остальной номенклатурой.
Как устранить конфликты блокировок:
- Перевод базы в режим управляемых блокировок: В свойствах конфигурации режим блокировок данных должен быть установлен в значение Управляемый (в современных типовых конфигурациях это стандарт).
- Увеличение времени ожидания: В меню Администрирование → Параметры базы увеличьте «Время ожидания блокировки данных» с 20 до 60 секунд.
- Оптимизация работы сотрудников: Не запускайте тяжелые пакетные перепроведения документов или отчеты в разгар рабочего дня операторов склада.
Частые вопросы (FAQ)
Почему ошибка конфликта блокировок возникает только у определенных пользователей?
Ошибка возникает у того пользователя, чью транзакцию сервер СУБД выбрал в качестве «жертвы» для разрыва тупика, чтобы спасти транзакцию второго сотрудника.
Поможет ли покупка более мощного процессора на сервер?
Более быстрый сервер сократит время проведения документа (длительность транзакции), что снизит вероятность столкновений, но не исправит логические ошибки параллелизма в коде.
Как найти виновника блокировки в технологическом журнале 1С?
Настройте сбор событий TLOCK и TDEADLOCK в logcfg.xml — журнал зафиксирует точные строки программного кода и имена пользователей, попавших во взаимоблокировку.
Связана ли эта ошибка со скоростью сети?
Медленная сеть увеличивает общее время транзакции (время удержания блокировки ресурса), что прямо пропорционально увеличивает риск конфликтов.