Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Пользователь


Сообщения: 50
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Вариант 3. И всё-таки я бы предпочел сделать эту работу в cmd - скрипте, ИМХО, надёжнее получится. Но, не зная подробностей Вашего задания, его не привожу. »
Большое спасибо, буду разбираться с предложенным Вами.
Третий вариант не получится - там задача сначала пройтись по всем существующим в кластере 1С соединеным клиентам и выкинуть их из базы В cmd (насколько мне известно) такое не получится

А подскажите как ?
Цитата megaloman:
Существующий скрипт надо оформить в виде подпрограммы
Положу сюда тело скрипта (если это не оффтоп)
СКРИПТ

Код: Выделить весь код
'имя пользователя базы 1С:Предприятия
UserName = "user" 
'пароль пользователя базы 1С:Предприятия
UserPass = "pass"
'имя сервера 1С:Предприятия
ServerName = "server"
'имя базы 1С:Предприятия к которой подключаемся
BaseName = "test_baza"
LockPermissionCode = "123456" 

LockMessageText = "БАЗА ЗАКРЫТА НА СОЗДАНИЕ РЕЗЕРВНОЙ КОПИИ И ОБНОВЛЕНИЕ."

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

Set connector = CreateObject("v83.COMConnector.1")
Set AgentConnection = Connector.ConnectAgent(ServerName)
Set Cluster = AgentConnection.GetClusters()(0)

'Указываем доступ к консоли 1С:Предприятия (только в том случае если определён администратор кластера, иначе прописать просто " " (пробелЫ))
AgentConnection.Authenticate Cluster, " ", " "
'Список процессов кластера
Processes = AgentConnection.GetWorkingProcesses(Cluster)
Dim j
'Перебираем все процессы в кластере
For j = LBound(Processes) To UBound(Processes)
	Set WorkingProcess = AgentConnection.GetWorkingProcesses(Cluster)(j)
	'Проверяем на наличие остановленых процессов
	If (WorkingProcess.MainPort <> "0") Then
		ConnectString = WorkingProcess.HostName & ":" & WorkingProcess.MainPort
		Set WorkingProcessConnection = Connector.ConnectWorkingProcess(ConnectString)
		WorkingProcessConnection.AddAuthentication UserName, UserPass
		InfoBases  = WorkingProcessConnection.GetInfoBases()
		For Each InfoBase In InfoBases
			' Ищем нужную базу
			If UCase(InfoBase.Name) = UCase(BaseName) Then
				' Устанавливаем запрет на подключение новых соединений
				InfoBase.ConnectDenied = True
				InfoBase.DeniedFrom = CStr(Now())
				' Запрет действует 15 минут, если скрипт не отработает нормально
				InfoBase.DeniedTo = CStr(Now() + 1 / 96 * 1)
				InfoBase.DeniedMessage = LockMessageText
				InfoBase.PermissionCode = LockPermissionCode
				WorkingProcessConnection.UpdateInfoBase (InfoBase)
			End If
		Next
		Set ibDesc = WorkingProcessConnection.CreateInfoBaseInfo()
		ibDesc.Name = BaseName
		Connections = WorkingProcessConnection.GetInfoBaseConnections(ibDesc)
		'Удаление всех соединений заданной ИБ сервера 1С
		Dim i
		Dim Connection
		For i = LBound(Connections) To UBound(Connections)
			Set Connection = connections(i)
			If (Connection.AppID <> "COMConsole") Then
				WorkingProcessConnection.Disconnect Connection
			End If
		Next
	End If
Next
'''''''''''''''''''''''''''''


strComm  = """C:\Program Files (x86)\1cv8\8.3.4.437\bin\1cv8.exe"" CONFIG /S"& ServerName &"\"& BaseName &" /Nuser /Ppass /UC"& LockPermissionCode &" /DumpIB ""\\SERVER\BACKUP\1C\"& Dat & BaseName &".dt"" /Out ""\\SERVER\BACKUP\1C\log\"& Dat & BaseName &"_dump.log"""
strComm2 = """C:\Program Files (x86)\1cv8\8.3.4.437\bin\1cv8.exe"" CONFIG /S"& ServerName &"\"& BaseName &" /Nuser /Ppass /UC"& LockPermissionCode &" /UpdateDBCfg /Out ""\\SERVER\BACKUP\1C\log\"& Dat & BaseName &"_update.log"""
Set oWshShell = CreateObject("WScript.Shell")
oWshShell.Run strComm, 0, true
oWshShell.Run strComm2, 0, true

' Отключаем блокировку базы
InfoBases  = WorkingProcessConnection.GetInfoBases()
For Each InfoBase In InfoBases
	' Ищем нужную базу
	If UCase(InfoBase.Name) = UCase(BaseName) Then
		' Отключаем запрет на подключение новых соединений
		InfoBase.ConnectDenied = False
		'InfoBase.DeniedMessage = ""
		'InfoBase.PermissionCode = ""
		WorkingProcessConnection.UpdateInfoBase (InfoBase)
	End If
Next

Отправлено: 18:22, 24-06-2016 | #3