Имя: Пароль:
1C
1С v8
Заблокировать некоторые объекты для изменения, пока открыта форма документа
,
0 Ахмадинежад
 
08.09.11
17:49
То есть юзер заходит в документ - и пока он с ним работает, некоторые другие объекты нужно заблокировать.
Есть какое-нибудь изящное решение, кроме как ч/з/ж в ПриОткрытии потенциально блокируемых объектов проверять наличие какой-нить записи в регистре и в зависимости от этого залочивать или нет форму объекта..

БлокировкаДанных мимо по ходу.
1 mishmeister
 
08.09.11
17:50
Синтаксис:

Заблокировать()
Описание:

Выполняет блокировку объекта от изменения другими режимами или пользователями.

Доступность:

Сервер, толстый клиент, внешнее соединение.


Не катит?
2 Ахмадинежад
 
08.09.11
17:52
Блокировка вроде в пределах транзакции работает и то не долго.. Хотя может я конечно туплю
3 mishmeister
 
08.09.11
17:53
Если верить СП, то можешь получить объект, заблокировать и никто его не тронет. Ограничений никаких нет(В СП)
4 Ахмадинежад
 
08.09.11
17:54
(3)в смысле не через БлокировкаДанных ?
5 mishmeister
 
08.09.11
17:58
Ну элементом блокировки является вся таблица(судя СП:)), ЗАблокировать() блокирует только объект.
6 mishmeister
 
08.09.11
17:59
+(5) Хотя могу врать, попробуйте.
7 Ахмадинежад
 
08.09.11
18:15
попробовал, ПриОткрытии - блокирую, в ПриЗакрытии - проверяю статус - Заблокирован()=Ложь
8 vde69
 
08.09.11
18:21
в запросе "ДляИзменения" ???
9 Ахмадинежад
 
08.09.11
21:01
Никаких запросов нет. Просто нужно заблокировать несколько документов. Метод у ДокументаОбъект Заблокировать() ошибок не выдаёт, но и не блокирует
10 Wingless
 
08.09.11
21:07
У меня это как-то так выглядит:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
   Если параметры.Ключ.Пустая() Тогда
       УдачнаяБлокировка = ЗаблокироватьСпецификацию(объект.Владелец, УникальныйИдентификатор);
       Если не УдачнаяБлокировка Тогда
           Отказ = истина;
       КонецЕсли;    
   КонецЕсли;    
КонецПроцедуры

&НаСервереБезКонтекста
Функция ЗаблокироватьСпецификацию(Спецификация, ид)
   попытка
       ЗаблокироватьДанныеДляРедактирования(Спецификация,, ИД);
       Возврат Истина;
   исключение
           
       ОписаниеОшибки = ОписаниеОшибки();
       Символ = Найти(ОписаниеОшибки, "компьютер");
       Сообщить(ОписаниеОшибки, СтатусСообщения.Важное);
       Возврат Ложь;
   КонецПопытки;    
КонецФункции
11 vde69
 
08.09.11
23:11
ДокументаОбъект.Заблокировать()

не выполняет блокировку в привычном понимании, он выполняется без ошибки только 1 раз, тоесть

если на компе А вызываю Заблокировать() - нормально работает
если потом на компе Б вызываю Заблокировать() - будет ошибка исполнения
12 Ахмадинежад
 
09.09.11
09:16
(11)а в каком смысле он тогда устанавливает блокировку ?
13 Ахмадинежад
 
09.09.11
09:36
и, кстати, даёт заблокировать с другого сеанса тоже..