Имя: Пароль:
1C
1С v8
Получение блокировок кластера от агента сервера.
0 ksv87
 
04.12.14
10:29
Добрый день!
Пытаюсь через V83.COMConnector подключится к агенту сервера, получить кластер и получить блокировки объектов этого кластера.

Все отрабатывает, но Блокировк.Object всегда возвращает - пустую ссылку (00000000-0000-0000-0000-000000000000).

в чем ошибка?

&НаСервере
Процедура ПолучитьБлокировкиКластераНаСервере()
    
    Попытка
        
        Сообщить("Создание COM объекта");
        Соединитель = Новый COMObject("V83.COMConnector");
        
        Сообщить("Подключение к агенту сервера");
        СоединениеСАгентом = Соединитель.ConnectAgent("192.168.0.1");
        
        Сообщить("Получение списка кластеров сервера");
        МассивКластеров = СоединениеСАгентом.GetClusters().Выгрузить();
        
        СчетчикМассиваКластеров = МассивКластеров.Количество();
        i = 0;
        Пока i < СчетчикМассиваКластеров Цикл
            Сообщить("Найден кластер: """ + МассивКластеров[i].ClusterName + """");
            i = i + 1;
        КонецЦикла;
        
        Кластер = МассивКластеров[0];
        
        Сообщить("Авторизация");
        СоединениеСАгентом.Authenticate(Кластер, "", "");
        
        Сообщить("Получение блокировок кластера");
        COMSafeArrayБлокировок = СоединениеСАгентом.GetLocks(Кластер);
        
        МассивБлокировок = COMSafeArrayБлокировок.Выгрузить();
        
        i = 0;
        count = МассивБлокировок.Количество();
        
        НайденаБлокировкаОбъектов = ложь;
        
        Пока i < count Цикл
            
            Если НЕ МассивБлокировок[i].Session = Неопределено Тогда

                Сообщить("----------------------------------");
                Сообщить(МассивБлокировок[i].Session.UserName);
                Сообщить(МассивБлокировок[i].LockedAt);
                Сообщить(МассивБлокировок[i].LockDescr);
                Сообщить(МассивБлокировок[i].Object);
                
                НайденаБлокировкаОбъектов = истина;

            КонецЕсли;
            
            i = i + 1;
            
        КонецЦикла;
        
        Если НЕ НайденаБлокировкаОбъектов Тогда Сообщить("Блокировок объектов не обнаружено") КонецЕсли;
        
        Сообщить("Готово");
        
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;        
    
КонецПроцедуры
1 ksv87
 
04.12.14
10:30
Блокировка (IObjectLock)
Свойства:

Connection (Connection)
LockDescr (LockDescr)
LockedAt (LockedAt)
Object (Object)
Session (Session)

Описание:

Объекты содержат информацию обо всех блокировках, хранимых в реестре информационных баз. Среди них: блокировки объектов базы данных; блокировки информационных баз клиентскими приложениями, другие блокировки.
Представляет собой объект с интерфейсом IObjectLock.

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

Интеграция.
2 ksv87
 
04.12.14
10:30
Блокировка (IObjectLock)
Object (Object)
Использование:

Только чтение.
Описание:

Тип: Строка.
Представление идентификатора заблокированного объекта базы данных.

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

Интеграция.
3 TormozIT
 
гуру
04.12.14
22:19
Видимо ты хочешь транзакционные блокировки, а этот объект выдает только объектные, которые довольно редко устанавливаются.
4 ksv87
 
05.12.14
18:39
(3) а можно ли как то получить транзакционные блокировки? Сама задача в том что бы определить какие документы заблокированы и каким пользователем (без попытки блокировать сам документ)
5 krbIso
 
05.12.14
21:29
(4) нет
6 hhhh
 
06.12.14
09:34
(4) открой для себя оператор Для каждого. Например

Для каждого Кластер Из МассивКластеров Цикл
            Сообщить("Найден кластер: """ + Кластер.ClusterName + """");
         КонецЦикла;
Закон Брукера: Даже маленькая практика стоит большой теории.