База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как сравнить два файла в 1С с записью разногласий? › RE: Как сравнить два файла в 1С с записью разногласий?
Для сравнения двух файлов с записью разногласий в 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/
—
Если нужна помощь с конкретным сценарием или форматом записи разногласий — уточните, я помогу составить более точное решение.