Каталог решений - Сравнение двух таблиц значений.

Сравнение двух таблиц значений.

Сравнение двух таблиц значений.

В наличии

Возникла потребность сравнить данные в двух таблицах сказать равны ли они.
В результате появилась неплохая как по мне функция.
В ней показана возможность как сравнивать значения с определенной точностью,
заготовлен шаблон для исключения колонок для сравнения.
Надеюсь кому-то упростит/ускорит скорость разработки.

Категория:

Описание

 
 
Функция СравнимТЗ(ТЗ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;
	КонецЦикла;
	
	возврат ПолностьюИдентичны;
	
КонецФункции
has been added to your cart:
Оформление заказа