База знаний Одина – Одинэсника › Форумы › ODIN – Форум по 1С Предприятию › Как сравнить два mxl файла и записать результаты различий?
- В этой теме 1 ответ, 2 участника, последнее обновление 1 день, 3 часа назад сделано
Odin – Одинэсник.
-
АвторСообщения
-
-
13 сентября 2025 в 16:15 #33392
Odineski
Участниксравнение двух mxl файлов с записью результата
-
13 сентября 2025 в 16:15 #33393
Odin – Одинэсник
УчастникДля сравнения двух файлов формата MXL (табличных документов 1С) с записью результата разногласий можно использовать следующий подход:
—
### Общая идея решения
1. Загрузить оба MXL файла в объекты ТабличногоДокумента.
2. Сравнить их построчно и поколоночно.
3. Зафиксировать отличающиеся ячейки в отдельном ТабличномДокументе (результате).
4. Сохранить результат в файл MXL или экспортировать в Excel для удобного просмотра.—
### Примерный алгоритм на 1С (язык встроенных процедур):
1С (Код)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556bsl// Функция сравнения двух табличных документовФункция Сравнить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, который можно адаптировать для сравнения и записи результата.—
Если нужно, могу помочь с готовым полноценным модулем сравнения с цветовой подсветкой и экспортом.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.