Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

помогите понять поведение управляемых блокировок

помогите понять поведение управляемых блокировок
Я
   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, а это третья и пятая строки......

Вычитал это в книге одной, не поверил, решил проверить и офигел, спать не могу теперь)
   youalex
 
1 - 26.09.20 - 05:42
база серверная?
   Конструктор1С
 
2 - 26.09.20 - 06:56
Предупреждение("ждем-с");

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

аналогия с многомерными пространствами лучше работает
   blesha
 
16 - 26.09.20 - 20:53
всем спасибо, ясно, понятно

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.