Имя: Пароль:
1C
1С v8
Как выгнать всех из клиент-серверной базы
,
0 lirt82
 
07.03.17
10:50
Подскажите с кодом, пишу простейшую обработку которая должна выбить всех активных пользователей из базы sql в которой она запускается.
1 процедура. Потом условие поставлю чтоб выбивала всех кроме меня.
Затык при выполнении кода:
Процедура КнопкаВыполнитьНажатие(Кнопка)
        
    Режим = РежимДиалогаВопрос.ДаНет;
    Ответ = Вопрос("Точно хотите всех выгнать из базы?", Режим, 0);
    
    Если Ответ =КодВозвратаДиалога.Да Тогда
        
        Коннектор = Новый COMОбъект("V82.COMConnector");
        Попытка
        Сервер = Коннектор.Connect("тут параметры подключения");
        
        МассивСоединений=ПолучитьСоединенияИнформационнойБазы();
        Для Каждого Соединение Из МассивСоединений Цикл
            Сервер.Disconnect(Соединение);
        КонецЦикла;
            
        Исключение
        Сообщить(ОписаниеОшибки());    
    КонецПопытки;
Коннектор = Неопределено;
        
    ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда
        Возврат;
    КонецЕсли;  
при выполнении ругается на Метод объекта не обнаружен (Disconnect)
Сервер.Disconnect(Соединение);
1 repin_mike
 
07.03.17
10:53
(0) Ужас
2 repin_mike
 
07.03.17
10:53
КомОбъект тебе зачем нужен в этой обработке?
3 lirt82
 
07.03.17
10:59
(2) чтоб подрубиться к серверу где крутиться база.
4 1Снеговик
 
гуру
07.03.17
11:00
Интересный вирус
5 lirt82
 
07.03.17
11:00
(2) все допетрил, нужно подрубиться к АГЕНТУ сервера и все активные сеансы отключить
6 lirt82
 
07.03.17
11:03
(5)подскажите как?
7 1dvd
 
07.03.17
11:05
(6) мышкой
8 repin_mike
 
07.03.17
11:12
Я думаю что никак. Подключайся к оснастке и выкидывай всех оттуда.
9 Господин ПЖ
 
07.03.17
11:14
мульон скриптов лежит готовых в сети
10 Fish
 
07.03.17
11:35
(8) Почему никак? Очень даже как.
11 shuhard
 
07.03.17
12:04
(2) ТС идёт верной дорогой
(8) бред
(9) +100500
12 lirt82
 
07.03.17
12:20
готово!
Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Режим = РежимДиалогаВопрос.ДаНет;
    Ответ = Вопрос("Точно хотите всех выгнать из базы?", Режим, 0);
    
    Если Ответ =КодВозвратаДиалога.Да Тогда
        
        Коннектор = Новый COMОбъект("V83.COMConnector");
        Попытка            
            Сервер = Коннектор.ConnectWorkingProcess("tcp://SQL:1641");
            // Аутентифицироваться с административными правами в нужной базе.
            Сервер.AddAuthentication("ИмяПользака", "пароль");
            
            // Создать объект нужной информационной базы.
            ИнформационнаяБаза = Сервер.CreateInfoBaseInfo();
            ИнформационнаяБаза.Name = "ИмяБазы";
            
            // Получить соединения базы.
            СоединенияБазы = Сервер.GetIBConnections(ИнформационнаяБаза);
            
            // Разорвать соединения клиентских приложений.
            Для Каждого Соединение Из СоединенияБазы Цикл
                Сервер.Disconnect(Соединение);
            КонецЦикла;
            
        Исключение
            Сообщить(ОписаниеОшибки());    
        КонецПопытки;
        
        Коннектор = Неопределено;
        
    ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда
        Возврат;
    КонецЕсли;  
    
КонецПроцедуры
13 organizm
 
07.03.17
12:21
поищи в УПП есть выгонялка
14 organizm
 
07.03.17
12:22
Обработка - Активные пользователи - кнопка "Завершить сеанс"
15 Serg_1960
 
07.03.17
12:28
(0) Гугли,  да воздастся тебе по заслугам твоим :)

Коннектор = Новый COMОбъект("v81.COMConnector");
Агент = Коннектор.ConnectAgent(Сервер);
Кластеры = Агент.GetClusters();
Для Каждого Кластер из Кластеры Цикл
   Агент.Authenticate(Кластер, Пользователь,Пароль);
   Процессы = Агент.GetWorkingProcesses(Кластер);
   Для каждого Процесс из Процессы Цикл
...
16 Serg_1960
 
07.03.17
12:36
+(14)

    // Подключение к агенту сервера
    АгентСервера = COMСоединитель.ConnectAgent(ИдентификаторАгентаСервера);
    
    // Найдем необходимый нам кластер
    Для Каждого Кластер Из АгентСервера.GetClusters() Цикл
        
        Если Кластер.MainPort = НомерПортаКластера Тогда
            
            АгентСервера.Authenticate(Кластер,
                ПараметрыСоединенияССервером1СПредприятие.ИмяАдминистратораКластера,
                ПараметрыСоединенияССервером1СПредприятие.ПарольАдминистратораКластера);
            СписокСеансов = АгентСервера.GetSessions(Кластер);
            Для Каждого Сеанс из СписокСеансов Цикл
17 lirt82
 
07.03.17
13:23
(15) (16) спасибо большое
18 Рэйв
 
07.03.17
13:27
(0)БлокировкаСоединенийСИнформационнойБазой
стандартная же есть
19 Fish
 
07.03.17
13:32
(18) А разве блокировка рвёт уже установленные соединения?
20 cons74
 
07.03.17
14:15
(19) рвет. Но это в каждой конкретной конфе прописано по-своему было. В новых - это БСП. На сколько помню 5 минут от установленного времени начала - и рвет.