Нужно для самописных конфигураций. Делюсь своим кодом для отключения сеансов и сессий.
&AtServer
Procedure EndSessionAtServer()
If Find(InfoBaseConnectionString(), "Srvr") > 0 Then
//server version (серверный вариант)
vSearch = Find(InfoBaseConnectionString(), "Srvr=");
vSearchSubstring = Mid(InfoBaseConnectionString(), vSearch + 6);
vServerName = Left(vSearchSubstring, Find(vSearchSubstring, """") - 1);
// now we are looking for the database name(теперь ищем имя базы)
vSearch = Find(InfoBaseConnectionString(), "Ref=");
vSearchSubstring = Mid(InfoBaseConnectionString(), vSearch + 5);
vBaseName = Left(vSearchSubstring, Find(vSearchSubstring, """") - 1);
Else
//for other connection methods the algorithm is not relevant(для других способов подключения алгоритм не актуален)
Return;
EndIf;
vConnector = New COMObject("v83.COMConnector");
vAgent = vConnector.ConnectAgent(vServerName);
vClusters = vAgent.GetClusters();
For Each vCluster In vClusters Do
//(АдминистраторКластера = "Админ") ClusterAdministrator = "Admin"
//(ПарольКластера = "") Cluster Password = ""
vAgent.Authenticate(vCluster,"Gotech","314159");
vProcesses = vAgent.GetWorkingProcesses(vCluster);
For Each vProcess In vProcesses Do
vPort = vProcess.MainPort;
// now there is an address and port to connect to the worker process(теперь есть адрес и порт для подключения к рабочему процессу)
vSlaveProc = vConnector.ConnectWorkingProcess(vServerName + ":" + StrReplace(vPort, Chars.NBSp, ""));
vSlaveProc.AddAuthentication("Админ", ""); // "Имя администратора БД(пользователь)", "Пароль администратора БД"
vInformationBase = "";
vBases = vAgent.GetInfoBases(vCluster);
For Each vBase In vBases Do
If vBase.Name = vBaseName Then
vInformationBase = vBase;
Break;
EndIf;
EndDo;
If vInformationBase = "" Then
// database not found(база не найдена)
Message = New UserMessage;
Message.Text = "database not found";
Message.Message();
EndIf;
vRowIdentifier = Items.ActiveUsers.CurrentRow;
vTechData = ActiveUsers.FindByID(vRowIdentifier);
vSessions = vAgent.GetInfoBaseSessions(vCluster, vInformationBase);
For Each vSession In vSessions Do
If vSession.SessionID = vTechData.SessionNumber Then
vAgent.TerminateSession(vCluster, vSession, NStr("ru = 'Администратор отключил сеанс!'; de = 'Der Administrator hat die Sitzung getrennt!'; en ='The administrator has disconnected the session!'"));
Break;
EndIf;
EndDo;
//Disconnect client application connections (Разорвать соединения клиентских приложений.)
vBases = vSlaveProc.GetInfoBases();
For Each vBase In vBases Do
If vBase.Name = vBaseName Then
vInformationBase = vBase;
Break;
EndIf;
EndDo;
If vInformationBase = "" Then
// database not found(база не найдена)
Message = New UserMessage;
Message.Text = "database not found";
Message.Message();
EndIf;
vConnections = vSlaveProc.GetInfoBaseConnections(vInformationBase);
For Each vConnection In vConnections Do
If vConnection.userName = vSession.userName Then
vSlaveProc.Disconnect(vConnection);
EndIf;
EndDo;
EndDo;
EndDo;
UpdateAtServer();
EndProcedure //EndSessionAtServer