|
Транзакционная блокировка по Периоду | ☑ | ||
---|---|---|---|---|
0
Franchiser
гуру
24.10.19
✎
14:35
|
Смотрю типовую: при получении данных из регистров 1С накладывает блокировку такого вида:
Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.РеализованныеТоварыКомитентов"); ЭлементБлокировки.УстановитьЗначение("Организация", Реквизиты.Организация); ЭлементБлокировки.УстановитьЗначение("Период", Новый Диапазон(, Реквизиты.Период)); ЭлементБлокировки.УстановитьЗначение("Контрагент", Реквизиты.Контрагент); ЭлементБлокировки.УстановитьЗначение("ДоговорКонтрагента", Реквизиты.ДоговорКонтрагента); ЭлементБлокировки.ИсточникДанных = РеализованныеТоварыКомитентов; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); Блокировка.Заблокировать(); Тут есть Период. 1. Для чего нужно указывать период, зачем блокировать при получении остатков период, ведь остатки могут уйти в минус и позже даты документа, если кто проводит документ параллельно более поздней датой? 2. Попробовал на своем регистре: проводил одновременно 2 документа в разные даты, при этом у более позднего документа как была ошибка ожидания транзакции так и осталось, т.е. Период не отрабатывает в моем понимании. Что не так? |
|||
1
H A D G E H O G s
24.10.19
✎
14:40
|
Я даже регистр то такой найти не могу...
|
|||
2
H A D G E H O G s
24.10.19
✎
14:41
|
БП штоле?
|
|||
3
Cyberhawk
24.10.19
✎
14:43
|
"если кто проводит документ параллельно более поздней датой" // Он получит отлуп (будет ждать), т.к. начало диапазона не указано, т.е. с началоа времен
|
|||
4
Franchiser
гуру
24.10.19
✎
14:47
|
(2) БП 3.
Самое интересное: после выполения метода Заблокировать(). Значение "Периода" в Полях ЭлементБлокировки принимает значение "Неизвестный объект", хотя до этого оно равно заданному Диапазону. |
|||
5
H A D G E H O G s
24.10.19
✎
14:48
|
Даже пришлось заглянуть, уж не контроль ли остатков. Нет, просто получают остатки для списания.
|
|||
6
Franchiser
гуру
24.10.19
✎
14:53
|
(3) Если используется Вирт. таблица остатков на дату позже установленного периода блокировки, то тоже будет ждать?
|
|||
7
Franchiser
гуру
24.10.19
✎
14:56
|
Вообщем мне не понятно, нужно ли ставить блокировку на "Период" для блокировки из источника данных для контроля остатков и создания расходных записей, и почему не работает блокировка по периоду.
|
|||
8
Cyberhawk
24.10.19
✎
14:56
|
(6) Ждать будет тот кто пытается наложить блокировку с пересечением диапазона.
Какая разница используется потом остатков таблица или не используется? |
|||
9
Cyberhawk
24.10.19
✎
14:58
|
(7) Определяется исключительно прикладной логикой. По поводу "не работает" тупишь.
|
|||
10
H A D G E H O G s
24.10.19
✎
15:02
|
(7) Ну они попытались немного оптимизировать, поставив блокировку не на таблицу остатков, а на таблицу движений.
Док, проводясь задним числом, заблокирует движения, которые были до него, чтобы остаток на его дату, которым он будет оперировать - не поплыл прямо в момент проведения. А что будет после него - похрен. |
|||
11
Franchiser
гуру
24.10.19
✎
15:07
|
(9) После метода Заблокировать() Период очищается и превращается в "Неизвестный объект".
Возможно это из-за ИспользоватьИзИсточникаДанных() |
|||
12
H A D G E H O G s
24.10.19
✎
15:08
|
(11) Техжурнал по событию LOCK расскажет вам, есть ли там Период.
|
|||
13
Franchiser
гуру
24.10.19
✎
15:51
|
(12) зачем техжурнал если я в отладчике вижу что он превращается во что то другое
|
|||
14
ptiz
24.10.19
✎
15:56
|
(0) "проводил одновременно 2 документа в разные даты" - а если в разные месяцы?
|
|||
15
H A D G E H O G s
24.10.19
✎
16:23
|
(13) Одно другому может и не мешать
|
|||
16
Franchiser
гуру
24.10.19
✎
18:36
|
(14) месяцы разные
|
|||
17
Franchiser
гуру
25.10.19
✎
12:17
|
Разобрался:
ЭлементБлокировки.УстановитьЗначение("Период", Новый Диапазон(, Реквизиты.Период)); это похоже какая то оптимизация. Если первый документ (с раней датой) установил блокировку на регистр за период до своей даты, и другой поздний документ блокировку до своей даты, то все равно получается пересечение периодов и последний документ не сможет провестись пока не проведется первый. |
|||
18
ptiz
25.10.19
✎
12:59
|
(17) Ну, то есть смысла - никакого?
|
|||
19
ДенисЧ
25.10.19
✎
13:01
|
(18) Так в этом как раз и смысл ))
|
|||
20
DrWatson
25.10.19
✎
13:51
|
(19) В чем смысл? В том, что второй документ будет ждать первый в независимости от значения дат? Так можно было бы и не делать условие по периоду, достаточно остальных условий (по организации, контрагенту, договору).
Предполагаю, что есть блокировки в других документах, которые блокируют не весь диапазон с начала времен. В этом случае введение периода в блокировку приобретает смысл. |
|||
21
Franchiser
гуру
25.10.19
✎
13:56
|
(18) Возможно разработчики считают что так они меньше записей блокируют первым документом.
Например в базе 2 записи регистра, созданных двумя документами. Первый документ заблокирует 1 запись; второй документ попытается заблокировать 2 записи. А если бы без периода, то первый документ бы заблокировал 2 записи, и второй попытался бы заблокировать 2. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |