Выполнить сравнение файлов.
Процедура ВыполнитьСравнениеФайлов(ПутьКФайлу1, ПутьКФайлу2, СпособСравненияВерсийФайлов, ЗаголовокЛевый = "", ЗаголовокПравый = "") Экспорт
#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда
Попытка
Если СпособСравненияВерсийФайлов = "MicrosoftOfficeWord" Тогда
ОбъектWord = Новый COMОбъект("Word.Application");
ОбъектWord.Visible = 0;
ОбъектWord.WordBasic.DisableAutoMacros(1);
Документ = ОбъектWord.Documents.Open(ПутьКФайлу1);
Документ.Merge(ПутьКФайлу2, 2, 0, 0); // MergeTarget:=wdMergeTargetSelected, DetectFormatChanges:=False, UseFormattingFrom:=wdFormattingFromCurrent
ОбъектWord.Visible = 1;
ОбъектWord.Activate();
Документ.Close();
ИначеЕсли СпособСравненияВерсийФайлов = "OpenOfficeOrgWriter" Тогда
// Снимем readonly - иначе не сработает.
Файл1 = Новый Файл(ПутьКФайлу1);
Файл1.УстановитьТолькоЧтение(Ложь);
Файл2 = Новый Файл(ПутьКФайлу2);
Файл2.УстановитьТолькоЧтение(Ложь);
// Открыть OpenOffice
ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
Dispatcher = ServiceManager.createInstance("com.sun.star.frame.DispatchHelper");
// Параметры открытия: отключение исполнения макросов.
ПараметрыДокумента = Новый COMSafeArray("VT_VARIANT", 1);
РежимЗапуска = ПрисвоитьЗначениеСвойству(ServiceManager,
"MacroExecutionMode",
0); // const short NEVER_EXECUTE = 0
ПараметрыДокумента.SetValue(0, РежимЗапуска);
// Открыть документ OpenOffice.
Desktop.loadComponentFromURL(ПреобразоватьВURL(ПутьКФайлу2), "_blank", 0, ПараметрыДокумента);
frame = Desktop.getCurrentFrame();
// Установить показ изменений.
ПараметрыСравнения = Новый COMSafeArray("VT_VARIANT", 1);
ПараметрыСравнения.SetValue(0, ПрисвоитьЗначениеСвойству(ServiceManager, "ShowTrackedChanges", Истина));
dispatcher.executeDispatch(frame, ".uno:ShowTrackedChanges", "", 0, ПараметрыСравнения);
// Сравнить с документом.
ПараметрыВызова = Новый COMSafeArray("VT_VARIANT", 1);
ПараметрыВызова.SetValue(0, ПрисвоитьЗначениеСвойству(ServiceManager, "URL", ПреобразоватьВURL(ПутьКФайлу1)));
dispatcher.executeDispatch(frame, ".uno:CompareDocuments", "", 0, ПараметрыВызова);
ИначеЕсли СпособСравненияВерсийФайлов = "СравнениеТабличныхДокументов" Тогда
ПомещаемыеФайлы = Новый Массив;
ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьКФайлу1));
ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьКФайлу2));
ПомещенныеФайлы = Новый Массив;
Если Не ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь) Тогда
Возврат;
КонецЕсли;
ТабличныйДокументЛевый = ПомещенныеФайлы[0].Хранение;
ТабличныйДокументПравый = ПомещенныеФайлы[1].Хранение;
ТабличныеДокументыСтруктура = Новый Структура("Левый, Правый", ТабличныйДокументЛевый, ТабличныйДокументПравый);
АдресТабличныхДокументов = ПоместитьВоВременноеХранилище(ТабличныеДокументыСтруктура, Неопределено);
ПараметрыОткрытияФормы = Новый Структура("АдресТабличныхДокументов, ЗаголовокЛевый, ЗаголовокПравый",
АдресТабличныхДокументов, ЗаголовокЛевый, ЗаголовокПравый);
ОткрытьФорму("ОбщаяФорма.СравнениеТабличныхДокументов", ПараметрыОткрытияФормы, ЭтотОбъект);
КонецЕсли;
Исключение
СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось сравнить файлы по причине: %1'"),
КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ЖурналРегистрацииКлиент.ДобавитьСообщениеДляЖурналаРегистрации(
НСтр("ru = 'Файлы. Сравнение файлов'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка()),
"Ошибка", СообщениеОбОшибке, , Истина);
ВызватьИсключение СообщениеОбОшибке;
КонецПопытки;
#КонецЕсли
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
Кеширование текущей строки для сравнения при окончании редактирования
ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов (БСП)
ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезФайл (БСП)
ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)