После первых экспериментов с OneScript решил сделать себе создавалку баз на сервере 1С по списку. Реализовать такую задачу можно двумя путями. Через COM-соединение с агентом сервера и запуск 1С с ключом CreateInfoBase. Решил сделать оба варианта для оценки плюсов и минусов, и само собой, ради практики. Кстати, оказалось, вовремя сделал скрипты. Коллега вчера попробовал залить дамп базы, но не угадал со свободным место на диске. В итоге файл настроек кластера повредился. Лекарство в этом случае одно - снести каталог кластера и настроить все руками заново. Как вариант, можно попробовать бэкапить все файлы *.lst в каталоге. В моем случае половина файла 1CV8Clst.lst после падения оказалась забита нулями. Но вернемся к скриптам.
Скрипт настроек config.os из прошлого примера расширен значениями АдминистраторКластера, ПарольАдминистратораКластера, ВерсияСервераРазработки.
Перем СерверРазработки Экспорт;
Перем КластерСервераРазработки Экспорт;
Перем ТестоваяБаза Экспорт;
Перем Пользователь1С Экспорт;
Перем Пароль1С Экспорт;
Перем ВерсияCOM_1С Экспорт;
Перем АдминистраторКластера Экспорт;
Перем ПарольАдминистратораКластера Экспорт;
Перем ВерсияСервераРазработки Экспорт;
Перем СерверSQL Экспорт;
Перем ПользовательSQL Экспорт;
Перем ПарольSQL Экспорт;
Перем КаталогФайловДанных Экспорт;
Перем КаталогФайловЖурналов Экспорт;
Перем КаталогБэкапа Экспорт;
//1С
КластерСервераРазработки = "localhost:2541";
СерверРазработки = "localhost:2540";
ТестоваяБаза = "test_base";
Пользователь1С = "";
Пароль1С = "";
ВерсияCOM_1С = "V83.COMConnector";
АдминистраторКластера = "";
ПарольАдминистратораКластера = "";
ВерсияСервераРазработки = "8.3.7.2008";
//SQL
СерверSQL = "localhost\dev";
ПользовательSQL = "sa";
ПарольSQL = "";
КаталогФайловДанных = "F:\SQL_Data\BD";
КаталогФайловЖурналов = "F:\SQL_Logs\BD";
КаталогБэкапа = "F:\SQL_Backup";
Скрипт create_base_agent.os работает через COM-соединение. Недостаток этого подхода в том, что если на сервере поднято несколько кластеров 1С различных версий, то может потребоваться перерегистрация библиотеки comcntr.dll для необходимой версии.
Процедура СоздатьБазыЧерезАгентКластера(СписокИмен, ПутьКШаблону = "")
ПодключитьСценарий("config.os", "ПараметрыСкрипта");
Параметры = Новый ПараметрыСкрипта;
Конфигуратор = Новый УправлениеКонфигуратором();
ПутьКПлатформе = Конфигуратор.ПолучитьПутьКВерсииПлатформы(Параметры.ВерсияСервераРазработки);
Конфигуратор.ПутьКПлатформе1С(ПутьКПлатформе);
Коннектор = Новый COMОбъект(Параметры.ВерсияCOM_1С);
АгентСервера = Коннектор.ConnectAgent(Параметры.СерверРазработки);
Кластеры = АгентСервера.getClusters();
Кластер = Кластеры[0];
АгентСервера.Authenticate(Кластер, Параметры.АдминистраторКластера, Параметры.ПарольАдминистратораКластера);
Процессы = АгентСервера.GetWorkingProcesses(Кластер);
РабочийПроцесс = Коннектор.ConnectWorkingProcess(Процессы[0].HostName + ":"
+ СтрЗаменить(Процессы[0].MainPort, Символы.НПП, ""));
ШаблонБазы = РабочийПроцесс.CreateInfoBaseInfo();
Для Каждого БазаИмя Из СписокИмен Цикл
ШаблонБазы.Name = БазаИмя.Значение;
ШаблонБазы.DBMS = "MSSQLServer";
ШаблонБазы.dbName = БазаИмя.Значение;
ШаблонБазы.Descr = ?(ПустаяСтрока(БазаИмя.Представление), БазаИмя.Значение, БазаИмя.Представление);
ШаблонБазы.dbServerName = Параметры.СерверSQL;
ШаблонБазы.dbUser = Параметры.ПользовательSQL;
ШаблонБазы.dbPassword = Параметры.ПарольSQL;
ШаблонБазы.Locale = "ru_Ru";
ШаблонБазы.DateOffset = 2000;
ШаблонБазы.ScheduledJobsDenied = Истина;
РабочийПроцесс.CreateInfoBase(ШаблонБазы, 1);
Если НЕ ПустаяСтрока(ПутьКШаблону) Тогда
Конфигуратор.УстановитьКонтекст("/IBConnectionString""Srvr="
+ Параметры.КластерСервераРазработки + "; Ref='" + БазаИмя.Значение + "'""","", "");
РасширениеШаблона = Прав(ПутьКШаблону, 2);
Если РасширениеШаблона = "dt" Тогда
Конфигуратор.ЗагрузитьИнформационнуюБазу(ПутьКШаблону);
ИначеЕсли РасширениеШаблона = "cf" Тогда
Конфигуратор.ЗагрузитьКонфигурациюИзФайла(ПутьКШаблону, Истина);
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;
КонецЦикла;
РабочийПроцесс = Неопределено;
Коннектор = Неопределено;
КонецПроцедуры
ПутьКШаблону = "E:\1c\templates\cf\1cv8_test.cf"; //*.cf, *.dt
мБазы = Новый СписокЗначений;
мБазы.Добавить("test_base_1");
мБазы.Добавить("test_base_2");
СоздатьБазыЧерезАгентКластера(мБазы, ПутьКШаблону);
Второй вариант скрипта потребует модификации файла v8runner.os, идущего в поставке OneScript. По умолчанию располагается в каталоге установки OneScript \lib\v8runner\src.
Скрипт create_base_batch.os по сравнению с предыдущим скриптом,на мой взгляд, более практичен, поскольку нет необходимости манипуляций с библиотекой COM-соединений.
#Использовать v8runner
Процедура СоздатьБазыЧерезПакетныйРежим(СписокИмен, Знач ПутьКШаблону="")
ПодключитьСценарий("config.os", "ПараметрыСкрипта");
Параметры = Новый ПараметрыСкрипта;
Конфигуратор = Новый УправлениеКонфигуратором();
ПутьКПлатформе = Конфигуратор.ПолучитьПутьКВерсииПлатформы(Параметры.ВерсияСервераРазработки);
Конфигуратор.ПутьКПлатформе1С(ПутьКПлатформе);
Для Каждого БазаИмя Из СписокИмен Цикл
Конфигуратор.СоздатьБазуSQL(БазаИмя.Значение, Параметры, ПутьКШаблону, БазаИмя.Представление);
КонецЦикла
КонецПроцедуры
ПутьКШаблону = "E:\1c\templates\cf\1cv8_test.cf"; //*.cf, *.dt
мБазы = Новый СписокЗначений;
мБазы.Добавить("test_base_1");
мБазы.Добавить("test_base_2");
СоздатьБазыЧерезПакетныйРежим(мБазы, ПутьКШаблону);
v8runner.os
Процедура СоздатьБазуSQL(Знач ИмяБазы, Знач Параметры, Знач ПутьКШаблону="", Знач ИмяБазыВСписке="") Экспорт
Лог.Отладка("Создаю базу SQL "+ИмяБазы);
ПараметрыЗапуска = Новый Массив;
ПараметрыЗапуска.Добавить("CREATEINFOBASE");
ПараметрыЗапуска.Добавить("Srvr=""" + Параметры.КластерСервераРазработки + """;");
ПараметрыЗапуска.Добавить("Ref=""" + ИмяБазы + """;");
ПараметрыЗапуска.Добавить("DBMS=""" + "MSSQLServer" + """;");
ПараметрыЗапуска.Добавить("DBSrvr=""" + Параметры.СерверSQL + """;");
ПараметрыЗапуска.Добавить("DB=""" + ИмяБазы + """;");
ПараметрыЗапуска.Добавить("DBUID=""" + Параметры.ПользовательSQL + """;");
ПараметрыЗапуска.Добавить("DBPwd=""" + Параметры.ПарольSQL + """;");
ПараметрыЗапуска.Добавить("SQLYOffs=""" + "2000" + """;");
ПараметрыЗапуска.Добавить("Locale=""" + "Ru_ru" + """;");
ПараметрыЗапуска.Добавить("CrSQLDB=""" + "Y" + """;");
ПараметрыЗапуска.Добавить("SchJobDn=""" + "Y" + """;");
ПараметрыЗапуска.Добавить("LicDstr=""" + "Y" + """;");
ПараметрыЗапуска.Добавить("SUsr=""" + Параметры.АдминистраторКластера + """;");
ПараметрыЗапуска.Добавить("SPwd=""" + Параметры.ПарольАдминистратораКластера + """;");
ПараметрыЗапуска.Добавить("/Out""" + ФайлИнформации() + """");
Если ИмяБазыВСписке <> "" Тогда
ПараметрыЗапуска.Добавить("/AddInList"""+ ИмяБазыВСписке + """");
КонецЕсли;
Если ПутьКШаблону<> "" Тогда
ПараметрыЗапуска.Добавить("/UseTemplate"""+ ПутьКШаблону + """");
КонецЕсли;
КодВозврата = ЗапуститьИПодождать(ПараметрыЗапуска);
УстановитьВывод(ПрочитатьФайлИнформации());
Если КодВозврата <> 0 Тогда
ВызватьИсключение ВыводКоманды();
КонецЕсли;
КонецПроцедуры
Комментариев нет:
Отправить комментарий