База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как сравнить два mxl файла и записать результаты различий? › RE: Как сравнить два mxl файла и записать результаты различий?
Для сравнения двух файлов формата MXL (табличных документов 1С) с записью результата разногласий можно использовать следующий подход:
—
### Общая идея решения
1. Загрузить оба MXL файла в объекты ТабличногоДокумента.
2. Сравнить их построчно и поколоночно.
3. Зафиксировать отличающиеся ячейки в отдельном ТабличномДокументе (результате).
4. Сохранить результат в файл MXL или экспортировать в Excel для удобного просмотра.
—
### Примерный алгоритм на 1С (язык встроенных процедур):
bsl
// Функция сравнения двух табличных документов
Функция СравнитьMXL(ТабДок1, ТабДок2) Экспорт
Результат = Новый ТабличныйДокумент;
// Определяем максимальное количество строк и колонок
МаксСтрок = Максимум(ТабДок1.КоличествоСтрок(), ТабДок2.КоличествоСтрок());
МаксКолонок = Максимум(ТабДок1.КоличествоКолонок(), ТабДок2.КоличествоКолонок());
// Создаем структуру результата с таким же размером
Для Строка = 1 По МаксСтрок Цикл
Результат.ДобавитьСтроку();
Для Колонка = 1 По МаксКолонок Цикл
Знач1 = "";
Знач2 = "";
Если Строка <= ТабДок1.КоличествоСтрок() И Колонка <= ТабДок1.КоличествоКолонок() Тогда
Знач1 = ТабДок1.ПолучитьЯчейку(Строка, Колонка).Значение;
КонецЕсли;
Если Строка <= ТабДок2.КоличествоСтрок() И Колонка <= ТабДок2.КоличествоКолонок() Тогда
Знач2 = ТабДок2.ПолучитьЯчейку(Строка, Колонка).Значение;
КонецЕсли;
// Записываем в результат: если значения совпадают, пишем значение, иначе помечаем разницу
Если Знач1 = Знач2 Тогда
Результат.УстановитьЯчейку(Строка, Колонка, Знач1);
Иначе
// Можно записать в формате "Знач1 | Знач2" или выделить цветом
Результат.УстановитьЯчейку(Строка, Колонка, Знач1 + " | " + Знач2);
// Для выделения цветом:
Ячейка = Результат.ПолучитьЯчейку(Строка, Колонка);
Ячейка.ЦветФона = Цвета.Красный;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат Результат;
КонецФункции
// Пример использования
Процедура СравнитьФайлыMXL()
ИмяФайла1 = "C:TempFile1.mxl";
ИмяФайла2 = "C:TempFile2.mxl";
ИмяРезультата = "C:TempResult.mxl";
ТабДок1 = Новый ТабличныйДокумент;
ТабДок1.Прочитать(ИмяФайла1);
ТабДок2 = Новый ТабличныйДокумент;
ТабДок2.Прочитать(ИмяФайла2);
Результат = СравнитьMXL(ТабДок1, ТабДок2);
Результат.Записать(ИмяРезультата);
Сообщить("Сравнение завершено. Результат сохранен в " + ИмяРезультата);
КонецПроцедуры
—
### Важные моменты:
— Если таблицы большие, сравнение может занять время.
— Для удобства можно дополнительно реализовать подсветку отличий цветом.
— Можно экспортировать результат в Excel через OLE, если нужен более удобный просмотр.
— Если структура таблиц отличается (разное количество строк/столбцов), сравнение идет по максимальному размеру, отсутствующие значения считаются пустыми.
—
### Альтернативные варианты:
— Использовать штатную обработку 1С «Сравнить файлы» (работает с MXL, но без сохранения результата).
— Экспортировать MXL в Excel и сравнивать средствами Excel (формулы, условное форматирование).
— Использовать внешние утилиты для сравнения Excel файлов.
—
Рекомендую посмотреть здесь:
https://infostart.ru/1c/articles/421563/ — пример экспорта MXL в Excel с использованием OLE, который можно адаптировать для сравнения и записи результата.
—
Если нужно, могу помочь с готовым полноценным модулем сравнения с цветовой подсветкой и экспортом.