|   |   | 
| 
 | 1С управление блокировкой | ☑ | ||
|---|---|---|---|---|
| 0
    
        olo_lo1 08.11.18✎ 11:21 | 
        Подскажите кто в курсе как это работает, что то затупил с утра
 На конфу поставил Управляемый режим блокировкой На Документ поставил Управляемый Режим управления блокировкой данных При установке нового номера написал свою процедуру в транзакции ставлю ТОЧКУ ОСТАНОВА по идее должна случиться блокировка этого документа Захожу во вторую базу Создаю документ и провожу - все проводит, документ новый выписывает. Подскажите где и что нужно смазать и чем ? | |||
| 1
    
        Numerus Mikhail 08.11.18✎ 11:26 | 
        (0) >> захожу во вторую базу
 ну очевидно в чем | |||
| 2
    
        olo_lo1 08.11.18✎ 11:28 | 
        (1) Я описался, в туже базу но еще раз под тем же пользователем 
 если понимать теорию вопроса - обьект должен заблокироваться. | |||
| 3
    
        el-gamberro 08.11.18✎ 11:30 | 
        А причем тут блокировка?     | |||
| 4
    
        Numerus Mikhail 08.11.18✎ 11:30 | 
        (2) Ну по идее  блокировка устанавливается на твой новый документ, а не на всю таблицу
 Логично, что новый ты создать можешь | |||
| 5
    
        Остап Сулейманович 08.11.18✎ 11:30 | 
        (2) "обьект должен заблокироваться". Так он и заблокирован.
 Новый документ в сеансе "1" и Новый документ в сеансе "2" - это разные объекты. Более того. Пока документ не записан - это вообще не объект. | |||
| 6
    
        olo_lo1 08.11.18✎ 11:32 | 
        (5) Тогда подскажите мне как быть, щас опишу суть проблемы     | |||
| 7
    
        olo_lo1 08.11.18✎ 11:34 | 
        Нумерация сложная, и с префиксами и с суффиксами и корнями.
 Номер присваиваю своим алгоритмом. Контроль уникальности выключен, но должен быть внутри организации, а их несколько, но с разными организациями одинаковые номера могут быть Несколько пользователей делают одновременно документы. Номера к сож задваивают, нужна изоляция в момент присвоения. Как добиться | |||
| 8
    
        RoRu 08.11.18✎ 11:36 | 
        (7) проверять при записи ?     | |||
| 9
    
        Вафель 08.11.18✎ 11:38 | 
        тут блокировку нужно ставить самому програмно.     | |||
| 10
    
        el-gamberro 08.11.18✎ 11:38 | 
        (7) Делай подписку на событие "ПриУстановкеНовогоНомера" и проверяй, устанавливай что надо.     | |||
| 11
    
        el-gamberro 08.11.18✎ 11:39 | 
        (9) Тут никакую блокировку сделать нельзя     | |||
| 12
    
        Остап Сулейманович 08.11.18✎ 11:39 | 
        (7) Классика такова :
 Регистр сведений с последним выданным номером (или со всей последовательностью номеров) на время расчета следующего оно блокируется. Запросили расчет с рабочего места - пытаемся установить блокировку. Получилось - рассчитали номер. Записали. Сняли блокировку. Не получилось - ждем пока не освободиться или отменяем запись. | |||
| 13
    
        el-gamberro 08.11.18✎ 11:39 | 
        Для документа блокировка имеет смысл, только когда 2 пользователя будут пытаться одновременно его поменять.     | |||
| 14
    
        el-gamberro 08.11.18✎ 11:44 | 
        (12) Странный механизм.
 Лучше просто запись номера делать который документ взял. Следующий берет больше и добавляет запись. При записи самого документа удалять запись в РС Нумерации. | |||
| 15
    
        Остап Сулейманович 08.11.18✎ 11:44 | 
        (13) Ну да. Поэтому и уводят блокировки с документа в регистр сведений. Там единственная запись на все документы одного вида.     | |||
| 16
    
        el-gamberro 08.11.18✎ 11:45 | 
        (12) Блокировка в описанном механизме работать не будет.     | |||
| 17
    
        Остап Сулейманович 08.11.18✎ 11:46 | 
        (14) "Следующий берет больше и добавляет запись." А если "следующих" двое или больше?
 (16) Будет. Более того. Работает. | |||
| 18
    
        el-gamberro 08.11.18✎ 11:47 | 
        (17) А да я понял, работать будет. Блокировка на время расчета номера.
 Ну это по сути попытка внедрить механизм из 7.7 | |||
| 19
    
        olo_lo1 08.11.18✎ 11:55 | 
        (17) 
 может глуповатый вопрос задам - а блокировку на кусок выполнения кода нельзя выставить ? | |||
| 20
    
        olo_lo1 08.11.18✎ 12:05 | 
        (7) Остап Сулейманович, правильно ли я понимаю что в этом случае (0) сработает и под вторым пользователем запись документа "подвиснет" . И где можно выставить таймаут на время, колько она будет "ждать"     | |||
| 21
    
        Остап Сулейманович 08.11.18✎ 12:15 | 
        (20) Ничего не подвиснет. Все в ваших руках.
 Пример: Попытка КлючЗаписиРС = ... ЗаблокироватьДанныеДляРедактирования(КлючЗаписиРС); Номер = РассчитатьНовыйНомер(); РазблокироватьДанныеДляРедактирования(КлючЗаписиРС); Исключение ПоказатьПредупреждение(,"Не удалось получить новый номер"); КонецПопытки; | |||
| 22
    
        ptiz 08.11.18✎ 12:19 | 
        (21) Только ничего разблокировать принудительно не следует - само разблокируется по окончании транзакции (кстати, она должна быть начата), а раньше этого разблокировать нельзя.     | |||
| 23
    
        olo_lo1 08.11.18✎ 12:21 | 
        (22) то есть этот код все таки нужно выполнять в транзакции ?
 Как я понимаю ПриУстановкеНовогоНомера уже идет в транзакции, разве нет ? | |||
| 24
    
        Cyberhawk 08.11.18✎ 12:23 | 
        Можно при получении очередного порядкового номера просто записывать новый элемент справочника и брать его код     | |||
| 25
    
        olo_lo1 08.11.18✎ 15:10 | 
        (24) видимо вы не вниклись в проблему. 2 отдельных человека при одновременной записи или при пакетной записи обязательно 2 процесса поставят один и тот же номер, поэтому нужна гарантированная блокировка.     | |||
| 26
    
        youalex 08.11.18✎ 15:20 | 
        (23) 1.ЗаблокироватьДанныеДляРедактирования - работает и без транзакции. 
 2. Скорее да, чем нет. можете сами проверить: ТранзакцияАктивна() | |||
| 27
    
        Cyberhawk 08.11.18✎ 15:25 | 
        (25) Видимо ты баклан     | |||
| 28
    
        bolobol 08.11.18✎ 15:42 | 
        Документ пометили на удаление и снесли его, или заменили номер в нём на номер не из последовательности - образовалась дыра. Как заделывать?
 Поэтому - без разницы, сколько документов получат свой уникальный порядковый номер, но не будут потом записаны - дыры (разрывы в нумерации) появятся и без этого. Формируйте номер при записи нового и будет вам счастье. Второй документ может получить тот же номер, что и недозаписанный первый, но при второй попытке записи - таки получит новый последовательный номер. Если же нужно избегать сообщение пользователю "номер не уникален", то... нужно избегать и все остальные сообщения от системы (дедлок, таймаут, переменная модуля не определена)... | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |