Выявление различий двух табличных частей документов

Родился простой и компакный кодик, позволяющий технично выявить различие двух табличных частей документов. Код простой, но новичкам пригодится. В данном примере сраниваем две таб. части, содержащие колонки "Номенклатура", "Ед. измерения" и "Количество".

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

Похожие материалы

Справочники

Документы

Отчеты

Обработки