|
Вопрос про оптимистическую блокировку, разрыв шаблона | ☑ | ||
---|---|---|---|---|
0
ШангриЛа
08.06.13
✎
13:37
|
Встретил конфигурацию, где в обработках, выполняющих изменение данных в справочниках и документах, вовсю применяются конструкции:
1. ЗаблокироватьДанныеДляРедактирования(<Ключ>, <ВерсияДанных>, <ИдентификаторФормы>) 2. ОбъектЭкземпляр2 = Справочники.Номенклатура.НайтиПоКоду(1). ПолучитьОбъект(); ОбъектЭкземпляр1.Заблокировать(); В руководстве разработчика написано по этому поводу следующее: "Однако следует учитывать, что сам по себе факт установки оптимистической блокировки не препятствует изменению или удалению объекта в базе данных." Вопрос: допустим, в этот момент времени исполняется другой код, который изменяет данные заблокированные этими конструкциями языка. Код спокойно изменит и запишет данные, наплевав на эти блокировки? |
|||
1
ШангриЛа
08.06.13
✎
13:57
|
ДА, это так.
В одной обработке делаю c точкой останова: &НаКлиенте Процедура Команда1(Команда) Заблокировать(); КонецПроцедуры Процедура Заблокировать() Объект.Реквизит1.ПолучитьОбъект().Заблокировать(); КонецПроцедуры В другой обработке ничто не мешает сделать: Процедура Изменить(Ссылка) Экспорт Ссылка.ПолучитьОбъект().Записать(); КонецПроцедуры |
|||
2
ШангриЛа
08.06.13
✎
13:58
|
Пля, сколько же людей владеет ЛОЖНЫМИ знаниями и делают из других идиотов!
|
|||
3
ШангриЛа
08.06.13
✎
14:00
|
+(2) и при этом, даже руководство разработчика им не указ!
|
|||
4
ШангриЛа
08.06.13
✎
14:32
|
Один чувак блокировал записи такими конструкциями, пытался их интерактивно открыть в другом сеансе, открывающаяся форма сообщала, что данные заблокированы.
И он думал, что заблокировал объекты в БД. Ржака жесткая! |
|||
5
ШангриЛа
08.06.13
✎
16:39
|
Эта конструкция тоже никак не мешает изменить данные из другой обработки или кода, выполняющегося в другом сеансе.
&НаКлиенте Процедура ЗаблокироватьДляРедактирования(Команда) ЗаблокироватьДляРедактированияНаСервере(); КонецПроцедуры Процедура ЗаблокироватьДляРедактированияНаСервере() ЗаблокироватьДанныеДляРедактирования(Объект.Реквизит1,,ЭтаФорма.УникальныйИдентификатор); КонецПроцедуры |
|||
6
ШангриЛа
08.06.13
✎
16:45
|
Про такие блокировки сказано следующее:
Однако следует учитывать, что сам по себе факт установки пессимистической блокировки не препятствует изменению или удалению объекта в базе данных. Вывод: Это блокировки, устанавливаемые для того, что другой ПОЛЬЗОВАТЕЛЬ не мог через другую ФОРМУ поменять объект базы данных. Они никак не относятся и не блокируют объект базы данных от программного изменения из других сеансов. Для этого есть управляемые блокировки (Новый БлокировкаДанных), конструкция запроса "ДляИзменения" и НачатьТранзакцию. |
|||
7
Emilio
08.06.13
✎
16:52
|
(2) А почме ложные данные? если надо программно изменить данные, мы их заблокируем, а на случай если юзер захочет изменить данные сам - мы ему ответим, что бы он шел лесом. вроде все логично или нет?
|
|||
8
ШангриЛа
08.06.13
✎
16:55
|
(7) набуя в обработке данных применять эти конструкции, какой в этом смысл?
Другая такая же обработка, запущенная другим пользователем, спокойно все поменяет параллельно в БД. |
|||
9
ШангриЛа
08.06.13
✎
16:58
|
(7) применять такие вещи имеет смысл только в ситуации, когда необходимо предотвратить интерактивное открытие пользователем объекта БД на редактирование.
Их можно применять и в обработке. Но тогда должна быть конструкция, проверяющая блокировку: Если Объект.Заблокирован() Тогда НеТрогатьДляЗаписи КонецЕсли. Но это просто проверка, не препятствующая никак записи объекта в БД. И таких проверок в конфе нет. |
|||
10
Emilio
08.06.13
✎
17:05
|
(8) ну, с обработкой-то ясно. сама по себе цель конструкции не несет в себе использования в обработках, если в обработке нет кода проверки запущена ли в другом сеансе эта же обработка или может она предназначена в для одного только человека, к примеру обработка перепроведения доков за период админом базы, дабы умные бухи ничего не на крутили, но если в Вашем случае, то корявый мозг предыдущего прогера, если уж даже я понимаю смысл и цель такой блокировки
з.ы. не подумайте, что я туп, просто я еще только учусь одинэситься :) |
|||
11
ШангриЛа
08.06.13
✎
17:08
|
(10) вы все правильно понимаете. Нет смысла их использовать при массовом изменении данных. Для этого есть другие механизмы платформы :)
|
|||
12
ШангриЛа
08.06.13
✎
17:09
|
+(11) особенно, если есть вероятность, что в момент работы обработки данные могут быть изменены из другого кода.
|
|||
13
sanja26
09.06.13
✎
01:53
|
(27) полный бред.
Сегодня целый день в депрессняке читал руководство разработчика и тестил работу этого метода в форме. Этот метод ВСЕГО-ЛИШЬ устанавливает некий флаг, который срабатывает при открытии пользователем формы или просто сидит в БД для того, чтобы его можно было прочитать из кода. Данные в бд он не блокирует и их спокойно можно менять из доугого сеанса программным кодом. ты хоть посмотрел какой у тебя режим используется? |
|||
14
ШангриЛа
09.06.13
✎
02:03
|
(13) тестил на том режиме, на котором конфа в офисе
|
|||
15
ШангриЛа
09.06.13
✎
02:04
|
(13) кури до дыр руководство разработчика, глава 10
|
|||
16
ШангриЛа
09.06.13
✎
02:06
|
+(15) могу тебе конфигурацию прислать, в которой тестировал этот метод. Если сделаешь так, чтобы обработка не смогла изменить заблокированный элемент справочника - отдам тебе все старт-мани и еще 100$ в придачу.
|
|||
17
Reaper_1c
09.06.13
✎
02:10
|
(16) эмо 1сник, ах-ха-ха, прекрати, что ты делаешь?
|
|||
18
sanja26
09.06.13
✎
02:11
|
(16) присылай, завтра гляну
|
|||
19
ШангриЛа
09.06.13
✎
02:17
|
(18) отправил даже описание теста, гляди...
|
|||
20
GROOVY
09.06.13
✎
02:32
|
Продолжайте наблюдения, а вместе с этим почитайте про блокировки в учебниках для начинающих...
ЗЫ: У меня прям неделя насыщена вопросами про блокировки... Казалось бы... |
|||
21
ШангриЛа
09.06.13
✎
02:37
|
(20) :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |