Имя: Пароль:
1C
 
Необходимо заблокировать документ.
0 Snikers_OLD
 
20.04.10
18:36
Доброго дня.
Ситуация: есть документ у документа есть реквизит "ДокументОснование". Необходимо заблокировать на изменение объект "ДокументОснование". Делаю так

Если  ЗначениеЗаполнено(ДокОснование) Тогда
       ДокОснованиеОбъект = ЭтотОбъект.ДокументОснование.ПолучитьОбъект();
       Попытка
           ДокОснованиеОбъект.Заблокировать();        
       Исключение
             Сообщить(ОписаниеОшибки());
       КонецПопытки;            
   КонецЕсли;

И ничего оно не блокирует, т.е. я могу зайти в этот докумен и изменить его. Чтоя делаю не так?

И ничего оно не блокирует. Что я делаю не так?
1 Шапокляк
 
20.04.10
18:38
А если при открытии документа, напротив, проверять, введены ли на его основании другие документы и, если таковые имеются, окрывать только на просмотр? А то ведь вы пытаетесь блокировать документ только если подчиненный открыт, а это не есть гут.
2 Злобный Йожег
 
20.04.10
18:43
Права лучше настрой соответствующим образом. Так будет грамотнее всего. Или так

В форме документа-основания:

Процедура ПриОткрытии()
Если Не ЭтоНовый() Тогда
Запрос = Новый Запрос("ВЫБРАТЬ
|Ссылка
|Документ.ТвойДок
|ГДЕ
|ДокументОснование = &ЭтотДок");
Запрос.УстановитьПараметр("ЭтотДок", Ссылка);
Результат = Запрос.Выполнить();
ЭтаФорма.ТолькоПросмотр = НЕ Результат.Пустой();
КонецЕсли;
КонецПроцедуры
3 73
 
20.04.10
18:46
(0) А где делаешь? Если ДокОснованиеОбъект прекратит свое существование - прекратится и блокировка.
4 Snikers_OLD
 
20.04.10
18:47
(1)(2) таково требование, только когда открыть подчиненный блокировать основание
этого нельзя сделать?
5 Serg_1960
 
20.04.10
18:48
(имхо) Заблокировать() и Заблокирован() - рудименты 1С. Как апендицит у человека - он вроде бы есть, но нужен ли он? :)
6 vde69
 
20.04.10
18:51
вот здесь блокируется элемент справочника и на другой машине определяется наличие блокировки, работает точно :)

http://infostart.ru/public/18951/
7 Snikers_OLD
 
20.04.10
18:53
(5) вопрос почему оно у меня не работает

Я вообще наверно слабо понимаю этот метод (Заблокировать()). Он блокирует только для изменения на другой машине?
8 Snikers_OLD
 
20.04.10
18:55
Я себе представляю работу этого метода так. Как только объект заблокирован его нельзя интерактивно изменять из под любых учетных занисей и на любых машинах
9 kyvv
 
20.04.10
19:11
(7)Бывает. Некоторые КД, СКД за день-два осваивают, про язык простецкий 1с уж и  не говорю. Другим - не дано. Со временем может и заработает.
10 AndreyFAN
 
20.04.10
19:14
11 kyvv
 
20.04.10
19:24
(+9) ДокОснованиеОбъект - это действительно объект?
12 Snikers_OLD
 
20.04.10
20:02
(9)вроде да ДокОснованиеОбъект = ЭтотОбъект.ДокументОснование.ПолучитьОбъект()
13 vde69
 
20.04.10
20:20
блокировка

       ТекущийИгрокОбьект = ТекущийИгрокОбьект.ПолучитьОбъект();
       ТекущийИгрокОбьект.Заблокировать();


проверка блокировки

Функция ПолучитьМассивАктивныхИгроков() Экспорт
   // формируем список возможного выбора
   Запрос = Новый Запрос("ВЫБРАТЬ
                         |    Игроки.Ссылка
                         |ИЗ
                         |    Справочник.Игроки КАК Игроки
                         |ГДЕ
                         |    Игроки.Ссылка <> &ТекущийИгрок");
                         
   Запрос.УстановитьПараметр("ТекущийИгрок", ТекущийИгрокОбьект.Ссылка);
   Массив = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
   
   е = Массив.Количество();
   Пока е > 0 Цикл
       Объект = Массив[е-1].ПолучитьОбъект();
       попытка
           Объект.Заблокировать();
           Массив.Удалить(е-1);
       Исключение
       КонецПопытки;
       Объект = "";
       е = е - 1;
   КонецЦикла;
   
   Возврат Массив;
КонецФункции
14 vde69
 
20.04.10
20:20
(13)+

обязательно описать

Перем ТекущийИгрокОбьект Экспорт;
15 Topol-M
 
20.04.10
21:29
А как ты проверяешь что объект не заблокирован? Заблокированный объект система тебе даст открыть, но при попытке сохранить изменения откажет, скажет что заблокирован.
16 vde69
 
20.04.10
21:51
(15) заблокированый обьект нельзя повторно заблокировать