Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

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

1С Ошибка: Конфликт блокировок при выполнении транзакции — Решение

Обновлено: 25.08.2026  ·  Официальная база знаний
  • Ошибка Конфликт блокировок при выполнении транзакции при одновременном проведении документов несколькими пользователями.
  • В технологическом журнале 1С фиксируются длительные события TLOCK и взаимоблокировки DEADLOCK.
  • Зависание сеансов пользователей на этапах записи регистров накопления и сведений.
  • Падение параллельной производительности системы при увеличении числа активных пользователей.

1. Перевод конфигурации в режим управляемых блокировок (Managed Lock)

Автоматический режим блокировок использует тяжелые блокировки таблиц на уровне СУБД. Переведите конфигурацию в управляемый режим:

  1. В Конфигураторе откройте свойства корневого узла конфигурации.
  2. Установите параметр Режим управления блокировкой данных в значение Управляемый (Managed).

2. Установка явных управляемых блокировок в коде BSL перед записью

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

// Захват блокировки строго до начала чтения остатков
Блокировка.Заблокировать();

3. Соблюдение единого алфавитного порядка блокировки ресурсов

Для исключения тупиковых взаимоблокировок (Deadlocks) всегда захватывайте ресурсы в строго одинаковом порядке во всех модулях системы (например: Склад -> Номенклатура -> Серия).

4. Минимизация времени нахождения внутри транзакции

// НЕПРАВИЛЬНО: Выполнение длительных расчетов или запросов внутри транзакции
НачатьТранзакцию();
// Тяжелый запрос к базе на 10 секунд...
ДокументОбъект.Записать();
ЗафиксироватьТранзакцию();

// ПРАВИЛЬНО: Все расчеты и чтение выполняются ДО открытия транзакции
ДанныеДляЗаписи = РассчитатьДанныеЗапросом();
НачатьТранзакцию();
ДокументОбъект.Записать();
ЗафиксироватьТранзакцию();
Практический опыт инженера: Главное правило предотвращения блокировок в 1С: никогда не вызывайте диалоговые окна (Предупреждение, Вопрос), обращения к веб-сервисам и длительные выгрузки файлов внутри открытой транзакции (НачатьТранзакцию...ЗафиксироватьТранзакцию).

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

Чем управляемая блокировка (1С) отличается от транзакционной блокировки СУБД (SQL)?

Управляемые блокировки выставляются менеджером кластера 1С в оперативной памяти на логическом уровне метаданных, не нагружая СУБД эскалацией блокировок строк до целых таблиц.

Что такое Deadlock (взаимоблокировка) в 1С?

Ситуация, когда Транзакция 1 заблокировала Ресурс А и ждет Ресурс Б, а Транзакция 2 заблокировала Ресурс Б и ждет Ресурс А. СУБД принудительно аварийно прерывает одну из транзакций как жертву.

Как настроить технологический журнал для сбора конфликтов блокировок TLOCK?

Добавьте в logcfg.xml сбор событий TLOCK и TDEADLOCK с условием длительности Duration > 1000000 (более 1 секунды) для фиксации контекста BSL.

Помогает ли включение Read Committed Snapshot Isolation (RCSI) в MS SQL?

Да! Включение RCSI на базе SQL позволяет читающим транзакциям не блокировать пишущие, устраняя большинство конфликтов при параллельной работе.