|
Как правильно установить пессимистическую блокировку на документ? | ☑ | ||
---|---|---|---|---|
0
rowvg
naïve
13.04.21
✎
16:09
|
Есть документ, и управляемая форма этого документа. При создании на сервере управляемой формы я применяю метод ЗаблокироватьДанныеФормыДляРедактирования(). Далее у меня есть web - сервис, который по моей задумке вернет пользователю данные документа только в том случае, если ни в какой сессии не открыта его форма.
Для этого я хочу воспользоваться методом ЗаблокироватьДанныеДляРедактирования(). Но мне нужно в модуле web сервиса узнать есть ли открытые формы данного документа и получить их уникальные идентификаторы. Вот как это сделать я не понимаю. Подскажите, пожалуйста. |
|||
1
acht
13.04.21
✎
16:22
|
(0) Как планируешь учитывать работу обработок, меняющих документы и ничего не знающие про твои сервисы и формы? Обмены данными, например, подключения по COM?
|
|||
2
rowvg
naïve
13.04.21
✎
16:26
|
(1) Это моя конфигурация, и там нет ни обработок, ни COM соединений, изменяющих интересующий меня документ.
|
|||
3
rowvg
naïve
13.04.21
✎
16:29
|
2+ У меня есть документ, с которым работают пользователи стандартно, и внешняя программа, которая работает с этим документом через web сервисы. Я хочу чтобы при этом не было проблемы потерянного обновления.
|
|||
4
rowvg
naïve
13.04.21
✎
16:32
|
3+ То есть если два пользователя одновременно откроют документ в 1С и сторонней программе и внесут разные данные в него, то сохранится версия того пользователя, который записал документ последним.
|
|||
5
rowvg
naïve
13.04.21
✎
16:35
|
ЗаблокироватьДанныеДляРедактирования() без идентификатора формы работает, но иногда блокировка слетает и при открытой форме документа. И я не понимаю почему...
|
|||
6
rowvg
naïve
13.04.21
✎
16:40
|
Такое ощущение что ЗаблокироватьДанныеФормыДляРедактирования() держит блокировку несколько минут, а затем снимает ее.
|
|||
7
fisher
13.04.21
✎
16:41
|
(3) Тогда ничего этого не надо. Просто в веб-сервисе по-старинке пробуй в Попытке/Исключении сделать Объект.Заблокировать();
|
|||
8
PuhUfa
13.04.21
✎
16:42
|
(0) Документ у всех закрыт... web сервис отдает данные документа на редактирование куда то там... там пользователь редактирует... редактирует... и подтупливает.... В это время, в 1С, этот документ открывает другой пользователь, что то меняет, записывает, закрывает. После чего пользователь в web наконец доделывает свои дела и наживает записать. Прощай изменения сделанные пользователем в 1С?
|
|||
9
Kassern
13.04.21
✎
16:42
|
(6) создай свой регистр в который пиши данные по блокировке, только учти, если вдруг сеанс неожиданно завершится, то нужно как то предусмотреть очистку записи)
|
|||
10
vicof
13.04.21
✎
16:45
|
А я бы не давал редактировать один и тот же документ в двух системах.
|
|||
11
fisher
13.04.21
✎
16:45
|
(3) Или ты непременно хочешь как в 7.7, чтобы дефолтовое открытие формы было монопольным? Ну и нафига?
|
|||
12
rowvg
naïve
13.04.21
✎
16:50
|
(7) Я так и делаю
Попытка ЗаблокироватьДанныеДляРедактирования(ссыДокумент, ,); Исключение ОписаниеПричиныКраткое = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); ВызватьИсключение(ОписаниеПричиныКраткое); КонецПопытки; И все работает несколько минут, а потом блокировка слетает, и сервис получает доступ к данным документа. Почему она слетает не могу понять... |
|||
13
rozer76
13.04.21
✎
16:50
|
(5) в ПриСозданииНаСервере()
Попытка ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка,,ЭтаФорма.УникальныйИдентификатор); Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Документ редактируется другим пользователем"); ЭтаФорма.ТолькоПросмотр = Истина; КонецПопытки; При закрытии формы блокировка автоматически снимется. Но если не снимается - используй РазблокироватьДанныеДляРедактирования в веб-сервисе делай как в (7) или также через ЗаблокироватьДанныеДляРедактирования |
|||
14
rozer76
13.04.21
✎
16:51
|
(12) в форме дока делаешь ? Ну так СП почитай и делай ЗаблокироватьДанныеДляРедактирования(ссыДокумент,,ЭтаФорма.УникальныйИдентификатор);
|
|||
15
rowvg
naïve
13.04.21
✎
16:55
|
Поменял в модуле web сервиса на
Попытка объОбразец.Заблокировать(); //ЗаблокироватьДанныеДляРедактирования(ссыОбразец, ,); Исключение ОписаниеПричины = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ОписаниеПричиныКраткое = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); ВызватьИсключение(ОписаниеПричиныКраткое); КонецПопытки; Все рано блокировка держится минута, а потом слетает. |
|||
16
rowvg
naïve
13.04.21
✎
16:56
|
в форме дока вот так
Попытка ЗаблокироватьДанныеФормыДляРедактирования(); Исключение ОписаниеПричиныКраткое = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); ВызватьИсключение(ОписаниеПричиныКраткое); КонецПопытки; |
|||
17
rowvg
naïve
13.04.21
✎
16:57
|
У метода ЗаблокироватьДанныеФормыДляРедактирования() нет параметров
|
|||
18
rozer76
13.04.21
✎
16:58
|
(16) а если поменять на ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка,,ЭтаФорма.УникальныйИдентификатор) ? Хотя ЗаблокироватьДанныеФормыДляРедактирования() тоже должен работать НО только если основной реквизит формы этот док. Это же так ?
|
|||
19
rozer76
13.04.21
✎
16:59
|
(17) ну, да, разумеется - они есть только у ЗаблокироватьДанныеДляРедактирования
|
|||
20
rowvg
naïve
13.04.21
✎
17:03
|
(14)
Спасибо большое. Сделал так Попытка //ЗаблокироватьДанныеФормыДляРедактирования(); ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка,,ЭтаФорма.УникальныйИдентификатор) Исключение ОписаниеПричиныКраткое = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); ВызватьИсключение(ОписаниеПричиныКраткое); КонецПопытки; и блокировка устойчиво держится. Снимается, правда, не сразу, но это ничего, я ее сам сниму. Спасибо еще раз большое. |
|||
21
rozer76
13.04.21
✎
17:04
|
(16) кста зачем ЗаблокироватьДанныеФормыДляРедактирования в попытке - он не вызывает исключения. Вообще используй ЗаблокироватьДанныеДляРедактирования с Идентификатором формы и будет тебе счастье ) А про ЗаблокироватьДанныеФормыДляРедактирования забудь как страшный сон )
|
|||
22
rozer76
13.04.21
✎
17:04
|
(20) ну молодца )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |