Программное заполнение списка SQL-баз для 1С-сервера

Программное заполнение списка SQL-баз для 1С-сервера

Когда на сервере 1С:Предприятия появляется много SQL-баз, хотя бы 10 штук, добавлять их вручную становится проблематичным.

Сервер 1С иногда сбоит и требуется его переустановка, при этом список баз нужно заново прописывать вручную.

Также список баз требуется прописать заново при переезде на новый сервер.

В общем, неплохо иметь код, который будет заполнять список баз автоматически.

 


Я реализовал код на языке 1С. Это не совсем удобно, т.к. для запуска нужно создать пустую базу.

В приложении образец обработки без формы, работать будет на обычных формах, на управляемых не тестировал, но переписать не сложно.

 

Скрипт предполагает что рабочий процесс работает на стандартном порту 1561. Если у Вас несколько рабочих процессов и кластеров, нужно прописать код для каждого порта.

 

Вот код на языке 1С:

 

Перем ЛогинСКЛ, ПарольСКЛ, ТипСУБД;

 

Функция СоздатьБазу(СоединениеСПроцессом, ИмяСервера, ЛогинСКЛ, ПарольСКЛ, ИмяБазы1С, ИмяБазыСКЛ = Неопределено) Экспорт

       Если ИмяБазыСКЛ = Неопределено Тогда ИмяБазыСКЛ = ИмяБазы1С; КонецЕсли;

      

       ИнформационнаяБаза = СоединениеСПроцессом.CreateInfoBaseInfo();

       ИнформационнаяБаза.DBMS = ТипСУБД;

       ИнформационнаяБаза.Name = ИмяБазы1С;

       ИнформационнаяБаза.dbServerName = ИмяСервера;

       ИнформационнаяБаза.dbName = ИмяБазыСКЛ;

       ИнформационнаяБаза.dbUser = ЛогинСКЛ;

       ИнформационнаяБаза.dbPassword = ПарольСКЛ;

       ИнформационнаяБаза.Locale = "ru_RU";

       ИнформационнаяБаза.DateOffset = 0;

      

       Попытка

             //0 - обозначает базу данных не создавать

             СоединениеСПроцессом.CreateInfoBase(ИнформационнаяБаза, 0);

             Сообщить("База " + ИмяБазы1С +  " успешно создана");

       Исключение

             Сообщить("База " + ИмяБазы1С +  " не создана. Ошибка: " + ОписаниеОшибки());

       КонецПопытки;

КонецФункции

 

Соединитель = Новый COMОбъект("V83.COMConnector");

ИмяСервера = "localhost";

ПортПроцесса = "1561";

СтрокаСоединения = "TCP://" + ИмяСервера + ":" + ПортПроцесса; //TCP://localhost:1540;

ТипСУБД = "MSSQLServer";

 

//==== ЭТА ЧАСТЬ ПРИВАТНА, ТУТ ПАРОЛИ +++

ЛогинСКЛ = "sa";

ПарольСКЛ = "******";

//==== ЭТА ЧАСТЬ ПРИВАТНА, ТУТ ПАРОЛИ ---

 

СоединениеСПроцессом = Соединитель.ConnectWorkingProcess("" + ИмяСервера + ":" + ПортПроцесса);

//==== ТУТ СПИСОК БАЗ +++

СоздатьБазу(СоединениеСПроцессом, ИмяСервера, ЛогинСКЛ, ПарольСКЛ, "base1", );

СоздатьБазу(СоединениеСПроцессом, ИмяСервера, ЛогинСКЛ, ПарольСКЛ, "base2", );

...

СоздатьБазу(СоединениеСПроцессом, ИмяСервера, ЛогинСКЛ, ПарольСКЛ, "baseN", );

//==== ТУТ СПИСОК БАЗ ---

 

Код можно прогонять многократно. Если база уже существует, будет выдано об ошибке и выполнение перейдет к следующей добавляемой базе.

 

Код легко можно переписать на VBS или любой другой скриптовый язык.

 

Существует еще метод добавления базы через запуск 1с-предприятия через командную строку. Найдено здесь, пример, который выполняется в командной строке CMD:

 

c:

cd "%ProgramFiles(x86)%\1cv82\8.2.19.130\bin\"

1cv8.exe createinfobase Srvr=sql:1641;DBMS=MSSQLServer;DBSrvr=sql;DBUID=sa_ЛогинАдминаSQL;DBPwd=ПарольАдминаSQL;SQLYOffs=2000;CrSQLDB=n;DB=db_sql_name;Ref=db_sql_name /AddInList "Basa 1"

 

Скачать