<<
>>

9.3. Механизм управляемых блокировок

9.3.1. Общие сведения о блокировках

В идеальном случае в любой СУБД транзакции должны обеспечивать изоляцию изменений, выполняемых в базе данных. Иными словами, несколько транзакций, выполняющих изменение данных, пе должны мешать друг другу.

Самым простым способом решения этой проблемы является последовательное выполнение транзакций.

Следующая транзакция выполняется после того, как закончилась предыдущая.

Однако в реальной ситуации, при многопользовательской работе, такой подход приводит к резкому снижению производительности системы. Поэтому на практике используются механизмы, позволяющие выполнять несколько транзакций одновременно.

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

Таким образом, за большую изоляцию транзакций приходится платить большими накладными расходами п замедлением работы системы.

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

В зависимости от уровня изоляции накладываются различные типы блокировок на различные объекты базы данных, на различное время.

С точки зрения системы «1С:Предприятие» работа с данными может выполняться в одном из двух режимов:

в транзакции.

вне транзакции.

Режим работы с данными вне транзакции допускает только операции чтения данных. Этот режим введен для того, чтобы обеспечить максимальную скорость и параллельность чтения данных. Поэтому любая операция чтения данных, выполняемая вне транзакции, считается безответственной. Это означает, что такая операция чтения может вернуть устаревшие данные или даже незафиксированные изменения, произведенные другой транзакцией, т.

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

Режим работы с данными в транзакции допускает любые операции чтения и м одиф и кац и и да к и ы х.

При этом должны соблюдаться следующие правила:

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

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

результат чтения не должен содержать незафиксированные изменения данных базы данных.

9.3.2. Управляемые блокировки

Система «ЮПредприятие» позволяет использовать два режима работы с базой данных: режим автоматических блокировок в транзакции и режим управляемых блокировок в транзакции.

Принципиальное отличие этих режимов заключается в следующем. Режим автоматических блокировок не требует от разработчика каких-либо действий по управлению блокировками в транзакции для того, чтобы обеспечивались перечисленные выше правила работы с данными в транзакции. Эти правіша обеспечиваются платформой системы «1С: Предприятие» за счет использования определенных уровней изоляции транзакций в той или иной СУБД. Такой режим работы является наиболее простым для разработчика, однако в некоторых случаях (например, при интенсивной одновременной работе большого количества пользователей) используемый уровень изоляции транзакций в СУБД не может обеспечить достаточной параллельности работы, что проявляется в виде большого количества конфликтов блокировок при работе пользователей.

При работе в режиме управляемых блокировок система «ЮПредприятие» использует гораздо более низкий уровень изоляции транзакций в СУБД, что позволяет значительно повысить параллельность работы пользователей прикладного решения. Однако, в отличие от режима автоматических блокировок, данный уровень изоляции транзакций уже не может сам по себе обеспечить выполнение всех правил работы с данными в транзакции (в частности, не обеспечивается воспроизводимость чтения данных в транзакции).

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

В сводном виде отличия при работе в режиме автоматических блокировок и в режиме управляемых блокировок приведены в следующей таблице: ' Вил блокировки | Уровень изолинии транзакций Автоматические блокировки Файловая ВД Таблиц Serializable MS SQL Server Записей Repetable Read или Serializable IBM DB2 Записей Repetable Read или Serializable PoslgreSQL Таблиц Serin lizablc Oracle Database Таблиц Serializable Управляемые блокировки Файловая ІЇД Таблиц Serializable MS SQL Server Записей Read Commited IBM DB2 Записей Read Commited Post^reSQL Записей Read Commited Oracle Database Записей Read Commited

Установка режима блокировок в конфигурации

Конфигурация имеет свойство Режим управления блокировкой данных. Каждый прикладной объект конфигурации также имеет свойство Режим управления блокировкой данных.

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

Следует отметить, что режим управления блокировкой данных, указанный для объекта метаданных, устанавливается дія тех транзакций, которые инициируются системой «ЮПредприятие» при работе с данными этого объекта (например, прн модификации данных объекта).

Если же, например, операция записи объекта выполняется в транзакции, инициированной разработчиком (метод НачатъТранзакцию () ), то режим управления блокировкой данных будет определяться значением параметра Режим блокировок метода НачатьТранзакциюО, а не значением свойства объекта метаданных Режим управления блокировкой данных.

Но умолчанию параметр Режим блокировок имеет значение РежимУправленияБлокировкойДаниых.Автоматический.

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

Работа с управляемыми блокировками средствами встроенного языка

Для управления блокировками в транзакции предназначен объект встроенног о языка Блокир в к а Да иных. Экземпляр этого объекта может быть создан с помощью конструктора и позволяет описать необходимые пространства блокировок п режимы блокировок. Для установки всех созданных блокировок используется метод Заблокировать () объекта БлокировкаДанных. Если этот метод выполняется в транзакции (явной или неявной), блокировки устанавливаются, п при окончании транзакции будут сняты автоматически.

Если метод Заблокировать () выполняется виє транзакции, то блокировки не будут установлены.

Объект Блокировка Да иных представляет собой коллекцию элементов блокировки данных, каждый из которых описывает блокировки одного пространства блокировок. Пространства блокировок определены в платформе системы «1С:Предприятие» и соответствуют структуре прикладных объектов конфигурации. Для каждого пространства блокировок в платформе определены имена полей, значения которых могут анализироваться при установке тех или иных блокировок.

Допустимы следующие имена пространств блокировок и имена полей пространств блокировок. Имя

пространства блокировки ИМЯ І10ЛН
пространства блокировки Справочник.<имя> Ссылка Документ.<имя> Ссылка ПланОбмена.<имя > Ссылка Пла нСчетов.<имя > Ссыпка БизнесПрсцесс.<имя> Ссылка Задача.<имя> Ссылка ПланВидовРасчета.<имя> Ссылка ПланВидовХарактеристик. <имя> Ссылка РегистрСведений.<имя>. НаборЗаписей - только лля регистра сведений, подчиненно™ регистратору Регистратор РегистрСведений.<имя > 1 Іериод - если есть; <имя измерения> РегистрНакопления.<имя >. НаборЗаписей Регистратор РегистрНакопления.<имя> Период;

<имя измерения» РегистрБухгалтерии.<имя>. НаборЗаписей Регистратор РегистрБухгалтерии.<имя> Период;

<ИМЯ измерения>;

саид движения >- значение системного

перечисления

ВидДвиженияБухгалтерии; Счет;

Субконто<Ы>; <вид суСконто>. РегистрРасчета.<имя>.НаборЗап

Исей Регистратор Имя

просі ране і в» б.шкнровк'н Имя ноля

пространства блокировки РегистрРасчета.<имя> ПериодРегистрации; ПериодДействия; <имя измерения? Перерасчет.<имя>.

НаборЗаписей ОбъектПерера счета Последовательность,<имя>. НаборЗаписей Регистратор Последовательность.<имя> <имя измерения? Константа.<имя>

Для каждого пространства блокировки может быть зала но произвольное количество условий на поля, ио которым будут определяться записи, подлежащие блокировке. Условия задаются на равенство значения поля указанному значению или на вхождение значення поля в указанный диапазон.

Условия могут быть заданы двумя способами:

с помощью явного указания имени поля и значения (метод

УстановитьЗначение () объекта ЭлементБлокировкиДанных);

с помощью указания источника данных, содержащего необходимые значения (свойство ИсточникДанных объекга ЭлементБлокировкиДанных).

При явном указании значения поля в параметры метода УстановитьЗначение () передается имя поля и значение:

Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.

Добавить{"РегистрНакопления.ТоварыНаСкладах"); ЭлементБлокировки,УстановитьЗначение{"Качество", Справочники.Качество.НайтиПоКоду("1")|;

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

В качестве значения может быть передан также объект встроенного языка Диапазон, который создается с помощью конструктора н позволяет задать верхнюю и нижнюю границы диапазона (границы диапазона включаются в диапазон).

При использовании источника данных устанавливается значение свойства

ИсточникДанных, а затем с помощью метода ИспользоватьИзИс- точникаДанных() задается соответствие полей области блокировки полям источника данных: Блокировка » Новый БлокировкаДанмых; ЭлементБлокировки = Блокировка.

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

¦Номенклатура", "Номенклатура"); ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Склад", "Склад"); В качестве источника данных может выступать:

результат запроса.

табличная часть.

набор записей.

таблица значений.

Соответственно, при установке соответствия полей именами полей источника будут являться:

имена колонок результата запроса,

имена реквизитов табличной части.

имена измерении,

имена колонок таблицы значений.

Объект Диапазон также может являться значением поля источника данных.

Для каждого элемента блокировки может быть задан один из двух режимов блокировки:

разделяемый;

исключительный.

Режим блокировки задается с помощью свойства Режим объекта ЭлементБлокировкиДанных.

Таблица совместимости управляемых блокировок выглядит следующим образом: Разделяемая Исключительная Разделяемая + - Исключительная - -

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

Исключительный режим блокировки подразумевает, что заблокированные данные не могут быть изменены другой транзакцией до окончания текущей транзакции, а также не могут быть прочитаны другой транзакцией, устанавливающей разделяемую блокировку на эти данные.

Говоря о совместимости действий, выполняемых в транзакции, следует учитывать, что помимо явных управляемых блокировок, устанавливаемых пользователем, система «1С:Предприятие» устанавливает также неявные управляемые исключительные блокировки при записи данных в транзакции.

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

Таким образом, таблица совместимости действии, выполняемых в транзакции при использовании режима управляемых блокировок, выглядит следующим образом. Блокировка Режим ББ РБ и Б R W R W R W ББ R + + + + + + W + - - - - - РБ R + - - • - W + - - - - - ИБ R + - - - - W + - - - - - Где:

R - чтение,

W-запись,

lib - без блокировки,

РБ разделяемая блокировка,

ПЬ исключительная блокировка

9.3.5. Особенности работы в режиме

«Автоматический и управляемый»

Режим управления блокировками Автоматический и управляемый

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

Например, существует большая конфигурация, которую сложно в один момент перевести в режим управляемых блокировок, однако есть один или два документа, являющиеся «камнем преткновения» при одновременной работе с ними большого количества пользователей. 13 этом случае вся конфигурация может быть переведена в режим Автоматический и управляемый, а затем сам документ и затрагиваемые при его записи объекты конфигурации - в режим Управляемый. Это позволит настроить работу с данным документом в режиме управляемых блокировок, в то время как основная часть конфшурацнй будет продолжать функционировать в автоматическом режиме управления блокировками.

При работе в режиме управления блокировками Автоматический и управляемый следует учитывать две особенности:

независимо от режима, указанного для данной транзакции, система будет устанавливать соответствующие управляемые блокировки:

режим управления блокировками определяется транзакцией самого «верхнего» уровня. Другими словами, если к моменту начала транзакции была начата другая транзакция, то начинаемая транзакция может быть выполнена только в том в режиме, который установлен для уже выполняющейся транзакции.

Рассмотрим перечисленные особенности более подробно.

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

Вторая особенность заключается в том, что режим управления блокировками, указываемый для объекта метаданных в конфигурации или указываемый при начале транзакции в явном виде (как параметр метода НачатьТранзакцию О), является лишь «желаемым» режимом. Фактический режим управления блокировками, в котором будет исполняться транзакция, зависит от того, является ли данный вызов начала транзакции первым, или к этому моменту уже начата другая транзакция в данной сессии системы «1С: Предприятие».

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

существующей транзакции Режим начинаемой трап іакіїнії Результат Автоматический Автоматический Начинаемая грантакння будет выполнена в автоматическом режиме Автоматический Управляемый Начинаемая транзакция будет выполнена в автоматическом режиме Управляемым Автоматический Будет вызвана исключительная ситуация Управляемый Управляемый Начинаемая транзакция будет выполнена в управляемом режиме

9.3.6. Модификация конфигураций при переходе к режиму управляемых блокировок

При переходе к частичной или полной работе в режиме управляемых блокировок прикладное решение требует доработки. Доработка заключается в том, что необходимо выявить участки кода, которые требуют наличия управляемых блокировок, и затем в этих участ ках кода установи п. требуемый режим управляемой блокировки данных. Это можно осуществить двумя способами:

с помощью объекта БлокировкаДанных,

с помощью свойства БлокироватьДляИзменения у наборов записей регистров накопления и регистров бухгалтерии. Необходимая управляемая блокировка будет автоматически установлена платформой в том случае, если записывается набор записей регистра, у которого данное свойство имеет значение Истина.

9.3.6.1. Определение участков кода, требующих доработки

Управляемые блокировки необходимо устанавливать в тех участках кода, которые удовлетворяют одному из следующих условий:

счнтываются данные, которые в дальнейшем должны быть изменены;

считывается некоторая согласованная совокупность данных (содержащихся в нескольких объектах), и согласованность считанных данных необходимо поддержать. В этом случае данные из этой совокупности должны быть заблокированы либо единовременно перед считыванием, либо по мере считывания отдельных элементов. Если некоторый элемент данных считывается однократно, не связан логически

с другими элементами данных и при этом не будет изменен в той же транзакции, го его можно ие блокировать;

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

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

Выбор режима управляемой блокировки

Для операций, описанных выше, режим блокировки следует устанавливать исходя из следующих соображений:

исключительный режим блокировки следует устанавливать для rex данных, которые должны быть изменены в рамках этой же транзакции. Это позволит предотвратить конфликты блокировок:

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

Примеры доработки конфигурации

Далее приведем пример установки управляемых блокировок в модуле набора записей регистра накопления ТоварыНаСкладах.

Прежде всего, следует создать управляемую блокировку:

Блокировка = Новый БлокировкаДанных;

Затем следуеі проанализировать текст запроса, формируемого в модуле, и создать необходимые блокировки.

Исключительная блокировка на регистр ТоварыНаСкладах

В ходе выполнения модуля набора записей формируется запрос, содержащий

следующий фрагмент: И _

ЛЕВОЕ СОЕДИНЕНИЕ

РегистрНакопления.ТоварыНаСкладах.Остатка(, Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ

Документ.РеалиэаиияТоваровУслуг.Товары ГДЕ

Ссылка = ЬДокументСсылка)) // В данном случае следует установить следующие блокировки:

БлокировкаТоварьіНаСкладахІ = Блокировка.

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

БлокировкаТоварыНаСкладах!.Режим =

РежимБлокировкиДанных.Исключительный;

БлокировкаТоварыНаСкладах!.ИсточкикДанкых = ДокументОбъект.Товары;

БлокировкаТоварьіНаСкладахІ .ИспользоватьИзИсточникаДанных (

"Номенклатура", "Номенклатура"),- БлокировкаТоварыНаСкладах!.ИспользоватьИзИсточникаДанных(

"ХарактеристикаНоменклатуры", "ХарактеристикаНоменклатуры") ,- БлокировкаТоварыНаСкладах!.ИспользоватьИзИсточникаДанных( "Склад", "Склад" ),Разделяемая блокировка на регистр ТоварыВРезервеНаСкладах

В ходе выполнения модуля формируется запрос, содержащий следующий фрагмент:

// ЛЕВОЕ СОЕДИНЕНИЕ

РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ

Документ.РеализацияТоваровУслуг.Товары ГДЕ

Ссылка = &ДокументСсылка)) // ...

В данном случае следует установить следующие блокировки:

БлокировкаТоварыВРезерЕеНаСкладах1 = Блокировка.

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

БлокировкаТоварьіВРезервеНаСкладахІ. Режим = РежимБлокировкиДанных.Разделяемый,БлокировкаТоварыВРезервеНаСкладах1.ИсточникДанных = ДокументОбъект.Товары;

БлохировкаТоварьгВРезервеНаСкладахІ.

ИспользоватьИзИсточникаДанных("Номенклатура", Номенклатура") ,- БлокировкаТоварыВРезервеНаСкладах!, ИспользоватьИзИсточникаДанных(

"ХарактеристикаНоменклатуры", "ХарактеристикаНоменклатуры"} ; Блокировкаїоварьіврезервенаскладахі.

ИспользоватьИзИсточникаДанных ("Склад" , "Склад") ,Разделяемая блокировка на регистр ТоварыКПередачеСоСкладов

В ходе выполнения модуля формируется запрос, содержащий следующий фрагмент:

// ЛЕВОЕ СОЕДИНЕНИЕ

РегистрНако.пления. ТоварыКПередачеСоСкладов . Остатки (, Номенклатура В {ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ

Документ.РеализацияТоваровУслуг.Товары ГДЕ

Ссылка = ЬДокументСсылка))

II В данном случае следует установить следующие блокировки:

БлокировкаТоварьїКПередачеСоСкладовІ = Блокировка.

Добавить{"РегистрНакопления.ТоварыКПередачеСоСкладов");

БлокировкаТоварьїКПередачеСоСштадовІ. Режим = РежимБлокировкиДанных.Разделяемый;

БлокировкаТоварьїКПередачеСоСкладовІ. ИсточникДанных = ДокументОбъект.Товары;

БлокировкаТоварыКПередачеСоСкладов1.

ИспользоватьИэИсточникаДанных("Номенклатура","Номенклатура"); БлокировкаТоварыКПередачеСоСкладовП.. ИспользоватьИэИсточникаДанных{

"ХрактеристикаНоменклатуры", "ХарактеристикаНоменклатуры"); БлокировкаТоварьїКПередачеСоСкладовІ.

ИспользоватьИэИсточникаДанных("Склад", "Склад");

Блокировки по табличной части ВозвратнаяТара. Исключительная блокировка на регистр ТоварыНаСкладах

В ходе выполнения модуля формируется запрос, содержащий следующий фрагмент:

// ЛЕВОЕ СОЕДИНЕНИЕ

РегистрНакопления,ТоварыНаСкладах,Остатки(, Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Документ.РеализацияТоваровУслуг.ВозвратнаяТара.Номенклатура ИЗ

Документ.РеализацияТоваровУслуг.ВозвратнаяТара ГДЕ

Документ.РеализацияТоваровУслуг.ВозвратнаяТара.Ссылка =

ьДокументСсылка) и Качество = ЬНовый)

II ~ В данном случае следует установить следующие блокировки:

БлокировкаТоварыНаСкладах2 = Блокировка.

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

БлокировкаТоварыНаСкладах2.Режим =

РежимБлокировкиДанных.Исключительный;

ВлокировкаТоварыНаСкладах2.ИсточникДанных = ДокументОбъект.ВозвратнаяТара;

БлокировкаТоварыНаСклалах2 .ИспользоватьИзИсточникаДанных (

"Номенклатура", "Номенклатура"); БлокировкаТоварыНаСкладах2.ИспользоватьИзИсточникаДанных(

"Склад", "Склад"); БлокировкаТоварыНаСкладах2.УстановитьЗкачение(

"Качество", Справочники. Качеств о. НайтиПоКоду ("1")) ,Блокировки по табличной части ВозвратнаяТара. Разделяемая блокировка на регистр ТоварыВРезервеНаСкладах

В ходе выполнения модуля формируется запрос, содержащий следующий фрагмент:

// ЛЕВОЕ СОЕДИНЕНИЕ

РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Документ.РеализацияТоваровУслуг.ВозвратнаяТара.номенклатура ИЗ

Документ,РеализацияТоваровУслуг.ВозвратнаяТара ГДЕ

Документ.РеализацияТоваровУслуг.ВозвратнаяТара,Ссылка = ЬДокументСсылка)) КАК Резервы

// ...

В данном случае следует установить следующие блокировки:

БлокировкаТоварыВРезервеНаСкладах2 = Блокировка.

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

БлокировкаТоварыВРезервеНаСкладах2.Режим = РежимБлокировкиДанных. Разделяемый,БлокировкаТоварыВРеэервеНаСкладах2.ИсточникДанных =

ДокументОбъект.ВозвратнаяТара; БлокировкаТоварыВРезервеНаСкладах2.

ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура"); БлокировкаТоварыВРеэервеНаСкладах2.

ИспользоватьИзИсточникаДанных("Склад", "Склад");

Блокировки по табличной части ВозвратнаяТара. Разделяемая блокировка на регистр ТоварыКПередачеСоСкладов

В ходе выполнения модуля формируется запрос, содержащий следующий фрагмент:

П ЛЕВОЕ СОЕДИНЕНИЕ

РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Документ.РеализацияТоваровУслуг.ВозвратнаяТара.Номенклатура ИЗ

Документ.РеализацияТоваровУслуг.ВозвратнаяТара ГДЕ

Документ.РеализацияТоваровУслуг.ВозвратнаяТара,Ссылка = &ДокументСсылка)) КАК ТоварыКПередаче

П В данном случае следует установить следующие блокировки:

БлокировкаТоварыКПередачеСоСкладов2 = Блокировка.

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

БлокировкаТоварыКПередачеСоСкладовг.ИсточникДанных = ДокументОбъект.ВозвратнаяТара;

БлокировкаТоварыКПередачеСоСкладов2.

ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура"); ВлокировкаТоварыКПередачеСоСкладов2.

ИспользоватьИзИсточникаДанных("Склад", "Склад");

І Іосле того как все необходимые блокировки созданы, следует заблокировать перечисленные данные:

Блокировка.Заблокировать();

// ... далее следует прежний текст модуля

<< | >>
Источник: А.Алексеев, А. Безбородое, Д. Бескоровайнов. 1С:Предприятие 8.2. Руководство разработчика. 2009

Еще по теме 9.3. Механизм управляемых блокировок:

  1. 9.1. Механизм объектных блокировок
  2. 5.2. Модуль управляемого приложения
  3. 7.4. Правовое положение арбитражного управляющего
  4. 31. ПРАВОВОЙ СТАТУС АРБИТРАЖНОГО УПРАВЛЯЮЩЕГО
  5. Управляем продажами
  6. Постановка целей и умение управлять временем
  7. КТО ТАКОЙ УПРАВЛЯЮЩИЙ
  8. СУЩНОСТЬ РАБОТЫ УПРАВЛЯЮЩИХ
  9. ПОКУШЕНИЯ НА ВРЕМЯ УПРАВЛЯЮЩЕГО
  10. СОБСТВЕННЫЕ ОБЯЗАТЕЛЬСТВА УПРАВЛЯЮЩЕГО
  11. 9.2. Особенности правового положения административного управляющего
  12. 8.2. Особенности правового положения временного управляющего
  13. 10.2. Особенности правового положения внешнего управляющего
  14. КАК УПРАВЛЯТЬ СВОИМ НАЧАЛЬНИКОМ?
  15. Глава 13 Управляемый процесс
  16. МЕНЕДЖЕР (англ. manager - управляющий)
  17. 11.2. Особенности правового положения конкурсного управляющего