|   |   | 
| 
 | Блокировка регистра сведений | ☑ | ||
|---|---|---|---|---|
| 0
    
        Gera1t 20.12.24✎ 15:40 | 
        Здравствуйте!
 Подскажите пожалуйста можно ли заблокировать Регистр сведений так, что бы при одновременном обращении нескольких человек создавалась очередь на добавление. Сделал вот так: Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить(); ЭлементБлокировки.Область = "РегистрСведений.ДопСведения"; ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); НачатьТранзакцию(); Но при одновременном обращении к регистру нескольких пользователей, кто то один добавляет запись, у других просто появляется ошибка. Повторюсь, можно ли сделать так, что программа ждала возможность заблокировать регистр, а не сразу выдавала ошибку блокировки? | |||
| 1
    
        Волшебник 20.12.24✎ 15:44 | 
        Попытка... Исключение     | |||
| 2
    
        lEvGl 20.12.24✎ 15:45 | 
        конца транзакции не видно что то     | |||
| 3
    
        Gera1t 20.12.24✎ 15:47 | 
        (1) Это я тоже сделал, но в этом случае пользователю. придется еще раз делать действие, а по моей задумки, программа подвиснет на пару секунд и сделает действие, а не отменит его     | |||
| 4
    
        Gera1t 20.12.24✎ 15:47 | 
        (2) Он есть)     | |||
| 5
    
        mikecool 20.12.24✎ 15:47 | 
        (0) не блокируй весь регистр     | |||
| 6
    
        Волшебник 20.12.24✎ 15:47 | 
        Чушь     | |||
| 7
    
        lEvGl 20.12.24✎ 15:48 | 
        (4) ну тогда надо поменять местами
 Блокировка.Заблокировать(); НачатьТранзакцию(); | |||
| 8
    
        Gera1t 20.12.24✎ 15:49 | 
        (5) Не могу, в регистре есть Измерение, которое формируется динамически, по типу как Штрихкод. Т.е. я определяю максимальное значение и присваиваю новое + 1. Если не буду блокировать весь регистр могут быть дубли     | |||
| 9
    
        Gera1t 20.12.24✎ 15:54 | 
        (7) Ну да, нужно поменять     | |||
| 10
    
        H A D G E H O G s 20.12.24✎ 16:04 | 
        (8) Надо сделать это быстро, вот и всё.     | |||
| 11
    
        H A D G E H O G s 20.12.24✎ 16:39 | 
        НачатьТранзакцию()
 Прочитать последний номер Увеличить номер Записать номер ЗафиксироватьТранзакцию Делать что-то с номером нужное. | |||
| 12
    
        Gera1t 20.12.24✎ 16:21 | 
        (11) Бывают ситуации, когда добавляется несколько сотен записей за раз, и в таком случае и возникает проблема с блокировкой     | |||
| 13
    
        Михаил Козлов 20.12.24✎ 16:28 | 
        В УТ 10.3 что-то похожее было и когда регистр подрос, запрос последнего номера не успевал отработать.
 Выкрутились, вроде, так: хранили в константе последний номер - стали успевать. | |||
| 14
    
        H A D G E H O G s 20.12.24✎ 16:34 | 
        (12) Добавляй набором записей     | |||
| 15
    
        Valdis2007 20.12.24✎ 17:11 | 
        (0) сделай через бесконечный цикл, с выходом по условию, если удалось записать в регистр     | |||
| 16
    
        Gera1t 23.12.24✎ 09:45 | 
        (15) Хорошая идея, но, может быть, как-то с таймером для завершения, чтобы не вышло вечное зависание.     | |||
| 17
    
        Garykom 23.12.24✎ 09:26 | 
        (8) Почему не использовать справочник?     | |||
| 18
    
        toypaul 23.12.24✎ 09:46 | 
        (0) Кажется, что правильно организовать свою очередь (РС, например) и рег задание для обработки очереди     | |||
| 19
    
        Valdis2007 23.12.24✎ 12:25 | 
        (16) +1 да круто     | |||
| 20
    
        H A D G E H O G s 23.12.24✎ 12:49 | 
        Какая-то альтернативщина началась в ветке. 20 секунд ожидания на блокировку в типовых настройках. За это время можно нагенерить и записать под 100000 порядковых номеров. Но мы идем дорогой приключений.     | |||
| 21
    
        СвинТуз 23.12.24✎ 14:46 | 
        (0)
 Сказочники Когда двое пытаются заблокировать одну область все нормально разруливается. Проблемы начинаются 1. Если долго 2. Если взаимоблокировки. Т.е. когда придел ожидания превышается. | |||
| 22
    
        СвинТуз 23.12.24✎ 14:47 | 
        Очередь и так создается.     | |||
| 23
    
        СвинТуз 23.12.24✎ 15:32 | 
        (0)
 Умные люди как в (13) блокируют константу. | |||
| 24
    
        laeg 24.12.24✎ 10:09 | 
        (8) Поделюсь бесценным опытом. 
 Задача решенная более лет 10 назад: использовался некий ИД, числовой, уникальный, для прослеживания позиций и учета в разрезе статуса. Решена была на базе простого справочника, с КОДОМ типа ЧИСЛО, уникальность во всем периоде. Ни разу не возникло коллизии в ИД. Цифры уже 9-ти значные. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |