Сравнение двух таблиц значений.
Возникла потребность сравнить данные в двух таблицах сказать равны ли они.
В результате появилась неплохая как по мне функция.
В ней показана возможность как сравнивать значения с определенной точностью,
заготовлен шаблон для исключения колонок для сравнения.
Надеюсь кому-то упростит/ускорит скорость разработки.
- Описание
- Подробнее
Описание
Функция СравнимТЗ(ТЗ1,ТЗ2)
нпп=0;
ПолностьюИдентичны=ИСТИНА;
Для каждого строкаТЗ1 из ТЗ1 цикл
Идентичны=Истина;
Если нпп>=ТЗ2.Количество() тогда Сообщить("Добавлена строка "+нпп);нпп=нпп+1;продолжить; КонецЕсли;
СтрокаТЗ2=ТЗ2.Получить(нпп);
СписокПропускаемыхКолонок=",Период,Регистратор,Активность,МоментВремени,"; //зяпятые должны обрамлять
Для каждого колонкаТЗ1 из ТЗ1.Колонки цикл
Если Найти(СписокПропускаемыхКолонок,","+колонкаТЗ1.Имя+",")<>0 тогда продолжить;КонецЕсли;
былиидентичны=Идентичны;
Если ТипЗнч(СтрокаТЗ2[колонкаТЗ1.Имя])=Тип("Число") тогда //допускаем прогрешность 0.001
ПроверкаИдентичности=СтрокаТЗ2[колонкаТЗ1.Имя]-строкаТЗ1[колонкаТЗ1.Имя];
ПроверкаИдентичности=?(ПроверкаИдентичности>0,ПроверкаИдентичности,-ПроверкаИдентичности);
Если ПроверкаИдентичности>0.001 тогда
ПроверкаИдентичности=ложь;
Иначе
ПроверкаИдентичности=Истина;
КонецЕсли;
Идентичны=Идентичны И ПроверкаИдентичности;
Иначе
Идентичны=Идентичны И СтрокаТЗ2[колонкаТЗ1.Имя]=строкаТЗ1[колонкаТЗ1.Имя];
КонецЕсли;
ПолностьюИдентичны=ПолностьюИдентичны И Идентичны;
Если былиидентичны<>Идентичны тогда
СтрокаОшибкиТЗ1="ТЗ1 : ";
СтрокаОшибкиТЗ2="ТЗ2 : ";
СписокПропускаемыхКолонок=",Период,Регистратор,Активность,МоментВремени,"; //зяпятые должны обрамлять
Для каждого тек2колонкаТЗ1 из ТЗ1.Колонки цикл
Если Найти(СписокПропускаемыхКолонок,","+тек2колонкаТЗ1.Имя+",")<>0 тогда продолжить;КонецЕсли;
СтрокаОшибкиТЗ1=СтрокаОшибкиТЗ1+тек2колонкаТЗ1.Имя+"="+СокрЛп(СтрокаТЗ1[тек2колонкаТЗ1.Имя])+" ; ";
СтрокаОшибкиТЗ2=СтрокаОшибкиТЗ2+тек2колонкаТЗ1.Имя+"="+СокрЛп(СтрокаТЗ2[тек2колонкаТЗ1.Имя])+" ; ";
КонецЦикла;
СтрокаОшибкиТЗ1=Лев(СтрокаОшибкиТЗ1,СтрДлина(СтрокаОшибкиТЗ1)-3);
СтрокаОшибкиТЗ2=Лев(СтрокаОшибкиТЗ2,СтрДлина(СтрокаОшибкиТЗ2)-3);
Сообщить("Первое отличие в колонке:"+колонкаТЗ1.Имя);
Сообщить(СтрокаОшибкиТЗ1);
Сообщить(СтрокаОшибкиТЗ2);
Сообщить("-------------------------------------------------------------------------------------------------------------------------");
КонецЕсли;
КонецЦикла;
Состояние(ТЗ1.Количество()-нпп);
нпп=нпп+1;
КонецЦикла;
возврат ПолностьюИдентичны;
КонецФункции
