Имя: Пароль:
1C
1С v8
Изучаю транзакционные блокировки
0 fjay69
 
24.06.20
17:07
Добрый день. Я в тупике. Если есть специалисты по MS SQL, прошу помочь.

Насколько я знаю, текущие блокировки SQL можно посмотреть в таблице sys.dm_tran_locks

Как я создаю блокировку? Выполняю следующий код в тестовой базе:


НачатьТранзакцию();
БлокировкаДанных = Новый БлокировкаДанных;
ЭлементБлокировкиДанных = БлокировкаДанных.Добавить("Справочник.Спр1");
ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Справочники.Спр1.НайтиПоНаименованию("Тест"));
ЭлементБлокировкиДанных.Режим = РежимБлокировкиДанных.Исключительный;
БлокировкаДанных.Заблокировать();
Предупреждение("Пока открыто это предупреждение, элемент справочника заблокирован");


Как я проверяю блокировку? Запускаю второй сеанс и пробую модифицировать элемент.

Спустя 20 сек после нажатия на кнопку записи, 1С выдаёт "Превышено максимальное время ожидания блокировки".

Значит, блокировка есть и я должен видеть её в sys.dm_tran_locks. Но там только записи с resource_type = DATABASE.

Явно не то, что мне нужно.

Что я делаю не так? Может не так настроил SQL или 1С?
1 H A D G E H O G s
 
24.06.20
17:10
Это не блокировка SQL, это блокировка на уровне сервера 1С.
2 Tihon_aka_kot
 
24.06.20
17:11
(0) Может запись появиться когда ты отпустишь блокировку?
3 Trier
 
24.06.20
17:17
(0) В твоем случае сработала управляемая блокировка 1С, до скуля даже дело не дошло
Просто проведи любой документ и поставь точку останова в конце обработки проведения.
4 fjay69
 
24.06.20
17:21
(3) Спасибо, так и сделаю. Про управляемые блокировки почитаю.
5 fjay69
 
24.06.20
17:36
Судя по http://catalog.mista.ru/public/557477/ , блокировки 1С можно вытащить только из технологического журнала.
6 vde69
 
24.06.20
18:18
(5) зачем тебе вытаскивать блокировки 1с ?
7 vde69
 
24.06.20
18:20
может ты путаешь с "уровень изоляции SQL"  ???? почитай про это... и посмотри какие из них использует 1с в транзакции, это куда важнее чем пытатся понять управляемые блокировки...