gifts2017

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

Опубликовал Осипов Сергей (fixin) в раздел Администрирование - Системное

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

 

Скачать файлы

Наименование Файл Версия Размер
down.zip 2
.zip 2,18Kb
25.04.16
2
.zip 2,18Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Антонио (Fragster) 26.04.16 17:10
Достаточно скопировать (и при переносе на другой сервер или другой релиз платформы в случае, если надо иметь параллельно два работающих релиза, немного поправить) файлы *.lst из папки агента сервера (как правило C:\Program Files\1cv8\srvinfo)
ivankuruchenko; awk; +2 Ответить 1
2. Осипов Сергей (fixin) 26.04.16 20:59
(1) хохохохо, а вам не встречались случаи, когда файл lst бьется и сервер 1с не стартует. Теоретически можно сделать бэкап lst-файла, но скрипт, прописывающий список баз, имхо, технологичнее, т.к. работает на более высоком уровне и требует меньше геморроя.
3. Антонио (Fragster) 27.04.16 11:29
(2) fixin, бэкапы для трусов? или вы конфиги не бэкапите?
4. Осипов Сергей (fixin) 27.04.16 13:43
(3) конфиги не бэкапим. теперь особенно не имеет смысла. зачем. если можно скриптом прописать. Хоть на этом сервере, хоть на любом новом, без этого геморроя с заменой GUID сервера.
И потом, уважаемые, вы забыли что пароль SA шифруется в конфигах и при переезде на новый сервер все пойдет лесом.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа