← База знаний

Блокировки записей в 1С — как решить

«Ожидание на блокировке» — одна из самых частых проблем в многопользовательских базах. Разберём, почему возникают блокировки и как их минимизировать.

Что такое блокировка?

Блокировка — механизм защиты данных от одновременного изменения несколькими пользователями. Когда один пользователь редактирует запись, другие ждут освобождения.

Виды блокировок в 1С

  • Управляемые блокировки — устанавливаются кодом через объект «Блокировка»
  • Автоматические — при записи/удалении объектов
  • На уровне СУБД — транзакционные блокировки SQL

Причины длительных блокировок

1. Избыточная блокировка

Блокировка всей таблицы вместо конкретных записей.

// Плохо - блокирует всю таблицу
Блокировка.Добавить("РегистрНакопления.ОстаткиТоваров");

// Хорошо - блокирует только нужный товар
Блокировка.Добавить("РегистрНакопления.ОстаткиТоваров")
  .УстановитьЗначение("Номенклатура", Товар);

2. Долгие транзакции

Чем дольше транзакция — тем дольше блокировка.

💡 Правило: Транзакция должна быть максимально короткой. Всю подготовку данных делайте ДО начала транзакции.

3. Конкурентный доступ

Много пользователей работают с одними данными (например, один склад).

Как найти блокировки?

  • Консоль кластера → Сеансы → Блокировки
  • Технологический журнал — события TLOCK, TTIMEOUT
  • SQL Profiler — Lock:Timeout, Lock:Deadlock
  • ЦУП — Центр управления производительностью

Как устранить?

  1. Найти код, устанавливающий избыточную блокировку
  2. Сузить область блокировки (добавить условия)
  3. Сократить время транзакции
  4. Разнести работу пользователей по времени
  5. Использовать разделение по складам/организациям

Проблемы с блокировками?

Проведу аудит, найду причину и оптимизирую код. Опыт работы с базами 50-500+ пользователей.

Заказать аудит