Меню


Курсы СтимулСправочникПолезные материалы1С:Предприятие 8.2РазработчикамРеализация обработки данных

1С:Предприятие 8.2 /
Разработчикам /
Реализация обработки данных

Оглавление

Блокировка данных объекта для редактирования из кода

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

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

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

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

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

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

ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект();
//  Выполнить  блокировку объекта от  изменения  другими режимами
// или пользователями; в случае блокировки - 
// вывести  пользователю  сообщение об исключении.
ФайлОбъект.Заблокировать(); 
// Затем изменить и записать объект
ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка();
ФайлОбъект.Записать();

Аналогичным образом, можно воспользоваться методом глобального контекста ЗаблокироватьДанныеДляРедактирования:

ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект();
// Выполнить блокировку объекта от изменения другими режимами
// или пользователями; в случае блокировки - 
// вывести  пользователю  сообщение об исключении.
ЗаблокироватьДанныеДляРедактирования(ФайлОбъект); 
// Затем изменить и записать объект
ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка();
ФайлОбъект.Записать();

Пример № 2. Требуется пропустить обработку объекта, если он заблокирован для редактирования. При очередном вызове процедуры (например, из фонового или регламентного задания) будет предпринята повторная попытка изменения объекта.

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

2. Не следует проверять блокировку объектов для редактирования в следующих случаях:


Нас находят: ошибка блокировки объекта объект уже заблокирован, 1с 8 2 как получить пользователя заблокировавший объект, не удалось заблокировать запись 1с, режим управления блокировкой данных 1с, ошибка блокировки объекта в 1с, не удалось заблокировать запись действие не выполнено, ЗаблокироватьДанныеДляРедактирования, https://stimul kiev ua/materialy htm?a=blokirovka_dannykh_obekta_dlya_redaktirovaniya_iz_koda, режим управления блокировкой данных 1с 8 2 уф, объектная блокировка


Подписка на новости RSS

Мы на Facebook