1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2024-12-03 08:45:31 +02:00

Рефакторинг придикатов

This commit is contained in:
alkoleft 2023-09-11 01:23:27 +03:00
parent a3add5b9f7
commit ed1244a3c4
4 changed files with 235 additions and 316 deletions

View File

@ -40,7 +40,7 @@
Предикаты = НаборПредикатов(Предикаты);
Для Каждого Выражение Из Предикаты Цикл
ПроверитьВыражениеПредиката(Значение, Выражение, Результат, ПараметрыСообщенийОбОшибке, ПараметрыСравнения);
ЮТСравнениеКлиентСервер.ПроверитьВыражениеПредиката(Значение, Выражение, Результат, ПараметрыСообщенийОбОшибке, ПараметрыСравнения);
Если НЕ Результат.Успешно Тогда
Прервать;
КонецЕсли;
@ -193,10 +193,12 @@
ТекстПроверяемоеЗначение = "проверяемое значение",
ПредставлениеПроверяемогоЗначения = Неопределено) Экспорт
Возврат Новый Структура("ОписаниеПроверки, ТекстПроверяемоеЗначение, ПредставлениеПроверяемогоЗначения",
ОписаниеПроверки,
ТекстПроверяемоеЗначение,
ПредставлениеПроверяемогоЗначения);
Параметры = Новый Структура;
Параметры.Вставить("ОписаниеПроверки", ОписаниеПроверки);
Параметры.Вставить("ТекстПроверяемоеЗначение", ТекстПроверяемоеЗначение);
Параметры.Вставить("ПредставлениеПроверяемогоЗначения", ПредставлениеПроверяемогоЗначения);
Возврат Параметры;
КонецФункции
@ -204,110 +206,6 @@
#Область СлужебныеПроцедурыИФункции
Процедура ПроверитьВыражениеПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения)
Попытка
ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения);
Исключение
ЮТРегистрацияОшибок.ДобавитьОшибкуКРезультатуПроверки(СтатусПроверки, ИнформацияОбОшибке());
КонецПопытки;
КонецПроцедуры
// Вычислить выражение предиката.
//
// Параметры:
// Значение - Произвольный - Значение
// Выражение - см. ЮТФабрика.ВыражениеПредиката
// СтатусПроверки - см. ЮТФабрика.ОписаниеРезультатаПроверки
// ПараметрыСообщенийОбОшибке - см. ПараметрыСообщенийОбОшибке
// ПараметрыСравнения - Неопределено
// - Структура - Параметры сравнения значений, для разных выражений испльзуются свои параметры
Процедура ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения)
// BSLLS:CognitiveComplexity-off
ВидыСравнения = ЮТПредикаты.Выражения();
ПараметрыПроверки = ЮТСравнениеКлиентСервер.ПараметрыПроверки(Выражение.ВидСравнения, Значение, Выражение.ИмяРеквизита, Выражение.Значение, Ложь);
ПараметрыПроверки.ОписаниеПроверки = ПараметрыСообщенийОбОшибке.ОписаниеПроверки;
ПараметрыПроверки.ТекстПроверяемоеЗначение = ПараметрыСообщенийОбОшибке.ТекстПроверяемоеЗначение;
ПараметрыПроверки.ОбъектПроверки.Представление = ПараметрыСообщенийОбОшибке.ПредставлениеПроверяемогоЗначения;
Если СтрНачинаетсяС(Выражение.ВидСравнения, "Не") И ВидыСравнения.Свойство(Сред(Выражение.ВидСравнения, 3)) Тогда
ПараметрыПроверки.Реверс = Истина;
ВидСравненияВыражения = Сред(Выражение.ВидСравнения, 3);
Иначе
ВидСравненияВыражения = Выражение.ВидСравнения;
КонецЕсли;
Результат = Неопределено;
ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки);
Если ВидСравненияВыражения = ВидыСравнения.Равно Тогда
Результат = ЮТСравнениеКлиентСервер.ЗначенияРавны(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение, ПараметрыСравнения);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Заполнено Тогда
Результат = ЗначениеЗаполнено(ПроверяемоеЗначение)
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Больше Тогда
Результат = ЮТСравнениеКлиентСервер.ПроверитьНеравенство(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение, Истина);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.БольшеРавно Тогда
Результат = ЮТСравнениеКлиентСервер.ПроверитьНеравенство(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение, Истина, , Истина);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Меньше Тогда
Результат = ЮТСравнениеКлиентСервер.ПроверитьНеравенство(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение, , Истина);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.МеньшеРавно Тогда
Результат = ЮТСравнениеКлиентСервер.ПроверитьНеравенство(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение, , Истина, Истина);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.ИмеетТип Тогда
ЮТСравнениеКлиентСервер.ПроверитьТипПараметра(СтатусПроверки, ПараметрыПроверки);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.ИмеетСвойство Тогда
ЮТСравнениеКлиентСервер.ПроверитьНаличиеСвойства(СтатусПроверки, ПараметрыПроверки);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.ИмеетДлину Тогда
ЮТСравнениеКлиентСервер.ПроверитьДлину(СтатусПроверки, ПараметрыПроверки);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Содержит Тогда
ЮТСравнениеКлиентСервер.ПроверитьСодержит(СтатусПроверки, ПараметрыПроверки);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.СодержитСтрокуПоШаблону Тогда
ЮТСравнениеКлиентСервер.ПроверитьСоответствуетШаблону(СтатусПроверки, ПараметрыПроверки);
Иначе
ВызватьИсключение СтрШаблон("Неизвестное выражение предиката `%1`", Выражение.ВидСравнения);
КонецЕсли;
// BSLLS:CognitiveComplexity-on
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если ПараметрыПроверки.Реверс Тогда
Результат = НЕ Результат;
КонецЕсли;
ОбработатьРезультатСравнения(Результат, СтатусПроверки, ПараметрыПроверки, ПроверяемоеЗначение);
КонецПроцедуры
Функция ЭтоПредикатОбщийМодуль(ТипПредикатов, Предикаты)
Возврат ТипПредикатов = Тип("ОбщийМодуль") И Предикаты = ЮТПредикаты;
@ -328,42 +226,4 @@
КонецФункции
Процедура ОбработатьРезультатСравнения(Результат, РезультатПроверки, ПараметрыПроверки, ФактическоеЗначение)
Если Результат Тогда
Возврат;
КонецЕсли;
ШаблонСообщения = ШаблонВыражения(ПараметрыПроверки.ВидСравнения);
Сообщение = СтрШаблон(ШаблонСообщения, ПараметрыПроверки.ОжидаемоеЗначение);
ТекстОшибки = ЮТРегистрацияОшибок.ФорматированныйТекстОшибкиУтверждения(ПараметрыПроверки, Сообщение, ПараметрыПроверки.ТекстПроверяемоеЗначение);
ТекстОшибки = ЮТРегистрацияОшибок.ДобавитьОписания(ТекстОшибки, ПараметрыПроверки);
ЮТРегистрацияОшибок.ДобавитьОшибкуСравненияКРезультатуПроверки(РезультатПроверки,
ТекстОшибки,
ФактическоеЗначение,
ПараметрыПроверки.ОжидаемоеЗначение);
КонецПроцедуры
// Параметры проверки.
//
// Параметры:
// ПараметрыПроверки - см. ПараметрыПроверки
//
// Возвращаемое значение:
// Произвольный
Функция ПроверяемоеЗначение(ПараметрыПроверки)
Если ПараметрыПроверки.ОбъектПроверки.ИмяСвойства <> Неопределено Тогда
Значение = ЮТСравнениеКлиентСервер.ЗначениеСвойства(ПараметрыПроверки.ОбъектПроверки.Значение, ПараметрыПроверки.ОбъектПроверки.ИмяСвойства);
Иначе
Значение = ПараметрыПроверки.ОбъектПроверки.Значение;
КонецЕсли;
Возврат Значение;
КонецФункции
#КонецОбласти

