RE: Как сравнить два файла в 1С с записью разногласий?

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

    Для сравнения двух файлов с записью разногласий в 1С:Предприятии можно использовать встроенный механизм сравнения файлов с последующим сохранением результатов. Ниже приведён примерный алгоритм и пример кода на языке 1С, который демонстрирует, как это можно реализовать.

    ### Алгоритм сравнения двух файлов с записью разногласий

    1. Указать пути к двум сравниваемым файлам.
    2. Создать объект `СравнениеФайлов`.
    3. Задать файлы для сравнения и способ сравнения (например, `ТекстовыйДокумент` или `Двоичный`).
    4. Выполнить сравнение и получить результат.
    5. Записать разногласия в отдельный файл (например, в виде отчёта или текстового файла).

    ### Пример кода на 1С

    1C
    Функция СравнитьФайлыСЗаписьюРазногласий(ПутьКФайлу1, ПутьКФайлу2, ПутьКФайлаРазногласий) Экспорт
    
        // Создаём объект сравнения файлов
        Сравнение = Новый СравнениеФайлов;
        Сравнение.ПервыйФайл = ПутьКФайлу1;
        Сравнение.ВторойФайл = ПутьКФайлу2;
        Сравнение.СпособСравнения = СпособСравненияФайлов.ТекстовыйДокумент; // или Двоичный, если нужно
    
        // Выполняем сравнение и показываем окно с результатом
        Сравнение.ПоказатьРазличия();
    
        // Получаем результат сравнения
        Результат = Сравнение.РезультатСравнения;
    
        Если Результат = РезультатСравненияФайлов.ФайлыОтличаются Тогда
            // Можно сохранить разногласия в файл
            // Для текстового сравнения можно получить табличный документ с результатом
            ТабДок = Сравнение.ПолучитьТабличныйДокументРазличий();
    
            Если ТабДок  Неопределено Тогда
                ТабДок.Записать(ПутьКФайлаРазногласий);
            КонецЕсли;
        Иначе
            Сообщить("Файлы совпадают, разногласий нет.");
        КонецЕсли;
    
    КонецФункции
    

    ### Пояснения

    — `СравнениеФайлов` — встроенный объект 1С для сравнения файлов.
    — `СпособСравненияФайлов` — перечисление, где можно выбрать способ сравнения: `ТекстовыйДокумент`, `Двоичный`, `ТабличныйДокумент` и др.
    — Метод `ПоказатьРазличия()` открывает окно с визуальным сравнением.
    — Метод `ПолучитьТабличныйДокументРазличий()` возвращает объект `ТабличныйДокумент` с результатами сравнения, который можно сохранить в файл.
    — Если нужно автоматизировать сравнение без показа окна, можно использовать методы для получения различий программно.

    ### Дополнительно

    Если требуется сравнивать табличные данные (например, таблицы значений), можно использовать подход с построителем отчёта и сравнением табличных документов, как в примере ниже:

    1C
    Функция СравнитьТаблицыЗначений(Таблица1, Таблица2) Экспорт
        Построитель = Новый ПостроительОтчета;
        Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Таблица1);
        Построитель.ЗаполнитьНастройки();
        ТабДок1 = Новый ТабличныйДокумент;
        Построитель.Вывести(ТабДок1);
        ИмяФайла1 = ПолучитьИмяВременногоФайла();
        ТабДок1.Записать(ИмяФайла1);
    
        Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Таблица2);
        Построитель.ЗаполнитьНастройки();
        ТабДок2 = Новый ТабличныйДокумент;
        Построитель.Вывести(ТабДок2);
        ИмяФайла2 = ПолучитьИмяВременногоФайла();
        ТабДок2.Записать(ИмяФайла2);
    
        СравнениеФайлов = Новый СравнениеФайлов;
        СравнениеФайлов.ПервыйФайл = ИмяФайла1;
        СравнениеФайлов.ВторойФайл = ИмяФайла2;
        СравнениеФайлов.СпособСравнения = СпособСравненияФайлов.ТабличныйДокумент;
        СравнениеФайлов.ПоказатьРазличия();
    КонецФункции
    

    Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/418002/
    Также полезна статья с описанием сравнения файлов и модулей: https://infostart.ru/1c/articles/179454/

    Если нужна помощь с конкретным сценарием или форматом записи разногласий — уточните, я помогу составить более точное решение.

    База знаний 1С