Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Транзакционная блокировка по Периоду

Транзакционная блокировка по Периоду
Я
   Franchiser
 
24.10.19 - 14:35
Смотрю типовую: при получении данных из регистров 1С накладывает блокировку такого вида:
Блокировка = Новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.РеализованныеТоварыКомитентов");
    ЭлементБлокировки.УстановитьЗначение("Организация",        Реквизиты.Организация);
    ЭлементБлокировки.УстановитьЗначение("Период",             Новый Диапазон(, Реквизиты.Период));
    ЭлементБлокировки.УстановитьЗначение("Контрагент",         Реквизиты.Контрагент);
    ЭлементБлокировки.УстановитьЗначение("ДоговорКонтрагента", Реквизиты.ДоговорКонтрагента);
    ЭлементБлокировки.ИсточникДанных = РеализованныеТоварыКомитентов;
    ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
    Блокировка.Заблокировать();

Тут есть Период.
1. Для чего нужно указывать период, зачем блокировать при получении остатков период, ведь остатки могут уйти в минус и позже даты документа, если кто проводит документ параллельно более поздней датой?
2. Попробовал на своем регистре: проводил одновременно 2 документа в разные даты, при этом у более позднего документа как была ошибка ожидания транзакции так и осталось, т.е. Период не отрабатывает в моем понимании. Что не так?
 
 
   H A D G E H O G s
 
1 - 24.10.19 - 14:40
Я даже регистр то такой найти не могу...
   H A D G E H O G s
 
2 - 24.10.19 - 14:41
БП штоле?
   Cyberhawk
 
3 - 24.10.19 - 14:43
"если кто проводит документ параллельно более поздней датой" // Он получит отлуп (будет ждать), т.к. начало диапазона не указано, т.е. с началоа времен
   Franchiser
 
4 - 24.10.19 - 14:47
(2) БП 3.
Самое интересное: после выполения метода Заблокировать(). Значение "Периода" в  Полях ЭлементБлокировки принимает значение "Неизвестный объект", хотя до этого оно равно заданному Диапазону.
   H A D G E H O G s
 
5 - 24.10.19 - 14:48
Даже пришлось заглянуть, уж не контроль ли остатков. Нет, просто получают остатки для списания.
   Franchiser
 
6 - 24.10.19 - 14:53
(3) Если используется Вирт. таблица остатков на дату позже установленного периода блокировки, то тоже будет ждать?
   Franchiser
 
7 - 24.10.19 - 14:56
Вообщем мне не понятно, нужно ли ставить блокировку на "Период" для блокировки из источника данных для контроля остатков и создания расходных записей, и почему не работает блокировка по периоду.
   Cyberhawk
 
8 - 24.10.19 - 14:56
(6) Ждать будет тот кто пытается наложить блокировку с пересечением диапазона.
Какая разница используется потом остатков таблица или не используется?
   Cyberhawk
 
9 - 24.10.19 - 14:58
(7) Определяется исключительно прикладной логикой. По поводу "не работает" тупишь.
   H A D G E H O G s
 
10 - 24.10.19 - 15:02
(7) Ну они попытались немного оптимизировать, поставив блокировку не на таблицу остатков, а на таблицу движений.

Док, проводясь задним числом, заблокирует движения, которые были до него, чтобы остаток на его дату, которым он будет оперировать - не поплыл прямо в момент проведения. А что будет после него - похрен.
   Franchiser
 
11 - 24.10.19 - 15:07
(9) После метода Заблокировать() Период очищается и превращается в "Неизвестный объект".
Возможно это из-за ИспользоватьИзИсточникаДанных()
   H A D G E H O G s
 
12 - 24.10.19 - 15:08
(11) Техжурнал по событию LOCK расскажет вам, есть ли там Период.
   Franchiser
 
13 - 24.10.19 - 15:51
(12) зачем техжурнал если я в отладчике вижу что он превращается во что то другое
   ptiz
 
14 - 24.10.19 - 15:56
(0) "проводил одновременно 2 документа в разные даты" - а если в разные месяцы?
   H A D G E H O G s
 
15 - 24.10.19 - 16:23
(13) Одно другому может и не мешать
   Franchiser
 
16 - 24.10.19 - 18:36
(14) месяцы разные
   Franchiser
 
17 - 25.10.19 - 12:17
Разобрался:
ЭлементБлокировки.УстановитьЗначение("Период",             Новый Диапазон(, Реквизиты.Период));
это похоже какая то оптимизация.
Если первый документ (с раней датой) установил блокировку на регистр за период до своей даты, и другой поздний документ блокировку до своей даты, то все равно получается пересечение периодов и последний документ не сможет провестись пока не проведется первый.
   ptiz
 
18 - 25.10.19 - 12:59
(17) Ну, то есть смысла - никакого?
   ДенисЧ
 
19 - 25.10.19 - 13:01
(18) Так в этом как раз и смысл ))
   DrWatson
 
20 - 25.10.19 - 13:51
(19) В чем смысл? В том, что второй документ будет ждать первый в независимости от значения дат? Так можно было бы и не делать условие по периоду, достаточно остальных условий (по организации, контрагенту, договору).
Предполагаю, что есть блокировки в других документах, которые блокируют не весь диапазон с начала времен. В этом случае введение периода в блокировку приобретает смысл.
   Franchiser
 
21 - 25.10.19 - 13:56
(18) Возможно разработчики считают что так они меньше записей блокируют первым документом.
Например в базе 2 записи регистра, созданных двумя документами.
Первый документ заблокирует 1 запись; второй документ попытается заблокировать 2 записи.
А если бы без периода, то первый документ бы заблокировал 2 записи, и второй попытался бы заблокировать 2.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.