Skip to content

Commit

Permalink
feat: вывод деталей сравнения таблиц и табличных документов
Browse files Browse the repository at this point in the history
  • Loading branch information
alkoleft committed Dec 3, 2024
1 parent 1c9c487 commit f65eb92
Show file tree
Hide file tree
Showing 10 changed files with 296 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,7 @@

#Область КонструкторыОписанийОшибки

Функция ДанныеОшибки(Ошибка, Знач Сообщение, ТипОшибки)
Функция ДеталиОшибки()

#Если Сервер Тогда
Детали = КонтекстДеталиОшибки(Истина);
Expand All @@ -486,8 +486,19 @@
Если ЗначениеЗаполнено(Детали) Тогда
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста(ИмяКонтекстаДеталиОшибки(), Неопределено);

Детали.Добавить(Сообщение);
Сообщение = СтрСоединить(Детали, Символы.ПС);
Возврат СтрСоединить(Детали, Символы.ПС);
Иначе
Возврат Неопределено;
КонецЕсли;

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

Функция ДанныеОшибки(Ошибка, Знач Сообщение, ТипОшибки)

ДеталиОшибки = ДеталиОшибки();

Если ДеталиОшибки <> Неопределено Тогда
Сообщение = ДеталиОшибки + Символы.ПС + Сообщение;
КонецЕсли;

ДанныеОшибки = ЮТФабрикаСлужебный.ОписаниеОшибкиПропуска(ТипОшибки + ": " + Сообщение);
Expand All @@ -508,6 +519,11 @@

Описание = ИзвлечьТекстОшибки(Ошибка, ПрефиксОшибкиУтверждений());

ДеталиОшибки = ДеталиОшибки();
Если ДеталиОшибки <> Неопределено Тогда
Описание = Описание + Символы.ПС + ДеталиОшибки;
КонецЕсли;

ДанныеОшибки = ЮТФабрикаСлужебный.ОписаниеОшибкиСравнения(Описание);
ДанныеОшибки.Стек = СтекОшибки(Ошибка);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,14 +95,17 @@
// Возвращаемое значение:
// Строка - Представление значения
Функция ПредставлениеЗначения(Значение) Экспорт

ЗначениеСтрокой = Строка(Значение);
ТипЗначения = ТипЗнч(Значение);

Если ПустаяСтрока(ЗначениеСтрокой) Тогда
Тип = Строка(ТипЗначения);
Возврат СтрШаблон("`<Пустое значение, Тип: %1>`", Тип);
Иначе
Возврат СтрШаблон("`%1`", ЗначениеСтрокой);
КонецЕсли;

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

// Производит замену в переданном шаблоне параметра на переданное значение.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@

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

Функция ТаблицыРавны(Знач Данные1, Знач Данные2) Экспорт
Функция ТабличныеДокументыРавны(Знач ПроверяемыйТабличныйДокумент, Знач ОжидаемыйТабличныйДокумент, Знач ПараметрыСравнения) Экспорт

Возврат ЮТСравнениеСлужебныйСервер.ТаблицыРавны(Данные1, Данные2);
Возврат ЮТСравнениеСлужебныйСервер.ТабличныеДокументыРавны(ПроверяемыйТабличныйДокумент, ОжидаемыйТабличныйДокумент, ПараметрыСравнения);

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

Функция ТабличныеДокументыРавны(Знач ТабличныйДокумент1, Знач ТабличныйДокумент2) Экспорт
Функция РазличияТабличныхДокументов(Знач ПроверяемыйТабличныйДокумент, Знач ОжидаемыйТабличныйДокумент, Знач ПараметрыСравнения) Экспорт

Возврат ЮТСравнениеСлужебныйСервер.ТабличныеДокументыРавны(ТабличныйДокумент1, ТабличныйДокумент2);
Возврат ЮТСравнениеСлужебныйСервер.РазличияТабличныхДокументов(ПроверяемыйТабличныйДокумент, ОжидаемыйТабличныйДокумент, ПараметрыСравнения);

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,37 +53,34 @@

Если ЮТТипыДанныхСлужебный.ЭтоСтруктура(ТипЗначения) Тогда

Результат = СтруктурыРавны(Данные1, Данные2);
Результат = СтруктурыРавны(Данные1, Данные2, ПараметрыСравнения);

ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоСоответствие(ТипЗначения) Тогда

Результат = СоответствияРавны(Данные1, Данные2);
Результат = СоответствияРавны(Данные1, Данные2, ПараметрыСравнения);

ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоМассив(ТипЗначения) Тогда

Результат = МассивыРавны(Данные1, Данные2);
Результат = МассивыРавны(Данные1, Данные2, ПараметрыСравнения);

ИначеЕсли ТипЗначения = Тип("ТабличныйДокумент") Тогда

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
Результат = ЮТСравнениеСлужебныйСервер.ТабличныеДокументыРавны(Данные1, Данные2);
#Иначе
Результат = ЮТСравнениеСлужебныйВызовСервера.ТабличныеДокументыРавны(Данные1, Данные2);
#КонецЕсли
Результат = ТабличныеДокументыРавны(Данные1, Данные2, ПараметрыСравнения);

ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоПримитивныйТип(ТипЗначения) ИЛИ ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗначения) Тогда
// Возвращаем ложь, так как для этих типов должно сработать обычное равенство
Результат = Ложь;

КонецЕсли; // BSLLS:IfElseIfEndsWithElse-off

#Если Сервер Тогда
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
Если ТипЗначения = Тип("ТаблицаЗначений") Тогда

Результат = ЮТСравнениеСлужебныйСервер.ТаблицыРавны(Данные1, Данные2);
Результат = ТаблицыРавны(Данные1, Данные2, ПараметрыСравнения);

ИначеЕсли ТипЗначения = Тип("ХранилищеЗначения") Тогда

Результат = ЗначенияРавны(Данные1.Получить(), Данные2.Получить());
Результат = ЗначенияРавны(Данные1.Получить(), Данные2.Получить(), ПараметрыСравнения);

КонецЕсли; // BSLLS:IfElseIfEndsWithElse-off
#КонецЕсли
Expand Down Expand Up @@ -158,7 +155,7 @@

#Область Сравнения

Функция СтруктурыРавны(Данные1, Данные2)
Функция СтруктурыРавны(Данные1, Данные2, ПараметрыСравнения)

Если Данные1.Количество() <> Данные2.Количество() Тогда
Возврат Ложь;
Expand All @@ -168,7 +165,7 @@
СтароеЗначение = Неопределено;

Если НЕ Данные2.Свойство(КлючИЗначение.Ключ, СтароеЗначение)
ИЛИ НЕ ЗначенияРавны(КлючИЗначение.Значение, СтароеЗначение) Тогда
ИЛИ НЕ ЗначенияРавны(КлючИЗначение.Значение, СтароеЗначение, ПараметрыСравнения) Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Expand All @@ -177,7 +174,7 @@

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

Функция СоответствияРавны(Данные1, Данные2)
Функция СоответствияРавны(Данные1, Данные2, ПараметрыСравнения)

Если Данные1.Количество() <> Данные2.Количество() Тогда
Возврат Ложь;
Expand All @@ -189,7 +186,7 @@
КлючиНовогоСоответствия.Вставить(КлючИЗначение.Ключ, Истина);
СтароеЗначение = Данные2.Получить(КлючИЗначение.Ключ);

Если НЕ ЗначенияРавны(КлючИЗначение.Значение, СтароеЗначение) Тогда
Если НЕ ЗначенияРавны(КлючИЗначение.Значение, СтароеЗначение, ПараметрыСравнения) Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Expand All @@ -204,14 +201,14 @@

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

Функция МассивыРавны(Данные1, Данные2)
Функция МассивыРавны(Данные1, Данные2, ПараметрыСравнения)

Если Данные1.Количество() <> Данные2.Количество() Тогда
Возврат Ложь;
КонецЕсли;

Для Индекс = 0 По Данные1.ВГраница() Цикл
Если НЕ ЗначенияРавны(Данные1[Индекс], Данные2[Индекс]) Тогда
Если НЕ ЗначенияРавны(Данные1[Индекс], Данные2[Индекс], ПараметрыСравнения) Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Expand Down Expand Up @@ -612,7 +609,7 @@
ФактическаяДлина = ДлинаЗначения(ПроверяемоеЗначение);

Если ФактическаяДлина = Неопределено Тогда
ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение));
ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не может быть проверен на длинну значения", ТипЗнч(ПроверяемоеЗначение));
ЮТРегистрацияОшибокСлужебный.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки, ПараметрыПроверки);
Возврат;
КонецЕсли;
Expand All @@ -632,7 +629,7 @@
Результат = НайтиЗначение(ПроверяемоеЗначение, ОжидаемоеЗначение);

Если Результат = Неопределено Тогда
ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение));
ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не может быть проверен на содержание ожидаемого значения", ТипЗнч(ПроверяемоеЗначение));
ЮТРегистрацияОшибокСлужебный.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки, ПараметрыПроверки);
КонецЕсли;

Expand All @@ -652,7 +649,7 @@
СоответствуетШаблону = СоответствуетШаблону(ПроверяемоеЗначение, ОжидаемоеЗначение);

Если СоответствуетШаблону = Неопределено Тогда
ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не обрабатывается утверждением", ТипЗнч(ПроверяемоеЗначение));
ТекстОшибки = СтрШаблон("тип проверяемого значения `%1` не может быть проверен на соответствие шаблону", ТипЗнч(ПроверяемоеЗначение));
ЮТРегистрацияОшибокСлужебный.ДобавитьОшибкуКРезультатуПроверки(РезультатПроверки, ТекстОшибки, ПараметрыПроверки);
КонецЕсли;

Expand Down Expand Up @@ -720,4 +717,52 @@

#КонецОбласти

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
Функция ТаблицыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения)

Утверждение = ПараметрыСравнения = Неопределено ИЛИ НЕ ЮТКоллекции.ЗначениеСтруктуры(ПараметрыСравнения, "Утверждение", Ложь);
Если Утверждение Тогда
Возврат ЮТСравнениеСлужебныйСервер.ТаблицыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
КонецЕсли;

Различия = ЮТСравнениеСлужебныйСервер.РазличияТаблиц(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);

ЗафиксироватьРазличия(Различия);
Возврат НЕ ЗначениеЗаполнено(Различия);

КонецФункции
#КонецЕсли

Функция ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения)

Утверждение = ПараметрыСравнения = Неопределено ИЛИ НЕ ЮТКоллекции.ЗначениеСтруктуры(ПараметрыСравнения, "Утверждение", Ложь);

Если НЕ Утверждение Тогда
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
Возврат ЮТСравнениеСлужебныйСервер.ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#Иначе
//@skip-check bsl-legacy-check-expression-type
Возврат ЮТСравнениеСлужебныйВызовСервера.ТабличныеДокументыРавны(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#КонецЕсли
КонецЕсли;

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
Различия = ЮТСравнениеСлужебныйСервер.РазличияТабличныхДокументов(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#Иначе
//@skip-check bsl-legacy-check-expression-type
Различия = ЮТСравнениеСлужебныйВызовСервера.РазличияТабличныхДокументов(ПроверяемоеЗначение, ОжидаемоеЗначение, ПараметрыСравнения);
#КонецЕсли

ЗафиксироватьРазличия(Различия);
Возврат НЕ ЗначениеЗаполнено(Различия);

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

Процедура ЗафиксироватьРазличия(Различия)

Для Каждого Различие Из Различия Цикл
ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(Различие);
КонецЦикла;

КонецПроцедуры
#КонецОбласти
Loading

0 comments on commit f65eb92

Please sign in to comment.