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