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