Skip to content

Commit

Permalink
#51 Добавлена процедура создания серверной ИБ (#53)
Browse files Browse the repository at this point in the history
* #51 Добавлена процедура создания серверной ИБ

* #52 Отключен запуск команд через команды системы (cmd/sh)

* Рефакторинг процедуры создания серверной ИБ

* Добавлена функция получения параметров из структуры;
Рефакторинг процедуры создания серверной базы

* В функции ПолучитьПараметр изменено значение параметра по умолчанию

* Исправлено значение параметра по умолчанию;
Поправлено описание процедуры ПолучитьПараметр
  • Loading branch information
arkuznetsov authored and nixel2007 committed Nov 30, 2017
1 parent f1d29c8 commit c714331
Showing 1 changed file with 142 additions and 0 deletions.
142 changes: 142 additions & 0 deletions src/v8runner.os
Original file line number Diff line number Diff line change
Expand Up @@ -857,6 +857,125 @@

КонецПроцедуры

// Создание серверной информационной базы 1С
//
// Параметры:
// ПараметрыБазы1С - Структура
// Сервер1С - Строка - Адрес кластера серверов 1С ([<протокол>://]<адрес>[:<порт>])
// ИмяИБ - Строка - Имя информационной базы на сервере 1С
// РазрешитьРегЗадания - Булево - Истина - разрешить запуск рег. заданий (по умолчанию: Ложь)
// ПараметрыСУБД - Структура
// ТипСУБД - Строка - Тип сервера СУБД ("MSSQLServer" <по умолчанию>; "PostgreSQL"; "IBMDB2"; "OracleDatabase")
// СерверСУБД - Строка - Адрес сервера СУБД
// ПользовательСУБД - Строка - Пользователь сервера СУБД
// ПарольСУБД - Строка - Пароль пользователя сервера СУБД
// ИмяБД - Строка - Имя базы на сервере СУБД (если не указано будет использовано имя ИБ 1С)
// СмещениеДат - Строка - Смещение дат на сервере MS SQL (0; 2000 <по умолчанию>)
// СоздаватьБД - Булево - Истина - будет создана база на сервере СУБД в случае отсутствия (по умолчанию: Ложь)
// АвторизацияВКластере - Структура
// Имя - Строка - Имя администратора кластера 1С
// Пароль - Строка - Пароль администратора кластера 1С
// ОшибкаЕслиСуществует - Булево - Истина - Вызвать исключение если ИБ в кластере 1С существует (по умолчанию: Ложь)
// ПутьКШаблону - Строка - Путь к шаблону для создания информационной базы (*.cf; *.dt).
// Если шаблон не указан, то будет создана пустая ИБ
// ИмяБазыВСписке - Строка - Имя в списке баз пользователя (если не задано, то ИБ в список не добавляется)
//
Процедура СоздатьСервернуюБазу(ПараметрыБазы1С,
ПараметрыСУБД,
АвторизацияВКластере,
Знач ОшибкаЕслиСуществует = Ложь,
Знач ПутьКШаблону = "",
Знач ИмяБазыВСписке = "") Экспорт

Сервер1С = ПолучитьПараметр(ПараметрыБазы1С, "Сервер1С");
ИмяИБ = ПолучитьПараметр(ПараметрыБазы1С, "ИмяИБ");

Лог.Отладка("Создание серверной ИБ ""%1\%2""", Сервер1С, ИмяИБ);

РазрешитьРегЗадания = ПолучитьПараметр(ПараметрыБазы1С, "РазрешитьРегЗадания", Ложь);

ТипСУБД = ПолучитьПараметр(ПараметрыСУБД, "ТипСУБД", "MSSQLServer");
СерверСУБД = ПолучитьПараметр(ПараметрыСУБД, "СерверСУБД");
ПользовательСУБД = ПолучитьПараметр(ПараметрыСУБД, "ПользовательСУБД");
ПарольСУБД = ПолучитьПараметр(ПараметрыСУБД, "ПарольСУБД", "");

ИмяБД = ПолучитьПараметр(ПараметрыСУБД, "ИмяБД");
Если НЕ ЗначениеЗаполнено(ИмяБД) Тогда
ИмяБД = ИмяИБ;
Лог.Информация("Не указано имя базы на сервере СУБД, будет использовано имя ИБ - ""%1""", ИмяБД);
КонецЕсли;

СмещениеДат = ПолучитьПараметр(ПараметрыСУБД, "СмещениеДат", "2000");
СоздаватьБД = ПолучитьПараметр(ПараметрыСУБД, "СоздаватьБД", Ложь);

АдминистраторКластера = ПолучитьПараметр(АвторизацияВКластере, "Имя", Ложь);
ПарольКластера = ПолучитьПараметр(АвторизацияВКластере, "Пароль", Ложь);

СтрокаЗапуска = "Srvr=" + СокрЛП(Сервер1С)
+ ";Ref=" + СокрЛП(ИмяИБ)
+ ";DBMS=" + СокрЛП(ТипСУБД)
+ ";DBSrvr=" + СокрЛП(СерверСУБД)
+ ";DBUID=" + СокрЛП(ПользовательСУБД)
+ ";DBPwd=" + СокрЛП(ПарольСУБД)
+ ";DB=" + СокрЛП(ИмяБД)
+ ";SQLYOffs=" + СокрЛП(СмещениеДат)
+ ";CrSQLDB=" + ?(СоздаватьБД, "Y", "N")
+ ";SchJobDn=" + ?(РазрешитьРегЗадания, "N", "Y");

Если НЕ ПустаяСтрока(АдминистраторКластера) Тогда
СтрокаЗапуска = СтрокаЗапуска + ";SUsr=" + АдминистраторКластера;
КонецЕсли;

Если НЕ ПустаяСтрока(ПарольКластера) Тогда
СтрокаЗапуска = СтрокаЗапуска + ";SPwd=" + ПарольКластера;
КонецЕсли;

ИмяФайлаРезультата = ПолучитьИмяВременногоФайла("out");

Лог.Отладка("Строка запуска: %1", СтрокаЗапуска);

ПараметрыЗапуска = Новый Массив;
ПараметрыЗапуска.Добавить("CREATEINFOBASE");
ПараметрыЗапуска.Добавить(ОбернутьВКавычки(СтрокаЗапуска));

Если мОчищатьФайлИнформации Тогда
ПараметрыЗапуска.Добавить("/Out " + ОбернутьВКавычки(ФайлИнформации()));
Иначе
ПараметрыЗапуска.Добавить("/Out " + ОбернутьВКавычки(ФайлИнформации()) + " -NoTruncate");
КонецЕсли;

Если НЕ ПустаяСтрока(ИмяБазыВСписке) Тогда
ПараметрыЗапуска.Добавить("/AddInList""" + ИмяБазыВСписке + """");
КонецЕсли;
Если НЕ ПустаяСтрока(ПутьКШаблону) Тогда
ПараметрыЗапуска.Добавить("/UseTemplate""" + ПутьКШаблону + """");
КонецЕсли;

Если НЕ ПустаяСтрока(мКонтекстКоманды.КодЯзыка) Тогда
ПараметрыЗапуска.Добавить("/L" + мКонтекстКоманды.КодЯзыка);
КонецЕсли;
Если НЕ ПустаяСтрока(мКонтекстКоманды.КодЯзыкаСеанса) Тогда
ПараметрыЗапуска.Добавить("/VL" + мКонтекстКоманды.КодЯзыкаСеанса);
КонецЕсли;

СохранитьТекстФайлаИнформации();

КодВозврата = ЗапуститьИПодождать(ПараметрыЗапуска);

УстановитьВывод(ПрочитатьФайлИнформации());

Если КодВозврата = 0 Тогда
Лог.Информация("Создана серверная ИБ ""%1\%2""", Сервер1С, ИмяИБ);
Иначе
Если ОшибкаЕслиСуществует
ИЛИ СтрНайти(ВРег(ВыводКоманды()), ВРег("информационная база уже существует")) = 0 Тогда
ВызватьИсключение "Ошибка создания ИБ: """ + ВыводКоманды() + """";
КонецЕсли;
Лог.Информация("Информационная база ""%1\%2"" уже существует.", Сервер1С, ИмяИБ);
КонецЕсли;

КонецПроцедуры //СоздатьСервернуюБазу()

Процедура ЗагрузитьИнформационнуюБазу(ПутьВыгрузкиИБ) Экспорт
ФайлВыгрузки = Новый Файл(ПутьВыгрузкиИБ);
Ожидаем.Что(ФайлВыгрузки.Существует(), "Файл выгрузки <"+ПутьВыгрузкиИБ+"> существует, а это не так").ЭтоИстина();
Expand Down Expand Up @@ -1635,6 +1754,29 @@
КонецЕсли;
КонецФункции

// Пполучает значение параметра из структуры
//
// Параметры:
// Параметры - Структура - Структура, содержащая значения параметров
// Имя - Строка - Имя параметра
// ЗначениеПоУмолчанию - Произвольный - Значение параметра по умолчанию
// (возвращается если в структуре параметров значение по указанному имени не найдено)
// (по умолчанию "")
// Возвращаемое значение:
// Произвольный - Значение параметра
//
Функция ПолучитьПараметр(Параметры, Имя, ЗначениеПоУмолчанию = "")

ЗначениеПараметра = ЗначениеПоУмолчанию;

Если Параметры.Свойство(Имя) Тогда
ЗначениеПараметра = Параметры[Имя];
КонецЕсли;

Возврат ЗначениеПараметра;

КонецФункции //ПолучитьПараметр()

Процедура Инициализация()
СистемнаяИнформация = Новый СистемнаяИнформация;
ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0;
Expand Down

0 comments on commit c714331

Please sign in to comment.