|
Управляемые блокировки в регистре сведений | ☑ | ||
---|---|---|---|---|
0
alexshape
05.03.19
✎
17:44
|
Привет всем, знаю. по это теме много топиков, но ничего подходящего не нашел. В коде устанавливаю блокировку управляемую на чтение со стороны других участников, но почему то она не срабатывает
НачатьТранзакцию(); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(); ЭлементБлокировки.Область = "РегистрСведений.ОтложенныеОбращенияКВебСервисам"; ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); РезультатЗапроса = Запрос.Выполнить(); Если РезультатЗапроса.Пустой() Тогда Прервать; КонецЕсли; ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл |
|||
1
Ёпрст
05.03.19
✎
18:15
|
(0) транзакция
|
|||
2
Сияющий в темноте
05.03.19
✎
21:32
|
ну,обьект заблокирован,другие читатели его блокируют или просто читают,если просто читают,то поставь им в запросе ДляИзменения.
|
|||
4
H A D G E H O G s
05.03.19
✎
23:37
|
(2) ДляИзменения - это для 2000-х годов.
|
|||
5
palsergeich
06.03.19
✎
00:36
|
(2) Для изменения эта конструкция используется только в автоматическом режиме, устаревшая и не рекомендуемый режим.
В управляемом - эта конструкция игнорируется |
|||
6
palsergeich
06.03.19
✎
00:39
|
Регистр подчиненный регистратору?
|
|||
7
palsergeich
06.03.19
✎
00:44
|
Просто на сколько я помню - блокировка идет по пересечению Пространство Блокрировки|Поле(я) блокировки.
В Вашем случае полей блокировки нет и я не помню на сколько данная запись корректна. |
|||
8
alexshape
06.03.19
✎
09:20
|
(6) неа
|
|||
9
alexshape
06.03.19
✎
09:20
|
(7) в моем понимании строка: ЭлементБлокировки.Область = "РегистрСведений.ОтложенныеОбращенияКВебСервисам"; накладывает блокировку на весь регистр, и никто не может читать его
|
|||
10
saaken
06.03.19
✎
09:28
|
первый раз слышу чтобы заблокированные данные нельзя было читать
|
|||
11
Cyberhawk
06.03.19
✎
10:08
|
(10) "Разделяемая" и "Исключительная" первый раз слышишь?
|
|||
12
Cyberhawk
06.03.19
✎
10:09
|
Ну а автор может вне транзакции читает в другом сеансе
|
|||
13
Cyberhawk
06.03.19
✎
10:10
|
Блочить таблицу для чтения другими вне транзации в 8.2 нельзя, в 8.3 иногда - тоже
|
|||
14
Cyberhawk
06.03.19
✎
10:13
|
А что же автор в "Область" элемента блокировки какую-то хрень пишет?
Надо же в методе "Добавить" весь регистр писать. |
|||
15
alexshape
06.03.19
✎
10:33
|
(14) все равно
|
|||
16
alexshape
06.03.19
✎
10:33
|
НачатьТранзакцию();
Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОтложенныеОбращенияКВебСервисам"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); //тоже не работает |
|||
17
Cyberhawk
06.03.19
✎
10:34
|
Ну тогда, вероятно, указания одного пространства недостаточно - еще и диапазон надо (через источник данных или установитьзначение)
|
|||
18
Сияющий в темноте
06.03.19
✎
14:09
|
А проверить,что блокировка установилась?
|
|||
19
alexshape
06.03.19
✎
16:00
|
(18) проверяю, точнее проверил и выяснил следующее:
1. В строке НачатьТранзакцию();, необходимо указывать явно тип РежимУправленияБлокировкойДанных НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый); 2. При установке такой блокировки Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОтложенныеОбращенияКВебСервисам"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); устанавливается Х блокировка, она никак не мешает читать другим пользователям данные, поэтому приходится поступать так, прежде чем в других транзакциях что то выполнять, нужно попытаться установить также Исключительный режим блокировки, если все ок. то ок |
|||
20
H A D G E H O G s
06.03.19
✎
16:02
|
(19) Запрос не устанавливает управляемых блокировок
|
|||
21
alexshape
06.03.19
✎
16:04
|
(20) это я уже понял. запрос вообще никакой блокировки не устанавливает
|
|||
22
H A D G E H O G s
06.03.19
✎
16:10
|
(21) S блокировку СУБД на время выполнения запроса
|
|||
23
H A D G E H O G s
06.03.19
✎
16:13
|
(18) Очень важно помнить, что УправляемыеБлокировки не работают с данными из СУБД.
Они вообще про них не знают ничего не знают, они работают с данными, которые им передал код 1С. Это знание, возможно, пригодится вам, когда напоритесь на deadlock |
|||
24
mistеr
06.03.19
✎
16:37
|
(0) Оффтопик, но интересен сценарий, в котором потребовалось блокировать чтение. До сих пор таких не встречал (исключая ошибки дизайна).
|
|||
25
Сияющий в темноте
07.03.19
✎
00:02
|
(24) чтобы поменять данные синхронно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |