1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-01-08 13:06:32 +02:00

Merge pull request #180 from bia-technologies/feature/36

Cравнение табличных документов
This commit is contained in:
Koryakin Aleksey 2023-10-02 23:18:56 +03:00 committed by GitHub
commit 3415de2b0c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 126 additions and 18 deletions

View File

@ -82,4 +82,36 @@
КонецФункции
Функция ВыборкаИзТабличногоДокумента(ТабличныйДокумент) Экспорт
Возврат ЗапросКТабличномуДокументу(ТабличныйДокумент).Выбрать();
КонецФункции
Функция ТаблицаИзТабличногоДокумента(ТабличныйДокумент) Экспорт
Возврат ЗапросКТабличномуДокументу(ТабличныйДокумент).Выгрузить();
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ЗапросКТабличномуДокументу(ТабличныйДокумент)
ВсегоСтрок = ТабличныйДокумент.ВысотаТаблицы;
ВсегоКолонок = ТабличныйДокумент.ШиринаТаблицы;
Область = ТабличныйДокумент.Область(1, 1, ВсегоСтрок, ВсегоКолонок);
ИсточникДанных = Новый ОписаниеИсточникаДанных(Область);
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
Возврат ПостроительОтчета.Результат;
КонецФункции
#КонецОбласти

View File

@ -63,6 +63,10 @@
Результат = МассивыРавны(Данные1, Данные2);
ИначеЕсли ТипЗначения = Тип("ТабличныйДокумент") Тогда
Результат = ЮТСравнениеСервер.ТабличныеДокументыРавны(Данные1, Данные2);
ИначеЕсли ЭтоПримитивныйТип(ТипЗначения) ИЛИ ЮТОбщий.ОписаниеТиповЛюбаяСсылка().СодержитТип(ТипЗначения) Тогда
// Возвращаем ложь, так как для этих типов должно сработать обычное равенство
Результат = Ложь;

View File

@ -18,7 +18,7 @@
#Область СлужебныйПрограммныйИнтерфейс
Функция ТаблицыРавны(Данные1, Данные2) Экспорт
Функция ТаблицыРавны(Знач Данные1, Знач Данные2) Экспорт
Если Данные1.Количество() <> Данные2.Количество() Тогда
Возврат Ложь;
@ -46,4 +46,74 @@
КонецФункции
Функция ТабличныеДокументыРавны(Знач ТабличныйДокумент1, Знач ТабличныйДокумент2) Экспорт
Данные1 = ПолучитьТаблицуЗначенийИзТабличногоДокумента(ТабличныйДокумент1);
Данные2 = ПолучитьТаблицуЗначенийИзТабличногоДокумента(ТабличныйДокумент2);
Возврат ТаблицыРавны(Данные1, Данные2);
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// https://github.com/vanessa-opensource/add
// портирован из Functest
Функция ПолучитьТаблицуЗначенийИзТабличногоДокумента(ТабличныйДокумент, УчитыватьТолькоВидимыеКолонки = Ложь, УчитыватьТолькоВидимыеСтроки = Ложь)
ТипТабличногоДокумента = ТипЗнч(ТабличныйДокумент);
Если ТипТабличногоДокумента <> Тип("ТабличныйДокумент") И ТипТабличногоДокумента <> Тип("ПолеТабличногоДокумента") Тогда
ВызватьИсключение "ПолучитьТаблицуЗначенийИзТабличногоДокумента: Требуется тип ТабличныйДокумент или ПолеТабличногоДокумента";
КонецЕсли;
Если УчитыватьТолькоВидимыеКолонки И УчитыватьТолькоВидимыеСтроки Тогда
ЮТОбщийВызовСервера.ТаблицаИзТабличногоДокумента(ТипТабличногоДокумента);
КонецЕсли;
НомерПоследнейКолонки = ТабличныйДокумент.ШиринаТаблицы;
НомерПоследнейСтроки = ТабличныйДокумент.ВысотаТаблицы;
НоваяТаблицаЗначений = Новый ТаблицаЗначений;
Колонки = НоваяТаблицаЗначений.Колонки;
ТипСтрока = Новый ОписаниеТипов("Строка");
// TODO При определении видимости не учитывается наличие нескольких форматов строк, сейчас видимоcть колонки определяется по формату первой строки
УчитываемыеКолонки = Новый Массив;
Для НомерКолонки = 1 По НомерПоследнейКолонки Цикл
ОбластьКолонки = ТабличныйДокумент.Область(0, НомерКолонки, 1, НомерКолонки);
УчитыватьКолонку = Не УчитыватьТолькоВидимыеКолонки Или ОбластьКолонки.Видимость;
Если УчитыватьКолонку Тогда
УчитываемыеКолонки.Добавить(НомерКолонки);
ШиринаКолонки = ОбластьКолонки.ШиринаКолонки;
Если ШиринаКолонки <= 1 Тогда
ШиринаКолонки = 1;
КонецЕсли;
ИмяКолонки = "К" + Формат(Колонки.Количество() + 1, "ЧН=; ЧГ=0");
Колонки.Добавить(ИмяКолонки, ТипСтрока, ИмяКолонки, ШиринаКолонки);
КонецЕсли;
КонецЦикла;
ГраницаКолонок = УчитываемыеКолонки.ВГраница();
Для НомерСтроки = 1 По НомерПоследнейСтроки Цикл
Если УчитыватьТолькоВидимыеСтроки И Не ТабличныйДокумент.Область(НомерСтроки, , НомерСтроки).Видимость Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = НоваяТаблицаЗначений.Добавить();
Для Индекс = 0 По ГраницаКолонок Цикл
НомерКолонки = УчитываемыеКолонки[Индекс];
Область = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки);
НоваяСтрока[Индекс] = Область.Текст;
КонецЦикла;
КонецЦикла;
Возврат НоваяТаблицаЗначений;
КонецФункции
#КонецОбласти

View File

@ -6,4 +6,5 @@
<value>Сравнение сервер</value>
</synonym>
<server>true</server>
<serverCall>true</serverCall>
</mdclass:CommonModule>

View File

@ -49,7 +49,7 @@
ПараметрыЗагрузки = ПараметрыЗагрузки(КолонкиМакета, ОписанияТипов, ЗаменяемыеЗначения, КэшЗначений, ПараметрыЗаполнения);
Выборка = ВыборкаИзТабличногоДокумента(ДанныеМакета);
Выборка = ЮТОбщийВызовСервера.ВыборкаИзТабличногоДокумента(ДанныеМакета);
Пока Выборка.Следующий() Цикл
@ -219,22 +219,6 @@
КонецФункции
Функция ВыборкаИзТабличногоДокумента(ТабличныйДокумент)
ВсегоСтрок = ТабличныйДокумент.ВысотаТаблицы;
ВсегоКолонок = ТабличныйДокумент.ШиринаТаблицы;
Область = ТабличныйДокумент.Область(1, 1, ВсегоСтрок, ВсегоКолонок);
ИсточникДанных = Новый ОписаниеИсточникаДанных(Область);
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
Возврат ПостроительОтчета.Результат.Выбрать();
КонецФункции
Функция ДанныеМакета(Знач Макет)
ТипПараметра = ТипЗнч(Макет);

View File

@ -75,6 +75,7 @@
.СПараметрами(Новый ФиксированнаяСтруктура(Структура))
.СПараметрами(Новый ФиксированноеСоответствие(Соответствие))
.СПараметрами(Новый ФиксированныйМассив(Массив))
.ДобавитьТест("ЗначенияРавны_ТабличныйДокумент")
;
КонецПроцедуры
@ -160,6 +161,22 @@
#КонецЕсли
Процедура ЗначенияРавны_ТабличныйДокумент() Экспорт
Макет1 = ЮТОбщий.Макет("ОбщийМакет.ЮТ_МакетТестовыхДанных");
Макет2 = ЮТОбщий.Макет("ОбщийМакет.ЮТ_МакетТестовыхДанных");
Макет3 = ЮТОбщий.Макет("ОбщийМакет.ЮТ_МакетТестовыхДанных.R2C1:R5C10");
Макет4 = ЮТОбщий.Макет("ОбщийМакет.ЮТ_МакетТестовыхДанных.R2C2:R5C11");
ЮТест.ОжидаетЧто(Макет1, "Равные макеты")
.Равно(Макет2);
ЮТест.ОжидаетЧто(Макет3, "Разные макеты")
.НеРавно(Макет4);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции