Вопрос!!! Определение запущенного сеанса 1С с помощью скрипта

1. Andersson-86 9 25.05.16 11:43 Сейчас в теме
Добрый день.
База SQL.
Терминальный доступ.

Есть следующая задача: необходимо с помощью скрипта определять запущен ли сеанс под определенным пользователем 1С, т.е. к примеру есть пользователь в 1С: Админ_1.
1С под этим пользователем должна быть постоянно запущена. Необходимо проверять запущен ли сеанс 1с под пользователем Админ_1, если не запущен, то необходимо запустить.
Т.к. на терминальнике могут быть запущены другие сеансы 1С под различными пользователями 1С, возникает вопрос, как определить что запущен или не запущен сеанс 1С именно под пользователем Админ_1. Каламбурно, но вроде бы понятно.

Просьба помочь дельным советом или кодом скрипта.
Заранее всем спасибо.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. alljoke 25.05.16 11:47 Сейчас в теме
Смотреть коды запуска 1С - может атм уже придумали чтото.
Пока что на ум - запускать обработку под 1С, которая бы проверяла есть сеанс юзера, и если нет запускала бы 1С.
3. BackinSoda 25.05.16 12:19 Сейчас в теме
Сеансы = ПолучитьСеансыИнформационнойБазы();
    Для Каждого Сеанс Из Сеансы Цикл
        Если Сеанс.Пользователь = ТПользователь Тогда
            //...
        КонецЕсли; 
    КонецЦикла;
4. Andersson-86 9 25.05.16 13:10 Сейчас в теме
Хотелось бы сделать все скриптом, т.к. все равно нужно держать один сеанс 1С, который будет контролировать и запускать остальные под нужными пользователями.
Тогда снова тот же вопрос, как проверить, что запущена 1С под пользователем, который контролирует и проверяет запуск других?
5. Andersson-86 9 25.05.16 13:15 Сейчас в теме
Есть вот такой вот вариант:
@echo off
set application=1cv8.exe
tasklist /FI "Пользователь eq zzz" | find /I "%application%" >nul
if errorlevel 1 (
echo %application% is not running
d:\automation\mobi-c.vbs
) else (
echo %application% is running
)

Но насколько я понял строчка: tasklist /FI "Пользователь eq ххх" | find /I "%application%" >nul, проверяет запущена ли 1С под терминальным пользователем zzz.
6. Andersson-86 9 27.05.16 10:09 Сейчас в теме
Решил задачку следующим образом, может будет полезно.

'На сервере подразумевается наличие только одного кластера и нескольких рабочих процессов
'имя пользователя 1С:Предприятия
UserName = "zzz"
URobot_Vipusk = "Robot_Vipusk"
URobot_GP = "Robot_GP"
URobot_Transp = "Robot_Transp"

'пароль пользователя 1С:Предприятия
UserPass = ""
UPRobot_Vipusk = "zzz1"
UPRobot_GP = "zzz1"
UPRobot_Transp = "zzz1"

'имя сервера 1С
ServerName = "SQLServer"
BaseName = "Base83"

'количество рабочих процессом минус 1
pn = 0

Dim Connector
Dim AgentConnection
Dim Cluster
Dim WorkingProcess
Dim WorkingProcessConnection
Dim ibDesc
Dim connections
Dim ConnectString

Dim StdOut
Set StdOut = WScript.StdOut

Dim bRobot_Vipusk
Dim bRobot_GP
Dim bRobot_Transp

Set Connector = CreateObject("V83.COMConnector")
Set AgentConnection = Connector.ConnectAgent(ServerName)
Set Cluster = AgentConnection.GetClusters()(0)
AgentConnection.Authenticate Cluster, "", ""

Dim p
For p = 0 To pn

bRobot_Vipusk = False
bRobot_GP = False
bRobot_Transp = False

Set WorkingProcess = AgentConnection.GetWorkingProcesses(Cluster)(p)
ConnectString = WorkingProcess.HostName & ":" & WorkingProcess.MainPort
Set WorkingProcessConnection = Connector.ConnectWorkingProcess(ConnectString)
WorkingProcessConnection.AddAuthentication UserName, UserPass
Set ibDesc = WorkingProcessConnection.CreateInfoBaseInfo()
ibDesc.Name = BaseName
Connections = WorkingProcessConnection.GetInfoBaseConnections(ibDesc)

Dim i
Dim Connection
For i = LBound(Connections) To UBound(Connections)
set Connection = connections(i)

If (Connection.AppID <> "COMConsole") Then
' Проверяем робота на выпуске
If Connection.userName = "Robot_Vipusk" Then
bRobot_Vipusk = True
End If

' Проверяем робота на ГП
If Connection.userName = "Robot_GP" Then
bRobot_GP = True
End If

' Проверяем робота на транспортной
If Connection.userName = "Robot_Transp" Then
bRobot_Transp = True
End If
End if

Next 'i
Next 'p

' Запуск робота на выпуске
If Not bRobot_Vipusk Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """c:\Program Files (x86)\1cv8\8.3.7.1790\bin\1cv8.exe"" ENTERPRISE /S " & ServerName & "\" & BaseName & " /N " & URobot_Vipusk & " /P " & UPRobot_Vipusk
WScript.Sleep (15000)
End If

' Запуск робота на ГП
If Not bRobot_GP Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """c:\Program Files (x86)\1cv8\8.3.7.1790\bin\1cv8.exe"" ENTERPRISE /S " & ServerName & "\" & BaseName & " /N " & URobot_GP & " /P " & UPRobot_GP
WScript.Sleep (15000)
End If

' Запуск робота на транспортной
If Not bRobot_Transp Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """c:\Program Files (x86)\1cv8\8.3.7.1790\bin\1cv8.exe"" ENTERPRISE /S " & ServerName & "\" & BaseName & " /N " & URobot_Transp & " /P " & UPRobot_Transp
'WScript.Sleep (15000)
End If

WScript.quit 0
chesnokov-a-v; +1 Ответить
7. Asenka 105 09.10.19 19:13 Сейчас в теме
(6) Добрый день! Как данный скрипт показал себя в работе? Стоит аналогичная задача только с файловой базой.
8. Andersson-86 9 10.10.19 09:04 Сейчас в теме
(7) Добрый день. Скрипт работает отлично. Запускается через планировщик с установленным интервалом.
9. EVKash 14 17.10.19 08:46 Сейчас в теме
(7) реализовали для файловой?
10. Asenka 105 17.10.19 09:15 Сейчас в теме
(9) Нет пока. Планирую сделать проще - создать отдельного терминального пользователя для запуска процесса и по нему отслеживать.
11. EVKash 14 02.12.19 11:00 Сейчас в теме
(10) сделал для файловой как-то так
МойОбщийМодуль.ИнтернетМагазинЗапущен - экспортная функция общего модуля МойОбщийМодуль(с галкой внешнее соединение), которая возвращает истину, если пользователь найден в соединениях. Добавлено через расширение.
проверка.vbs
Dim Connector
Dim Connection
Dim ConnectString
Dim IMStarted

Set Connector = CreateObject("V83.COMConnector")
ConnectString = "File=D:\ПутьКБазе;usr=""Администратор"";"
Set Connection = Connector.Connect(ConnectString)
IMStarted = Connection.[МойОбщийМодуль].[ИнтернетМагазинЗапущен]
If Not IMStarted Then
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run """c:\Program Files\1cv8\8.3.15.1656\bin\1cv8.exe"" ENTERPRISE /F ""D:\ПутьКБазе"" /N ""Интернет-магазин"" /P """""
End If
Показать

Плюс данного метода в том, что для проверки не требуется клиентская лицензия.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот