diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262/Ext/Module.bsl" index 5ee7963..2a13aae 100644 --- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262/Ext/Module.bsl" +++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262/Ext/Module.bsl" @@ -16,7 +16,7 @@ // Функция ВалидироватьОбъекты(Знач МассивОбъектов, Знач Спецификация, СтруктураИзСхемыОтвет, ОтветДанные, ИмяСхемы) Экспорт - Если МассивОбъектов = Неопределено Тогда + Если МассивОбъектов = Неопределено Тогда ВызватьИсключение НСтр("ru = 'Параметр МассивОбъектов не может быть Неопределено'"); КонецЕсли; @@ -36,7 +36,7 @@ МассивОбъектов = ПреобразоватьМассивОбъектов(МассивОбъектов); Для Каждого ОбъектМассива Из МассивОбъектов Цикл - РезультатВалидации = Валидировать(ОбъектМассива, ИмяСхемы, Спецификация); + РезультатВалидации = Обработки.пбп_ВалидаторПакетов.Валидировать(ОбъектМассива, ИмяСхемы, Спецификация); Если Не РезультатВалидации.Результат Тогда ТекстСообщения = ""; @@ -71,9 +71,17 @@ // Функция ВалидироватьПримитивныеТипы(Знач ВходящийМассив, Знач Спецификация, СтруктураИзСхемыОтвет, ОтветДанные, ИмяСхемы) Экспорт + Если ВходящийМассив = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Параметр ВходящийМассив не может быть Неопределено'"); + КонецЕсли; + + Если Спецификация = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Параметр Спецификация не может быть Неопределено'"); + КонецЕсли; + ИдентификаторыОшибокВалидации = Новый Массив; - РезультатВалидации = Валидировать(ВходящийМассив, ИмяСхемы, Спецификация); + РезультатВалидации = Обработки.пбп_ВалидаторПакетов.Валидировать(ВходящийМассив, ИмяСхемы, Спецификация); ОшибкаВалидации = Ложь; Если Не РезультатВалидации.Результат Тогда @@ -94,22 +102,6 @@ КонецФункции -// Возвращает список ошибок модели данных. -// -// Параметры: -// МодельДанных - Структура, Соответствие, Массив, Строка, Число - Проверяемый объект. -// ИмяСхемы - Строка - Имя схемы данных из спецификации. -// Спецификация - Строка - Спецификация OpenAPI 3.0 в формате JSON. -// -// Возвращаемое значение: -// Структура - Структура результата валидации. см. Обработки.пбп_ВалидаторПакетов.КонструкторРезультатВалидации -// -Функция Валидировать(Знач МодельДанных, Знач ИмяСхемы, Знач Спецификация) Экспорт // BSLLS:Typo-off - Обработка = Обработки.пбп_ВалидаторПакетов.Создать(); - РезультатВалидации = Обработка.Валидировать(МодельДанных, ИмяСхемы, Спецификация); - Возврат РезультатВалидации; -КонецФункции - // Конвертирует передаваемое значение в значение типа JSON // // Параметры: @@ -185,7 +177,7 @@ Для Каждого КлючИЗначение Из СвойстваОбъекта Цикл ТипИзСхемы = КлючИЗначение.Значение.Получить("type"); - Если ТипИзСхемы = "integer" Тогда + Если ТипИзСхемы = "integer" Или ТипИзСхемы = "number" Тогда БазовоеЗначение = 0; ИначеЕсли ТипИзСхемы = "boolean" Тогда БазовоеЗначение = Ложь; @@ -291,6 +283,9 @@ ТипИзСхемы = КлючИЗначение.Значение.Получить("type"); Если ТипИзСхемы = "integer" Тогда ТипКолонки = КонвертироватьТипЧисло(КлючИЗначение); + ИначеЕсли ТипИзСхемы = "number" Тогда + МаксимальнаяРазрядность = 20; + ТипКолонки = КонвертироватьТипЧисло(КлючИЗначение, МаксимальнаяРазрядность); ИначеЕсли ТипИзСхемы = "boolean" Тогда ТипКолонки = Новый ОписаниеТипов("Булево"); ИначеЕсли ТипИзСхемы = "string" Тогда @@ -517,13 +512,13 @@ КонецФункции -Функция КонвертироватьТипЧисло(КлючИЗначение) +Функция КонвертироватьТипЧисло(КлючИЗначение, Разрядность = 0) Если КлючИЗначение.Значение.Получить("maximum") <> Неопределено Тогда КоличествоСимволов = СтрДлина(Формат(КлючИЗначение.Значение.Получить("maximum"), "ЧГ=")); - ТипКолонки = пбп_Переадресация.ОписаниеТипаЧисло(КоличествоСимволов); + ТипКолонки = пбп_Переадресация.ОписаниеТипаЧисло(КоличествоСимволов, Разрядность); Иначе - ТипКолонки = пбп_Переадресация.ОписаниеТипаЧисло(10); + ТипКолонки = пбп_Переадресация.ОписаниеТипаЧисло(10, Разрядность); КонецЕсли; КонецФункции diff --git "a/src/cf/DataProcessors/\320\277\320\261\320\277_\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262/Ext/ObjectModule.bsl" "b/src/cf/DataProcessors/\320\277\320\261\320\277_\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262/Ext/ObjectModule.bsl" index 014c810..cb95a35 100644 --- "a/src/cf/DataProcessors/\320\277\320\261\320\277_\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262/Ext/ObjectModule.bsl" +++ "b/src/cf/DataProcessors/\320\277\320\261\320\277_\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262/Ext/ObjectModule.bsl" @@ -25,6 +25,7 @@ // Структура - Структура результата валидации. см.КонструкторРезультатВалидации // Функция Валидировать(Знач МодельДанных, Знач ИмяСхемы, Знач СпецификацияСтрокой) Экспорт // BSLLS:Typo-off + Спецификация = СпецификацияСтрокой; РезультатВалидации = КонструкторРезультатВалидации(); СхемыДанныхСпецификации = пбп_ВалидаторПакетовПовтИсп.СхемыДанныхСпецификации(Спецификация); @@ -112,7 +113,7 @@ Тип = ПолучитьТипOpenApiПоЗначениюСвойства(Данные.Значение); КонецЕсли; - + Если Тип = "string" Тогда ВалидироватьСтроку(Данные, ПроверяемаяСхема); ИначеЕсли Тип = "number" Тогда @@ -225,7 +226,7 @@ // Для работы сложных схем, нам понадобятся промежуточные результаты валидации. // Закэшируем накопленные ошибки, а после выполнения проверок вернем их на место. КэшОшибок = Новый Массив; - ДополнитьМассив(КэшОшибок, Ошибки); + пбп_ПереадресацияКлиентСервер.ДополнитьМассив(КэшОшибок, Ошибки); Дискриминатор = ПроверяемаяСхема.Получить("discriminator"); Если ЕстьСвойство("oneOf", ПроверяемаяСхема) Тогда ОбработатьСвойствоOneOf(Данные, ПроверяемаяСхема.Получить("oneOf"), Дискриминатор); @@ -238,7 +239,7 @@ ВызватьИсключение "Ошибка при разборе схемы! Не найдено ни одного из свойств oneOf, anyOf, allOf;"; КонецЕсли; - ДополнитьМассив(Ошибки, КэшОшибок); + пбп_ПереадресацияКлиентСервер.ДополнитьМассив(Ошибки, КэшОшибок); КонецПроцедуры Процедура ОбработатьСвойствоOneOf(Данные, МассивПроверяемыхСхем, Дискриминатор = Неопределено) @@ -251,10 +252,10 @@ Продолжить; КонецЕсли; ПроверяемаяСхема = РазыменоватьСхему(ТекущаяСхема); - Ошибки = Новый Массив; + Ошибки = Новый Массив; ВыполнитьВалидациюДанных(Данные, ПроверяемаяСхема); Если Ошибки.Количество() = 0 Тогда - МассивИндексовСхемПрошедшихВалидацию.Добавить(Индекс); + МассивИндексовСхемПрошедшихВалидацию.Добавить(Индекс); КонецЕсли; Если МассивИндексовСхемПрошедшихВалидацию.Количество() > 1 Тогда // Уже была успешная валидация по схеме, а значит это ошибка oneOf @@ -264,7 +265,7 @@ Возврат; КонецЕсли; - ДополнитьМассив(ПромежуточныйКэшОшибок, Ошибки); + пбп_ПереадресацияКлиентСервер.ДополнитьМассив(ПромежуточныйКэшОшибок, Ошибки); КонецЦикла; Если МассивИндексовСхемПрошедшихВалидацию.Количество() = 0 Тогда @@ -272,7 +273,7 @@ ТекстОшибки = СтрШаблон("%1 Объект должен соответствовать хотя бы одной схеме;", ШаблонБазовойОшибки); Ошибки.Добавить(ТекстОшибки); - ДополнитьМассив(Ошибки, ПромежуточныйКэшОшибок); + пбп_ПереадресацияКлиентСервер.ДополнитьМассив(Ошибки, ПромежуточныйКэшОшибок); Возврат; КонецЕсли; // Ровно одна схема прошла валидацию. Очистим массив ошибок, т.к. все ок. :) @@ -293,14 +294,14 @@ Если Ошибки.Количество() = 0 Тогда Возврат; КонецЕсли; - ДополнитьМассив(ПромежуточныйКэшОшибок, Ошибки); + пбп_ПереадресацияКлиентСервер.ДополнитьМассив(ПромежуточныйКэшОшибок, Ошибки); КонецЦикла; Ошибки = Новый Массив; ТекстОшибки = СтрШаблон("%1 Объект должен соответствовать хотя бы одной схеме;", ШаблонБазовойОшибки); Ошибки.Добавить(ТекстОшибки); - ДополнитьМассив(Ошибки, ПромежуточныйКэшОшибок); + пбп_ПереадресацияКлиентСервер.ДополнитьМассив(Ошибки, ПромежуточныйКэшОшибок); КонецПроцедуры @@ -331,7 +332,7 @@ // Для обработки not, нам понадобятся промежуточные результаты валидации. // Закэшируем накопленные ошибки, а после выполнения проверок вернем их на место. КэшОшибок = Новый Массив; - ДополнитьМассив(КэшОшибок, Ошибки); + пбп_ПереадресацияКлиентСервер.ДополнитьМассив(КэшОшибок, Ошибки); ОтрицательнаяСхема = ПроверяемаяСхема.Получить("not"); ОтрицательнаяСхема = РазыменоватьСхему(ОтрицательнаяСхема); @@ -348,7 +349,7 @@ Ошибки = Новый Массив(); КонецЕсли; - ДополнитьМассив(Ошибки, КэшОшибок); + пбп_ПереадресацияКлиентСервер.ДополнитьМассив(Ошибки, КэшОшибок); КонецПроцедуры @@ -425,7 +426,7 @@ ОписаниеТипа = Новый ОписаниеТипов(ОписаниеТипа, "УникальныйИдентификатор"); КонецЕсли; // BSLLS:IfElseIfEndsWithElse-off -Возврат ОписаниеТипа; + Возврат ОписаниеТипа; КонецФункции Процедура ПроверитьСтрокуНаСоответствиеФорматуИПаттерну(ЗначениеСвойства, ПроверяемаяСхема) @@ -482,18 +483,18 @@ Процедура ПроверитьПоРегулярномуВыражению(Значение, Паттерн, Формат) Если Не СтрПодобнаПоРегулярномуВыражению(Значение, Паттерн) Тогда - ПредставлениеОшибки = СтрШаблон("%1 Ожидался формат %2;", - ШаблонБазовойОшибки, Формат); - Ошибки.Добавить(ПредставлениеОшибки); + ПредставлениеОшибки = СтрШаблон("%1 Ожидался формат %2;", + ШаблонБазовойОшибки, Формат); + Ошибки.Добавить(ПредставлениеОшибки); КонецЕсли; КонецПроцедуры Процедура ПроверитьBase64(Значение) - Если Не ЗначениеЗаполнено(Base64Значение(Значение)) Тогда - ПредставлениеОшибки = СтрШаблон("%1 Ожидалось Base64 значение;", - ШаблонБазовойОшибки); - Ошибки.Добавить(ПредставлениеОшибки); - КонецЕсли; + Если Не ЗначениеЗаполнено(Base64Значение(Значение)) Тогда + ПредставлениеОшибки = СтрШаблон("%1 Ожидалось Base64 значение;", + ШаблонБазовойОшибки); + Ошибки.Добавить(ПредставлениеОшибки); + КонецЕсли; КонецПроцедуры Процедура ПроверитьМинимальнуюДлину(ЗначениеСвойства, ПроверяемаяСхема) @@ -643,7 +644,7 @@ Возврат; КонецЕсли; - СвернутыйМассив = СвернутьМассив(ПроверяемыйМассив); + СвернутыйМассив = пбп_ПереадресацияКлиентСервер.СвернутьМассив(ПроверяемыйМассив); Если Не СвернутыйМассив.Количество() = ПроверяемыйМассив.Количество() Тогда ТекстОшибки = СтрШаблон("%1 Значения в массиве не уникальны;", ШаблонБазовойОшибки); @@ -798,54 +799,6 @@ Возврат Ложь; КонецФункции -// Возвращает копию исходного массива с уникальными значениями. -// -// Параметры: -// Массив - Массив - массив произвольных значений. -// -// Возвращаемое значение: -// Массив - массив уникальных элементов. -// -Функция СвернутьМассив(Знач Массив) - Результат = Новый Массив; - ДополнитьМассив(Результат, Массив, Истина); - Возврат Результат; -КонецФункции - -// Дополняет массив МассивПриемник значениями из массива МассивИсточник. -// -// Параметры: -// МассивПриемник - Массив - массив, в который необходимо добавить значения. -// МассивИсточник - Массив - массив значений для заполнения. -// ТолькоУникальныеЗначения - Булево - если истина, то в массив будут включены только уникальные значения. -// -Процедура ДополнитьМассив(МассивПриемник, МассивИсточник, ТолькоУникальныеЗначения = Ложь) - - Если ТолькоУникальныеЗначения Тогда - - УникальныеЗначения = Новый Соответствие; - - Для Каждого Значение Из МассивПриемник Цикл - УникальныеЗначения.Вставить(Значение, Истина); - КонецЦикла; - - Для Каждого Значение Из МассивИсточник Цикл - Если УникальныеЗначения[Значение] = Неопределено Тогда - МассивПриемник.Добавить(Значение); - УникальныеЗначения.Вставить(Значение, Истина); - КонецЕсли; - КонецЦикла; - - Иначе - - Для Каждого Значение Из МассивИсточник Цикл - МассивПриемник.Добавить(Значение); - КонецЦикла; - - КонецЕсли; - -КонецПроцедуры - Функция ПолучитьПроверяемуюСхему(ИмяСхемы, ТекущийКонтекст) ПроверяемаяСхема = ТекущийКонтекст.Получить(ИмяСхемы); diff --git "a/src/cf/DataProcessors/\320\277\320\261\320\277_\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" "b/src/cf/DataProcessors/\320\277\320\261\320\277_\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" index 37cab57..258b7b2 100644 --- "a/src/cf/DataProcessors/\320\277\320\261\320\277_\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" +++ "b/src/cf/DataProcessors/\320\277\320\261\320\277_\320\222\320\260\320\273\320\270\320\264\320\260\321\202\320\276\321\200\320\237\320\260\320\272\320\265\321\202\320\276\320\262/Forms/\320\244\320\276\321\200\320\274\320\260/Ext/Form/Module.bsl" @@ -4,7 +4,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ВызватьИсключение НСтр("ru = 'Форма не предназначена для непосредственного открытия'"); + ТекстСообщения = НСтр("ru = 'Форма не предназначена для непосредственного открытия'"); + пбп_Переадресация.СообщитьПользователю(ТекстСообщения, , , , Отказ); КонецПроцедуры