diff --git a/packagedef b/packagedef index 86043ff..5b675ba 100644 --- a/packagedef +++ b/packagedef @@ -1,14 +1,14 @@  Описание.Имя("v8runner") - .Версия("0.11.2") + .Версия("0.12.0") .ВерсияСреды("1.0.17") .ЗависитОт("asserts") .ЗависитОт("fs") - .ЗависитОт("logos") + .ЗависитОт("logos", "0.6.2") .ЗависитОт("tempfiles") .ЗависитОт("1testrunner") .ЗависитОт("strings", "0.4.1") - .ЗависитОт("1commands") + .ЗависитОт("1commands", "1.3.0") .ВключитьФайл("src") .ВключитьФайл("tests") .ВключитьФайл("lib.config") diff --git a/src/v8runner.os b/src/v8runner.os index e9c7b82..ac0b880 100644 --- a/src/v8runner.os +++ b/src/v8runner.os @@ -1,5 +1,4 @@ - -/////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// // УПРАВЛЕНИЕ ЗАПУСКОМ КОМАНД 1С:Предприятия 8 // @@ -15,6 +14,7 @@ Перем мПутьКПлатформе1С; Перем ЭтоWindows Экспорт; Перем мВерсияПлатформы; +Перем мИсключениеПриОшибкеВыполненияКоманды; Перем Лог; Перем мИмяФайлаИнформации; @@ -883,7 +883,41 @@ КонецПроцедуры -Процедура ВыполнитьКоманду(Знач Параметры) Экспорт +// Выгрузка внешней обработки или отчета в файл +// +// Параметры: +// ПутьККаталогуВыгрузки - Строка - Путь к каталогу, в который нужно выполнить выгрузку внешнего отчета или обработки +// ПутьКВнешнейОбработкеИлиОтчету - Строка - Путь к файлу внешнего отчета или обработки +// Формат - РежимВыгрузкиКонфигурации - Формат выгрузки. По умолчанию используется "Hierarchical" +// +Процедура ВыгрузитьВнешниеОтчетыИлиОбработкиВФайлы(Знач ПутьККаталогуВыгрузки, + Знач ПутьКВнешнейОбработкеИлиОтчету, + Знач Формат = "") Экспорт + + Если НЕ ЗначениеЗаполнено(Формат) Тогда + Формат = РежимВыгрузкиКонфигурации.Иерархический; + КонецЕсли; + + Файл = Новый Файл(ПутьККаталогуВыгрузки); + КаталогВыгрузки = Файл.ПолноеИмя; + + ОбеспечитьКаталог(КаталогВыгрузки); + + Файл = Новый Файл(ПутьКВнешнейОбработкеИлиОтчету); + ПутьКВнешнейОбработкеИлиОтчету = Файл.ПолноеИмя; + + ПараметрыЗапуска = СтандартныеПараметрыЗапускаКонфигуратора(); + ПараметрыЗапуска.Добавить("/DumpExternalDataProcessorOrReportToFiles"); + ПараметрыЗапуска.Добавить(ОбернутьВКавычки(КаталогВыгрузки)); + ПараметрыЗапуска.Добавить(ОбернутьВКавычки(ПутьКВнешнейОбработкеИлиОтчету)); + ПараметрыЗапуска.Добавить("-Format"); + ПараметрыЗапуска.Добавить(Формат); + + ВыполнитьКоманду(ПараметрыЗапуска); + +КонецПроцедуры + +Функция ВыполнитьКоманду(Знач Параметры) Экспорт ПроверитьВозможностьВыполненияКоманды(); @@ -893,14 +927,16 @@ УстановитьВывод(ПрочитатьФайлИнформации()); - Если КодВозврата <> 0 Тогда + Если КодВозврата <> 0 и мИсключениеПриОшибкеВыполненияКоманды Тогда Лог.Ошибка("Получен ненулевой код возврата "+КодВозврата+". Выполнение скрипта остановлено!"); ВызватьИсключение ВыводКоманды(); Иначе Лог.Отладка("Код возврата равен 0"); КонецЕсли; -КонецПроцедуры + Возврат КодВозврата; + +КонецФункции Функция ПолучитьПараметрыЗапуска() Экспорт Возврат СтандартныеПараметрыЗапускаКонфигуратора(); @@ -1204,7 +1240,7 @@ // УстановитьПризнакОжиданияВыполненияПрограммы // // Параметры: -// НовыйПризнак - <Булево> - <описание параметра> +// НовыйПризнак - <Булево> - Новое значение признака // // Возвращаемое значение: // <Булево> - прежнее значение признака @@ -1214,10 +1250,35 @@ Ожидаем.Что(НовыйПризнак = Ложь или НовыйПризнак = Истина, "Параметр признак ожидания выполнения программы 1С должен быть или Истина или Ложь, а это не так").ЭтоИстина(); + СтарыйПризнак = мПризнакОжиданияВыполненияПрограммы; мПризнакОжиданияВыполненияПрограммы = НовыйПризнак; + Возврат СтарыйПризнак; + КонецФункции // УстановитьРежимОжиданияВыполненияПрограммы() Экспорт +// ИсключениеПриОшибкеВыполненияКоманды +// +// Параметры: +// НовоеЗначение - <Булево> - Новое значение флага "ИсключениеПриОшибкеВыполненияКоманды" +// если не указано, то возвращается текущее значение +// +// Возвращаемое значение: +// <Булево> - значение признака +// +Функция ИсключениеПриОшибкеВыполненияКоманды(НовоеЗначение = Неопределено) Экспорт + + Ожидаем.Что(НовоеЗначение = Ложь или НовоеЗначение = Истина или НовоеЗначение = Неопределено, + "Параметр ""Исключение при ошибке выполнения команды"" должен быть или Истина, Ложь или Неопределено, а это не так").ЭтоИстина(); + + Если НЕ НовоеЗначение = Неопределено Тогда + мИсключениеПриОшибкеВыполненияКоманды = НовоеЗначение; + КонецЕсли; + + Возврат мИсключениеПриОшибкеВыполненияКоманды; + +КонецФункции // ИсключениеПриОшибкеВыполненияКоманды() Экспорт + Функция СобратьВозможныеКаталогиУстановкиПлатформыWindows() СИ = Новый СистемнаяИнформация; @@ -1372,17 +1433,29 @@ Приложение = ОбернутьВКавычки(ПутьКПлатформе1С()); Лог.Отладка(Приложение + СтрокаДляЛога); - Если ЭтоWindows = Ложь Тогда - СтрокаЗапуска = "sh -c '"+Приложение + СтрокаЗапуска + "'"; - Иначе - СтрокаЗапуска = Приложение + СтрокаЗапуска; - КонецЕсли; Если мОбработчикОжиданияПроцессаGUI = Неопределено Тогда - ЗапуститьПриложение(СтрокаЗапуска, , мПризнакОжиданияВыполненияПрограммы, КодВозврата); + Команда = Новый Команда; + + Команда.УстановитьКоманду(Приложение); + Команда.УстановитьКодировкуВывода(КодировкаТекста.UTF8); + Команда.ДобавитьЛогВыводаКоманды("oscript.lib.v8runner"); + Команда.ДобавитьПараметры(Параметры); + Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь); + Команда.ПоказыватьВыводНемедленно(Ложь); + КодВозврата = Команда.Исполнить(); + Иначе + + Если ЭтоWindows = Ложь Тогда + СтрокаЗапуска = "sh -c '"+Приложение + СтрокаЗапуска + "'"; + Иначе + СтрокаЗапуска = Приложение + СтрокаЗапуска; + КонецЕсли; + ЗапуститьПроцессGUI(СтрокаЗапуска, КодВозврата); КонецЕсли; Лог.Отладка("Получен код возврата %1", КодВозврата); + Возврат КодВозврата; КонецФункции @@ -1582,6 +1655,7 @@ мОчищатьФайлИнформации = Истина; мФайлИнформацииВнешний = Ложь; мПризнакОжиданияВыполненияПрограммы = Истина; + мИсключениеПриОшибкеВыполненияКоманды = Истина; КонецПроцедуры @@ -1597,26 +1671,61 @@ КонецФункции -Процедура ПолучитьИзмененияКонфигурацииБазыДанныхИзХранилища(Знач СтрокаСоединения, Знач ПользовательХранилища, Знач ПарольХранилища="") Экспорт - - ПараметрыСвязиСБазой = СтандартныеПараметрыЗапускаКонфигуратора(); - - ПараметрыСвязиСБазой.Добавить("/ConfigurationRepositoryF """+СтрокаСоединения+""""); - ПараметрыСвязиСБазой.Добавить("/ConfigurationRepositoryN """+ПользовательХранилища+""""); +// Метод устарел (используйте ЗагрузитьКонфигурациюИзХранилища()) +// Выполняет загрузку конфигурации из хранилища конфигурации определенной версии, если задана, иначе получает последнюю версию. +// +// Параметры: +// СтрокаСоединения - Строка - Строка соединения с хранилищем конфигурации +// ПользовательХранилища - строка - Пользователь для подключения к хранилищю конфигурации +// ПарольХранилища - Строка - Пароль пользователь для подключения к хранилищю конфигурации +// НомерВерсии - Число - Номер версии в истории в хранилище конфигурации, если 0 или меньше, то берется последняя версия. +// +Процедура ПолучитьИзмененияКонфигурацииБазыДанныхИзХранилища(Знач СтрокаСоединения, Знач ПользовательХранилища, Знач ПарольХранилища="", Знач НомерВерсииХранилища = 0) Экспорт - Если Не ПустаяСтрока(ПарольХранилища) Тогда - ПараметрыСвязиСБазой.Добавить("/ConfigurationRepositoryP """+ПарольХранилища+""""); - КонецЕсли; + Сообщить("ВНИМАНИЕ: метод ""ПолучитьИзмененияКонфигурацииБазыДанныхИзХранилища()"" УСТАРЕЛ и скоро будет удален. Вместо него используйте метод ""ЗагрузитьКонфигурациюИзХранилища()""!" + , СтатусСообщения.Внимание); + + ЗагрузитьКонфигурациюИзХранилища(СтрокаСоединения, ПользовательХранилища, ПарольХранилища, НомерВерсииХранилища); - ПараметрыСвязиСБазой.Добавить("/ConfigurationRepositoryUpdateCfg"); - ПараметрыСвязиСБазой.Добавить("-force"); +КонецПроцедуры + +// Выполняет загрузку конфигурации из хранилища конфигурации определенной версии, если задана, иначе получает последнюю версию. +// +// Параметры: +// СтрокаСоединения - Строка - Строка соединения с хранилищем конфигурации +// ПользовательХранилища - строка - Пользователь для подключения к хранилищю конфигурации +// ПарольХранилища - Строка - Пароль пользователь для подключения к хранилищю конфигурации +// НомерВерсии - Число - Номер версии в истории в хранилище конфигурации, если 0 или меньше, то берется последняя версия. +// +Процедура ЗагрузитьКонфигурациюИзХранилища(Знач СтрокаСоединения, Знач ПользовательХранилища, Знач ПарольХранилища="", Знач НомерВерсииХранилища = 0) Экспорт + + ПараметрыСвязиСБазой = СформироватьПараметрыСвязиСБазойДляПолучениеВерсииКонфигурацииИзХранилища(СтрокаСоединения, ПользовательХранилища, ПарольХранилища, НомерВерсииХранилища); ВыполнитьКоманду(ПараметрыСвязиСБазой); КонецПроцедуры -Процедура ОбновитьКонфигурациюБазыДанныхИзХранилища(СтрокаСоединения, ПользовательХранилища, ПарольХранилища="") Экспорт +// Выполняет загрузку конфигурации из хранилища конфигурации определенной версии, при этом обновляет базу данных +// Это необходимо, например, при последующем создании файла поставки, без обновления файл не будет создан. +// +// Параметры: +// СтрокаСоединения - Строка - Строка соединения с хранилищем конфигурации +// ПользовательХранилища - строка - Пользователь для подключения к хранилищю конфигурации +// ПарольХранилища - Строка - Пароль пользователь для подключения к хранилищю конфигурации +// НомерВерсии - Число - Номер версии в истории в хранилище конфигурации, если 0 или меньше, то берется последняя версия. +// +Процедура ОбновитьКонфигурациюБазыДанныхИзХранилища(Знач СтрокаСоединения, Знач ПользовательХранилища, Знач ПарольХранилища="", Знач НомерВерсииХранилища = 0) Экспорт + + ПараметрыСвязиСБазой = СформироватьПараметрыСвязиСБазойДляПолучениеВерсииКонфигурацииИзХранилища(СтрокаСоединения, ПользовательХранилища, ПарольХранилища, НомерВерсииХранилища); + + ПараметрыСвязиСБазой.Добавить("/UpdateDBCfg"); + + ВыполнитьКоманду(ПараметрыСвязиСБазой); + +КонецПроцедуры +Функция СформироватьПараметрыСвязиСБазойДляПолучениеВерсииКонфигурацииИзХранилища(СтрокаСоединения, ПользовательХранилища, ПарольХранилища, НомерВерсииХранилища) + ПараметрыСвязиСБазой = СтандартныеПараметрыЗапускаКонфигуратора(); ПараметрыСвязиСБазой.Добавить("/ConfigurationRepositoryF """+СтрокаСоединения+""""); @@ -1627,12 +1736,16 @@ КонецЕсли; ПараметрыСвязиСБазой.Добавить("/ConfigurationRepositoryUpdateCfg"); + // ВАЖНО!!!! Флаг <-v> должен быть обязательно после команды ConfigurationRepositoryUpdateCfg + // Если это нарушить то всегда получается последняя версия конфигурации + Если НомерВерсииХранилища > 0 Тогда + ПараметрыСвязиСБазой.Добавить("-v " + НомерВерсииХранилища); + КонецЕсли; ПараметрыСвязиСБазой.Добавить("-force"); - ПараметрыСвязиСБазой.Добавить("/UpdateDBCfg"); + Возврат ПараметрыСвязиСБазой; - ВыполнитьКоманду(ПараметрыСвязиСБазой); -КонецПроцедуры +КонецФункции Функция ВариантОбработкиНесуществующихСсылок() Экспорт @@ -1830,4 +1943,5 @@ // Инициализация Лог = Логирование.ПолучитьЛог("oscript.lib.v8runner"); + Инициализация(); diff --git a/tests/v8runner8310-tests.os b/tests/v8runner8310-tests.os index 9f5b0ec..ca5520b 100644 --- a/tests/v8runner8310-tests.os +++ b/tests/v8runner8310-tests.os @@ -82,7 +82,7 @@ Процедура ВыгрузитьКонфигурациюВФайлы(Знач Версия, Знач КаталогВыгрузки) - ПутьФайлКонфигурации = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "0.9","1Cv8.cf"); + ПутьФайлКонфигурации = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", Версия, "1Cv8.cf"); УправлениеКонфигуратором.ЗагрузитьКонфигурациюИзФайла(ПутьФайлКонфигурации);