|   |   | 
| 
 | Как заблокировать целый справочник | ☑ | ||
|---|---|---|---|---|
| 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) Согласен - просто как всегда запарка...     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |