Имя: Пароль:
1C
1С v8
Как заблокировать целый справочник
0 nemavasi
 
26.11.14
14:37
Есть иерархический справочник неограниченного уровня вложенности. Между объектами, кроме встроенных связей (через поле Родитель), есть еще другие связи, задаваемые табличной частью у каждого элемента. Грубо говоря, одни и те же элементы находятся в разных деревьях, причем у одного элемента во втором дереве могут быть несколько родителей. Есть такая задача, что при сохранении новых связей в справочнике нужно проверять,  не получается ли зацикливания (т.е. чтобы деревья оставались деревьями, а не превращались в орграф). Проверка на зацикленность реализована. Но! Получается, что перед проверкой на зацикленность нужно заблокировать целый справочник (на чтение и запись), потому что может быть запущена вторая сессия, тоже проверяющая отсутствие циклов и записывающая новые связи.
Кто сталкивался с блокировкой именно справочников, а не других объектов 1С?
1 Banned
 
26.11.14
14:39
Не запускать вторую сессию, пока запущена первая - не вариант?
2 СвинТуз
 
26.11.14
14:40
БлокировкаДанных
Имя пространства блокировки. П
оддерживаются следующие имена пространств блокировки:
Справочник.<имя>;
3 18_plus
 
26.11.14
14:40
4 Kamas
 
26.11.14
14:40
(1) константа идет сортировка не устроит??
5 Banned
 
26.11.14
14:41
(4) Меня - нет.
6 Kamas
 
26.11.14
14:42
(5) Жаль, а такие надежды были
7 Banned
 
26.11.14
14:42
(6) Извини, что разочаровал
8 Крошка Ру
 
26.11.14
14:43
(7) Не привередничай, бери пока предлагают
9 Banned
 
26.11.14
14:43
(8) Не, у меня своя есть...
10 СвинТуз
 
26.11.14
14:44
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.Номенклатура");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();

Не пробовал так? Не комильфо что ли?
Выбери все элементы. И укажи .
11 palpetrovich
 
26.11.14
14:44
(0) а можно поинтересоваться, зачем такой справочник? ...искусственный интелект разрабатываем? :)
12 КонецЦикла
 
26.11.14
14:45
Кто первым начал - пусть пишет состояние в РС, константу, файл и проч.
Второй пусть там смотрит
Зачем такие напряги? Может вообще шару отключать или базу блокировать?
13 floody
 
26.11.14
14:45
(6) Константы дергать не по делу - это вы зря..
14 СвинТуз
 
26.11.14
14:46
А зачем все блокировать?
заблокируй родителя.
15 floody
 
26.11.14
14:46
Решение в (2) и в (10).
16 СвинТуз
 
26.11.14
14:47
или список родителей
тех элементов что писал
17 nemavasi
 
26.11.14
14:48
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.Номенклатура");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();

Так и сделал, но сомнения есть - работает или нет...
пока потестить не можем на большом объеме данных.
Может еще где-то надо что-то подключить/отключить?
18 СвинТуз
 
26.11.14
14:48
второй пойдет = не сможет заблокировать
будет ждать
транзакцию не забудь .... насколько я помню
19 СвинТуз
 
26.11.14
14:48
(17)
транзакция нужна
20 nemavasi
 
26.11.14
14:49
если есть цикл то список родителей будешь бесконечно составлять
21 СвинТуз
 
26.11.14
14:49
что значит не можем?
заблокируй один элемент и поставь ожидание
попробуй другим зверем записать
22 СвинТуз
 
26.11.14
14:50
(20)
ну уж
кто на кого учился ...
я при записи бы массив составлял
потом блокировку разом
не знаю тебе виднее
23 Jaap Vduul
 
26.11.14
14:54
(17)
Если этот код находится в ПриЗаписи модуля объекта, то сработает.
Ну и в метаданных соответствующий режим должен быть включён.
24 nemavasi
 
26.11.14
14:54
(21) щас попробуем...что-то правда сегодня туго думаю
25 СвинТуз
 
26.11.14
14:55
(23)
в ПриЗаписи скобки вообще не нужны.
26 nemavasi
 
26.11.14
14:55
(11) Какой нафиг интеллект - обычная задача в планировании
27 СвинТуз
 
26.11.14
14:55
там и так обертка есть
28 Jaap Vduul
 
26.11.14
14:58
(25)Какие скобки?
29 nemavasi
 
26.11.14
15:09
(10) не работает
30 nemavasi
 
26.11.14
15:10
Сейчас будем пробовать группу элементов или все сразу блокировать
31 nemavasi
 
26.11.14
15:55
Получилось когда добавили транзакцию
32 Banned
 
26.11.14
15:55
(31) Хм... А ведь об этом прямо в документации говорится...
33 nemavasi
 
26.11.14
16:02
(32) Согласен - просто как всегда запарка...