Имя: Пароль:
1C
 
1С ДО 2.1 Установка разделяемой блокировки
0 zippygrill
 
07.10.24
14:54
Привет,
За советом к вам ..
- программмно создается бизнес-процесс,
- заполняется
- записывается
- стартует

Все это происходит в транзакции. Хочу перед стартом БП - установить разделяемую блокировку на Предмет самого БП, чтобы соседние сеансы при попытки изменить Предмет, ожидали пока БП  стартанет.

В коде, речь про сей кусок (БизнесСобытияВызовСервера.ОбработатьСобытиеАвтоматическийЗапускБизнесПроцессов) выглядит так ( упрощенный вариант )

Начало транзакции в предыдущей процедуре
...
БизнесПроцесс = БизнесПроцессы[Шаблон.ТипШаблона].СоздатьБизнесПроцесс();
БизнесПроцесс.Заполнить();
БизнесПроцесс.Записать();


БлокировкаДанных = Новый БлокировкаДанных();
ЭлементБлокировки = БлокировкаДанных.Добавить("Справочник." + Событие.Источник.Метаданные().Имя);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
ЭлементБлокировки.УстановитьЗначение("Ссылка", Событие.Источник);
БлокировкаДанных.Заблокировать();


СтартПроцессовСервер.СтартоватьПроцесс(БизнесПроцесс);
1 Волшебник
 
07.10.24
14:56
блокировку установите до начала транзакции
2 zippygrill
 
07.10.24
15:05
(1) А сама блокировка через УстановитьЗначение("Ссылка", Событие.Источник) -  годна в таком случаем?
3 zippygrill
 
07.10.24
15:16
(1) Забыл уточнить - что режим управления блокировкой данных - управляемый - поэтому и внутри транзакции надо

по причине:
Использование блокировки допустимо только внутри транзакции в режиме управляемых блокировок!
4 Волшебник
 
07.10.24
15:20
(2) Годится.

Статья на тему:
https://its.1c.ru/db/metod8dev/content/5839/hdoc
5 Волшебник
 
07.10.24
15:21
(3) Хотя бы поднимите в начало транзакции. Чем быстрее заблокируете, тем меньше рисков нарваться на изменение элемента.
6 zippygrill
 
07.10.24
15:38
(5) спасибо, учту, разумно как можно раньше заблокировать..
Программист всегда исправляет последнюю ошибку.