Приветствую Вас ГостьЧетверг, 16.05.2024, 03:32

Каталог статей


Блокировки объектов базы

Пессимистическая блокировка объекта (документа, справочника и т.д)

Иногда надо блокировать объект, например элемент справочника, чтобы другой пользователь не смог внести параллельно данные в его свойства. Для этого можно использовать метод объекта Заблокировать(), например СправочникОбъект.Заблокировать(). Метод не доступен на клиенте.

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

Проверить, заблокирован ли объект можно с помощью метода объекта Заблокирован() (булево), например

Если НоменклатураОбъект.Заблокирован() Тогда
    НоменклатураОбъект.Разблокировать();
КонецЕсли;

Для разблокировки соответственно надо использовать метод Разблокировать().

В форме клиентского приложения заблокировать объект можно с помощью метода ЗаблокироватьДанныеДляРедактирования(<Ключ>, <ВерсияДанных>, <ИдентификаторФормы>), где:

Ключ - ссылка 

ВерсияДанных - строка. Необязательный.

ИдентификаторФормы - уникальный идентификатор формы в рамках которой заблокирован объект. Может Быть не указан Если параметр не указан, то блокировка устанавливается на ограниченное время и может быть снята:

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

Если ИдентификаторФормы указан, то блокировка автоматически снимается после закрытия формы или с помощью метода РазблокироватьДанныеДляРедактирования(<Ключ>, <ИдентификаторФормы>), где ИдентификаторФормы соответствует значению вызванному при блокировке.

Вызывает исключение, если объект уже заблокирован, в том числе и методом Заблокировать().

Не доступен на клиенте.

Пример:

&НаСервере
Процедура ЗаблокироватьАбонента(Абонент)

    ТолькоПросмотр = ФормаТолькоПросмотр;
    
    Попытка
        ЗаблокироватьДанныеДляРедактирования(ТекущийАбонент.Ссылка,,ЭтаФорма.УникальныйИдентификатор);
        ЗаблокированныйАбонент = ТекущийАбонент.Ссылка;
    Исключение
        // Если попали в исключение, то значит этот абонент уже открыт у какого то пользователя
        // выведем сообщение о блокировке и откроем пустого абонента
        НашеОписаниеОшибки = ОписаниеОшибки();
        ОбрезанноеСообщение = Прав(НашеОписаниеОшибки, СтрДлина(НашеОписаниеОшибки) - Найти(НашеОписаниеОшибки, "Объект уже заблокирован") + 1);
        ОбрезанноеСообщение = СтрЗаменить(ОбрезанноеСообщение, Символы.Пс, " ");
        ОбрезанноеСообщение = СтрЗаменить(ОбрезанноеСообщение, "Объект уже заблокирован", "Абонент " + Абонент + " заблокирован");
        ОбрезанноеСообщение = ОбрезанноеСообщение  + Символы.ПС + "Абонент открыт только на просмотр!";
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОбрезанноеСообщение, , , , УникальныйИдентификатор);
        
        ТолькоПросмотр = Истина;
    КонецПопытки;    
    
КонецПроцедуры

 

В результате выполнения получим ошибку: "Абонент Иванов Иван Иванович заблокирован: компьютер: Мой-компьютер, пользователь: Администратор, сеанс: 422, начат: 12.09.2022 в 16:15:27, приложение: Тонкий клиент
Абонент открыт только на просмотр!
"

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

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

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

 

Категория: Объекты конфигурации и типы данных | Добавил: leshic (12.09.2022)
Просмотров: 404 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход на сайт
Поиск
Категории раздела
СКД [48]
Регистры [7]
Формы [41]
Администрирование [35]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [29]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0