Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

1C_MANAGED_LOCK_FAIL 1С:Предприятие и СУБД

Настройка менеджера управляемых блокировок (БлокировкаДанных) в 1С

Обновлено: 26.08.2026 · Официальная документация ↗
  • Ошибка Конфликт блокировок при выполнении транзакции: Превышено время ожидания предоставления блокировки.
  • Ошибки чтения несогласованных данных при проведении документов задним числом.
  • Необходимость точечной блокировки только списываемых остатков без блокировки всего склада.

1. Принцип работы менеджера управляемых блокировок 1С

Управляемые блокировки выставляются в коде 1С перед выполнением операций чтения/записи внутри транзакции. Менеджер блокировок 1С работает на уровне кластера серверов 1С, транслируя в СУБД уровень изоляции Read Committed (RCSI в MS SQL), что полностью исключает блокировки читателями писателей.

2. Программная установка управляемой блокировки

Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах");

// Режим: Исключительный (Exclusive) для записи или Разделяемый (Shared) для чтения
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;

// Установка источника данных для точечной блокировки по списку номенклатуры
ЭлементБлокировки.ИсточникДанных = ТабличнаяЧастьТовары;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Склад", "Склад");

// Применение блокировки внутри транзакции
Блокировка.Заблокировать();

3. Типичные ошибки при работе с БлокировкаДанных

  • Попытка вызова Заблокировать() вне транзакции (вызовет исключение);
  • Блокировка без указания измерений (блокирует весь регистр целиком);
  • Блокировка после выполнения тяжелого чтения (приводит к дедлокам).
💡 Практика специалистов: Всегда устанавливайте управляемые блокировки в самом начале транзакции ДО выполнения любых запросов к СУБД. Это гарантирует отсутствие дедлоков повышения уровня блокировки (Shared -> Exclusive).

Частые вопросы (FAQ)

Чем отличается исключительная блокировка от разделяемой?

Исключительную (Exclusive) блокировку может удерживать только одна транзакция (для изменения данных). Разделяемую (Shared) могут одновременно удерживать несколько транзакций (для согласованного чтения).

В какой момент снимаются управляемые блокировки?

Управляемые блокировки автоматически снимаются кластером 1С в момент завершения транзакции (ЗафиксироватьТранзакцию или ОтменитьТранзакцию).

Что произойдет, если источник данных пуст при вызове Заблокировать()?

Если источник данных (таблица) не содержит строк, блокировка пространства данных не будет установлена, и транзакция продолжит работу.

Нужно ли блокировать данные при записи в регистры сведений?

Да, если перед записью выполняется проверка на существование или чтение связанных записей для предотвращения состояния гонки (Race Condition).

Полезные материалы
Рекомендуем