|
Заблокировать некоторые объекты для изменения, пока открыта форма документа |
☑ |
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
|
и, кстати, даёт заблокировать с другого сеанса тоже..
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший