1С:Предприятие 8
Система программ
Архитектура платформы 1С:Предприятие
(версия 8.3.25)

Управление блокировками в транзакции

Механизм управления блокировками данных в транзакции позволяет осуществлять блокировку изменяемых данных не средствами используемой системы управления базами данных, а средствами платформы. Такое управление блокировками данных выполняется не в терминах данных СУБД, а в терминах предметной области. Благодаря этому блокировки накладываются «точнее» и параллельность работы пользователей повышается.

Конфигурация 1С:Предприятия 8 может работать в одном из трех режимов управления блокировками в транзакции:
  • автоматический;
  • управляемый — стандартный режим для новых конфигураций;
  • автоматический и управляемый.

В автоматическом режиме управления блокировками данных используются уровни изоляции транзакций repeatable read и serializable, обеспечиваемые системой управления базами данных. Эти уровни изоляции транзакций обеспечивают согласованное и целостное чтение данных, и от разработчика не требуется каких-либо дополнительных действий по управлению блокировками.

Управляемый режим позволяет повысить параллельность работы пользователей в клиент-серверном варианте работы за счет использования более низкого уровня изоляции транзакций базы данных (Read Committed). При записи данных в транзакции объекты встроенного языка автоматически блокируют необходимые данные. Разработчику требуется управлять блокировками данных в тех случаях, когда бизнес-логика требует согласованного и целостного чтения данных в транзакции.

Автоматический и управляемый режим позволяет использовать возможность управления блокировками в транзакции только для некоторых объектов конфигурации. Этот режим может использоваться для оптимизации параллельности работы пользователей с отдельными прикладными объектами (например, с несколькими наиболее интенсивно используемыми документами) или для постепенного перевода больших конфигураций в режим управления блокировками в транзакции.

В сводном виде отличия при работе в режиме автоматических блокировок и в режиме управляемых блокировок приведены в следующей таблице:

Управление блокировками в транзакции

Наиболее часто необходимость в управлении блокировками данных в транзакции возникает в процессе проведения документов, когда нужно прочитать, а затем записать измененные данные в те же самые таблицы. Например, если выполняется контроль остатков при проведении документа.

Специально для этого у наборов записей регистров накопления и регистров бухгалтерии существует свойство БлокироватьДляИзменения.

Если нужно контролировать остатки, а затем записывать движения в этот же регистр,  то это свойство нужно установить для набора записей этого регистра в свойстве Движения.

Управление блокировками в транзакции

Действие этого свойства аналогично тому, как если бы разработчик самостоятельно установил (прописал в коде) нужные управляемые блокировки 1С:Предприятия 8. Необходимую управляемую блокировку платформа установит автоматически при записи этого набора записей. В результате другие управляемые транзакции, использующие аналогичную блокировку, не смогут начать читать этот регистр, пока не закончится текущая транзакция.

Ниже приведен пример «ручного» управления блокировками данных при чтении данных регистра накопления УчетНоменклатуры в обработке проведения документа РасходнаяНакладная. В этом примере управляемые блокировки создаются и устанавливаются полностью только средствами встроенного языка.

Управление блокировками в транзакции