Skip to content
Merged
Show file tree
Hide file tree
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
1 change: 1 addition & 0 deletions lib.config
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
<module name="ПраваПользователяХранилища" file="src/ПраваПользователяХранилища.os"/>
<module name="РежимВыгрузкиКонфигурации" file="src/РежимВыгрузкиКонфигурации.os"/>
<module name="ТипыГруппировкиОтчетаПоВерсиямХранилища" file="src/ТипыГруппировкиОтчетаПоВерсиямХранилища.os"/>
<module name="ТипыОтчетовОСравнении" file="src/ТипыОтчетовОСравнении.os"/>
<class name="УправлениеКонфигуратором" file="src/v8runner.os"/>
<class name="КонфигурацияСтартера" file="src/v8config-file.os"/>
</package-def>
2 changes: 2 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@
- Процедура ВыгрузитьРасширениеВФайл(Знач ПутьФайлРасширения, Знач ИмяРасширения)
- Процедура ЗагрузитьРасширениеИзФайлов(Знач КаталогЗагрузки, Знач ИмяРасширения = "–AllExtensions", Знач ПутьКСпискуФайловЗагрузки = "", Знач ФорматВыгрузки = "", Знач ОбновитьФайлВерсий = Истина)
- Процедура ВыгрузитьРасширениеВФайлы(Знач КаталогВыгрузки, Знач ИмяРасширения = "–AllExtensions", Знач ФорматВыгрузки = "", Знач ТолькоИзмененные = Ложь, Знач ПутьКФайлуВерсийДляСравнения = "")
- Процедура ПолучитьОтчетОСравненииКонфигурацииСФайлом(Знач ПутьКФайлуКонфигурации, Знач ПутьКОтчету, Знач ТипОтчета = Неопределено, Знач ФорматОтчета = "txt", Знач ИмяРасширения = "")
- Функция КонфигурацияИФайлИдентичны(Знач ПутьКФайлуКонфигурации, Знач ИмяРасширения = "")

### Вспомогательные и настроечные функции

Expand Down
146 changes: 146 additions & 0 deletions src/v8runner.os
Original file line number Diff line number Diff line change
Expand Up @@ -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С");
УдалитьФайлы(ФайлОтчета.ПолноеИмя);
Исключение
Лог.Предупреждение("Не удалось удалить файл отчёта: " + ОписаниеОшибки());
КонецПопытки;

Возврат Отчет = ОтчетБезИзменений;

Иначе
Лог.Ошибка("Не сформирован файл сравнения конфигураций");
КонецЕсли;

Возврат Ложь;

КонецФункции

//////////////////////////////////////////////////////////////////////////////////
// Служебные процедуры
Expand Down
7 changes: 7 additions & 0 deletions src/ТипыОтчетовОСравнении.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Перем Краткий Экспорт;
Перем Полный Экспорт;

///////////////////////////////////////////////////////////////

Краткий = "Brief";
Полный = "Full";
136 changes: 135 additions & 1 deletion tests/v8runner-test.os
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,11 @@
СписокТестов.Добавить("ТестДолжен_ПроверитьСозданиеФайловПоставки");
СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеФайлаОтчетПоВерсиямХранилища");
СписокТестов.Добавить("ТестДолжен_СкопироватьПользователейИзХранилища");
СписокТестов.Добавить("ТестДолжен_ОставитьФайлИнформации");
СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеФайлаОтчетаОСравненииОсновнойКонфигурацииСФайлом");
СписокТестов.Добавить("ТестДолжен_ПроверитьОсновнаяКонфигурацияИдентичнаФайлу");
СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеФайлаОтчетаОСравненииКонфигурацииРасширенияСФайлом");
СписокТестов.Добавить("ТестДолжен_ПроверитьКонфигурацияРасширенияИдентичнаФайлу");
СписокТестов.Добавить("ТестДолжен_ОставитьФайлИнформации");

Возврат СписокТестов;

Expand Down Expand Up @@ -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"));
КонецФункции
Expand Down