Когда на сервере 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"