Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@
КонецЕсли;
КонецФункции

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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавить Если параметр не задан, то подставляется пустая строка

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

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

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

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

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

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