Имя: Пароль:
1C
 
Блокировка регистра сведений
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-ти значные.
AdBlock убивает бесплатный контент. 1Сергей