Skip to content

Commit

Permalink
feat: Добавлена поддержка внешних отчетов и обработок
Browse files Browse the repository at this point in the history
  • Loading branch information
yukon39 committed May 11, 2020
1 parent 5aaa637 commit cbccd54
Show file tree
Hide file tree
Showing 9 changed files with 323 additions and 62 deletions.
29 changes: 28 additions & 1 deletion api/convert-config-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,33 @@
"SourcePath"
],
"additionalProperties": false
},
"ExternalReportOrDataProcessor": {
"type": "object",
"properties": {
"URL": {
"type": "string"
},
"URLType": {
"type": "string",
"default": "file",
"enum": [
"file",
"raw"
]
},
"SourcePath": {
"type": "string"
},
"SourceFormat": {
"$ref": "#/definitions/SourceFormats"
}
},
"required": [
"URL",
"SourcePath"
],
"additionalProperties": false
}
},
"type": "object",
Expand All @@ -57,7 +84,7 @@
"ExternalReportsAndDataProcessors": {
"type": "array",
"items": {
"type": "object"
"$ref": "#/definitions/ExternalReportOrDataProcessor"
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

#Использовать configor
#Использовать "../../converter"
#Использовать "../internal/localization"
Expand All @@ -11,53 +10,53 @@
Процедура ОписаниеКоманды(Команда) Экспорт

Команда.Опция("i input", "", ЛокализованныеСтроки.ИсходныйФайл)
.ТСтрока()
.Обязательный();

.ТСтрока()
.Обязательный();
Команда.Опция("o output", "", ЛокализованныеСтроки.ФайлРезультата)
.ТСтрока()
.Обязательный();
.ТСтрока()
.Обязательный();

Команда.Опция("w workspace", "", ЛокализованныеСтроки.КаталогПроекта)
.ТСтрока();

.ТСтрока();
Команда.Опция("s sources", "", ЛокализованныеСтроки.КаталогИсходников)
.ТСтрока();

.ТСтрока();
Команда.Опция("f format", "XML", ЛокализованныеСтроки.ФорматИсходников)
.ТСтрока();

.ТСтрока();
Команда.Опция("c config", "", ЛокализованныеСтроки.КонфигурационныйФайл)
.ТСтрока();

.ТСтрока();
Команда.Опция("j json", Ложь, ЛокализованныеСтроки.ВнутреннийФормат)
.ТБулево();

.ТБулево();
КонецПроцедуры

Процедура ВыполнитьКоманду(Знач Команда) Экспорт

Лог = ПараметрыПриложения.Лог();
Если Команда.ЗначениеОпции("debug") Тогда
ПараметрыПриложения.ВключитьРежимОтладки();
КонецЕсли;

КаталогПроекта = Команда.ЗначениеОпции("workspace");
Если ПустаяСтрока(КаталогПроекта) Тогда
КаталогПроекта = ТекущийКаталог();
КонецЕсли;

Конвертер = Новый Конвертер(КаталогПроекта);

КонфигурационныйФайл = Команда.ЗначениеОпции("config");
Если ЗначениеЗаполнено(КонфигурационныйФайл) Тогда
ПрочитатьФайлКонфигурации(КонфигурационныйФайл, Конвертер);
КонецЕсли;

УстановитьПараметры(Команда, Конвертер);

ФайлПокрытия = Команда.ЗначениеОпции("input");
ФайлВывода = Команда.ЗначениеОпции("output");
ФайлВывода = Команда.ЗначениеОпции("output");

Конвертер.УстановитьФайлПокрытия(ФайлПокрытия);
Конвертер.УстановитьФайлВывода(ФайлВывода);
Expand All @@ -84,58 +83,106 @@
#Область СлужебныеПроцедурыИФункции

Процедура ПрочитатьФайлКонфигурации(КонфигурационныйФайл, Конвертер)

МенеджерПараметров = Новый МенеджерПараметров();
МенеджерПараметров.УстановитьФайлПараметров(КонфигурационныйФайл);
МенеджерПараметров.ИспользоватьПровайдерJSON();
МенеджерПараметров.Прочитать();

ПрочитатьПараметрыКонвертацииКонфигурации(МенеджерПараметров, Конвертер);
ПрочитатьПараметрыКонвертацииРасширений(МенеджерПараметров, Конвертер);
ПрочитатьПараметрыКонвертацииВнешнихМодулей(МенеджерПараметров, Конвертер);

КонецПроцедуры

Процедура ПрочитатьПараметрыКонвертацииКонфигурации(МенеджерПараметров, Конвертер)

КаталогИсходниковКонфигурации = МенеджерПараметров.Параметр("Configuration.SourcePath");
Если ЗначениеЗаполнено(КаталогИсходниковКонфигурации) Тогда

ФорматИсходныхФайлов = МенеджерПараметров.Параметр("Configuration.SourceFormat", ФорматыИсходныхФайлов.XML);

Конвертер.УстановитьКаталогИсходниковКонфигурации(КаталогИсходниковКонфигурации, ФорматИсходныхФайлов);

КонецЕсли;

КонецПроцедуры

Процедура ПрочитатьПараметрыКонвертацииРасширений(МенеджерПараметров, Конвертер)

Расширения = МенеджерПараметров.Параметр("Extensions");
Если ТипЗнч(Расширения) = Тип("Массив") Тогда
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
Возврат;
КонецЕсли;

ШаблонИмяРасширения = "Extensions.%1.Name";
ШаблонКаталогИсходныхФайлов = "Extensions.%1.SourcePath";
ШаблонФормат = "Extensions.%1.SourceFormat";
Для Индекс = 0 По Расширения.Количество() - 1 Цикл

ИндексСтрокой = XMLСтрока(Индекс);
ПараметрИмяРасширения = СтрШаблон(ШаблонИмяРасширения, ИндексСтрокой);
ПараметрКаталогИсходныхФайлов = СтрШаблон(ШаблонКаталогИсходныхФайлов, ИндексСтрокой);
ПараметрФормат = СтрШаблон(ШаблонФормат, ИндексСтрокой);

ИмяРасширения = МенеджерПараметров.Параметр(ПараметрИмяРасширения);
КаталогИсходныхФайлов = МенеджерПараметров.Параметр(ПараметрКаталогИсходныхФайлов);
Формат = МенеджерПараметров.Параметр(ПараметрФормат, ФорматыИсходныхФайлов.XML);

Конвертер.ДобавитьИсходныеФайлыРасширения(ИмяРасширения, КаталогИсходныхФайлов, Формат);
ШаблонИмяРасширения = "Extensions.%1.Name";
ШаблонКаталогИсходныхФайлов = "Extensions.%1.SourcePath";
ШаблонФормат = "Extensions.%1.SourceFormat";
Для Индекс = 0 По Расширения.Количество() - 1 Цикл

ИндексСтрокой = XMLСтрока(Индекс);
ПараметрИмяРасширения = СтрШаблон(ШаблонИмяРасширения, ИндексСтрокой);
ПараметрКаталогИсходныхФайлов = СтрШаблон(ШаблонКаталогИсходныхФайлов, ИндексСтрокой);
ПараметрФормат = СтрШаблон(ШаблонФормат, ИндексСтрокой);

ИмяРасширения = МенеджерПараметров.Параметр(ПараметрИмяРасширения);
КаталогИсходныхФайлов = МенеджерПараметров.Параметр(ПараметрКаталогИсходныхФайлов);
Формат = МенеджерПараметров.Параметр(ПараметрФормат, ФорматыИсходныхФайлов.XML);

Конвертер.ДобавитьИсходныеФайлыРасширения(ИмяРасширения, КаталогИсходныхФайлов, Формат);

КонецЦикла;

КонецПроцедуры

КонецЦикла;
Процедура ПрочитатьПараметрыКонвертацииВнешнихМодулей(МенеджерПараметров, Конвертер)

ВнешниеОтчетыИОбработки = МенеджерПараметров.Параметр("ExternalReportsAndDataProcessors");
Если ТипЗнч(ВнешниеОтчетыИОбработки) <> Тип("Массив") Тогда
Возврат;
КонецЕсли;


ШаблонФайлОтчетаОбработки = "ExternalReportsAndDataProcessors.%1.URL";
ШаблонТипURL = "ExternalReportsAndDataProcessors.%1.URLType";
ШаблонКаталогИсходныхФайлов = "ExternalReportsAndDataProcessors.%1.SourcePath";
ШаблонФормат = "ExternalReportsAndDataProcessors.%1.SourceFormat";
Для Индекс = 0 По ВнешниеОтчетыИОбработки.Количество() - 1 Цикл

ИндексСтрокой = XMLСтрока(Индекс);
ПараметрФайлОтчетаОбработки = СтрШаблон(ШаблонФайлОтчетаОбработки, ИндексСтрокой);
ПараметрТипURL = СтрШаблон(ШаблонТипURL, ИндексСтрокой);
ПараметрКаталогИсходныхФайлов = СтрШаблон(ШаблонКаталогИсходныхФайлов, ИндексСтрокой);
ПараметрФормат = СтрШаблон(ШаблонФормат, ИндексСтрокой);

ФайлОтчетаОбработки = МенеджерПараметров.Параметр(ПараметрФайлОтчетаОбработки);
КаталогИсходныхФайлов = МенеджерПараметров.Параметр(ПараметрКаталогИсходныхФайлов);
Формат = МенеджерПараметров.Параметр(ПараметрФормат, ФорматыИсходныхФайлов.XML);
ТипURL = МенеджерПараметров.Параметр(ПараметрТипURL, "file");

Если ТипURL = "file" Тогда
URLВнешнегоМодуля = СтрШаблон("file://%1", ФайлОтчетаОбработки);
Иначе
URLВнешнегоМодуля = ФайлОтчетаОбработки;
КонецЕсли;

Конвертер.ДобавитьИсходныеФайлыВнешнегоМодуля(URLВнешнегоМодуля, КаталогИсходныхФайлов, Формат);

КонецЦикла;

КонецПроцедуры

Процедура УстановитьПараметры(Команда, Конвертер)

КаталогИсходниковКонфигурации = Команда.ЗначениеОпции("sources");

Если ЗначениеЗаполнено(КаталогИсходниковКонфигурации) Тогда

ФорматИсходныхФайлов = Команда.ЗначениеОпции("format");

Конвертер.УстановитьКаталогИсходниковКонфигурации(КаталогИсходниковКонфигурации, ФорматИсходныхФайлов);

КонецЕсли;

КонецПроцедуры

#КонецОбласти
14 changes: 9 additions & 5 deletions internal/converter/Классы/Конвертер.os
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
Перем КонвертерыВнешнихМодулей;
Перем ИспользоватьВнутреннийФормат;

#Область ПрограммныйИнтерфейс
#Область СлужебныйПрограммныйИнтерфейс

Процедура УстановитьКаталогПроекта(ПараметрКаталогПроекта) Экспорт
КаталогПроекта = ПараметрКаталогПроекта;
Expand All @@ -30,25 +30,29 @@
КонецПроцедуры

Процедура УстановитьКаталогИсходниковКонфигурации(КаталогИсходныхФайлов, ФорматИсходныхФайлов) Экспорт
КонвертерКонфигурации = Новый КонвертерИменМодулей(КаталогПроекта, КаталогИсходныхФайлов, ФорматИсходныхФайлов);
КонвертерКонфигурации = Новый КонвертерИменМодулей(КаталогПроекта, КаталогИсходныхФайлов);
КонвертерКонфигурации.УстановитьОбработчикиПоискаМодулей(ФорматИсходныхФайлов);
КонецПроцедуры

Процедура ДобавитьИсходныеФайлыРасширения(ИмяРасширения, КаталогИсходныхФайлов, ФорматИсходныхФайлов) Экспорт

КонвертерРасширения = Новый КонвертерИменМодулей(КаталогПроекта, КаталогИсходныхФайлов, ФорматИсходныхФайлов);
КонвертерРасширения = Новый КонвертерИменМодулей(КаталогПроекта, КаталогИсходныхФайлов);
КонвертерРасширения.УстановитьОбработчикиПоискаМодулей(ФорматИсходныхФайлов);
КонвертерыРасширений.Вставить(ИмяРасширения, КонвертерРасширения);

КонецПроцедуры

Процедура ДобавитьИсходныеФайлыВнешнегоМодуля(URLМодуля, КаталогИсходныхФайлов, ФорматИсходныхФайлов) Экспорт

КонвертерВнешнегоМодуля = Новый КонвертерИменМодулей(КаталогПроекта, КаталогИсходныхФайлов, ФорматИсходныхФайлов);
КонвертерВнешнегоМодуля = Новый КонвертерИменМодулей(КаталогПроекта, КаталогИсходныхФайлов);
КонвертерВнешнегоМодуля.УстановитьОбработчикиПоискаВнешнихМодулей(ФорматИсходныхФайлов);
КонвертерыВнешнихМодулей.Вставить(URLМодуля, КонвертерВнешнегоМодуля);

КонецПроцедуры

Процедура РазобратьПокрытие() Экспорт

РазбиратьКонфигурацию = (ТипЗнч(КонвертерКонфигурации) = Тип("КонвертерИменМодулей"));
РазбиратьРасширения = (КонвертерыРасширений.Количество() > 0);
РазбиратьВнешниеМодули = (КонвертерыВнешнихМодулей.Количество() > 0);
ДанныеПокрытия = Новый Соответствие;
Expand All @@ -66,7 +70,7 @@
ПрограммныйМодуль = Неопределено;

ТипКонтейнера = СтрокаПокрытия.ModuleName;
Если ТипКонтейнера = ТипыКонтейнеровПрограммныхМодулей.МодульКонфигурации Тогда
Если РазбиратьКонфигурацию И ТипКонтейнера = ТипыКонтейнеровПрограммныхМодулей.МодульКонфигурации Тогда

ПрограммныйМодуль = НайтиМодульКонфигурации(СтрокаПокрытия);

Expand Down
Loading

0 comments on commit cbccd54

Please sign in to comment.