V8: Программное создание БД на сервере приложений Ключевые слова: CREATEINFOBASE, Создание базы, Автоматическое создание базы,
Дано:
Необходимо автоматически разворачивать базу на сервере приложений и на сервере БД
Проблема:
Столкнулся с тем, что описанный в документации способ создания базы из командной строки не работает. Поиск по интернету показал, что проблема не только у меня.
Неработающая строка создания базы.
"c:\Program Files (x86)\1cv82\8.2.14.460\bin\1cv8.exe" CREATEINFOBASE
Srvr=localhost Ref=Temp1C DBMS=MSSQLServer DBSrvr=localhost DB=Temp1C
DBUID=sa DBPwd=saPass CrSQLDB=Y SchJobDn=N SQLYOffs=0 Locale=RU
SUsr= SPwd= Usr= Pwd=
(Возможно из-за 64-х битной Win7)
Игра с ключами, кавычками ни к чему не привела. База не создавалась.
Решение:
1) Был найден и адаптирован небольшой vbs скрипт (Сreate1C.vbs)
AppServerName = "localhost"
' Сервер приложения
Set Connector = CreateObject("V82.COMConnector")
Set AgentConnection = Connector.ConnectAgent(AppServerName)
Set Cluster = AgentConnection.GetClusters()(0)
AgentConnection.Authenticate Cluster, "", ""
Set WorkingProcess = AgentConnection.GetWorkingProcesses(Cluster)(0)
ConnectString = WorkingProcess.HostName & ":" & WorkingProcess.MainPort
Set WorkingProcess = Connector.ConnectWorkingProcess(ConnectString)
Set infobaseinfo = WorkingProcess.CreateInfoBaseInfo()
infobaseinfo.Name = "Temp1C"
infobaseinfo.Descr = "Тестовая "
' сервер БД
infobaseinfo.DBMS = "MSSQLServer"
' MSSQLServer - Microsoft SQL Server;
' PostgreSQL - PostgreSQL;
' IBMDB2 - IBM DB2;
' OracleDatabase - Oracle Database.
infobaseinfo.dbServerName = "localhost"
infobaseinfo.dbName = "Temp1C"
infobaseinfo.dbUser = "sa"
infobaseinfo.dbPassword = "saPass"
infobaseinfo.DateOffset = 0
infobaseinfo.Locale = "RU"
infobaseinfo.ConnectDenied = False
Mode = 1
' Режим создания информационной базы:
' 0 - при создании информационной базы базу данных не создавать,
' 1 - при создании информационной базы создавать базу данных.
Call WorkingProcess.CreateInfoBase(infobaseinfo, Mode)
Но при запуске последнего выводилась ошибка, что объект V82.COMConnector не может быть создан.
Регистрация COM сервера от ошибки не избавила
regsvr32 "c:\Program Files (x86)\1cv82\8.2.14.460\bin\comcntr.dll"
"c:\Program Files (x86)\1cv82\8.2.14.460\bin\1cv8.exe" /regserver
2) Дальнейшее "гугленье" показало, что Windows Script Host, имеющийся в Win7 64 не создает 32-х разрядные COM объекты.
3) Скачиваем 32-х разрядный WSH с сайта http://www.microsoft.com/download/en/details.aspx?id=8247 от Win XP. (Возможно достаточно взять WScript.exe от 32-х битной Win7, но такой не нашлось поблизости)
4) Распаковываем (например WinRAR-ом) в определенную папку (у меня c:\WScript32\)
5) Запускаем скрипт п.1 C:\WScript32\WScript.exe c:\scripts\Create1C.vbs .
База создалась
Итоговый скрипт принимающий один аргумент - имя базы. Имя базы на сервере 1С совпадает с именем базы на сервере базы данных
Set objArgs = WScript.Arguments
If objArgs.Count > 0 Then
DBName = objArgs(0)
AppServerName = "localhost"
' Сервер приложения
Set Connector = CreateObject("V82.COMConnector")
Set AgentConnection = Connector.ConnectAgent(AppServerName)
Set Cluster = AgentConnection.GetClusters()(0)
AgentConnection.Authenticate Cluster, "", ""
Set WorkingProcess = AgentConnection.GetWorkingProcesses(Cluster)(0)
ConnectString = WorkingProcess.HostName & ":" & WorkingProcess.MainPort
Set WorkingProcess = Connector.ConnectWorkingProcess(ConnectString)
Set infobaseinfo = WorkingProcess.CreateInfoBaseInfo()
infobaseinfo.Name = DBName
infobaseinfo.Descr = "Тестовая "
' сервер БД
infobaseinfo.DBMS = "MSSQLServer"
' MSSQLServer - Microsoft SQL Server;
' PostgreSQL - PostgreSQL;
' IBMDB2 - IBM DB2;
' OracleDatabase - Oracle Database.
infobaseinfo.dbServerName = "localhost"
infobaseinfo.dbName = DBName
infobaseinfo.dbUser = "sa"
infobaseinfo.dbPassword = "saPass"
infobaseinfo.DateOffset = 0
infobaseinfo.Locale = "RU"
infobaseinfo.ConnectDenied = False
Mode = 1
' Режим создания информационной базы:
' 0 - при создании информационной базы базу данных не создавать,
' 1 - при создании информационной базы создавать базу данных.
Call WorkingProcess.CreateInfoBase(infobaseinfo, Mode)
Else
WScript.Echo "Не хватает аргумента"
End If
Запуск скрипта:
C:\WScript32\WScript.exe c:\scripts\Create1C.vbs NameOf1CBase . |