Имя: Пароль:
1C
 
Как правильно установить пессимистическую блокировку на документ?
,
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) ну молодца )
Основная теорема систематики: Новые системы плодят новые проблемы.