<<
>>

9.1. Механизм объектных блокировок

При работе с объектными данными (справочники, документы, счета и пр.) система «1С:Предприятие» обеспечивает два вида объектных блокировок — пессимистическую и оптимист нчеекч ю.

Они позволяют выполнять целостные изменения объектов при одновременной работе нескольких пользователей.

9.1.1. Пессимистическая блокировка

Механизм пессимистической блокировки объектов базы данных предназначен дія гого, чтобы запретить изменение данных объекта другими сеансами или данным сеансом до rex нор, пока блокировка не будет снята (автоматически или с помощью методов встроенного языка К

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

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

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

В том случае если необходимо в нестандартной форме объекта обеспечить такое же поведение, что и в стандартной форме объекта, можно использовать метод формы ЗаСлокироватьДанныеФормыДляРедактирования () для установки пессимистической блокировки и метод формы Разбло- кироватьДанныеФормыДляРедактирования () дія снятия блокировки. Разработчик, для того чтобы задействовать пессимистическую блокировку, может использовать метод глобального контекста Заблоки ¦ роватьДанныеДляРедактирования ().

Возможно два варианта установки пессимистической блокировки:

с указанием идентификатора формы - в этом случае блокировка устанавливается па время жизни форм, в которой установлена блокировка и снимается автоматически прн закрытии формы или завершении сеанса. Также блокировка может быть снята с помощью метода глобального контекста РазблокироватьДанныеДляРедактирования () с указанием того же идентификатора формы, который указывался для установки блокировки;

без указания идентификатора формы - в этом случае устанавливаемая блокировка не привязана к какой-либо форме. Блокировка будет автоматически снята прн завершении сеанса, прн возврате управления с сервера или при завершении транзакции (если блокировка устанавливалась в транзакции). Также блокировка может быть снята с помощью метода глобального контекста РазблокироватьДан- ныеДляРедактирования {) без указания идентификатора формы.

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

ЬНаСервере

Функция ПримерМодификации() ТоварСсылка = Справочники.Товары.НайтиПоКоду("000000001"); Попытка

ЗаблокироватьДанныеДляРедактирования(ТоварСсылка); // Можно выполнять модификацию данных объекта

и ...

ТоварОбъект = ТоварСсылка.ПолучитьООъект(); ТоварОбъект.Наименование = "Новое наименование"; ТоварОбъект. Записать (I ,Возврат Истина;

Исключение

// Нельзя модифицировать данные объекта Сообщение = Новый СообщениеПользователю; Сообщение .Текст - "Данные объекта уже заблокированы" ,- Сообщение .Сообщить ()

Возврат Ложь ,• КонецПопытки; Конецфункции

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

ТоварСсылка =¦ Справочники.Номенклатура.НайтиПоКоду(1); ЗаблокироватьДанныеДляРедактированкя(ТоварСсылка); Попытка

ЗаблокироватьДанныеДляРедактирования(ТоварСсылка, , ИдентФормы);

Исключение

// исключение из-за несовместимости блокировок КонецПолытки;

Для снятия пессимистической блокировки разработчик может использовать метод глобального контекста РазОлокироватьДанныеДля Редактирования ().

9.1.2.

Пессимистическая блокировка и транзакции

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

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

9.1.3. Оптимистическая блокировка

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

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

Когда объект встроенного языка считывает данные из базы данных, в числе прочего счнтывается и версия объекта, хранящегося в базе данных.

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

Оптимистическая блокировка гарантирует, что если пользователь изменяет объект, то его изменения не «затрут» изменения, сделанные другими сеансами или другими программными объектами этого же сеанса.

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

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

  1. 9.3. Механизм управляемых блокировок
  2. 4.1. Составление объектного сметного расчета (объектной сметы
  3. 1. КРИСТАЛЛИЗАЦИЯ ГЕНИТАЛЬНОГО ОБЪЕКТНОГО ЛИБИДО
  4. 1.2. Методология объектно-ориентированного программирования
  5. 1.3. Методология объектно-ориентированного анализа и проектирования
  6. ГЛАВА 2. Исторический обзор развития методологии объектно-ориентированного анализа и проектирования сложных систем
  7. 2.3. Принципы объектно-ориентированного проектирования, их применение в МИС. Достижение эффекта синергии между модулями системы анализа МИС
  8. 7. СТРУКТУРА ФИНАНСОВОГО МЕХАНИЗМА
  9. Механизм любви
  10. 3. Механизм действия экологического права
  11. 2.2. Рыночный механизм