Имя: Пароль:
1C
1С v8
Механизмы блокировок в 1с 8.2
0 AbCdEf
 
22.01.13
14:32
Добрый день! Мне нужно заблокировать элементы справочника для редактирования, для этого я могу использовать три известных мне способа. Объясните пожалйста различие между способами блокировки представленными ниже:

1)  
Запрос = Новый Запрос;
Запрос.Текст =             "ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ";
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Ссылка = ВыборкаДетальныеЗаписи.Ссылка;
Блок = Новый БлокировкаДанных;
элб = Блок.Добавить("Справочник.Номенклатура");
элб.Режим = РежимБлокировкиДанных.Исключительный;
элб.УстановитьЗначение("Ссылка",Ссылка);
Блок.Заблокировать();
о = Ссылка.ПолучитьОбъект();
о.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар;
о.Записать();
КонецЦикла;

2)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ  Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура   ДЛЯ ИЗМЕНЕНИЯ  Справочник.Номенклатура";
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Ссылка = ВыборкаДетальныеЗаписи.Ссылка;
о = Ссылка.ПолучитьОбъект();
о.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар;
о.Записать();
КонецЦикла;
3)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ  Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ";
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Ссылка = ВыборкаДетальныеЗаписи.Ссылка;
о = Ссылка.ПолучитьОбъект();
о.Заблокировать();
о.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар;
о.Записать();
о.Разблокировать();
КонецЦикла;
1 Maxus43
 
22.01.13
14:38
1 - управляемые блокировки
2 - не работает без транзакции, блокирует все данные в выборке
3 - блокирует конкретный объект
2 samozvanec
 
22.01.13
15:04
первая, к слову, тоже только в транзакции
3 Ksandr
 
22.01.13
15:06
В третьем способе хорошо бы еще проверять, удалось ли заблокировать
4 Maxus43
 
22.01.13
15:18
(3) Заблокирован() ответит на этот вопрос
5 Reset
 
22.01.13
15:25
(0)
+1 к (3)
Но придется делать Попытку
6 Reset
 
22.01.13
15:28
хотя попытка нужна и в 1 случае тоже, если он будет в транзации. Если вне, то ничего не будет блокироваться
7 Armando
 
22.01.13
15:30
1 и 2 - транзакционные блокировки
3 - объектная
8 fisher
 
22.01.13
15:49
Причем 1 - управляемая, 2 - автоматическая.