|
Как заблокировать регистр накопления при записи набора? | ☑ | ||
---|---|---|---|---|
0
Gorr
03.07.14
✎
14:32
|
Здравствуйте!
В моей обработке выполняется запись довольно большого набора записей в транзакции. Как правильно заблокировать регистр от чтения другими сеансами на время выполнения записи? Пробовал так: Блокировки = Новый БлокировкаДанных; ЭлементБлокировки = Блокировки.Добавить("РегистрНакопления."+ВыбРегистр); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; НачатьТранзакцию(); Попытка Блокировки.Заблокировать(); Исключение Предупреждение("Не удалось заблокировать регистр!"); возврат; КонецПопытки; Ставил бряк в отладчике после вызова Заблокировать(), запускал дополнительный сеанс из него консолью запросов без труда прочитал записи блокируемого регистра. Как заблокировать регистр чтобы у других сеансов вообще доступа не было? |
3 6 |
||
1
Fragster
гуру
03.07.14
✎
14:35
|
а режим блокировки у базы какой?
|
4 |
||
2
Fragster
гуру
03.07.14
✎
14:35
|
и у самого регистра и у транзакции стартованной
|
|||
3
Spieluhr
03.07.14
✎
14:44
|
(0) все правильно, только вне транзакции (консолью запросов) читать всегда можно
|
|||
4
Gorr
03.07.14
✎
14:48
|
(1) у конфигурации режим автоматический
|
5 8 15 |
||
5
Fragster
гуру
03.07.14
✎
15:02
|
(4) Выбрать * из Регистр ДЛЯ ИЗМЕНЕНИЯ
|
9 10 18 19 23 |
||
6
Жан Пердежон
03.07.14
✎
15:03
|
(0) от зряного чтения - НИКАК
|
7 |
||
7
floody
03.07.14
✎
15:06
|
(6) от грязного чтения как раз и спасает режим блокировки "исключительный"
|
8 10 |
||
8
Maxus43
03.07.14
✎
15:13
|
||||
9
Maxus43
03.07.14
✎
15:14
|
тут надо (5), причем в транзакции явной или неявной
|
|||
10
Жан Пердежон
03.07.14
✎
15:17
|
||||
11
Maxus43
03.07.14
✎
15:19
|
а, я чот топик то не прочитал, от чтения надо заблокировать...
|
|||
12
Gorr
03.07.14
✎
15:25
|
остается только УстановитьМонопольныйРежим(Истина);
|
13 |
||
13
Fragster
гуру
03.07.14
✎
15:26
|
(12) а чем мешает чтение? ну почитают... документы-то все равно не смогут делать...
|
14 |
||
14
Gorr
03.07.14
✎
16:10
|
(13) существует вероятность получения неверных данных и запись на основании этих неверных данных уже в другие регистры. почему не смогут?
|
15 34 |
||
15
Spieluhr
03.07.14
✎
16:17
|
16 20 |
|||
16
Gorr
03.07.14
✎
16:39
|
(15) таким образом, работу типовых документов моя обработка не заденет?
|
18 32 |
||
17
Gorr
03.07.14
✎
16:41
|
поскольку запись обработкой выполняется в транзакции и анализ остатков документами неявно тоже выполняется в транзакции.
|
32 |
||
18
Fragster
гуру
03.07.14
✎
16:41
|
19 20 23 |
|||
19
Gorr
03.07.14
✎
16:47
|
21 22 |
|||
20
Gorr
03.07.14
✎
16:49
|
23 |
|||
21
Spieluhr
03.07.14
✎
16:49
|
(19) да, это
|
|||
22
Fragster
гуру
03.07.14
✎
16:49
|
(19) типа того. но как только конфа станет управляемой - код превратится в тыкву
|
24 26 |
||
23
Spieluhr
03.07.14
✎
16:51
|
24 |
|||
24
Fragster
гуру
03.07.14
✎
16:52
|
25 |
|||
25
Spieluhr
03.07.14
✎
16:53
|
(24) конечно
|
|||
26
Gorr
03.07.14
✎
17:06
|
(22) пожалуйста без эмоций.
Довайте подведем итог. Конструкция "Для изменения" запроса внутри транзакции блокирует всю таблицу не только для записи, но и для чтения другими сессиями при использовании автоматического режима блокировки. |
30 |
||
27
Fragster
гуру
03.07.14
✎
17:09
|
вот что пишет справка:
Конфигуратор 1С:Предприятие 8 Предложение ДЛЯ ИЗМЕНЕНИЯ Предложение ДЛЯ ИЗМЕНЕНИЯ предназначено для указания необходимости блокировки считываемых в транзакции данных. Считанные данные становятся недоступными для чтения в других сессиях. Для файлового варианта блокируются указанные таблицы, а для клиент-серверного варианта — только выбранные записи. Блокировка снимается после завершения транзакции. |
|||
28
Gorr
03.07.14
✎
17:16
|
думаю, если бы в справке додумались написать "ДЛЯ ЧТЕНИЯ" вопросов было бы куда меньше
|
|||
29
Gorr
03.07.14
✎
17:23
|
в итоге исправил код на
НачатьТранзакцию(); Запрос = Новый Запрос ("выбрать * из ""РегистрНакопления."+Выбрегистр+" для изменения"); Попытка Запрос.Выполнить(); Исключение Предупреждение("Не удалось заблокировать регистр!"); возврат; КонецПопытки; |
31 |
||
30
Жан Пердежон
03.07.14
✎
17:26
|
(26) не совсем, прочитать не блокирую данные все равно можно
|
|||
31
Spieluhr
03.07.14
✎
17:39
|
(29) в итоге я так и не понял зачем вам блокировать на чтение весь регистр? Вне транзакции , т.е. из консоли запросов или в любом отчете данные будут прочитаны независимо от установленных блокировок, а параллельные транзакции и так не смогут прочитать те данные, которые вы измените в своей (ваш набор записей).
на выходе получите избыточную блокировку и никакой пользы. |
32 |
||
32
Gorr
03.07.14
✎
17:52
|
33 |
|||
33
Spieluhr
03.07.14
✎
17:57
|
(32) ответьте все же на вопрос: зачем вам блокировать на чтение весь регистр?
|
34 |
||
34
Gorr
03.07.14
✎
17:59
|
||||
35
Gorr
03.07.14
✎
18:01
|
еще непонятно как проверить режим блокировки конфигурации:
если Метаданные.РежимУправленияБлокировкойДанных = РежимУправленияБлокировкойДанныхПоУмолчанию.автоматический выдает ошибку переменная РежимУправленияБлокировкойДанныхПоУмолчанию не определена |
36 |
||
36
Fragster
гуру
03.07.14
✎
20:53
|
(35) смотри в СП вмнимательнее
|
39 |
||
37
Gorr
03.07.14
✎
21:48
|
ОбъектМетаданныхКонфигурация.РежимУправленияБлокировкойДанных (ConfigurationMetadataObject.DataLockControlMode)
ОбъектМетаданныхКонфигурация (ConfigurationMetadataObject) РежимУправленияБлокировкойДанных (DataLockControlMode) Использование: Только чтение. Описание: Тип: РежимУправленияБлокировкойДанныхПоУмолчанию. Содержит варианты режимов управления блокировкой данных, устанавливаемых по умолчанию. Доступность: Сервер, толстый клиент, внешнее соединение. |
|||
38
Gorr
03.07.14
✎
21:49
|
я так понимаю РежимУправленияБлокировкойДанныхПоУмолчанию должно быть системное перечисление?
|
|||
39
Gorr
03.07.14
✎
21:53
|
(36) не вижу нифига
|
41 |
||
40
Gorr
04.07.14
✎
09:24
|
UP!
|
|||
41
Spieluhr
04.07.14
✎
10:12
|
42 |
|||
42
Gorr
04.07.14
✎
10:54
|
(41) некрасиво.
На случай если кто еще сталкнется с необходимостью проверки объектов метаданных на перечислимое свойство, доступ этим "перечислимым" перечислениям можно получить через "Метаданные.СвойстваОбъектов.ПеоечислимоеСвойство.ЗначениеСвойства" |
|||
43
Fragster
гуру
04.07.14
✎
11:58
|
ПеречислимыеСвойстваОбъектовМетаданных (MetadataObjectEnumeratedProperties)
Свойства: .... РежимУправленияБлокировкойДанныхПоУмолчанию (DefaultDataLockControlMode) ..... Описание: Предоставляет доступ к системным перечислениям, выступающим в качестве значений свойств объектов метаданных. Состав и описание системных перечислений объектов метаданных описан в разделе "Системные перечисления свойств объектов метаданных". Доступность: Сервер, толстый клиент, внешнее соединение. См. также: ОбъектМетаданныхКонфигурация, свойство СвойстваОбъектов |
|||
44
Fragster
гуру
04.07.14
✎
11:58
|
в общем метаданные.свойстваобъектов.РежимУправленияБлокировкойДанныхПоУмолчанию.Управляемый
|
|||
45
Fragster
гуру
04.07.14
✎
11:59
|
а вообще - просто код од другого режима блокировки будет проигнорирован будет
|
46 |
||
46
Gorr
04.07.14
✎
12:01
|
(45) я сделал так, что в одном случае осуществляется выборка, в другом используется объект блокировка. таким образом получилось универсально.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |