Вход | Регистрация



1С управление блокировкой

1С управление блокировкой
Я
   olo_lo1
 
08.11.18 - 11:21
Подскажите кто в курсе как это работает, что то затупил с утра
На конфу поставил Управляемый режим блокировкой

На Документ поставил Управляемый Режим управления блокировкой данных 

При установке нового номера написал свою процедуру в транзакции
ставлю ТОЧКУ ОСТАНОВА
по идее должна случиться блокировка этого документа

Захожу во вторую базу
Создаю документ и провожу - все проводит, документ новый выписывает.

Подскажите где и что нужно смазать и чем ?
 
 
   Numerus Mikhail
 
1 - 08.11.18 - 11:26
(0) >> захожу во вторую базу
ну очевидно в чем
   olo_lo1
 
2 - 08.11.18 - 11:28
(1) Я описался, в туже базу но еще раз под тем же пользователем
если понимать теорию вопроса - обьект должен заблокироваться.
   el-gamberro
 
3 - 08.11.18 - 11:30
А причем тут блокировка?
   Numerus Mikhail
 
4 - 08.11.18 - 11:30
(2) Ну по идее  блокировка устанавливается на твой новый документ, а не на всю таблицу

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


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