ВыполнитьСравнениеФайлов (БСП)

Автор: 1С
ОбщийМодуль.РаботаСФайламиСлужебныйКлиент
БСП

Выполнить сравнение файлов.

Процедура ВыполнитьСравнениеФайлов(ПутьКФайлу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
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

СравнитьФайлы (БСП)

ИР Запомнить для сравнения

Сравнение двух массивов

Кеширование текущей строки для сравнения при окончании редактирования

ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов (БСП)

ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезФайл (БСП)

ВыполнитьЗагрузкуДляУзлаИнформационнойБазыИзСервисаПередачиФайлов (БСП)

ЭтоВидСравненияСписка (БСП)

СравнениеВерсийАвтомат (БСП)

TurboConf 6 - расширение Конфигуратора 1С