Имя: Пароль:
1C
1C 7.7
v7: Банальный вопрос про блокировку
0 Yakunin_Yura
 
08.04.14
18:50
Скажите, пожалуйста, какую именно блокировку делает метод справочника Блокировка(<ВклВыкл>)?
Я новичок в 1С, плиз не ругайте меня!
1 Yakunin_Yura
 
08.04.14
18:51
да и база программирования у меня невысокая..
2 Yakunin_Yura
 
08.04.14
18:57
Речь идет о блокировке объекта справочник?
3 SleepyHead
 
гуру
08.04.14
19:37
Сколько ни пытался пользоваться этим методом, по моему, ни хрена он не работает. Может так пытался.
4 Злопчинский
 
08.04.14
20:04
При правильном применении блокирует запись справочника, типа как бы он открыть в форме на редактирование...
5 Злопчинский
 
08.04.14
20:08
на доке - у меня вроде нормально работал.
.
    ДокП.ОбратныйПорядок(1);
    ДокП.ВыбратьДокументы(ТекущаяДата()-10,ТекущаяДата());
    Пока ДокП.ПолучитьДокумент()=1
    Цикл
        
        Если ДокП.ПометкаУдаления()=1
        Тогда
            Продолжить;
        КонецЕсли;
        
        Если ДокП.КоличествоСтрок()=ДокП.Итог("Выполнен")
        Тогда
            Продолжить;
        КонецЕсли;

        Если ДокП.Блокировка(1) = 0
        Тогда //заблокировано другими
            глТрассировкаВыполнения("пул заданий: заблокирован: "+ДокП,,флПоказатьТрассировку);
            Продолжить;
        КонецЕсли;    
        
        ДокП.ВыгрузитьТабличнуюЧасть(ТЗзадание);
        ТЗзадание.ПолучитьСтрокуПоНомеру(1);
        Прервать;
        
    КонецЦикла;
6 Torquader
 
08.04.14
20:10
(3) Он блокирует объект, то есть открыть этот объект на изменение будет нельзя. Соответственно, можно и проверить, открыт ли кем-то этот объект - если блокировка вернула 0, то заблокировать не удалось - значит - кто-то уже заблокировал или открыл.
P.S. если разрушается переменная, в которой хранится заблокированный объект, то блокировка снимается автоматически.
7 Злопчинский
 
08.04.14
20:12
..вдогонку к (6) - см.код в (5) под комментом //заблокировано другим
- берем очередной объект, пытаемся наложить на него блокировку - если возвращает 0 - объект заблокирован уже, его не берем пропускаем - если возвращает 1 - блокировка успешно наложилась, идем дальше...
8 Yakunin_Yura
 
10.04.14
17:49
(4) (6)
Спасибо!)
9 AlteZ
 
10.04.14
19:16
а есть аналог в v8?
10 Злопчинский
 
10.04.14
21:32
(9) выкинь бяку! ;-)
11 Torquader
 
10.04.14
23:52
Там даже две функции:

Заблокирован (IsLocked)
Синтаксис:

Заблокирован()
Возвращаемое значение:

Тип: Булево.
Истина - элемент заблокирован; Ложь - в противном случае.
Описание:

Определяет, заблокирован ли элемент данным объектом.

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

Сервер, толстый клиент, внешнее соединение.
Примечание:

Следует учитывать, что этот метод используется для проверки блокировки объекта базы данных конкретным объектом встроенного языка. Он не может быть использован для проверки, заблокирован ли вообще объект базы данных, например, другими пользователями.

И

Заблокировать (Lock)
Синтаксис:

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

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

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

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

Попытка
    Объект.Заблокировать();
Исключение
    Предупреждение(НСтр("ru = 'Не удалось заблокировать объект';"
           + " en = 'Can't lock the object'")
           + " '" + Объект + '"!
           |"+ ОписаниеОшибки());
КонецПопытки;

Но, к сожалению, Заблокирован() проверяет только факт блокировки нами объекта (то есть то, что мы выполнили заблокировать).
И, неуспех в блокировке нужно ловить исключением, а не результатом выполнения функции.