|
Механизмы блокировок в 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 - автоматическая.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |