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

Как правильно установить пессимистическую блокировку на документ?

Как правильно установить пессимистическую блокировку на документ?
Я
   rowvg
 
13.04.21 - 16:09
Есть документ, и управляемая форма этого документа. При создании на сервере управляемой формы я применяю метод ЗаблокироватьДанныеФормыДляРедактирования(). Далее у меня есть web - сервис, который по моей задумке вернет пользователю данные документа только в том случае, если ни в какой сессии не открыта его форма.

Для этого я хочу воспользоваться методом ЗаблокироватьДанныеДляРедактирования(). Но мне нужно в модуле web сервиса узнать есть ли открытые формы данного документа и получить их уникальные идентификаторы.

Вот как это сделать я не понимаю. Подскажите, пожалуйста.
   acht
 
1 - 13.04.21 - 16:22
(0) Как планируешь учитывать работу обработок, меняющих документы и ничего не знающие про твои сервисы и формы? Обмены данными, например, подключения по COM?
   rowvg
 
2 - 13.04.21 - 16:26
(1) Это моя конфигурация, и там нет ни обработок, ни COM соединений, изменяющих интересующий меня документ.
   rowvg
 
3 - 13.04.21 - 16:29
2+ У меня есть документ, с которым работают пользователи стандартно, и внешняя программа, которая работает с этим документом через web сервисы. Я хочу чтобы при этом не было проблемы потерянного обновления.
   rowvg
 
4 - 13.04.21 - 16:32
3+ То есть если два пользователя одновременно откроют документ в 1С и сторонней программе и внесут разные данные в него, то сохранится версия того пользователя, который записал документ последним.
   rowvg
 
5 - 13.04.21 - 16:35
ЗаблокироватьДанныеДляРедактирования() без идентификатора формы работает, но иногда блокировка слетает и при открытой форме документа. И я не понимаю почему...
   rowvg
 
6 - 13.04.21 - 16:40
Такое ощущение что ЗаблокироватьДанныеФормыДляРедактирования() держит блокировку несколько минут, а затем снимает ее.
   fisher
 
7 - 13.04.21 - 16:41
(3) Тогда ничего этого не надо. Просто в веб-сервисе по-старинке пробуй в Попытке/Исключении сделать Объект.Заблокировать();
   PuhUfa
 
8 - 13.04.21 - 16:42
(0) Документ у всех закрыт... web сервис отдает данные документа на редактирование куда то там... там пользователь редактирует... редактирует... и подтупливает.... В это время, в 1С, этот документ открывает другой пользователь, что то меняет, записывает, закрывает. После чего пользователь в web наконец доделывает свои дела и наживает записать. Прощай изменения сделанные пользователем в 1С?
   Kassern
 
9 - 13.04.21 - 16:42
(6) создай свой регистр в который пиши данные по блокировке, только учти, если вдруг сеанс неожиданно завершится, то нужно как то предусмотреть очистку записи)
   vicof
 
10 - 13.04.21 - 16:45
А я бы не давал редактировать один и тот же документ в двух системах.
   fisher
 
11 - 13.04.21 - 16:45
(3) Или ты непременно хочешь как в 7.7, чтобы дефолтовое открытие формы было монопольным? Ну и нафига?
   rowvg
 
12 - 13.04.21 - 16:50
(7) Я так и делаю
        Попытка
            ЗаблокироватьДанныеДляРедактирования(ссыДокумент, ,);
        Исключение
            ОписаниеПричиныКраткое = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());    
            ВызватьИсключение(ОписаниеПричиныКраткое);
        КонецПопытки;
И все работает несколько минут, а потом блокировка слетает, и сервис получает доступ к данным документа. Почему она слетает не могу понять...
   rozer76
 
13 - 13.04.21 - 16:50
(5) в ПриСозданииНаСервере()

Попытка
        ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка,,ЭтаФорма.УникальныйИдентификатор);
    Исключение
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Документ редактируется другим пользователем");
        ЭтаФорма.ТолькоПросмотр = Истина;
    КонецПопытки;

При закрытии формы блокировка автоматически снимется. Но если не снимается - используй РазблокироватьДанныеДляРедактирования  

в веб-сервисе делай как в (7) или также через ЗаблокироватьДанныеДляРедактирования
   rozer76
 
14 - 13.04.21 - 16:51
(12) в форме дока делаешь ? Ну так СП почитай и делай ЗаблокироватьДанныеДляРедактирования(ссыДокумент,,ЭтаФорма.УникальныйИдентификатор);
   rowvg
 
15 - 13.04.21 - 16:55
Поменял в модуле web сервиса на 

        Попытка
            объОбразец.Заблокировать();
            //ЗаблокироватьДанныеДляРедактирования(ссыОбразец, ,);

        Исключение
            ОписаниеПричины = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());    
            ОписаниеПричиныКраткое = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());    
            ВызватьИсключение(ОписаниеПричиныКраткое);
        КонецПопытки;

Все рано блокировка держится минута, а потом слетает.
   rowvg
 
16 - 13.04.21 - 16:56
в форме дока вот так

        Попытка
            ЗаблокироватьДанныеФормыДляРедактирования();    
        Исключение
            ОписаниеПричиныКраткое = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());    
            ВызватьИсключение(ОписаниеПричиныКраткое);
        КонецПопытки;
   rowvg
 
17 - 13.04.21 - 16:57
У метода ЗаблокироватьДанныеФормыДляРедактирования() нет параметров
   rozer76
 
18 - 13.04.21 - 16:58
(16) а если поменять на ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка,,ЭтаФорма.УникальныйИдентификатор) ? Хотя ЗаблокироватьДанныеФормыДляРедактирования() тоже должен работать НО только если основной реквизит формы этот док. Это же так ?
   rozer76
 
19 - 13.04.21 - 16:59
(17) ну, да, разумеется - они есть только у  ЗаблокироватьДанныеДляРедактирования
   rowvg
 
20 - 13.04.21 - 17:03
(14)
Спасибо большое. Сделал так
        Попытка
            //ЗаблокироватьДанныеФормыДляРедактирования();    

            ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка,,ЭтаФорма.УникальныйИдентификатор)
        Исключение
            ОписаниеПричиныКраткое = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());    
            ВызватьИсключение(ОписаниеПричиныКраткое);
        КонецПопытки;

и блокировка устойчиво держится. Снимается, правда, не сразу, но это ничего, я ее сам сниму.

Спасибо еще раз большое.
   rozer76
 
21 - 13.04.21 - 17:04
(16) кста зачем ЗаблокироватьДанныеФормыДляРедактирования  в попытке - он не вызывает исключения. Вообще используй ЗаблокироватьДанныеДляРедактирования с Идентификатором формы и будет тебе счастье ) А про ЗаблокироватьДанныеФормыДляРедактирования забудь как страшный сон )
   rozer76
 
22 - 13.04.21 - 17:04
(20) ну молодца )


Список тем форума
 
Компьютер — устройство разработанное для ускорения и автоматизации человеческих ошибок.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.