|
помогите понять поведение управляемых блокировок | ☑ | ||
---|---|---|---|---|
0
blesha
25.09.20
✎
23:57
|
платформа 8.3, режим управление блокировками - управляемый
есть регистр сведений, три измерения - тип число, ресурс - число. заполнен тривиально: измерение1 измерение2 измерение3 ресурс1 1 2 3 4 1 3 2 4 2 1 3 4 2 3 1 4 3 1 2 4 3 2 1 4 если выполнить два следующих фрагмента параллельно, то возникает ожидание на управляемых блокировках фрагмент1: НачатьТранзакцию(); Блокировка = Новый БлокировкаДанных; ЭлБлокировки = Блокировка.Добавить("РегистрСведений.РегистрСведений1"); ЭлБлокировки.УстановитьЗначение("Измерение1", 1); ЭлБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); Предупреждение("ждем-с"); ЗафиксироватьТранзакцию(); фрагмент2: НачатьТранзакцию(); Блокировка = Новый БлокировкаДанных; ЭлБлокировки = Блокировка.Добавить("РегистрСведений.РегистрСведений1"); ЭлБлокировки.УстановитьЗначение("Измерение2", 1); ЭлБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); Предупреждение("ждем-с"); ЗафиксироватьТранзакцию(); ПОЧЕМУ возникает ожидание? Ведь в первом фрагменте блокируются первая и вторая строки - именно в них 1 в Измерение1 Во втором фрагменте должны блочится строки у которых 1 в Измерение2, а это третья и пятая строки...... Вычитал это в книге одной, не поверил, решил проверить и офигел, спать не могу теперь) |
|||
1
youalex
26.09.20
✎
05:42
|
база серверная?
|
|||
2
Конструктор1С
26.09.20
✎
06:56
|
Предупреждение("ждем-с");
What?!?? |
|||
3
ДенисЧ
26.09.20
✎
06:59
|
(2) ЧТо смущает?
|
|||
4
Chameleon1980
26.09.20
✎
07:11
|
(3)пердупреждение на сервере
|
|||
5
ДенисЧ
26.09.20
✎
07:31
|
(4) А кто сказал про сервер? Может, там толстый клиент?
|
|||
6
ptiz
26.09.20
✎
08:32
|
(0) Надо указывать ВСЕ измерения до нужного по порядку в метаданных.
Если блокируешь Измерение2, то обязательно указывать и Измерение1. Иначе заблокируется всё. |
|||
7
Конструктор1С
26.09.20
✎
08:42
|
(5) надо использовать паузу, Карл, паузу!
|
|||
8
blesha
26.09.20
✎
09:51
|
(6) получается есть аналогия как в запросах когда в индекс не попадаешь и запрос в скан сваливается?
|
|||
9
blesha
26.09.20
✎
09:51
|
(1) да
|
|||
10
Timon1405
26.09.20
✎
09:52
|
(0) представьте ваш регистр как 3херный куб, где 3 оси - ваши измерения а на пересечении "в воздухе" висят ресурсы. блокировкой 1 вы блокируете 2 полных(!) горизонтальных "слоя", а блокировкой 2 пытаетесь заблокировать вертикальный слой, который имеет пересечения с горизонтальным.
|
|||
11
blesha
26.09.20
✎
09:52
|
(4) это из учебника пример
|
|||
12
blesha
26.09.20
✎
10:14
|
(10) да, логично. платформа видимо блочит именно пространство всевозможных значений, а не имеющиеся строки. Чтобы нельзя было вставить строку "1, 1, 1, 4" защита от фантомов аки
|
|||
13
mistеr
26.09.20
✎
10:53
|
(6) Можно ссылку на доку? Нигде не видел такого.
|
|||
14
mistеr
26.09.20
✎
10:53
|
И чем это объясняется, интересно.
|
|||
15
blesha
26.09.20
✎
20:53
|
(6) опыты показали что ты не прав. можно:
ЭлБлокировки.УстановитьЗначение("Измерение2", 2); ЭлБлокировки.УстановитьЗначение("Измерение3", 3); а потом заблочить ЭлБлокировки.УстановитьЗначение("Измерение1", 1); ЭлБлокировки.УстановитьЗначение("Измерение2", 1); и обе блокировки буду успешно установлены. аналогия с многомерными пространствами лучше работает |
|||
16
blesha
26.09.20
✎
20:53
|
всем спасибо, ясно, понятно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |