1С:Предприятие 8.2 /
Разработчикам /
Реализация обработки данных
Блокировка данных объекта для редактирования из кода
1. В платформе 1С:Предприятие 8.1 и более поздних версиях блокировка данных, установленная с помощью метода объектов Заблокировать («блокировка данных для редактирования» или «объектная блокировка»), не запрещает запись заблокированных данных другим объектам, а лишь не позволяет нескольким объектам (например, из разных пользовательских сеансов) одновременно установить блокировку одних и тех же данных.
Поэтому прежде чем изменять существующий объект информационной базы из кода на встроенном языке, следует предварительно его заблокировать, тем самым, во-первых, убедиться, не заблокирован ли он другими объектами, во-вторых, попытаться предотвратить его изменение другими объектами.
При редактировании данных в формах, платформа автоматически устанавливает блокировку объекта, указанного в качестве основного реквизита формы.
Если при изменении и записи из встроенного языка не устанавливать блокировку объекта на время редактирования, то может возникнуть, например, ситуация, когда пользователь не сможет сохранить свои изменения, если эти же самые данные были конкурентно изменены в другом сеансе.
В отличие от транзакционных блокировок данных, пессимистическая блокировка данных для редактирования предназначена для обеспечения конкурентной работы пользователей с объектами информационной базы 1С:Предприятия (элементами справочников, документами и т.д.) Подробнее о блокировке данных для редактирования см. документацию по платформе 1С:Предприятие 8.
Пример № 1. Требуется заблокировать объект и, если это удалось, модифицировать данные. В противном случае – проинформировать пользователя об отказе в выполнении операции с помощью сообщения вида «Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено. Ошибка блокировки объекта. Объект уже заблокирован: компьютер: <имя компьютера>, пользователь: <имя пользователя>, сеанс: <номер сеанса>, начат: <дата и время>, приложение: <тип клиентского приложения>».
ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); // Выполнить блокировку объекта от изменения другими режимами // или пользователями; в случае блокировки - // вывести пользователю сообщение об исключении. ФайлОбъект.Заблокировать(); // Затем изменить и записать объект ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка(); ФайлОбъект.Записать();
Аналогичным образом, можно воспользоваться методом глобального контекста ЗаблокироватьДанныеДляРедактирования:
ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); // Выполнить блокировку объекта от изменения другими режимами // или пользователями; в случае блокировки - // вывести пользователю сообщение об исключении. ЗаблокироватьДанныеДляРедактирования(ФайлОбъект); // Затем изменить и записать объект ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка(); ФайлОбъект.Записать();
Пример № 2. Требуется пропустить обработку объекта, если он заблокирован для редактирования. При очередном вызове процедуры (например, из фонового или регламентного задания) будет предпринята повторная попытка изменения объекта.
Объект = ТекущаяВерсия.ПолучитьОбъект(); // Выполнить блокировку объекта от изменения другими режимами // или пользователями УстановитьПолноеНаименование = Истина; Попытка ФайлОбъект.Заблокировать(); Исключение // в случае блокировки - не выполнять изменение объекта УстановитьПолноеНаименование = Ложь; // записать предупреждение в журнал регистрации ЗаписьЖурналаРегистрации("Фоновое обновление имен файлов", УровеньЖурналаРегистрации.Предупреждение,, ФайлОбъект, ОписаниеОшибки()); КонецПопытки;
// Пропустить обработку объекта, если он заблокирован . Если УстановитьПолноеНаименование Тогда Объект.ПолноеНаименование = ПолноеНаименование; Объект.Записать(); КонецЕсли;
2. Не следует проверять блокировку объектов для редактирования в следующих случаях:
- при выполнении отдельных операций, имеющих по логике работы больший приоритет по сравнению с интерактивными действиями пользователя. Например, загрузка данных при обмене;
- при действиях, которые гарантированно выполняются в монопольном режиме. Например, в процедурах обновления и первоначального заполнения данных информационной базы.
Тренинг-семинар «Как получить работу бухгалтера»
Курсы бухгалтеров с трудоустройством
Курсы программирования 1С:Предприятие 8.2
Другие материалы по теме:
заблокирован, имя пользователя, иначе, ссылка, записать, компьютер, пользователи, справочники, буфер обмена, копировать, изменить, выполнить, пользователь, обмен, объект, изменения, конфигурирование, предприятие, работы, регистр, документ
Материалы из раздела: 1С:Предприятие 8.2 / Разработчикам / Реализация обработки данных
Другие материалы по теме:
Общесистемные механизмы и принципы
Нас находят: ошибка блокировки объекта объект уже заблокирован, 1с 8 2 как получить пользователя заблокировавший объект, не удалось заблокировать запись 1с, режим управления блокировкой данных 1с, ошибка блокировки объекта в 1с, не удалось заблокировать запись действие не выполнено, ЗаблокироватьДанныеДляРедактирования, https://stimul kiev ua/materialy htm?a=blokirovka_dannykh_obekta_dlya_redaktirovaniya_iz_koda, режим управления блокировкой данных 1с 8 2 уф, объектная блокировка
Мы на Facebook