Имя: Пароль:
1C
 
Управляемая блокировка на план обмена
0 breezee
 
29.02.24
06:59
Коллеги, добрый день. Случилась проблема. Документ зарегистрировался в плане обмена, но был откат транзакции. За это время документ выгрузился.
У плана обмена режим управления блокировками стоит управляемый. У документа (перемещение товаров, если важно) я тоже для теста поставил режим управления управляемый. У конфигурации стоит режим управления Управляемый. SQL сервер 2014.
Чтобы избежать этой проблемы я установил в процедуре ПриЗаписи() где идет регистрация в узел блокировку.

Блокировка = Новый БлокировкаДанных;
			
ЭлементБлокировки = Блокировка.Добавить();
			
ЭлементБлокировки.Область 			= "ПланОбмена.WMS";
ЭлементБлокировки.Режим 			= РежимБлокировкиДанных.Исключительный;
			
//ЭлементБлокировки.УстановитьЗначение("Ссылка", СсылкаНаПеремещение); 
			
Блокировка.Заблокировать();
				
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбменаВМС, ЭтотОбъект.Ссылка);


Но я могу спокойно читать в другом сеансе узел после установки блокировки. Почему? Я так же пытался установить на саму ссылку блокировку - тоже не помогло. И, почему-то я не могу нагуглить по теме. Я думаю не у одного меня такой случай возникал)
1 Волшебник
 
29.02.24
06:58
Не путайте транзакционные блокировки и объектные.

Документ не мог выгрузиться, пока транзакция не была завершена.
2 breezee
 
29.02.24
08:20
(1) Он прочитался запросом из таблицы изменений по узлу и выгрузился. То есть запрос отработал на грязных данных.

Документ создавался в другой транзакции с несколькими документами в пакете.

Я проверял, если в транзакции создать документ - его можно прочитать запросом в другом сеансе до завершения транзакции. Потом он становится "объект не найден" в консоле
3 Волшебник
 
29.02.24
08:22
(2) Читайте тоже в транзакции
4 breezee
 
29.02.24
08:28
(3) Большое спасибо! Попробую
5 Волшебник
 
29.02.24
08:51
(4) Только малыми порциями, чтобы не сильно блокировать таблицы. Хотя если у Вас успел выгрузиться незаписанный документ, то обмен у вас должен быть именно такой: частый и малыми порциями.
6 mikecool
 
29.02.24
10:08
(2) "если в транзакции создать документ - его можно прочитать запросом в другом сеансе до завершения транзакции" - это как так? какой уровень изоляции?
7 Волшебник
 
29.02.24
10:14
(6) Если чтение без транзакции, то вполне возможно. Чтобы изолировать, чтение тоже нужно производить в транзакции.