diff --git "a/example/src/CommonModules/\320\224\320\265\320\274\320\276_\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\320\241\320\265\321\200\320\262\320\270\321\201\320\260/Module.bsl" "b/example/src/CommonModules/\320\224\320\265\320\274\320\276_\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\320\241\320\265\321\200\320\262\320\270\321\201\320\260/Module.bsl"
index 586a05d..7e79214 100644
--- "a/example/src/CommonModules/\320\224\320\265\320\274\320\276_\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\320\241\320\265\321\200\320\262\320\270\321\201\320\260/Module.bsl"
+++ "b/example/src/CommonModules/\320\224\320\265\320\274\320\276_\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\320\241\320\265\321\200\320\262\320\270\321\201\320\260/Module.bsl"
@@ -2,6 +2,8 @@
#Область СлужебныйПрограммныйИнтерфейс
+#Область ОбработчикиЗапросов
+
// Создать заявку.
//
// Параметры:
@@ -122,18 +124,10 @@
// HTTPСервисОтвет - Ответ
Функция ПолучитьПроект(Запрос, МетаданныеСервиса) Экспорт
- ПараметрАйдиПроекта = СервисыОбщее.НовыйПараметрЗапроса("project_id", "ИД", Истина);
- ПараметрКод = СервисыОбщее.НовыйПараметрЗапроса("code", "Число");
- ПараметрУдален = СервисыОбщее.НовыйПараметрЗапроса("deleted", "Булево");
- ПараметрСтатус = СервисыОбщее.НовыйПараметрЗапроса("status");
- ПараметрСтатус.ВозможныеЗначения.Добавить("active");
- ПараметрСтатус.ВозможныеЗначения.Добавить("disabled");
-
- ОжидаемыеПараметры = Новый Массив();
- ОжидаемыеПараметры.Добавить(ПараметрАйдиПроекта);
- ОжидаемыеПараметры.Добавить(ПараметрКод);
- ОжидаемыеПараметры.Добавить(ПараметрУдален);
- ОжидаемыеПараметры.Добавить(ПараметрСтатус);
+ ОжидаемыеПараметры = ОбщегоНазначенияХТТП.ДополнитьМассив(
+ ПараметрыШаблона_projects_single(),
+ ПараметрыМетода_ПолучитьПроект()
+ ); // Массив
ПараметрыЗапроса = СервисыОбщее.ПараметрыЗапроса(
Запрос,
@@ -211,11 +205,65 @@
Возврат XMLСтрока(Значение);
КонецЕсли;
КонецФункции
+#КонецОбласти
+
+
+#Область OAS
+
+// Параметры шаблонов URL.
+//
+// Возвращаемое значение:
+// Соответствие из КлючИЗначение - Параметры шаблонов URL:
+// * Ключ - ОбъектМетаданныхШаблонURLHTTPСервиса
+// * Значение - Массив из см. СервисыОбщее.НовыйПараметрЗапроса
+Функция ПараметрыШаблоновURL() Экспорт
+ Результат = Новый Соответствие();
+ Результат.Вставить(Метаданные.HTTPСервисы.Демо_.ШаблоныURL.projects_single, ПараметрыШаблона_projects_single());
+ Возврат Результат;
+КонецФункции
+
+// Параметры методов.
+//
+// Возвращаемое значение:
+// Соответствие из КлючИЗначение - Параметры шаблонов URL:
+// * Ключ - ОбъектМетаданныхМетодHTTPСервиса
+// * Значение - Массив из см. СервисыОбщее.НовыйПараметрЗапроса
+Функция ПараметрыМетодов() Экспорт
+ Результат = Новый Соответствие();
+ Результат.Вставить(Метаданные.HTTPСервисы.Демо_.ШаблоныURL.projects_single.Методы.GET, ПараметрыМетода_ПолучитьПроект());
+ Возврат Результат;
+КонецФункции
+
+#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
+#Область СпецификацииМетодов
+
+Функция ПараметрыМетода_ПолучитьПроект()
+ ОжидаемыеПараметры = Новый Массив();
+ ПараметрКод = СервисыОбщее.НовыйПараметрЗапроса("code", "Число");
+ ПараметрУдален = СервисыОбщее.НовыйПараметрЗапроса("deleted", "Булево");
+ ПараметрСтатус = СервисыОбщее.НовыйПараметрЗапроса("status");
+ ПараметрСтатус.ВозможныеЗначения.Добавить("active");
+ ПараметрСтатус.ВозможныеЗначения.Добавить("disabled");
+ ОжидаемыеПараметры.Добавить(ПараметрКод);
+ ОжидаемыеПараметры.Добавить(ПараметрУдален);
+ ОжидаемыеПараметры.Добавить(ПараметрСтатус);
+ Возврат ОжидаемыеПараметры;
+КонецФункции
+
+Функция ПараметрыШаблона_projects_single()
+ ОжидаемыеПараметры = Новый Массив();
+ ПараметрАйдиПроекта = СервисыОбщее.НовыйПараметрЗапроса("project_id", "ИД", Истина);
+ ОжидаемыеПараметры.Добавить(ПараметрАйдиПроекта);
+ Возврат ОжидаемыеПараметры;
+КонецФункции
+
+#КонецОбласти
+
// Общие параметры преобразования.
//
// Параметры:
diff --git a/example/src/Configuration/Configuration.mdo b/example/src/Configuration/Configuration.mdo
index 9b1c7e4..2965ece 100644
--- a/example/src/Configuration/Configuration.mdo
+++ b/example/src/Configuration/Configuration.mdo
@@ -50,4 +50,5 @@
Catalog.Демо_Проекты
Document.Демо_Заявка
Document.Демо_Сообщение
+ DataProcessor.ГенераторСхемыКонфигурации
diff --git "a/example/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\241\321\205\320\265\320\274\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Form.form" "b/example/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\241\321\205\320\265\320\274\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Form.form"
new file mode 100644
index 0000000..8b7cd95
--- /dev/null
+++ "b/example/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\241\321\205\320\265\320\274\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Form.form"
@@ -0,0 +1,154 @@
+
+
+
+ Реквизит1
+ 1
+ true
+ true
+
+ true
+
+
+ Реквизит1
+
+
+ Реквизит1РасширеннаяПодсказка
+ 3
+ true
+ true
+
+ true
+
+ Label
+ true
+ true
+
+ Left
+
+
+
+ Реквизит1КонтекстноеМеню
+ 2
+ true
+ true
+
+ true
+
+ true
+
+ InputField
+ Enter
+ true
+ Left
+ true
+
+ true
+ true
+ true
+ true
+ true
+ true
+ true
+
+
+
+ СобратьСхему
+ 4
+ true
+ true
+
+ true
+
+
+ СобратьСхемуРасширеннаяПодсказка
+ 5
+ true
+ true
+
+ true
+
+ Label
+ true
+ true
+
+ Left
+
+
+ UsualButton
+ Form.Command.СобратьСхему
+ Auto
+ true
+ true
+ UserCmds
+ Auto
+
+
+ ФормаКоманднаяПанель
+ -1
+ true
+ true
+
+ true
+
+ Left
+ true
+
+ true
+ true
+ Vertical
+ true
+ true
+ true
+ true
+ true
+
+ Объект
+ 1
+
+ DataProcessorObject.ГенераторСхемыКонфигурации
+
+
+ true
+
+
+ true
+
+ true
+
+
+ Реквизит1
+ 2
+
+ String
+
+
+
+ true
+
+
+ true
+
+
+
+ СобратьСхему
+
+ ru
+ Собрать схему
+
+ 1
+
+
+
+ СобратьСхему
+
+
+ Auto
+
+
+
+
+
+
+
diff --git "a/example/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\241\321\205\320\265\320\274\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Module.bsl" "b/example/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\241\321\205\320\265\320\274\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Module.bsl"
new file mode 100644
index 0000000..4a38d94
--- /dev/null
+++ "b/example/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\241\321\205\320\265\320\274\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260/Module.bsl"
@@ -0,0 +1,91 @@
+
+&НаКлиенте
+Процедура СобратьСхему(Команда)
+ СобратьСхемуНаСервере();
+КонецПроцедуры
+
+&НаСервере
+Процедура СобратьСхемуНаСервере()
+ Генератор = ГенераторOAS.НовыйГенераторСхемы();
+ Генератор
+ .ДобавитьИнфо("Тестовая схема", "1.0")
+ .ДобавитьКонтакт("daabramov", , "i@dima-abramov.ru")
+ .ДобавитьЛицензию("MIT")
+ .ДобавитьСервер("http://localhost/api");
+
+ ПараметрыШаблонов = Демо_КонтроллерСервиса.ПараметрыШаблоновURL();
+ ПараметрыМетодов = Демо_КонтроллерСервиса.ПараметрыМетодов();
+
+ Для Каждого Шаблон Из Метаданные.HTTPСервисы.Демо_.ШаблоныURL Цикл
+
+ Генератор.ДобавитьПуть(Шаблон.Шаблон, Шаблон.Синоним, Шаблон.Комментарий);
+
+ ПараметрыПути = ПараметрыШаблонов.Получить(Шаблон);
+ Если ПараметрыПути <> Неопределено Тогда
+ Для Каждого Параметр Из ПараметрыПути Цикл
+ Генератор.ДобавитьПараметр(Параметр.Имя, "path", Истина, ТипПараметраСхемыПоОписанию(Параметр, Генератор));
+ КонецЦикла;
+ КонецЕсли;
+
+ Для Каждого Метод Из Шаблон.Методы Цикл
+
+ Генератор.ДобавитьМетод(НРег(Строка(Метод.HTTPМетод)), Метод.Синоним, Метод.Комментарий);
+
+ ПараметрыМетода = ПараметрыМетодов.Получить(Метод);
+ Если ПараметрыМетода <> Неопределено Тогда
+ Для Каждого Параметр Из ПараметрыМетода Цикл
+ Генератор.ДобавитьПараметр(
+ Параметр.Имя,
+ "query",
+ Параметр.Обязательный,
+ ТипПараметраСхемыПоОписанию(Параметр, Генератор)
+ );
+ КонецЦикла;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ КонецЦикла;
+
+ Реквизит1 = Генератор.ПолучитьСхему();
+
+КонецПроцедуры
+
+// Тип параметра схемы по описанию.
+//
+// Параметры:
+// Параметр - см. СервисыОбщее.НовыйПараметрЗапроса
+// ГенераторСхемы - ОбработкаОбъект.ГенераторOAS
+//
+// Возвращаемое значение:
+&НаСервере
+Функция ТипПараметраСхемыПоОписанию(Параметр, ГенераторСхемы)
+
+ Результат = ГенераторСхемы.ДоступныеТипы[Врег(Параметр.Тип)];
+
+ Если Параметр.ВозможныеЗначения.Количество() > 0 Тогда
+ Результат = Новый Структура(Результат);
+ Результат.Вставить("enum", Параметр.ВозможныеЗначения);
+ Возврат Новый ФиксированнаяСтруктура(Результат);
+ Иначе
+ Возврат Результат;
+ КонецЕсли;
+
+КонецФункции
+
+&НаСервере
+Функция ПараметрыВПути(Шаблон)
+ ПараметрыВПути = Новый Массив;
+ СоставПути = СтрРазделить(Шаблон, "/", Ложь);
+
+ Для Каждого Элемент Из СоставПути Цикл
+
+ Если Лев(Элемент, 1) = "{" И Прав(Элемент, 1) = "}" Тогда
+ ПараметрыВПути.Добавить(Сред(Элемент, 2, СтрДлина(Элемент) - 2));
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Возврат ПараметрыВПути;
+
+КонецФункции
diff --git "a/example/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\241\321\205\320\265\320\274\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\241\321\205\320\265\320\274\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.mdo" "b/example/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\241\321\205\320\265\320\274\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\241\321\205\320\265\320\274\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.mdo"
new file mode 100644
index 0000000..3ae82b1
--- /dev/null
+++ "b/example/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\241\321\205\320\265\320\274\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200\320\241\321\205\320\265\320\274\321\213\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270.mdo"
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ ГенераторСхемыКонфигурации
+
+ ru
+ Генератор схемы конфигурации
+
+ true
+ DataProcessor.ГенераторСхемыКонфигурации.Form.Форма
+
+ Форма
+
+ ru
+ Форма
+
+ PersonalComputer
+ MobileDevice
+
+
diff --git "a/example/src/HTTPServices/\320\224\320\265\320\274\320\276_/\320\224\320\265\320\274\320\276_.mdo" "b/example/src/HTTPServices/\320\224\320\265\320\274\320\276_/\320\224\320\265\320\274\320\276_.mdo"
index 4297463..c295ee9 100644
--- "a/example/src/HTTPServices/\320\224\320\265\320\274\320\276_/\320\224\320\265\320\274\320\276_.mdo"
+++ "b/example/src/HTTPServices/\320\224\320\265\320\274\320\276_/\320\224\320\265\320\274\320\276_.mdo"
@@ -14,6 +14,7 @@
ru
Projects
+ Работа со списком проектов
/v1/projects/
POST
@@ -39,6 +40,7 @@
ru
Requests
+ Работа со списком запросов
/v1/requests/
POST
@@ -64,6 +66,7 @@
ru
Projects single
+ Работа с конкретным проектом
/v1/projects/{project_id}
GET
@@ -80,6 +83,7 @@
ru
Projects single files
+ Работы с файлами проекта
/v1/projects/{project_id}/files
GET
diff --git "a/src/src/CommonModules/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/Module.bsl" "b/src/src/CommonModules/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/Module.bsl"
new file mode 100644
index 0000000..058fbee
--- /dev/null
+++ "b/src/src/CommonModules/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/Module.bsl"
@@ -0,0 +1,26 @@
+// @strict-types
+// @skip-check constructor-function-return-section
+
+#Область ПрограммныйИнтерфейс
+
+// Новый генератор схемы.
+//
+// Возвращаемое значение:
+// ОбработкаОбъект.ГенераторOAS - Новый генератор схемы
+Функция НовыйГенераторСхемы() Экспорт
+ Возврат Обработки.ГенераторOAS.Создать();
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+// Код процедур и функций
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+
+
+#КонецОбласти
diff --git "a/src/src/CommonModules/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS.mdo" "b/src/src/CommonModules/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS.mdo"
new file mode 100644
index 0000000..08419b2
--- /dev/null
+++ "b/src/src/CommonModules/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS.mdo"
@@ -0,0 +1,11 @@
+
+
+ ГенераторOAS
+
+ ru
+ Генератор OAS
+
+ true
+ true
+ true
+
diff --git "a/src/src/CommonModules/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260HTTP\320\227\320\260\320\277\321\200\320\276\321\201\320\276\320\262/Module.bsl" "b/src/src/CommonModules/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260HTTP\320\227\320\260\320\277\321\200\320\276\321\201\320\276\320\262/Module.bsl"
index cfe55b4..c9dcace 100644
--- "a/src/src/CommonModules/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260HTTP\320\227\320\260\320\277\321\200\320\276\321\201\320\276\320\262/Module.bsl"
+++ "b/src/src/CommonModules/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260HTTP\320\227\320\260\320\277\321\200\320\276\321\201\320\276\320\262/Module.bsl"
@@ -58,10 +58,7 @@
ИтоговыйТекстОшибки = ?(
ОбработкаЗапросовПовтИсп.ВыводитьПодробноеОписаниеОшибок(),
- СтрШаблон(
- "%1",
- ПодробныйТекстОшибки
- ),
+ ПодробныйТекстОшибки,
""
);
diff --git "a/src/src/CommonModules/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\245\320\242\320\242\320\237/Module.bsl" "b/src/src/CommonModules/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\245\320\242\320\242\320\237/Module.bsl"
index 125d3fc..bf8d7f1 100644
--- "a/src/src/CommonModules/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\245\320\242\320\242\320\237/Module.bsl"
+++ "b/src/src/CommonModules/\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\245\320\242\320\242\320\237/Module.bsl"
@@ -345,6 +345,40 @@
КонецПроцедуры
+// Дополняет массив МассивПриемник значениями из массива МассивИсточник.
+//
+// Параметры:
+// МассивПриемник - Массив - массив, в который необходимо добавить значения.
+// МассивИсточник - Массив - массив значений для заполнения.
+// ТолькоУникальныеЗначения - Булево - если истина, то в массив будут включены только уникальные значения.
+//
+Процедура ДополнитьМассив(МассивПриемник, МассивИсточник, ТолькоУникальныеЗначения = Ложь) Экспорт
+
+ Если ТолькоУникальныеЗначения Тогда
+
+ УникальныеЗначения = Новый Соответствие;
+
+ Для Каждого Значение Из МассивПриемник Цикл
+ УникальныеЗначения.Вставить(Значение, Истина);
+ КонецЦикла;
+
+ Для Каждого Значение Из МассивИсточник Цикл
+ Если УникальныеЗначения[Значение] = Неопределено Тогда
+ МассивПриемник.Добавить(Значение);
+ УникальныеЗначения.Вставить(Значение, Истина);
+ КонецЕсли;
+ КонецЦикла;
+
+ Иначе
+
+ Для Каждого Значение Из МассивИсточник Цикл
+ МассивПриемник.Добавить(Значение);
+ КонецЦикла;
+
+ КонецЕсли;
+
+КонецПроцедуры
+
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
diff --git "a/src/src/CommonModules/\320\241\320\265\321\200\320\262\320\270\321\201\321\213\320\236\320\261\321\211\320\265\320\265/Module.bsl" "b/src/src/CommonModules/\320\241\320\265\321\200\320\262\320\270\321\201\321\213\320\236\320\261\321\211\320\265\320\265/Module.bsl"
index 5e3e554..4b419a5 100644
--- "a/src/src/CommonModules/\320\241\320\265\321\200\320\262\320\270\321\201\321\213\320\236\320\261\321\211\320\265\320\265/Module.bsl"
+++ "b/src/src/CommonModules/\320\241\320\265\321\200\320\262\320\270\321\201\321\213\320\236\320\261\321\211\320\265\320\265/Module.bsl"
@@ -44,7 +44,7 @@
// Возвращаемое значение:
// Соответствие из КлючИЗначение - Параметры запроса:
// * Ключ - Строка
-// * Значение - Строка,Булево,Число
+// * Значение - Строка,Булево,Число,Дата
Функция ПараметрыЗапроса(Запрос, ПроверяемыеПараметры) Экспорт
ПараметрыЗапроса = Новый Соответствие();
@@ -93,6 +93,20 @@
Исключение
ВызватьИсключениеПроверки(СтрШаблон("failed to convert value [%1] to number", ЗначениеПараметра));
КонецПопытки;
+ ИначеЕсли Тип = "ДАТА" Тогда
+ Попытка
+ Дата = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "date"), ЗначениеПараметра);
+ ПараметрыЗапроса.Вставить(ЗапрашиваемыйПараметр.Имя, Дата.Значение);
+ Исключение
+ ВызватьИсключениеПроверки(СтрШаблон("value [%1] is not date", ЗначениеПараметра));
+ КонецПопытки;
+ ИначеЕсли Тип = "ДАТА_ВРЕМЯ" Тогда
+ Попытка
+ Дата = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "dateTime"), ЗначениеПараметра);
+ ПараметрыЗапроса.Вставить(ЗапрашиваемыйПараметр.Имя, Дата.Значение);
+ Исключение
+ ВызватьИсключениеПроверки(СтрШаблон("value [%1] is not dateTime", ЗначениеПараметра));
+ КонецПопытки;
ИначеЕсли Тип = "ИД" Тогда
Попытка
ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("https://github.com/Daabramov/1c-http-framework", "guid"), ЗначениеПараметра);
@@ -115,14 +129,14 @@
//
// Параметры:
// Имя - Строка - Имя
-// Тип - Строка - Описание типа строкой (Число,Строка,Булево,Ид)
+// Тип - Строка - Описание типа строкой (Число,Строка,Булево,Ид,Дата,ДатаВремя)
// Обязательный - Булево - Признак обязательности параметра
//
// Возвращаемое значение:
// Структура - Новый параметр запроса:
// * Имя - Строка
// * Обязательный - Булево
-// * Тип - Строка - Тип строкой "Число", "Строка", "Булево" или "Ид"
+// * Тип - Строка - Тип строкой "Число", "Строка", "Булево", "Дата", "ДатаВремя" или "Ид"
// * ВозможныеЗначения - Массив из Строка - возможные значения строк указывать в нижнем регистре
Функция НовыйПараметрЗапроса(Имя, Тип = "Строка", Обязательный = Ложь) Экспорт
diff --git a/src/src/Configuration/Configuration.mdo b/src/src/Configuration/Configuration.mdo
index 98b2d84..a137fd9 100644
--- a/src/src/Configuration/Configuration.mdo
+++ b/src/src/Configuration/Configuration.mdo
@@ -43,6 +43,7 @@
Role.ПолныеПрава
CommonModule.ВосстановлениеXDTO
CommonModule.ВосстановлениеXDTOПереопределяемый
+ CommonModule.ГенераторOAS
CommonModule.Кеширование
CommonModule.КоннекторХТТПСлужебный
CommonModule.ОбработкаHTTPЗапросов
@@ -53,5 +54,6 @@
CommonModule.ПроцессорыКоллекцийСлужебный
CommonModule.СервисыОбщее
XDTOPackage.ОбщегоНазначенияХТТП
+ DataProcessor.ГенераторOAS
DataProcessor.ПроцессорКоллекций
diff --git "a/src/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/ManagerModule.bsl" "b/src/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/ManagerModule.bsl"
new file mode 100644
index 0000000..abf5df5
--- /dev/null
+++ "b/src/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/ManagerModule.bsl"
@@ -0,0 +1,30 @@
+// @strict-types
+
+
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
+#Область ПрограммныйИнтерфейс
+
+// Код процедур и функций
+
+#КонецОбласти
+
+#Область ОбработчикиСобытий
+
+// Код процедур и функций
+
+#КонецОбласти
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+// Код процедур и функций
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+// Код процедур и функций
+
+#КонецОбласти
+
+#КонецЕсли
diff --git "a/src/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/ObjectModule.bsl" "b/src/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/ObjectModule.bsl"
new file mode 100644
index 0000000..b5c71a9
--- /dev/null
+++ "b/src/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/ObjectModule.bsl"
@@ -0,0 +1,489 @@
+#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
+
+#Область ОписаниеПеременных
+
+Перем Схема; // см. КорневаяСхема
+Перем ТекущийШаблонURL; // см. НовыйОписаниеШаблонаURL
+Перем ТекущийМетодURL; // см. НовыйБлокМетода
+Перем ТекущийКомпонент; // см. НовыйБлокКомпонента
+Перем ТекущийБлокПараметров; // Массив
+Перем ДоступныеТипы Экспорт; // см. ДоступныеТипы
+#КонецОбласти
+
+#Область ПрограммныйИнтерфейс
+
+Функция ДобавитьИнфо(Заголовок, Версия, Описание = Неопределено) Экспорт
+ Схема.info = РазделИнфо(Заголовок, Версия, Описание);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция ДобавитьЛицензию(ИмяЛицензии, URLЛицензии = Неопределено) Экспорт
+ БлокЛицензии = НовыйБлокЛицензии(ИмяЛицензии, URLЛицензии);
+ Схема.info.Вставить("license", БлокЛицензии);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция ДобавитьКонтакт(ИмяКонтакта = Неопределено, URL = Неопределено, ПочтовыйАдрес = Неопределено) Экспорт
+
+ БлокКонтакт = НовыйБлокКонтактов();
+
+ Если ИмяКонтакта <> Неопределено Тогда
+ БлокКонтакт.name = ИмяКонтакта;
+ Иначе
+ БлокКонтакт.Удалить("name");
+ КонецЕсли;
+
+ Если URL <> Неопределено Тогда
+ БлокКонтакт.url = URL;
+ Иначе
+ БлокКонтакт.Удалить("url");
+ КонецЕсли;
+
+ Если ПочтовыйАдрес <> Неопределено Тогда
+ БлокКонтакт.email = ПочтовыйАдрес;
+ Иначе
+ БлокКонтакт.Удалить("email");
+ КонецЕсли;
+
+ Схема.info.Вставить("contact", БлокКонтакт);
+ Возврат ЭтотОбъект;
+
+КонецФункции
+
+Функция ДобавитьСервер(Адрес, Описание = Неопределено) Экспорт
+ ИнфоСервера = НовыйСервер(Адрес, Описание);
+ Схема.servers.Добавить(ИнфоСервера);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция ДобавитьТег(ИмяТега, Описание = Неопределено) Экспорт
+ Тег = НовыйТэг(ИмяТега, Описание);
+ Схема.tags.Добавить(Тег);
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция ДобавитьПуть(Путь, КраткоеОписание = Неопределено, ПолноеОписание = Неопределено) Экспорт
+ ОписаниеПути = НовыйОписаниеШаблонаURL();
+
+ Если КраткоеОписание <> Неопределено Тогда
+ ОписаниеПути.summary = КраткоеОписание;
+ Иначе
+ ОписаниеПути.Удалить("summary");
+ КонецЕсли;
+
+ Если ПолноеОписание <> Неопределено Тогда
+ ОписаниеПути.description = ПолноеОписание;
+ Иначе
+ ОписаниеПути.Удалить("description");
+ КонецЕсли;
+
+ Схема.paths.Вставить(Путь, ОписаниеПути);
+ ТекущийШаблонURL = Схема.paths.Получить(Путь);
+ ТекущийБлокПараметров = ТекущийШаблонURL.parameters;
+ Возврат ЭтотОбъект;
+
+КонецФункции
+
+Функция ДобавитьМетод(ИмяМетода, КраткоеОписание = Неопределено, ПолноеОписание = Неопределено) Экспорт
+ БлокМетода = НовыйБлокМетода();
+
+ Если КраткоеОписание <> Неопределено Тогда
+ БлокМетода.summary = КраткоеОписание;
+ Иначе
+ БлокМетода.Удалить("summary");
+ КонецЕсли;
+
+ Если ПолноеОписание <> Неопределено Тогда
+ БлокМетода.description = ПолноеОписание;
+ Иначе
+ БлокМетода.Удалить("description");
+ КонецЕсли;
+
+ ТекущийШаблонURL.Вставить(ИмяМетода, БлокМетода);
+ ТекущийМетодURL = ТекущийШаблонURL[ИмяМетода];
+ ТекущийБлокПараметров = ТекущийМетодURL.parameters;
+ Возврат ЭтотОбъект;
+КонецФункции
+
+Функция ПолучитьСхему() Экспорт
+ Возврат КоннекторХТТПСлужебный.ОбъектВJson(Схема);
+КонецФункции
+
+// Добавить параметр.
+//
+// Параметры:
+// ИмяПараметра - Строка
+// Локация - Строка
+// Обязательный - Булево
+// Тип - см. ОписаниеТипа
+//
+// Возвращаемое значение:
+// ОбработкаОбъект.ГенераторOAS - Добавить параметр
+Функция ДобавитьПараметр(ИмяПараметра, Локация, Обязательный, Тип = Неопределено) Экспорт
+ Параметр = НовыйБлокПараметраМетода();
+ Параметр.name = ИмяПараметра;
+ Параметр.in = Локация;
+ Параметр.required = Обязательный;
+
+ Если Тип = Неопределено Тогда
+ Параметр.Удалить("schema");
+ Иначе
+ Параметр.schema = Тип;
+ КонецЕсли;
+
+ ТекущийБлокПараметров.Добавить(Параметр);
+
+ Возврат ЭтотОбъект;
+КонецФункции
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+// Корневая схема.
+//
+// Возвращаемое значение:
+// Структура - Корневая схема:
+// * openapi - Строка
+// * info - Структура
+// * servers - Массив из см. НовыйСервер
+// * paths - Соответствие из КлючИЗначение:
+// ** Ключ - Строка
+// ** Значение - см. НовыйБлокМетода
+// * components - Структура из см. НовыйБлокКомпонента
+// * tags - Массив из см. НовыйТэг
+Функция КорневаяСхема()
+
+ Результат = Новый Структура();
+ Результат.Вставить("openapi", "3.0.0");
+ Результат.Вставить("info", Новый Структура());
+ Результат.Вставить("servers", Новый Массив());
+ Результат.Вставить("paths", Новый Соответствие());
+ Результат.Вставить("components", Новый Структура());
+ Результат.Вставить("tags", Новый Массив());
+ Возврат Результат;
+
+КонецФункции
+
+// Раздел инфо.
+//
+// Параметры:
+// Заголовок - Строка
+// Версия - Строка
+// Лицензия - см. НовыйБлокЛицензии
+// Контакты - см. НовыйБлокКонтактов
+// Описание - Строка
+//
+// Возвращаемое значение:
+// Структура - Раздел инфо:
+// * title - Строка
+// * version - Строка
+// * description - Строка
+// * termsOfService - Строка
+// * contact - см. НовыйБлокКонтактов
+// * license - см. НовыйБлокЛицензии
+Функция РазделИнфо(Заголовок, Версия, Описание = Неопределено)
+
+ Результат = Новый Структура();
+ Результат.Вставить("title", Заголовок);
+ Результат.Вставить("version", Версия);
+ Результат.Вставить("description", ?(ЗначениеЗаполнено(Описание), Описание, ""));
+ Результат.Вставить("termsOfService", "");
+
+ Возврат Результат;
+
+КонецФункции
+
+// Новый блок контактов.
+//
+// Возвращаемое значение:
+// Структура - Новый блок контактов:
+// * name - Строка
+// * url - Строка
+// * email - Строка
+Функция НовыйБлокКонтактов()
+
+ Результат = Новый Структура;
+
+ Результат.Вставить("name", "");
+ Результат.Вставить("url", "");
+ Результат.Вставить("email", "");
+
+ Возврат Результат;
+
+КонецФункции
+
+// Новый элемент сервер.
+//
+// Параметры:
+// Адрес - Строка - URI адреса сервера
+// Описание - Строка - Описание
+//
+// Возвращаемое значение:
+// Структура - Новый элемент сервер:
+// * url - Строка
+// * description - Строка
+Функция НовыйСервер(Адрес, Описание)
+
+ Результат = Новый Структура;
+
+ Результат.Вставить("url", Адрес);
+ Результат.Вставить("description", ?(ЗначениеЗаполнено(Описание), Описание, ""));
+
+ Возврат Результат;
+
+КонецФункции
+
+// Описывает блок лицензии
+//
+// Параметры:
+// ИмяЛицензии - Строка -
+// АдресЛицензии - Строка - Адрес лицензии
+//
+// Возвращаемое значение:
+// Структура - Новый блок лицензии:
+// * name - Строка
+// * url - Строка
+Функция НовыйБлокЛицензии(ИмяЛицензии, АдресЛицензии)
+
+ Результат = Новый Структура;
+ Результат.Вставить("name", ИмяЛицензии);
+ Результат.Вставить("url", ?(ЗначениеЗаполнено(АдресЛицензии), АдресЛицензии, ""));
+ Возврат Результат;
+
+КонецФункции
+
+// Описывает блок данных тэга
+//
+// Параметры:
+// ИмяТега - Строка
+// Описание - Строка
+//
+// Возвращаемое значение:
+// Структура - Новый тэг:
+// * name - Строка
+// * description - Строка
+Функция НовыйТэг(ИмяТега, Описание)
+
+ Результат = Новый Структура;
+ Результат.Вставить("name", ИмяТега);
+ Результат.Вставить("description", ?(ЗначениеЗаполнено(Описание), Описание, ""));
+ Возврат Результат;
+
+КонецФункции
+
+// Новый описание шаблона URL.
+//
+// Возвращаемое значение:
+// Структура - Новый описание шаблона URL:
+// * summary - Строка
+// * description - Строка
+// * parameters - Массив из см. НовыйБлокПараметраМетода
+Функция НовыйОписаниеШаблонаURL()
+
+ Результат = Новый Структура;
+
+ Результат.Вставить("summary", "");
+ Результат.Вставить("description", "");
+ Результат.Вставить("parameters", Новый Массив);
+
+ Возврат Результат;
+
+КонецФункции
+
+
+// Новый блок метода.
+//
+// Возвращаемое значение:
+// Структура - Новый блок метода:
+// * tags - Массив из Строка
+// * summary - Строка
+// * requestBody - см. новый
+// * description - Строка
+// * parameters - Массив из см. НовыйБлокПараметраМетода
+// * deprecated - Булево
+// * responses - Соответствие -
+Функция НовыйБлокМетода()
+
+ Результат = Новый Структура;
+
+ Результат.Вставить("tags", Новый Массив);
+ Результат.Вставить("summary");
+// Результат.Вставить("requestBody");
+ Результат.Вставить("description");
+ Результат.Вставить("parameters", Новый Массив);
+ Результат.Вставить("deprecated", Ложь);
+ Результат.Вставить("responses", Новый Соответствие);
+
+ Возврат Результат;
+
+КонецФункции
+
+// Новый блок параметра метода.
+//
+// Возвращаемое значение:
+// Структура - Новый блок параметра метода:
+// * name - Строка
+// * in - Строка
+// * required - Булево
+// * schema - Неопределено
+Функция НовыйБлокПараметраМетода()
+
+ Результат = Новый Структура;
+
+ Результат.Вставить("name");
+ Результат.Вставить("in");
+// Результат.Вставить("description");
+ Результат.Вставить("required");
+ Результат.Вставить("schema");
+
+ Возврат Результат;
+
+КонецФункции
+
+// Описывает блок ссылки на документацию
+//
+// Параметры:
+// URL - Строка
+// Описание - Строка
+//
+// Возвращаемое значение:
+// Структура - Новый блок ссылки на документацию:
+// * url - Строка
+// * description - Строка
+Функция НовыйБлокСсылкиНаДокументацию(URL, Описание = Неопределено)
+
+ Результат = Новый Структура;
+ Результат.Вставить("url", URL);
+ Результат.Вставить("description", ?(ЗначениеЗаполнено(Описание), Описание, ""));
+ Возврат Результат;
+
+КонецФункции
+
+// Описывает блок определений
+//
+// Возвращаемое значение:
+// Структура - структура данных
+//
+Функция НовыйБлокКомпонента()
+
+ Результат = Новый Структура;
+
+ Результат.Вставить("type");
+ Результат.Вставить("properties");
+
+ Возврат Результат;
+
+КонецФункции
+
+// Описывает блок свойства типа
+//
+// Возвращаемое значение:
+// Структура - структура данных
+//
+Функция НовыйБлокСвойстваТипа()
+
+ Результат = Новый Структура;
+
+ Результат.Вставить("type");
+ Результат.Вставить("format");
+ Результат.Вставить("description");
+ Результат.Вставить("items");
+
+ Возврат Результат;
+
+КонецФункции
+
+// Описывает блок ответа
+//
+// Возвращаемое значение:
+// Структура - структура данных
+//
+Функция НовыйБлокОтвета()
+
+ Результат = Новый Структура;
+
+ Результат.Вставить("description");
+ Результат.Вставить("content");
+
+ Возврат Результат;
+
+КонецФункции
+
+Функция НовыйБлокКонтента()
+ Результат = Новый Структура();
+ Результат.Вставить("schema");
+КонецФункции
+
+// Описывает указатель на тип
+//
+// Параметры:
+// Тип - Строка - тип данных
+// ЭтоМассив - Булево - признак массива
+//
+// Возвращаемое значение:
+// Соответствие - указатель
+//
+Функция НовыйУказательНаТип(Тип, ЭтоМассив = Ложь)
+
+ Результат = Новый Соответствие;
+
+ Если ЭтоМассив Тогда
+ ОписаниеМассива = Новый Соответствие;
+ ОписаниеМассива.Вставить("$ref", СтрШаблон("#/components/schemas/%1", Тип));
+ Результат.Вставить("items", ОписаниеМассива);
+ Результат.Вставить("type", "array");
+ Иначе
+ Результат.Вставить("$ref", СтрШаблон("#/components/schemas/%1", Тип));
+ КонецЕсли;
+
+ Возврат Результат;
+
+КонецФункции
+
+// Доступные типы.
+//
+// Возвращаемое значение:
+// ФиксированнаяСтруктура - Доступные типы:
+// * ЧИСЛО - см. ОписаниеТипа
+// * БУЛЕВО - см. ОписаниеТипа
+// * ДАТА - см. ОписаниеТипа
+// * ДАТА_ВРЕМЯ - см. ОписаниеТипа
+// * ИД - см. ОписаниеТипа
+// * СТРОКА - см. ОписаниеТипа
+Функция ДоступныеТипы()
+ Результат = Новый Структура();
+ Результат.Вставить("ЧИСЛО", ОписаниеТипа("number", ""));
+ Результат.Вставить("БУЛЕВО", ОписаниеТипа("boolean", ""));
+ Результат.Вставить("ДАТА", ОписаниеТипа("string", "date"));
+ Результат.Вставить("ДАТА_ВРЕМЯ", ОписаниеТипа("string", "date-time"));
+ Результат.Вставить("ИД", ОписаниеТипа("string", "uuid"));
+ Результат.Вставить("СТРОКА", ОписаниеТипа("string", ""));
+ Возврат Новый ФиксированнаяСтруктура(Результат);
+КонецФункции
+
+// Описание типа.
+//
+// Параметры:
+// Тип - Строка
+// Формат - Строка
+//
+// Возвращаемое значение:
+// ФиксированнаяСтруктура - Описание типа:
+// * type - Строка
+// * format - Строка
+Функция ОписаниеТипа(Тип, Формат)
+ Результат = Новый Структура("type,format", Тип, Формат);
+ Возврат Новый ФиксированнаяСтруктура(Результат);
+КонецФункции
+
+#КонецОбласти
+
+#Область Инициализация
+
+Схема = КорневаяСхема();
+ДоступныеТипы = ДоступныеТипы();
+
+#КонецОбласти
+
+#КонецЕсли
diff --git "a/src/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS.mdo" "b/src/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS.mdo"
new file mode 100644
index 0000000..15afacf
--- /dev/null
+++ "b/src/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS.mdo"
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ ГенераторOAS
+
+ ru
+ Генератор OAS
+
+ true
+
diff --git "a/src/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS.suppress" "b/src/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS.suppress"
new file mode 100644
index 0000000..719a843
--- /dev/null
+++ "b/src/src/DataProcessors/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS/\320\223\320\265\320\275\320\265\321\200\320\260\321\202\320\276\321\200OAS.suppress"
@@ -0,0 +1,4 @@
+
+
+
+