diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..34d81de --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,64 @@ +{ + "version": "0.1.0", + "command": "oscript", + "isShellCommand": true, + "showOutput": "silent", + "args": [ + //"-encoding=utf-8" + ], + "tasks": [ + { + "taskName": "OneScript: compile", + "args": [ + "-compile", + "${file}" + ], + "echoCommand": true, + "showOutput": "always", + "suppressTaskName": true, + "isBuildCommand": false + }, + { + "taskName": "OneScript: check", + "args": [ + "-check", + "${file}" + ], + "echoCommand": true, + "showOutput": "always", + "suppressTaskName": true, + "isBuildCommand": false + }, + { + "taskName": "OneScript: make", + "args": [ + "-make", + "${file}", + "${fileBasename}.exe" + ], + "echoCommand": true, + "showOutput": "always", + "suppressTaskName": true, + "isBuildCommand": false + }, + { + "taskName": "OneScript: run", + "args": [ + "${file}" + ], + "echoCommand": true, + "showOutput": "always", + "suppressTaskName": true, + "isBuildCommand": true, + "problemMatcher": { + "fileLocation": "absolute", + "pattern": { + "regexp": "{Модуль\\s+(.+)\\s\\/\\s.*:\\s+(\\d+)\\s+\\/\\s+([^{]*)", + "file": 1, + "location": 2, + "message": 3 + } + } + } + ] +} \ No newline at end of file diff --git a/src/CopyBase.os b/src/CopyBase.os index 4345b88..a29e7ac 100644 --- a/src/CopyBase.os +++ b/src/CopyBase.os @@ -1,5 +1,4 @@ #Использовать cmdline -#Использовать 1commands #Использовать logos #Использовать json #Использовать v8runner @@ -7,6 +6,7 @@ #Использовать "." Перем фЛог; +Перем фЗамер; // Получить имя лога продукта // @@ -17,20 +17,6 @@ Возврат "oscript.app.CopyBase"; КонецФункции -Функция ПолучитьТекстИзФайла( Знач пИмяФайла ) - - файлОбмена = Новый Файл(пИмяФайла); - Данные = ""; - Если файлОбмена.Существует() Тогда - чтениеТекста = Новый ЧтениеТекста(пИмяФайла, КодировкаТекста.UTF8); - данные = чтениеТекста.Прочитать(); - чтениеТекста.Закрыть(); - Иначе - Возврат Ложь; - КонецЕсли; - возврат данные; -КонецФункции - Функция ПолучитьПараметры( Знач пАргументы ) Парсер = Новый ПарсерАргументовКоманднойСтроки(); @@ -102,151 +88,196 @@ КонецПроцедуры -Функция ФайлСуществует( Знач пИмяФайла ) - - файл = Новый Файл( пИмяФайла ); - - Возврат файл.Существует(); - -КонецФункции +Функция Инициализация( Знач пАргументы ) -Функция ОбернутьВКавычки(Знач Строка); - Если Лев(Строка, 1) = """" и Прав(Строка, 1) = """" Тогда - Возврат Строка; - Иначе - Возврат """" + Строка + """"; - КонецЕсли; -КонецФункции - -Процедура ВыполнитьКоманду(Знач пАргументы) + фЗамер = Новый Замер(); - замер = Новый Замер; + фЗамер.НачатьЗамер(); - замер.НачатьЗамер(); - - замер.НачатьЗамер( "РазборПараметров" ); + фЗамер.НачатьЗамер( "РазборПараметров" ); параметры = ПолучитьПараметры( пАргументы ); - замер.СообщитьЗамер( "Параметры получены" ); + фЗамер.СообщитьЗамер( "Параметры получены" ); + + Возврат параметры; + +КонецФункции + +Процедура ВыполнитьБекап( Знач пПараметры ) + + Если Не пПараметры["Source_SQL.UseBackup"] = Истина Тогда + Возврат; + КонецЕсли; + + фЗамер.НачатьЗамер( "Бекап" ); + + выполнениеБекапа = Новый РаботаСSQL(); Если фЛог.Уровень() = УровниЛога.Отладка Тогда - логКомандыЗапуска = Логирование.ПолучитьЛог(РаботаСSQL.ИмяЛога()); - логКомандыЗапуска.УстановитьУровень(УровниЛога.Отладка); + логSQL = Логирование.ПолучитьЛог(выполнениеБекапа.ИмяЛога()); + логSQL.УстановитьУровень( УровниЛога.Отладка ); КонецЕсли; - Если параметры["Source_SQL.UseBackup"] = Истина Тогда + выполнениеБекапа.УстановитьСервер( пПараметры["Source_SQL.Server"] ); + выполнениеБекапа.УстановитьПользователя( пПараметры["Source_SQL.User"] ); + выполнениеБекапа.УстановитьПароль( пПараметры["Source_SQL.Password"] ); + выполнениеБекапа.УстановитьИмяБазы( пПараметры["Source_SQL.Base"] ); + + результат = выполнениеБекапа.ВыполнитьБекап( пПараметры["FileBackup"] ); + + Если Не результат Тогда + ЗавершитьРаботу(1); + КонецЕсли; + + фЗамер.СообщитьЗамер( "Выполнен бекап"); + +КонецПроцедуры + +Процедура ВыполнитьВосстановление( Знач пПараметры ) + + Если Не пПараметры["Current_SQL.UseRestore"] = Истина Тогда + Возврат; + КонецЕсли; + + фЗамер.НачатьЗамер( "Восстановление" ); + + выполнениеВосстановления = Новый РаботаСSQL(); + + Если фЛог.Уровень() = УровниЛога.Отладка Тогда - замер.НачатьЗамер( "Бекап" ); + логSQL = Логирование.ПолучитьЛог(выполнениеВосстановления.ИмяЛога()); + логSQL.УстановитьУровень( УровниЛога.Отладка ); - результат = РаботаСSQL.ВыполнитьБекап( параметры["Source_SQL.Server"], параметры["Source_SQL.User"], параметры["Source_SQL.Password"], параметры["Source_SQL.Base"], параметры["FileBackup"] ); + КонецЕсли; + + выполнениеВосстановления.УстановитьСервер( пПараметры["Current_SQL.Server"] ); + выполнениеВосстановления.УстановитьПользователя( пПараметры["Current_SQL.User"] ); + выполнениеВосстановления.УстановитьПароль( пПараметры["Current_SQL.Password"] ); + выполнениеВосстановления.УстановитьИмяБазы( пПараметры["Current_SQL.Base"] ); + + результат = выполнениеВосстановления.ВыполнитьСкрипт( пПараметры["Script_Restore"] ); + + Если Не результат Тогда + ЗавершитьРаботу(1); + КонецЕсли; + + фЗамер.СообщитьЗамер( "Выполнено восстановление"); + +КонецПроцедуры + +Процедура УдалитьФайлБекапа( Знач пПараметры ) + + Если Не пПараметры["Current_SQL.DelBackup"] = Истина Тогда + Возврат; + КонецЕсли; + + фЗамер.НачатьЗамер( "УдалениеБекапа" ); + + Если ФайлСуществует( пПараметры["FileBackup"] ) Тогда - Если Не результат Тогда - ЗавершитьРаботу(1); - КонецЕсли; - - замер.СообщитьЗамер( "Выполнен бекап"); + УдалитьФайлы( пПараметры["FileBackup"] ); КонецЕсли; - Если параметры["Current_SQL.UseRestore"] = Истина Тогда - - замер.НачатьЗамер( "Восстановление" ); - - результат = РаботаСSQL.ВыполнитьСкрипт( параметры["Current_SQL.Server"], параметры["Current_SQL.User"], параметры["Current_SQL.Password"], параметры["Current_SQL.Base"], параметры["Script_Restore"] ); - - Если Не результат Тогда - ЗавершитьРаботу(1); - КонецЕсли; - - замер.СообщитьЗамер( "Выполнено восстановление"); - + фЗамер.СообщитьЗамер( "Удален бекап" ); + +КонецПроцедуры + +Процедура ПереподключитьХранилище( Знач пПараметры) + + Если Не пПараметры["Current_Repo.Blind"] = Истина Тогда + Возврат; КонецЕсли; - Если параметры["Current_SQL.DelBackup"] = Истина Тогда + фЗамер.НачатьЗамер( "ОтключениеОтХранилища" ); + + Конфигуратор = Новый УправлениеКонфигуратором; + + Если фЛог.Уровень() = УровниЛога.Отладка Тогда - замер.НачатьЗамер( "УдалениеБекапа" ); - - Если ФайлСуществует( параметры["FileBackup"] ) Тогда - - УдалитьФайлы( параметры["FileBackup"] ); - - КонецЕсли; - - замер.СообщитьЗамер( "Удален бекап" ); + логSQL = Логирование.ПолучитьЛог(Конфигуратор.ИмяЛога()); + логSQL.УстановитьУровень( УровниЛога.Отладка ); КонецЕсли; + + Конфигуратор.УстановитьКонтекст(пПараметры["Current_Base.Connect"], пПараметры["Current_Base.User"], пПараметры["Current_Base.Password"]); + Конфигуратор.ПутьКПлатформе1С( пПараметры["EXE1CV8"] ); - Если параметры["Current_Repo.Blind"] = Истина Тогда + Если ЗначениеЗаполнено( пПараметры["Current_Base.EPF"] ) + И ФайлСуществует( пПараметры["Current_Base.EPF"] ) Тогда - замер.НачатьЗамер( "ОтключениеОтХранилища" ); + фЗамер.НачатьЗамер( "ВыполнениеОбработки" ); - Конфигуратор = Новый УправлениеКонфигуратором; - Конфигуратор.УстановитьКонтекст(параметры["Current_Base.Connect"], параметры["Current_Base.User"], параметры["Current_Base.Password"]); - Конфигуратор.ПутьКПлатформе1С( параметры["EXE1CV8"] ); + ДополнительныеКлючи = "/Execute" + ОбщегоНазначения.ОбернутьВКавычки( пПараметры["Current_Base.EPF"] ); - Если ЗначениеЗаполнено( параметры["Current_Base.EPF"] ) - И ФайлСуществует( параметры["Current_Base.EPF"] ) Тогда - - замер.НачатьЗамер( "ВыполнениеОбработки" ); - - ДополнительныеКлючи = "/Execute"+ОбернутьВКавычки(параметры["Current_Base.EPF"]); - - Конфигуратор.ЗапуститьВРежимеПредприятия("", Неопределено, ДополнительныеКлючи); - Текст = Конфигуратор.ВыводКоманды(); - Если Не ПустаяСтрока(Текст) Тогда - фЛог.Информация(Текст); - КонецЕсли; - - замер.СообщитьЗамер( "Выполнена обработка" ); - - КонецЕсли; - - замер.НачатьЗамер( "ОтключениеОтХранилища" ); - - Конфигуратор.ОтключитьсяОтХранилища(); + Конфигуратор.ЗапуститьВРежимеПредприятия("", Неопределено, ДополнительныеКлючи); Текст = Конфигуратор.ВыводКоманды(); Если Не ПустаяСтрока(Текст) Тогда фЛог.Информация(Текст); КонецЕсли; - замер.СообщитьЗамер( "Отключено от хранилища" ); + замер.СообщитьЗамер( "Выполнена обработка" ); - замер.НачатьЗамер( "ПодключениеКХранилищу" ); + КонецЕсли; + + фЗамер.НачатьЗамер( "ОтключениеОтХранилища" ); + + Конфигуратор.ОтключитьсяОтХранилища(); + Текст = Конфигуратор.ВыводКоманды(); + Если Не ПустаяСтрока(Текст) Тогда + фЛог.Информация(Текст); + КонецЕсли; + + фЗамер.СообщитьЗамер( "Отключено от хранилища" ); + + фЗамер.НачатьЗамер( "ПодключениеКХранилищу" ); + + Конфигуратор.ПодключитьсяКХранилищу(пПараметры["Current_Repo.Connect"], пПараметры["Current_Repo.User"], пПараметры["Current_Repo.Password"], Истина ); + Текст = Конфигуратор.ВыводКоманды(); + Если Не ПустаяСтрока(Текст) Тогда + фЛог.Информация(Текст); + КонецЕсли; + + замер.СообщитьЗамер( "Подключено к хранилищу" ); + + Если пПараметры["Current_Repo.UpdateCfg"] Тогда - Конфигуратор.ПодключитьсяКХранилищу(параметры["Current_Repo.Connect"], параметры["Current_Repo.User"], параметры["Current_Repo.Password"], Истина ); + замер.НачатьЗамер( "ОбновлениеКонфигурации" ); + + Конфигуратор.ОбновитьКонфигурациюБазыДанныхИзХранилища(пПараметры["Current_Repo.Connect"], пПараметры["Current_Repo.User"], пПараметры["Current_Repo.Password"] ); Текст = Конфигуратор.ВыводКоманды(); Если Не ПустаяСтрока(Текст) Тогда фЛог.Информация(Текст); КонецЕсли; - замер.СообщитьЗамер( "Подключено к хранилищу" ); - - Если параметры["Current_Repo.UpdateCfg"] Тогда - - замер.НачатьЗамер( "ОбновлениеКонфигурации" ); - - Конфигуратор.ОбновитьКонфигурациюБазыДанныхИзХранилища(параметры["Current_Repo.Connect"], параметры["Current_Repo.User"], параметры["Current_Repo.Password"] ); - Текст = Конфигуратор.ВыводКоманды(); - Если Не ПустаяСтрока(Текст) Тогда - фЛог.Информация(Текст); - КонецЕсли; - - замер.СообщитьЗамер( "Конфигурация обновлена" ); - - КонецЕсли; - - файлИнформаци = Конфигуратор.ФайлИнформации(); - - Если ФайлСуществует( файлИнформаци ) Тогда - УдалитьФайлы( файлИнформаци ); - КонецЕсли; + замер.СообщитьЗамер( "Конфигурация обновлена" ); КонецЕсли; - замер.СообщитьЗавершение(); + файлИнформаци = Конфигуратор.ФайлИнформации(); + + Если ФайлСуществует( файлИнформаци ) Тогда + УдалитьФайлы( файлИнформаци ); + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьКоманду(Знач пАргументы) + + параметры = Инициализация( пАргументы ); + + ВыполнитьБекап( параметры ); + + ВыполнитьВосстановление( параметры ); + + УдалитьФайлБекапа( параметры ); + + ПереподключитьХранилище( параметры ); + + фЗамер.СообщитьЗавершение(); КонецПроцедуры diff --git a/src/Классы/РаботаСSQL.os b/src/Классы/РаботаСSQL.os new file mode 100644 index 0000000..47629cb --- /dev/null +++ b/src/Классы/РаботаСSQL.os @@ -0,0 +1,188 @@ +#Использовать 1commands +#Использовать logos + +Перем фСервер; +Перем фПользователь; +Перем фПароль; +Перем фИмяБазы; + +Перем фВыводКоманды; + +Перем фЛог; + +// Получить имя лога продукта +// +// Возвращаемое значение: +// Строка - имя лога продукта +// +Функция ИмяЛога() Экспорт + Возврат "oscript.app.РаботаСSQL"; +КонецФункции + +Процедура УстановитьСервер( Знач пСервер ) Экспорт + фСервер = пСервер; + фЛог.Отладка( "Установлен сервер: " + фСервер ); +КонецПроцедуры + +Процедура УстановитьПользователя( Знач пПользователь ) Экспорт + фПользователь = пПользователь; + фЛог.Отладка( "Установлен пользователь: " + фПользователь ); +КонецПроцедуры + +Процедура УстановитьПароль( Знач пПароль ) Экспорт + фПароль = пПароль; + Если фПароль = "" Тогда + фЛог.Отладка( "Установлен пароль: " ); + Иначе + фЛог.Отладка( "Установлен пароль" ); + КонецЕсли; +КонецПроцедуры + +Процедура УстановитьИмяБазы( Знач пИмяБазы ) Экспорт + фИмяБазы = пИмяБазы; + фЛог.Отладка( "Установлен сервер " + фИмяБазы ); +КонецПроцедуры + +Функция ПроверитьЗаполнение( Знач пПроверятьИмяБазы ) + + отказ = Ложь; + + Если Не ЗначениеЗаполнено( фСервер ) Тогда + + фЛог.Ошибка( "Сервер не указан" ); + отказ = Истина; + + КонецЕсли; + + Если Не ЗначениеЗаполнено( фПользователь ) Тогда + + фЛог.Ошибка( "Пользователь не указан" ); + отказ = Истина; + + КонецЕсли; + + Если пПроверятьИмяБазы + И Не ЗначениеЗаполнено( фИмяБазы ) Тогда + + фЛог.Ошибка( "Имя базы для бекапа не указано" ); + отказ = Истина; + + КонецЕсли; + + Возврат Не отказ; + +КонецФункции + +Функция ВыполнитьБекап( Знач пИмяФайлаБекапа ) Экспорт + + отказ = Ложь; + + Если Не ПроверитьЗаполнение( Истина ) Тогда + отказ = Истина; + КонецЕсли; + + Если Не ЗначениеЗаполнено( пИмяФайлаБекапа ) Тогда + + фЛог.Ошибка( "Файл для бекапа не указан" ); + отказ = Истина; + + КонецЕсли; + + Если отказ Тогда + Возврат Ложь; + КонецЕсли; + + параметрСТекстомЗапроса = "-Q""" + ТекстЗапроса_ВыполнитьБекап( фИмяБазы, пИмяФайлаБекапа ) + """"; + + Возврат ВыполнитьЧерезSQLCMD( параметрСТекстомЗапроса ); + +КонецФункции + +Функция ПолучитьКоличествоСоединений() Экспорт + + Если Не ПроверитьЗаполнение( Истина ) Тогда + Возврат Ложь; + КонецЕсли; + + //параметрСТекстомЗапроса = "-Q""" + ТекстЗапроса_ВыполнитьБекап( фИмяБазы, пИмяФайлаБекапа ) + """"; + + //Возврат ВыполнитьЧерезSQLCMD( параметрСТекстомЗапроса ); + +КонецФункции + +Функция ВыполнитьСкрипт( Знач пИмяФайлаСкрипта ) Экспорт + + отказ = Ложь; + + Если Не ПроверитьЗаполнение( Истина ) Тогда + отказ = Истина; + КонецЕсли; + + Если Не ЗначениеЗаполнено( пИмяФайлаСкрипта ) Тогда + фЛог.Ошибка( "Файл скрипта не указан" ); + отказ = Истина; + КонецЕсли; + + Если отказ Тогда + Возврат Ложь; + КонецЕсли; + + текстЗапроса = ОбщегоНазначения.ПолучитьТекстИзФайла( пИмяФайлаСкрипта ); + + Если текстЗапроса = Ложь Тогда + фЛог.Ошибка( "Не удалось прочитать текст запроса из " + пИмяФайлаСкрипта ); + Возврат Ложь; + КонецЕсли; + + параметрСТекстомЗапроса = "-i """ + пИмяФайлаСкрипта + """"; + + Возврат ВыполнитьЧерезSQLCMD(параметрСТекстомЗапроса); + +КонецФункции + +Функция ВыводКоманды() Экспорт + Возврат фВыводКоманды; +КонецФункции + +Функция ТекстЗапроса_ВыполнитьБекап( Знач пИмяФайла) + + шаблонЗапросБекапа = "BACKUP DATABASE [%1] TO DISK = N'%2' WITH NOFORMAT, INIT, NAME = N'%1 FULL Backup', SKIP, NOREWIND, NOUNLOAD,COMPRESSION, STATS = 10"; + Возврат СтрШаблон( шаблонЗапросБекапа, фИмяБазы, пИмяФайла); + +КонецФункции + +Функция ВыполнитьЧерезSQLCMD( Знач пПараметрСТекстомЗапроса ) + + командаЗапуска = Новый Команда; + + Если фЛог.Уровень() = УровниЛога.Отладка Тогда + + логКомандыЗапуска = Логирование.ПолучитьЛог(командаЗапуска.ИмяЛога()); + логКомандыЗапуска.УстановитьУровень(УровниЛога.Отладка); + + КонецЕсли; + + командаЗапуска.УстановитьКоманду("sqlcmd"); + командаЗапуска.ДобавитьПараметр("-S" + фСервер); + командаЗапуска.ДобавитьПараметр("-U" + фПользователь); + командаЗапуска.ДобавитьПараметр("-P" + фПароль); + командаЗапуска.ДобавитьПараметр( пПараметрСТекстомЗапроса ); + командаЗапуска.ДобавитьПараметр("-b"); + + командаЗапуска.УстановитьИсполнениеЧерезКомандыСистемы( Ложь ); + + кодВозврата = командаЗапуска.Исполнить(); + + Если КодВозврата = 0 Тогда + фВыводКоманды = командаЗапуска.ПолучитьВывод(); + Иначе + фЛог.Ошибка(командаЗапуска.ПолучитьВывод()); + КонецЕсли; + + Возврат кодВозврата = 0; + +КонецФункции + +фЛог = Логирование.ПолучитьЛог(ИмяЛога()); +фВыводКоманды = ""; + diff --git a/src/Модули/ОбщегоНазначения.os b/src/Модули/ОбщегоНазначения.os new file mode 100644 index 0000000..dc550da --- /dev/null +++ b/src/Модули/ОбщегоНазначения.os @@ -0,0 +1,31 @@ + +Функция ПолучитьТекстИзФайла( Знач пИмяФайла ) Экспорт + + файлОбмена = Новый Файл(пИмяФайла); + прочитанныйТекст = ""; + Если файлОбмена.Существует() Тогда + чтениеТекста = Новый ЧтениеТекста(пИмяФайла, КодировкаТекста.UTF8); + прочитанныйТекст = чтениеТекста.Прочитать(); + чтениеТекста.Закрыть(); + Иначе + Возврат Ложь; + КонецЕсли; + возврат прочитанныйТекст; + +КонецФункции + +Функция ФайлСуществует( Знач пИмяФайла ) Экспорт + + файл = Новый Файл( пИмяФайла ); + + Возврат файл.Существует(); + +КонецФункции + +Функция ОбернутьВКавычки(Знач пСтрока) Экспорт + Если Лев(пСтрока, 1) = """" и Прав(пСтрока, 1) = """" Тогда + Возврат пСтрока; + Иначе + Возврат """" + пСтрока + """"; + КонецЕсли; +КонецФункции \ No newline at end of file diff --git a/src/Модули/РаботаСSQL.os b/src/Модули/РаботаСSQL.os deleted file mode 100644 index 4b17699..0000000 --- a/src/Модули/РаботаСSQL.os +++ /dev/null @@ -1,175 +0,0 @@ -#Использовать cmdline -#Использовать 1commands -#Использовать logos - -Перем фЛог; - -// Получить имя лога продукта -// -// Возвращаемое значение: -// Строка - имя лога продукта -// -Функция ИмяЛога() Экспорт - Возврат "oscript.app.ExecQuery_SQLCMD"; -КонецФункции - -Функция ВыполнитьБекап( Знач пСервер, Знач пПользователь, Знач пПароль = "", Знач пИмяБазы, Знач пИмяФайлаБекапа ) Экспорт - - Если Не ЗначениеЗаполнено( пСервер ) Тогда - - фЛог.Ошибка( "Сервер не указан" ); - Возврат Ложь; - - КонецЕсли; - - Если Не ЗначениеЗаполнено( пПользователь ) Тогда - - фЛог.Ошибка( "Пользователь не указан" ); - Возврат Ложь; - - КонецЕсли; - - Если Не ЗначениеЗаполнено( пИмяФайлаБекапа ) Тогда - - фЛог.Ошибка( "Файл для бекапа не указан" ); - Возврат Ложь; - - КонецЕсли; - - Если Не ЗначениеЗаполнено( пИмяБазы ) Тогда - - фЛог.Ошибка( "Файл для бекапа не указан" ); - Возврат Ложь; - - КонецЕсли; - - параметрСТекстомЗапроса = "-Q""" + ТекстЗапроса_ВыполнитьБекап( пИмяБазы, пИмяФайлаБекапа ) + """"; - - Возврат ВыполнитьЧерезSQLCMD(пСервер, пПользователь, пПароль, пИмяБазы, параметрСТекстомЗапроса); - -КонецФункции - -Функция ВыполнитьСкрипт( Знач пСервер, Знач пПользователь, Знач пПароль = "", Знач пИмяБазы, Знач пИмяФайлаСкрипта ) Экспорт - - Если Не ЗначениеЗаполнено( пСервер ) Тогда - - фЛог.Ошибка( "Сервер не указан" ); - Возврат Ложь; - - КонецЕсли; - - Если Не ЗначениеЗаполнено( пПользователь ) Тогда - - фЛог.Ошибка( "Пользователь не указан" ); - Возврат Ложь; - - КонецЕсли; - - Если Не ЗначениеЗаполнено( пИмяФайлаСкрипта ) Тогда - - фЛог.Ошибка( "Файл скрипта не указан" ); - Возврат Ложь; - - КонецЕсли; - - текстЗапроса = ПолучитьТекстИзФайла( пИмяФайлаСкрипта ); - - Если текстЗапроса = Ложь Тогда - фЛог.Ошибка( "Не удалось прочитать текст запроса из " + пИмяФайлаСкрипта ); - Возврат Ложь; - КонецЕсли; - - параметрСТекстомЗапроса = "-i """ + пИмяФайлаСкрипта + """"; - - Возврат ВыполнитьЧерезSQLCMD(пСервер, пПользователь, пПароль, пИмяБазы, параметрСТекстомЗапроса); - -КонецФункции - -Функция ПолучитьТекстИзФайла( Знач пИмяФайла ) - - файлОбмена = Новый Файл(пИмяФайла); - Данные = ""; - Если файлОбмена.Существует() Тогда - чтениеТекста = Новый ЧтениеТекста(пИмяФайла, КодировкаТекста.UTF8); - данные = чтениеТекста.Прочитать(); - чтениеТекста.Закрыть(); - Иначе - Возврат Ложь; - КонецЕсли; - возврат данные; -КонецФункции - -Функция ПолучитьПараметрСТекстомЗапроса( Знач пПараметры ) - - Если ВРег( пПараметры["Команда"]) = ВРег("backup") Тогда - - шаблонЗапросБекапа = "BACKUP DATABASE [%1] TO DISK = N'%2' WITH NOFORMAT, INIT, NAME = N'%1 FULL Backup', SKIP, NOREWIND, NOUNLOAD,COMPRESSION, STATS = 10"; - текстЗапроса = СтрШаблон( шаблонЗапросБекапа, пПараметры["ИмяБазы"], пПараметры["ПутьКФайлу"]); - - параметрСТекстомЗапроса = "-Q""" + текстЗапроса + """"; - - ИначеЕсли ВРег( пПараметры["Команда"]) = ВРег("execQuery") Тогда - - текстЗапроса = ПолучитьТекстИзФайла( пПараметры["ПутьКФайлу"] ); - - Если текстЗапроса = Ложь Тогда - фЛог.Ошибка( "Не удалось прочитать текст запроса из " + пПараметры["ПутьКФайлу"] ); - ЗавершитьРаботу(1); - КонецЕсли; - - параметрСТекстомЗапроса = "-i """ + пПараметры["ПутьКФайлу"] + """"; - - Иначе - - фЛог.Ошибка( "Неизвестная команда " + пПараметры["Команда"] ); - фЛог.Ошибка( "Поддерживаются только команды backup и execQuery" ); - ЗавершитьРаботу(1) - - КонецЕсли; - - Возврат параметрСТекстомЗапроса; - -КонецФункции - -Функция ТекстЗапроса_ВыполнитьБекап( Знач пИмяБазы, Знач пИмяФайла) - - шаблонЗапросБекапа = "BACKUP DATABASE [%1] TO DISK = N'%2' WITH NOFORMAT, INIT, NAME = N'%1 FULL Backup', SKIP, NOREWIND, NOUNLOAD,COMPRESSION, STATS = 10"; - Возврат СтрШаблон( шаблонЗапросБекапа, пИмяБазы, пИмяФайла); - -КонецФункции - -Функция ВыполнитьЧерезSQLCMD( Знач пСервер, Знач пПользователь, Знач пПароль, Знач пИмяБазы, Знач пПараметрСТекстомЗапроса ) - - командаЗапуска = Новый Команда; - - Если фЛог.Уровень() = УровниЛога.Отладка Тогда - - логКомандыЗапуска = Логирование.ПолучитьЛог(командаЗапуска.ИмяЛога()); - логКомандыЗапуска.УстановитьУровень(УровниЛога.Отладка); - - КонецЕсли; - - командаЗапуска.УстановитьКоманду("sqlcmd"); - командаЗапуска.ДобавитьПараметр("-S" + пСервер); - командаЗапуска.ДобавитьПараметр("-U" + пПользователь); - командаЗапуска.ДобавитьПараметр("-P" + пПароль); - командаЗапуска.ДобавитьПараметр( пПараметрСТекстомЗапроса ); - командаЗапуска.ДобавитьПараметр("-b"); - - командаЗапуска.УстановитьИсполнениеЧерезКомандыСистемы( Ложь ); - - кодВозврата = командаЗапуска.Исполнить(); - - Если КодВозврата = 0 Тогда - фЛог.Информация(командаЗапуска.ПолучитьВывод()); - Иначе - фЛог.Ошибка("Код возврата: " + КодВозврата); - фЛог.Ошибка(командаЗапуска.ПолучитьВывод()); - КонецЕсли; - - Возврат кодВозврата = 0; - -КонецФункции - -фЛог = Логирование.ПолучитьЛог(ИмяЛога()); -