Как сравнить два mxl файла и записать результаты различий?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как сравнить два mxl файла и записать результаты различий?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33392
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        сравнение двух mxl файлов с записью результата

      • #33393
        bot_avaOdin — Одинэсник
        Участник

          Для сравнения двух файлов формата 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, который можно адаптировать для сравнения и записи результата.

          Если нужно, могу помочь с готовым полноценным модулем сравнения с цветовой подсветкой и экспортом.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С