Идея этой обработки возникла, когда после очередного переноса данных из 7.7 в 8.2 сотрудники Заказчика не смогли проверить правильность переноса путем сравнения контрольных отчетов по причине банального неумения работать с табличными документами. Они распечатали километровые портянки контрольных отчетов и 3 дня 2 человека выверяли их вручную с фломастерами, после чего плюнули на это дело и обиделись на меня...
Пришлось им помочь уже бесплатно: повторно осуществили перенос и научили их сравнивать файлы MS Excel. И хотя это несколько ускоряет работу "крыжильщиков", все равно процент ручной работы остается очень высоким.
Поэтому, с заделом на будущее, было решено несколько автоматизировать этот процесс.
Итак, что умеет обработка.
Обработка умеет сравнивать 2 табличных файла. Допустимые форматы - MXL и XLS. При сравнении файлов MS Excel наличие на компьютере установленного MS Excel не требуется, чтение файлов производится посредством ADODB.
Для сравнимаемых полей возможен также вывод разницы этих колонок, если они имеют числовой тип.
Перед сравнением для каждого файла необходимо указать диапазоны строк и колонок для чтения. Можно регулировать состав полей, которые будут выведены в результат, определять ключевые поля и поля сравнения.
Сравнение может производится в двух режимах: последовательное сравнение и обычное.
Последовательное сравнение происходит следующим образом:
- считывается первая строка обоих файлов
- проверяется, совпадают ли в строках ключевые поля (сопоставление строк)
- если ключевые поля совпадают, производится сравнение полей сравнения и выводится одна строка в результирующий документ
- если ключевые поля не совпадают, считается, что это две абсолютно разные строки и в результирующий документ выводится 2 строки: одна как "присутствующая только в первом файле", вторая - "присутствующая только во втором файле".
Тоже самое происходит, если в каком либо файле действительно присутствует строка, которой нет в другом файле. При этом дальнейшее сравнение может происходить с ошибками, поскольку в файлах одинаковые строки смещены отностительно друг друга.
- считывается следующая строка файла и все повторяется...
Обычное сравнение происходит несколько иначе и, на мой взгляд, более предпочтительно:
- считывается первая строка первого файла
- по значениям ключевых полей во втором файле ищется подходящая строка
- если такая строка найдена, производится сравнение и выводится одна строка в результирующий документ. В дальнейшем при поиске эта строка уже не учитывается.
- если такая строка не найдена, выводится строка первого документа
- если по завершении чтения первого файла во втором файле остались строки, которые еще не учавствовали в сравнении, они выводятся в конце результирующего документа
Результирующий табличный документ отображает поля обоих файлов, цвет строк определяет результат их сравнения.
Обработка снабжена кратенькой справкой, постарался расписать порядок работы более-менее понятно :)
Update 20.09.2012:
- добавлен вывод разницы сравниваемых полей и устранены мелкие ошибки.
Update 27.09.2012:
- - добавлено автоопределение размеров таблиц при выборе файла
- - реализовано автоопределение заголовка колонки и типа значения колонки, если начальная строка указана не первая
- - реализована возможность автозаполнения табличных частей "Сопоставление строк" и "Сравнение строк"
- - добавлена возможность открывать выбранные файлы на просмотр из формы обработки
- - реализована индикация процесса
- - добавлена возможность перемещаться по результирующему табличному документу к следующему/предыдущему различию
- - мелкие интерфейсные доработки
Update 21.03.2013:
- - добавлена опция для включения регистронезависимого сравнения строк (спасибо Vanchez за идею)
- - добавлена возможность регулировать ширину всех колонок сразу (по пожеланию gull22 :)
- - добавлена возможность установки отбора в результирующем табличном документе: только различающиеся, только из первого файла, только из второго файла