|
Блокировка объекта при открытии формы | ☑ | ||
---|---|---|---|---|
0
Ayvengo
03.04.12
✎
14:20
|
Думаю, что кто-то встречался с такой проблемой: пользователь открывает карточку номенклатуры, вносит какие-то изменения, нажимает на кнопку сохранить/записать и видит сообщение:
шибка блокировки объекта. Объект уже заблокирован или объект уже был изменен, нужно перечитать/обновить форму. Появилась идея избежать этого и не дать пользователю внести какие-то изменения, если у кого-то этот объект уже заблокирован. Опять же, мне не хочется вызывать эту процедуру при открытии/при создании на сервере формы. Хочется сделать какой-то уникальный инструмент, но я нарвался на одну проблему ... Что бы заблокировать объект и я мог в нем, что-то делать, нужно указать уникальный идентификатор самой формы, до её открытия. На данный момент делаю следующим образом: Создал подписку на событие "ОбработкаПолученияФормы", в процедуре я вызываю процедуру блокировки Процедура ЗаблокированОбъект(Ключ, УИД) Если ЗначениеЗаполнено(Ключ) Тогда Попытка ЗаблокироватьДанныеДляРедактирования(Ключ,,УИД); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); ТекстОшибки = ИнформацияОбОшибке.Причина.Описание; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = ТекстОшибки + " Доступен только просмотр."; Сообщение.Сообщить(); КонецПопытки; КонецЕсли; КонецПроцедуры Как можно получить УникальныйИдентификатор формы в подписке ОбработкаПолученияФормы? Может быть кто-то решал эту проблему более интересным способом? :) |
|||
1
Дикообразко
03.04.12
✎
14:24
|
т.е. ты хочешь сделать так как было в 77 что ли?
|
|||
2
Serg_1960
03.04.12
✎
14:28
|
(0) Что-то ты не с того конца взялся за решение проблемы. Анализировал причину появления этого сообщения?
PS: желательно озвучить версии конфы и платформы. |
|||
3
Serg_1960
03.04.12
✎
14:31
|
Имхо: такого рода ошибки возникают при использовании конструкции типа "Объект.ОбменДанными.Загрузка = Истина". Проведении обмена данными во время работы пользователей, например...
|
|||
4
Maxus43
03.04.12
✎
14:32
|
скорее 2 юзера просто одновременно открыли один и тот же элемент, тут срабатывает принцип - кто первый записал того и тапки
|
|||
5
Feanor
03.04.12
✎
14:36
|
(0) чво-то у меня нет такого события в подписках. мб это в последних версиях платформы?
|
|||
6
Ayvengo
03.04.12
✎
14:37
|
(5) 8.2.13.301 платформа. Хм, кажется я что-то лишнее делаю. Это уже и так без меня работает :)
|
|||
7
Ayvengo
03.04.12
✎
14:38
|
+(6) при чем блокировка происходит в момент первого изменения.
|
|||
8
Kashemir
03.04.12
✎
14:38
|
БлокировкаДанных
Предназначен для явной блокировки данных от чтения или изменения другими сессиями. |
|||
9
Feanor
03.04.12
✎
14:39
|
(6) странно, у меня 8.2.14, а объект для подписки - СправочникОбъект?
|
|||
10
Ayvengo
03.04.12
✎
14:39
|
(9) простите, 8.2.15.301
|
|||
11
Feanor
03.04.12
✎
14:40
|
(10) понятнО)
|
|||
12
Ayvengo
03.04.12
✎
14:40
|
(9) объект, справочник менеджер
|
|||
13
Feanor
03.04.12
✎
14:40
|
(12) а там нет события при создании на сервере?
|
|||
14
Ayvengo
03.04.12
✎
14:41
|
(13) к сожалению, нет :(
|
|||
15
simol
03.04.12
✎
14:42
|
(0)Да вы батенька поди где-то номенклатуру записываете не интерактивно. Я бы с этим разбирался бы.
|
|||
16
Feanor
03.04.12
✎
14:44
|
"Хм, кажется я что-то лишнее делаю. Это уже и так без меня работает" - т.е. автоматом блокируется?
|
|||
17
Ayvengo
03.04.12
✎
14:47
|
(16) да, все отлично работает. Это пережитки прошлого .. видимо осадок остался ... дума "ЩА ТУТ ВСЕ ПОПРАВЛЮ, СДЕЛАЮ КАК НАДО" :)
|
|||
18
Feanor
03.04.12
✎
14:55
|
(17) видимо, это тоже фишка 15-ой платформы, в 14-ой автоматом не блокируется вроде
|
|||
19
Ayvengo
03.04.12
✎
14:57
|
(18) попробуй открыть 2 1Ски и одну и туже карточку номенклатуры, потом попробуй внести изменения в 1ой 1Ске и потом во 2й, заодно и узнаем :)
|
|||
20
Feanor
03.04.12
✎
15:01
|
(19) "Данные были изменены или удалены другим пользователем", конфа не типовая.
|
|||
21
Ayvengo
03.04.12
✎
15:03
|
(20) у меня тоже не типовая. ты не записывай объект, просто открой, что-то внеси в него. и, если даже записал, он тебе дает внести изменения или сразу пишет ошибку, что данные были изменены?
|
|||
22
Feanor
03.04.12
✎
15:04
|
(21) открыл в двух разных сеансах один и тот же объект, в первом изменил и записал. во втором пытаюсь что-то изменить - сразу ругается.
|
|||
23
kosts
03.04.12
✎
15:05
|
(0) Можно в "ПриОткрытии" попробовать
ЭтотОбъект.Заблокировать(); |
|||
24
Ayvengo
03.04.12
✎
15:06
|
(23) идея была в том, что бы не нужно было делать это в каждом справочнике, документе. Но в 8.2.15.301 все работает и без вмешательства.
|
|||
25
GROOVY
03.04.12
✎
15:37
|
Коллеги, вы про оптимистические и пессимистичные блокировки объектов? Во всех версиях 8.2 по дефолту работает оптимистичная.
Из ИТС: Для объектов обеспечивается оптимистическая блокировка. То есть объект не может быть записан, если он был изменен в базе данных после считывания. Этот механизм обеспечивает логическую целостность изменения объектов. Каждый, кто меняет объект, может быть уверен, что его изменения не "затрут" изменений сделанных другими пользователями (сессиями) или другими объектами в этой же сессии. Такая блокировка не препятствует изменению объекта другими сессиями или этой сессией. Однако если с момента считывания объекта и до попытки его записи объект был изменен в базе данных, то запись не будет выполнена. Кроме того, существует механизм пессимистической блокировки, который запрещает изменения другими сессиями или этой сессией, до снятия блокировки этим объектом встроенного языка. Данный механизм необходимо включать в явном виде методом Заблокировать(). В основном он предназначен для блокировки объектов, редактируемых в форме. Расширение формы элемента справочника автоматически включает блокировку, чтобы пользователь был уверен что, начав редактировать объект, он сможет его записать. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |