diff --git a/lib.config b/lib.config index a5de465..93e9d01 100644 --- a/lib.config +++ b/lib.config @@ -2,6 +2,7 @@ + \ No newline at end of file diff --git a/readme.md b/readme.md index 1b2dd1b..6f96eae 100644 --- a/readme.md +++ b/readme.md @@ -88,6 +88,8 @@ - Процедура ВыгрузитьРасширениеВФайл(Знач ПутьФайлРасширения, Знач ИмяРасширения) - Процедура ЗагрузитьРасширениеИзФайлов(Знач КаталогЗагрузки, Знач ИмяРасширения = "–AllExtensions", Знач ПутьКСпискуФайловЗагрузки = "", Знач ФорматВыгрузки = "", Знач ОбновитьФайлВерсий = Истина) - Процедура ВыгрузитьРасширениеВФайлы(Знач КаталогВыгрузки, Знач ИмяРасширения = "–AllExtensions", Знач ФорматВыгрузки = "", Знач ТолькоИзмененные = Ложь, Знач ПутьКФайлуВерсийДляСравнения = "") +- Процедура ПолучитьОтчетОСравненииКонфигурацииСФайлом(Знач ПутьКФайлуКонфигурации, Знач ПутьКОтчету, Знач ТипОтчета = Неопределено, Знач ФорматОтчета = "txt", Знач ИмяРасширения = "") +- Функция КонфигурацияИФайлИдентичны(Знач ПутьКФайлуКонфигурации, Знач ИмяРасширения = "") ### Вспомогательные и настроечные функции diff --git a/src/v8runner.os b/src/v8runner.os index 6471264..4820b02 100644 --- a/src/v8runner.os +++ b/src/v8runner.os @@ -1545,6 +1545,152 @@ КонецФункции // ИсключениеПриОшибкеВыполненияКоманды() Экспорт +// Формирует отчёт о сравнении основной конфигурации\конфигурации расширения в файл. +// +// Параметры: +// ПутьКФайлуКонфигурации - Строка - Путь к файлу cf/cfe с которым необходимо произвести сравнение +// ПутьКОтчету - Строка - Путь в который необходимо записать отчёт +// ТипОтчета - ТипыОтчетовОСравнении - Тип отчёта о сравнении полный или краткий +// ФорматОтчета - Строка - Формат файла отчета. Возмодные значения: txt, mxl +// ИмяРасширения - Строка - Имя расширения конфигурации +// +Процедура ПолучитьОтчетОСравненииКонфигурацииСФайлом( + Знач ПутьКФайлуКонфигурации, + Знач ПутьКОтчету, + Знач ТипОтчета = Неопределено, + Знач ФорматОтчета = "txt", + Знач ИмяРасширения = "") Экспорт + + Если ТипОтчета = Неопределено Тогда + ТипОтчета = ТипыОтчетовОСравнении.Полный; + КонецЕсли; + + ПараметрыЗапуска = СтандартныеПараметрыЗапускаКонфигуратора(); + ПараметрыЗапуска.Добавить("/CompareCfg"); + Если ЗначениеЗаполнено(ИмяРасширения) Тогда + ПараметрыЗапуска.Добавить("-FirstConfigurationType ExtensionConfiguration"); + Если ИспользуемаяВерсияПлатформыСтаршеИлиРавна("8.3.12") Тогда + ПараметрыЗапуска.Добавить(СтрШаблон("-FirstName %1", ИмяРасширения)); + Иначе + ПараметрыЗапуска.Добавить(СтрШаблон("-FirstConfigurationKey %1", ИмяРасширения)); + КонецЕсли; + Иначе + ПараметрыЗапуска.Добавить("-FirstConfigurationType MainConfiguration"); + КонецЕсли; + + ПараметрыЗапуска.Добавить("-SecondConfigurationType File"); + + Если ИспользуемаяВерсияПлатформыСтаршеИлиРавна("8.3.12") Тогда + ПараметрыЗапуска.Добавить("-SecondFile "); + Иначе + ПараметрыЗапуска.Добавить("-SecondConfigurationKey "); + КонецЕсли; + + ПараметрыЗапуска.Добавить(ОбернутьВКавычки(ПутьКФайлуКонфигурации)); + + ПараметрыЗапуска.Добавить("-ReportType "); + ПараметрыЗапуска.Добавить(ФорматОтчета); + + ПараметрыЗапуска.Добавить("-ReportFormat "); + ПараметрыЗапуска.Добавить(ТипОтчета); + + ПараметрыЗапуска.Добавить("-ReportFile "); + ПараметрыЗапуска.Добавить(ОбернутьВКавычки(ПутьКОтчету)); + + ВыполнитьКоманду(ПараметрыЗапуска); + +КонецПроцедуры + +// Функция проверяет что основная конфигурация\конфигурация расширения идентична с файлом +// +// Параметры: +// ПутьКФайлуКонфигурации - Строка - Путь к файлу cf/cfe с которым необходимо произвести сравнение +// ИмяРасширения - Строка - Имя расширения конфигурации +// +// Возвращаемое значение: +// Булево - Истина - конфигурации идентичны. +// +Функция КонфигурацияИФайлИдентичны(Знач ПутьКФайлуКонфигурации, Знач ИмяРасширения = "") Экспорт + + ЭталонОтчетаБезИзменений = НСтр( + "ru = ' + |***- Объект изменен + |-->- Объект присутствует только в %1 конфигурации + |<--- Объект присутствует только в файле + |^- Порядок объекта изменен' + |; + |en = ' + |***- Object changed + |-->- Object available only in the %1 + |<--- Object available only in the file + |^- Object order changed'", + мКонтекстКоманды.КодЯзыкаСеанса + ); + + Если ЗначениеЗаполнено(ИмяРасширения) Тогда + СтрокаДополнения = НСтр("ru = 'расширении'; en = 'configuration extension'", мКонтекстКоманды.КодЯзыкаСеанса); + Иначе + СтрокаДополнения = НСтр("ru = 'основной'; en = 'main configuration'", мКонтекстКоманды.КодЯзыкаСеанса); + КонецЕсли; + + ОтчетБезИзменений = СтрШаблон( + ЭталонОтчетаБезИзменений, + СтрокаДополнения + ); + + Лог.Отладка("Сформировал эталон отчета о сравнении: " + ОтчетБезИзменений); + + ПутьКФайлуОтчета = ПолучитьИмяВременногоФайла(".txt"); + + Лог.Отладка("Формирую отчет о сравнении конфигураций"); + + ПолучитьОтчетОСравненииКонфигурацииСФайлом( + ПутьКФайлуКонфигурации, + ПутьКФайлуОтчета, + ТипыОтчетовОСравнении.Краткий, + "txt", + ИмяРасширения + ); + + ФайлОтчета = Новый Файл(ПутьКФайлуОтчета); + + Если ФайлОтчета.Существует() Тогда + + Лог.Отладка("Нашёл файл отчета о сранении. Читаю файл."); + + ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуОтчета); + СтрокаТекста = ЧтениеТекста.ПрочитатьСтроку(); + Отчет = ""; + + Пока СтрокаТекста <> Неопределено Цикл + + Если Не ПустаяСтрока(СтрокаТекста) Тогда + Отчет = Отчет + Символы.ПС + СокрЛП(СтрокаТекста); + КонецЕсли; + + СтрокаТекста = ЧтениеТекста.ПрочитатьСтроку(); + КонецЦикла; + + ЧтениеТекста.Закрыть(); + + Лог.Отладка("Прочитал файл отчета о сравнении: " + Отчет); + + Попытка + Лог.Отладка("Удаляю файл отчёта 1С"); + УдалитьФайлы(ФайлОтчета.ПолноеИмя); + Исключение + Лог.Предупреждение("Не удалось удалить файл отчёта: " + ОписаниеОшибки()); + КонецПопытки; + + Возврат Отчет = ОтчетБезИзменений; + + Иначе + Лог.Ошибка("Не сформирован файл сравнения конфигураций"); + КонецЕсли; + + Возврат Ложь; + +КонецФункции ////////////////////////////////////////////////////////////////////////////////// // Служебные процедуры diff --git "a/src/\320\242\320\270\320\277\321\213\320\236\321\202\321\207\320\265\321\202\320\276\320\262\320\236\320\241\321\200\320\260\320\262\320\275\320\265\320\275\320\270\320\270.os" "b/src/\320\242\320\270\320\277\321\213\320\236\321\202\321\207\320\265\321\202\320\276\320\262\320\236\320\241\321\200\320\260\320\262\320\275\320\265\320\275\320\270\320\270.os" new file mode 100644 index 0000000..1ca072c --- /dev/null +++ "b/src/\320\242\320\270\320\277\321\213\320\236\321\202\321\207\320\265\321\202\320\276\320\262\320\236\320\241\321\200\320\260\320\262\320\275\320\265\320\275\320\270\320\270.os" @@ -0,0 +1,7 @@ +Перем Краткий Экспорт; +Перем Полный Экспорт; + +/////////////////////////////////////////////////////////////// + +Краткий = "Brief"; +Полный = "Full"; diff --git a/tests/v8runner-test.os b/tests/v8runner-test.os index 7d66264..3819a73 100644 --- a/tests/v8runner-test.os +++ b/tests/v8runner-test.os @@ -28,7 +28,11 @@ СписокТестов.Добавить("ТестДолжен_ПроверитьСозданиеФайловПоставки"); СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеФайлаОтчетПоВерсиямХранилища"); СписокТестов.Добавить("ТестДолжен_СкопироватьПользователейИзХранилища"); - СписокТестов.Добавить("ТестДолжен_ОставитьФайлИнформации"); + СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеФайлаОтчетаОСравненииОсновнойКонфигурацииСФайлом"); + СписокТестов.Добавить("ТестДолжен_ПроверитьОсновнаяКонфигурацияИдентичнаФайлу"); + СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеФайлаОтчетаОСравненииКонфигурацииРасширенияСФайлом"); + СписокТестов.Добавить("ТестДолжен_ПроверитьКонфигурацияРасширенияИдентичнаФайлу"); + СписокТестов.Добавить("ТестДолжен_ОставитьФайлИнформации"); Возврат СписокТестов; @@ -381,6 +385,136 @@ КонецПроцедуры +Процедура ТестДолжен_ПроверитьФормированиеФайлаОтчетаОСравненииОсновнойКонфигурацииСФайлом() Экспорт + + ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); + + УправлениеКонфигуратором.КаталогСборки(ВременныйКаталог); + ПутьКФайлуОтчета = ПолучитьИмяВременногоФайла("txt"); + + ФайлКонфигурации = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "1.0", "1Cv8.cf"); + + УправлениеКонфигуратором.ЗагрузитьКонфигурациюИзФайла(ФайлКонфигурации); + + УправлениеКонфигуратором.ПолучитьОтчетОСравненииКонфигурацииСФайлом( + ФайлКонфигурации, + ПутьКФайлуОтчета + ); + + ФайлОтчетаСуществует = ФС.ФайлСуществует(ПутьКФайлуОтчета); + + ВременныеФайлы.УдалитьФайл( ПутьКФайлуОтчета ); + ВременныеФайлы.УдалитьФайл( ВременныйКаталог ); + УправлениеКонфигуратором.УдалитьВременнуюБазу(); + + Утверждения.ПроверитьИстину( + Не ФС.ФайлСуществует(УправлениеКонфигуратором.ФайлИнформации()), + "Внутренний файл информации не должен существовать" + ); + + Утверждения.ПроверитьИстину( + ФайлОтчетаСуществует, + "Отчет о сравнении конфигурации с файлом должен существовать" + ); + +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьОсновнаяКонфигурацияИдентичнаФайлу() Экспорт + + ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); + + УправлениеКонфигуратором.КаталогСборки(ВременныйКаталог); + + ФайлКонфигурации = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "1.0", "1Cv8.cf"); + + УправлениеКонфигуратором.ЗагрузитьКонфигурациюИзФайла(ФайлКонфигурации); + + КонфигурацииИдентичны = УправлениеКонфигуратором.КонфигурацияИФайлИдентичны( + ФайлКонфигурации + ); + + УправлениеКонфигуратором.УдалитьВременнуюБазу(); + УдалитьФайлы(ВременныйКаталог); + + Утверждения.ПроверитьИстину(КонфигурацииИдентичны, "Конфигурации отличаются"); + Утверждения.ПроверитьИстину( + Не ФС.ФайлСуществует(УправлениеКонфигуратором.ФайлИнформации()), + "Внутренний файл информации не должен существовать" + ); + +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьФормированиеФайлаОтчетаОСравненииКонфигурацииРасширенияСФайлом() Экспорт + + ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); + + УправлениеКонфигуратором.КаталогСборки(ВременныйКаталог); + ПутьКФайлуОтчета = ПолучитьИмяВременногоФайла("txt"); + + ФайлКонфигурации = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "1.0", "1Cv8.cf"); + ФайлРасширения = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "1.0", "1Cv8.cfe"); + + ИмяРасширения = "Test_Extension"; + + УправлениеКонфигуратором.ЗагрузитьКонфигурациюИзФайла(ФайлКонфигурации); + УправлениеКонфигуратором.ЗагрузитьРасширениеИзФайла(ФайлРасширения, ИмяРасширения); + + УправлениеКонфигуратором.ПолучитьОтчетОСравненииКонфигурацииСФайлом( + ФайлРасширения, + ПутьКФайлуОтчета, + , + , + ИмяРасширения + ); + + ФайлОтчетаСуществует = ФС.ФайлСуществует(ПутьКФайлуОтчета); + + ВременныеФайлы.УдалитьФайл( ПутьКФайлуОтчета ); + ВременныеФайлы.УдалитьФайл( ВременныйКаталог ); + УправлениеКонфигуратором.УдалитьВременнуюБазу(); + + Утверждения.ПроверитьИстину( + Не ФС.ФайлСуществует(УправлениеКонфигуратором.ФайлИнформации()), + "Внутренний файл информации не должен существовать" + ); + + Утверждения.ПроверитьИстину( + ФайлОтчетаСуществует, + "Отчет о сравнении конфигурации с файлом должен существовать" + ); + +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьКонфигурацияРасширенияИдентичнаФайлу() Экспорт + + ВременныйКаталог = ВременныеФайлы.СоздатьКаталог(); + + УправлениеКонфигуратором.КаталогСборки(ВременныйКаталог); + + ФайлКонфигурации = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "1.0", "1Cv8.cf"); + ФайлРасширения = ОбъединитьПути(ТекущийСценарий().Каталог, "fixtures", "1.0", "1Cv8.cfe"); + + ИмяРасширения = "Test_Extension"; + + УправлениеКонфигуратором.ЗагрузитьКонфигурациюИзФайла(ФайлКонфигурации); + УправлениеКонфигуратором.ЗагрузитьРасширениеИзФайла(ФайлРасширения, ИмяРасширения); + + КонфигурацииИдентичны = УправлениеКонфигуратором.КонфигурацияИФайлИдентичны( + ФайлРасширения, + ИмяРасширения + ); + + УправлениеКонфигуратором.УдалитьВременнуюБазу(); + ВременныеФайлы.УдалитьФайл(ВременныйКаталог); + + Утверждения.ПроверитьИстину(КонфигурацииИдентичны, "Конфигурации отличаются"); + Утверждения.ПроверитьИстину( + Не ФС.ФайлСуществует(УправлениеКонфигуратором.ФайлИнформации()), + "Внутренний файл информации не должен существовать" + ); + +КонецПроцедуры + Функция ХранилищеКонфигурацииСуществует(Знач ПапкаХранилища) Возврат ФС.ФайлСуществует( ОбъединитьПути(ПапкаХранилища, "1cv8ddb.1CD")); КонецФункции