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

Обход оптимистической блокировки

Обход оптимистической блокировки
Я
   Franchiser
 
01.03.20 - 19:09
Открыто 2 формы документа, один из документов проводится и происходит изменение реквизита другого документа, после этого тот второй документ не записывается по причине оптимистической блокировки.
Если документ не модифицирован то можно просто перечитать форму программно в обработке оповещения. Но если он уже начал модифицироваться то как сделать чтобы конкретный реквизит перечитался, но при этом остальные реквизиты остались без изменений на форме?
   Franchiser
 
1 - 01.03.20 - 19:12
При оптимистической блокировке версия объекта в БД сравнивается с версией в объекте на форме. Как можно получить эту версию и подменить в объекте, чтобы программа думала , что это та же самая версия и не сработала ошибка оптимистической блокировки?
   Franchiser
 
2 - 01.03.20 - 19:17
"Фактически, оптимистическая блокировка представляет собой проверку, которая выполняется перед записью объекта в базу данных. Эта проверка построена на анализе номера версии объекта, хранящейся в базе данных и номера версии, помещенной в память компьютера в момент считывания данных из информационной базы. Если при записи объекта номера его версий отличаются, то будет выдано предупреждение о том, что версия объекта изменилась или он был удален, то есть сработает оптимистическая блокировка."
   acht
 
3 - 01.03.20 - 19:18
(1) Никак. От этого, собственно, специально и защищаются.
Если у тебя такая схема работы, то это обработка + регистр сведений, а не документ.

Ну или при чтении на сервере попробуй перебить прочитанные значение в объекте данными, ранее сохраненными в форме.
   Franchiser
 
4 - 01.03.20 - 19:20
(3) да, надо было делать регистр, но уже поздно
   RomanYS
 
5 - 01.03.20 - 19:21
>>  Но если он уже начал модифицироваться то как сделать чтобы конкретный реквизит перечитался, но при этом остальные реквизиты остались без изменений на форме?
Перечитай объект целиком, а потом заново внеси нужные изменения, можно программно.
   Franchiser
 
6 - 01.03.20 - 19:21
(3) то есть вариант только запомнить данные формы в переменную, потом перечитать форму и обновить данные формы из ранее сохранённой переменной с подменой  нужного реквизита?
   vi0
 
7 - 01.03.20 - 19:22
(4) сейчас костылей наделаешь потом еще хуже будет
   Franchiser
 
8 - 01.03.20 - 19:23
(7) да в принципе и так хорошо, но мне не нравится что это сообщение может появляться
   acht
 
9 - 01.03.20 - 19:23
(4) Ну попробуй при создании и при изменении складывать данные в спецреквизиты формы. Потом при "записи" перечитывай, перепихивай обратно и сохраняй еще раз. Там, правда, может возникнуть еще какой-нибудь геморрой с повторным срабатыванием обработчиков...
   Franchiser
 
10 - 01.03.20 - 19:24
В типовой смотрел: делают регистр Статусы документов, мне в принципе нужно что то похожее
   vi0
 
11 - 01.03.20 - 19:25
(8) какое сообщение?
   Franchiser
 
12 - 01.03.20 - 19:26
(9) зачем так. Я думал что то универсальное есть или данные формы скинуть в хранилище или обойти все реквизиты формы и объекта и скинуть их в массив потом восстановить обратно...
   vi0
 
13 - 01.03.20 - 19:27
(10) все правильно что у тебя возникает ошибка, у документа поменялся статус, а пользователь продолжает проводить его даже не зная что статус поменялся
   Franchiser
 
14 - 01.03.20 - 19:27
(11) данные изменены другим сеансом или подьзователем
   vi0
 
15 - 01.03.20 - 19:27
(12) это всё жесткие костыли, не делай так
   Franchiser
 
16 - 01.03.20 - 19:29
Ну все таки хочется для пользователя более красивое сообщение
   Franchiser
 
17 - 01.03.20 - 19:34
(15) дело в том что эти реквизиты уже были до меня, и по ТЗ нужно их так менять
   vi0
 
18 - 01.03.20 - 19:40
(17) обсуди с тем кто писал тз
что он предполагал на случай одновременного програмного и ручного изменения, раз схема предполагает такой случай
может быть наложить пессимимтическую блокировку
   vi0
 
19 - 01.03.20 - 19:40
(8) "мне не нравится что это сообщение может появляться"
это ты сам решил так улучшить? 
может быть всех и так устроит, а ты голову ломаешь

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