View File

@ -66,7 +66,7 @@
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции

View File

@ -112,144 +112,6 @@
КонецФункции
Процедура ПроверитьТипПараметра(РезультатПроверки, ПараметрыПроверки) Экспорт
Если НЕ ПроверитьТипЗначения(РезультатПроверки, ПараметрыПроверки.ОжидаемоеЗначение, Новый ОписаниеТипов("ОписаниеТипов, Тип, Строка")) Тогда
Возврат;
КонецЕсли;
ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки);
Результат = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение);
Реверс(Результат, ПараметрыПроверки);
Если НЕ Результат Тогда
ОбработатьРезультатСравнения(РезультатПроверки, ПараметрыПроверки, ТипЗнч(ПроверяемоеЗначение));
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьНаличиеСвойства(РезультатПроверки, ПараметрыПроверки) Экспорт
ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки);
Значение = ПроверяемоеЗначение;
ПутьКСвойству = ЧастиПути(ПараметрыПроверки.ОжидаемоеЗначение);
ПройденныйПуть = Новый Массив();
Для Каждого Часть Из ПутьКСвойству Цикл
ПройденныйПуть.Добавить(Часть);
Если ТипЗнч(Значение) = Тип("ХранилищеЗначения") Тогда
Значение = Значение.Получить();
КонецЕсли;
Попытка
ЕстьСвойство = ЗначениеИмеетСвойство(Значение, Часть);
Исключение
ЕстьСвойство = Ложь;
КонецПопытки;
Если ЕстьСвойство Тогда
Значение = Значение[Часть];
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
Успешно = ЕстьСвойство;
Реверс(Успешно, ПараметрыПроверки);
Если НЕ Успешно Тогда
ОбработатьРезультатСравнения(РезультатПроверки, ПараметрыПроверки, ПроверяемоеЗначение);
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьЗаполненность(РезультатПроверки, ПараметрыПроверки) Экспорт
ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки);
Результат = ЗначениеЗаполнено(ПроверяемоеЗначение);
Реверс(Результат, ПараметрыПроверки);
Если НЕ Результат Тогда
ОбработатьРезультатСравнения(РезультатПроверки, ПараметрыПроверки, ПроверяемоеЗначение);
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьДлину(РезультатПроверки, ПараметрыПроверки) Экспорт
Если НЕ ПроверитьТипЗначения(РезультатПроверки, ПараметрыПроверки.ОжидаемоеЗначение, "Число") Тогда
Возврат;
КонецЕсли;
ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки);
ФактическаяДлина = ДлинаЗначения(ПроверяемоеЗначение);
Если ФактическаяДлина = Неопределено Тогда
ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение));
ЮТРегистрацияОшибок.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки, ПараметрыПроверки);
Возврат;
КонецЕсли;
Результат = ФактическаяДлина = ПараметрыПроверки.ОжидаемоеЗначение;
Реверс(Результат, ПараметрыПроверки);
Если НЕ Результат Тогда
ОбработатьРезультатСравнения(РезультатПроверки, ПараметрыПроверки, ФактическаяДлина);
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСодержит(РезультатПроверки, ПараметрыПроверки) Экспорт
ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки);
Результат = НайтиЗначение(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение);
Если Результат = Неопределено Тогда
ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение));
ЮТРегистрацияОшибок.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки, ПараметрыПроверки);
Возврат;
КонецЕсли;
Реверс(Результат, ПараметрыПроверки);
Если НЕ Результат Тогда
ОбработатьРезультатСравнения(РезультатПроверки, ПараметрыПроверки, ПроверяемоеЗначение);
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьСоответствуетШаблону(РезультатПроверки, ПараметрыПроверки) Экспорт
Если НЕ ПроверитьТипЗначения(РезультатПроверки, ПараметрыПроверки.ОжидаемоеЗначение, "Строка") Тогда
Возврат;
КонецЕсли;
ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки);
СоответствуетШаблону = СоответствуетШаблону(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение);
Если СоответствуетШаблону = Неопределено Тогда
ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение));
ЮТРегистрацияОшибок.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки, ПараметрыПроверки);
Возврат;
КонецЕсли;
Результат = СоответствуетШаблону;
Реверс(Результат, ПараметрыПроверки);
Если НЕ Результат Тогда
ОбработатьРезультатСравнения(РезультатПроверки, ПараметрыПроверки, ПроверяемоеЗначение);
КонецЕсли;
КонецПроцедуры
// Параметры проверки.
//
// Параметры:
@ -511,21 +373,6 @@
КонецФункции
Процедура ОбработатьРезультатСравнения(РезультатПроверки, ПараметрыПроверки, ФактическоеЗначение)
ШаблонСообщения = ЮТПредикатыКлиентСервер.ШаблонВыражения(ПараметрыПроверки.ВидСравнения);
Сообщение = СтрШаблон(ШаблонСообщения, ПараметрыПроверки.ОжидаемоеЗначение);
ТекстОшибки = ЮТРегистрацияОшибок.ФорматированныйТекстОшибкиУтверждения(ПараметрыПроверки, Сообщение, ПараметрыПроверки.ТекстПроверяемоеЗначение);
ТекстОшибки = ЮТРегистрацияОшибок.ДобавитьОписания(ТекстОшибки, ПараметрыПроверки);
ЮТРегистрацияОшибок.ДобавитьОшибкуСравненияКРезультатуПроверки(РезультатПроверки,
ТекстОшибки,
ФактическоеЗначение,
ПараметрыПроверки.ОжидаемоеЗначение);
КонецПроцедуры
// Параметры проверки.
//
// Параметры:
@ -665,4 +512,229 @@
КонецФункции
#Область РеализацияПредикатор
Процедура ПроверитьВыражениеПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения) Экспорт
Попытка
ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения);
Исключение
ЮТРегистрацияОшибок.ДобавитьОшибкуКРезультатуПроверки(СтатусПроверки, ИнформацияОбОшибке());
КонецПопытки;
КонецПроцедуры
// Вычислить выражение предиката.
//
// Параметры:
// Значение - Произвольный - Значение
// Выражение - см. ЮТФабрика.ВыражениеПредиката
// СтатусПроверки - см. ЮТФабрика.ОписаниеРезультатаПроверки
// ПараметрыСообщенийОбОшибке - см. ПараметрыСообщенийОбОшибке
// ПараметрыСравнения - Неопределено
// - Структура - Параметры сравнения значений, для разных выражений испльзуются свои параметры
Процедура ВызватьОбработчикПредиката(Значение, Выражение, СтатусПроверки, ПараметрыСообщенийОбОшибке, ПараметрыСравнения)
// BSLLS:CognitiveComplexity-off
ВидыСравнения = ЮТПредикаты.Выражения();
ПараметрыПроверки = ПараметрыПроверки(Выражение.ВидСравнения, Значение, Выражение.ИмяРеквизита, Выражение.Значение, Ложь);
ПараметрыПроверки.ОписаниеПроверки = ПараметрыСообщенийОбОшибке.ОписаниеПроверки;
ПараметрыПроверки.ТекстПроверяемоеЗначение = ПараметрыСообщенийОбОшибке.ТекстПроверяемоеЗначение;
ПараметрыПроверки.ОбъектПроверки.Представление = ПараметрыСообщенийОбОшибке.ПредставлениеПроверяемогоЗначения;
Если СтрНачинаетсяС(Выражение.ВидСравнения, "Не") И ВидыСравнения.Свойство(Сред(Выражение.ВидСравнения, 3)) Тогда
ПараметрыПроверки.Реверс = Истина;
ВидСравненияВыражения = Сред(Выражение.ВидСравнения, 3);
Иначе
ВидСравненияВыражения = Выражение.ВидСравнения;
КонецЕсли;
Результат = Неопределено;
ОжидаемоеЗначение = Выражение.Значение;
ПроверяемоеЗначение = ПроверяемоеЗначение(ПараметрыПроверки);
Если ВидСравненияВыражения = ВидыСравнения.Равно Тогда
Результат = ЗначенияРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Заполнено Тогда
Результат = ЗначениеЗаполнено(ПроверяемоеЗначение)
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Больше Тогда
Результат = ПроверитьНеравенство(ПроверяемоеЗначение, ОжидаемоеЗначение, Истина);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.БольшеРавно Тогда
Результат = ПроверитьНеравенство(ПроверяемоеЗначение, ОжидаемоеЗначение, Истина, , Истина);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Меньше Тогда
Результат = ПроверитьНеравенство(ПроверяемоеЗначение, ОжидаемоеЗначение, , Истина);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.МеньшеРавно Тогда
Результат = ПроверитьНеравенство(ПроверяемоеЗначение, ОжидаемоеЗначение, , Истина, Истина);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.ИмеетТип Тогда
ПроверитьТипПараметра(СтатусПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.ИмеетСвойство Тогда
Результат = ПроверитьНаличиеСвойства(СтатусПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.ИмеетДлину Тогда
Результат = ПроверитьДлину(СтатусПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.Содержит Тогда
Результат = ПроверитьСодержит(СтатусПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки);
ИначеЕсли ВидСравненияВыражения = ВидыСравнения.СодержитСтрокуПоШаблону Тогда
Результат = ПроверитьСоответствуетШаблону(СтатусПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки);
Иначе
ВызватьИсключение СтрШаблон("Неизвестное выражение предиката `%1`", Выражение.ВидСравнения);
КонецЕсли;
// BSLLS:CognitiveComplexity-on
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если ПараметрыПроверки.Реверс Тогда
Результат = НЕ Результат;
КонецЕсли;
ОбработатьРезультатСравнения(Результат, СтатусПроверки, ПараметрыПроверки, ПроверяемоеЗначение);
КонецПроцедуры
Процедура ОбработатьРезультатСравнения(Результат, РезультатПроверки, ПараметрыПроверки, ФактическоеЗначение)
Если Результат Тогда
Возврат;
КонецЕсли;
ШаблонСообщения = ЮТПредикатыКлиентСервер.ШаблонВыражения(ПараметрыПроверки.ВидСравнения);
Сообщение = СтрШаблон(ШаблонСообщения, ПараметрыПроверки.ОжидаемоеЗначение);
ТекстОшибки = ЮТРегистрацияОшибок.ФорматированныйТекстОшибкиУтверждения(ПараметрыПроверки, Сообщение, ПараметрыПроверки.ТекстПроверяемоеЗначение);
ТекстОшибки = ЮТРегистрацияОшибок.ДобавитьОписания(ТекстОшибки, ПараметрыПроверки);
ЮТРегистрацияОшибок.ДобавитьОшибкуСравненияКРезультатуПроверки(РезультатПроверки,
ТекстОшибки,
ФактическоеЗначение,
ПараметрыПроверки.ОжидаемоеЗначение);
КонецПроцедуры
Процедура ПроверитьТипПараметра(РезультатПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки)
Если НЕ ПроверитьТипЗначения(РезультатПроверки, ОжидаемоеЗначение, Новый ОписаниеТипов("ОписаниеТипов, Тип, Строка")) Тогда
Возврат;
КонецЕсли;
Результат = ЮТПроверкиСлужебный.ТипЗначенияСоответствует(ПроверяемоеЗначение, ПараметрыПроверки.ОжидаемоеЗначение);
Если ПараметрыПроверки.Реверс Тогда
Результат = НЕ Результат;
КонецЕсли;
ОбработатьРезультатСравнения(Результат, РезультатПроверки, ПараметрыПроверки, ТипЗнч(ПроверяемоеЗначение));
КонецПроцедуры
Функция ПроверитьНаличиеСвойства(РезультатПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение)
Значение = ПроверяемоеЗначение;
ПутьКСвойству = ЧастиПути(ОжидаемоеЗначение);
ПройденныйПуть = Новый Массив();
Для Каждого Часть Из ПутьКСвойству Цикл
ПройденныйПуть.Добавить(Часть);
Если ТипЗнч(Значение) = Тип("ХранилищеЗначения") Тогда
Значение = Значение.Получить();
КонецЕсли;
Попытка
ЕстьСвойство = ЗначениеИмеетСвойство(Значение, Часть);
Исключение
ЕстьСвойство = Ложь;
КонецПопытки;
Если ЕстьСвойство Тогда
Значение = Значение[Часть];
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ЕстьСвойство;
КонецФункции
Функция ПроверитьДлину(РезультатПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки)
Если НЕ ПроверитьТипЗначения(РезультатПроверки, ОжидаемоеЗначение, "Число") Тогда
Возврат Неопределено;
КонецЕсли;
ФактическаяДлина = ДлинаЗначения(ПроверяемоеЗначение);
Если ФактическаяДлина = Неопределено Тогда
ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение));
ЮТРегистрацияОшибок.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки, ПараметрыПроверки);
Возврат Неопределено;
КонецЕсли;
Возврат ФактическаяДлина = ПараметрыПроверки.ОжидаемоеЗначение;
КонецФункции
Функция ПроверитьСодержит(РезультатПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки)
Результат = НайтиЗначение(ПроверяемоеЗначение, ОжидаемоеЗначение);
Если Результат = Неопределено Тогда
ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение));
ЮТРегистрацияОшибок.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки, ПараметрыПроверки);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ПроверитьСоответствуетШаблону(РезультатПроверки, ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыПроверки)
Если НЕ ПроверитьТипЗначения(РезультатПроверки, ОжидаемоеЗначение, "Строка") Тогда
Возврат Неопределено;
КонецЕсли;
СоответствуетШаблону = СоответствуетШаблону(ПроверяемоеЗначение, ОжидаемоеЗначение);
Если СоответствуетШаблону = Неопределено Тогда
ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение));
ЮТРегистрацияОшибок.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки, ПараметрыПроверки);
КонецЕсли;
Возврат СоответствуетШаблону;
КонецФункции
#КонецОбласти
#КонецОбласти

View File

@ -767,9 +767,7 @@
// ОбщийМодуль - Этот модуль для замыкания
Функция НеИмеетДлину(Знач ОжидаемоеЗначение, Знач ОписаниеПроверки = Неопределено) Экспорт
Контекст = Контекст();
УстановитьОписаниеПроверки(Контекст, ОписаниеПроверки);
ПроверитьДлину(Контекст, ОжидаемоеЗначение, Истина);
ПроверитьПредикат(ЮТПредикаты.Выражения().НеИмеетДлину, ОжидаемоеЗначение, ОписаниеПроверки);
Возврат ЮТУтверждения;
КонецФункции
@ -1628,18 +1626,6 @@
КонецФункции
Процедура ПроверитьДлину(Контекст, ОжидаемоеЗначение, Реверс)
ПроверитьТипЗначения(Контекст, ОжидаемоеЗначение, "Число");
ФактическаяДлина = ДлинаПроверяемогоЗначения(Контекст);
Результат = ФактическаяДлина = ОжидаемоеЗначение;
Сообщение = СтрШаблон("имеет длину (размер) `%1`", ОжидаемоеЗначение);
ОбработатьРезультатСравнения(Результат, Сообщение, Реверс, ФактическаяДлина, ОжидаемоеЗначение);
КонецПроцедуры
Процедура ОбработатьРезультатСравнения(Знач Результат, Знач Сообщение, Реверс, ПроверяемоеЗначение, ОжидаемоеЗначение)
Если Реверс Тогда
@ -1803,6 +1789,7 @@
ПараметрыСообщенийОбОшибке = ЮТПредикатыКлиентСервер.ПараметрыСообщенийОбОшибке(ПолноеОписаниеПроверки);
Результат = ЮТПредикатыКлиентСервер.ПроверитьПредикаты(Контекст.ОбъектПроверки.Значение, Предикат, ПараметрыСообщенийОбОшибке, ПараметрыСравнения);
ОбработатьРезультаПроверки(Результат);
КонецПроцедуры