From abf98d332e10a8f6b817f9ba60d37094b45f5718 Mon Sep 17 00:00:00 2001 From: Shcherbakov Vadim Date: Tue, 12 Oct 2021 13:08:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D1=81=D1=80=D0=B0=D0=B2=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=87=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=BE?= =?UTF-8?q?=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .project | 18 + .settings/org.eclipse.core.resources.prefs | 2 + DT-INF/PROJECT.PMF | 2 + .../Module.bsl | 25 ++ .../НастройкиКлиентСерверПереопределяемый.mdo | 12 + src/Configuration/Configuration.mdo | 34 ++ .../ManagedApplicationModule.bsl | 41 +++ .../Forms/Инициализация/Form.form | 45 +++ .../Forms/Инициализация/Module.bsl | 260 +++++++++++++++ .../Forms/Форма/Form.form | 307 ++++++++++++++++++ .../Forms/Форма/Module.bsl | 85 +++++ .../Templates/Заголовок/Template.txt | 1 + .../Templates/Макет1/Template.mxlx | 33 ++ .../Templates/Макет2/Template.mxlx | 33 ++ .../СравнениеТабличныхДокументов.mdo | 54 +++ 15 files changed, 952 insertions(+) create mode 100644 .project create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 DT-INF/PROJECT.PMF create mode 100644 src/CommonModules/НастройкиКлиентСерверПереопределяемый/Module.bsl create mode 100644 src/CommonModules/НастройкиКлиентСерверПереопределяемый/НастройкиКлиентСерверПереопределяемый.mdo create mode 100644 src/Configuration/Configuration.mdo create mode 100644 src/Configuration/ManagedApplicationModule.bsl create mode 100644 src/DataProcessors/СравнениеТабличныхДокументов/Forms/Инициализация/Form.form create mode 100644 src/DataProcessors/СравнениеТабличныхДокументов/Forms/Инициализация/Module.bsl create mode 100644 src/DataProcessors/СравнениеТабличныхДокументов/Forms/Форма/Form.form create mode 100644 src/DataProcessors/СравнениеТабличныхДокументов/Forms/Форма/Module.bsl create mode 100644 src/DataProcessors/СравнениеТабличныхДокументов/Templates/Заголовок/Template.txt create mode 100644 src/DataProcessors/СравнениеТабличныхДокументов/Templates/Макет1/Template.mxlx create mode 100644 src/DataProcessors/СравнениеТабличныхДокументов/Templates/Макет2/Template.mxlx create mode 100644 src/DataProcessors/СравнениеТабличныхДокументов/СравнениеТабличныхДокументов.mdo diff --git a/.project b/.project new file mode 100644 index 0000000..2fd289c --- /dev/null +++ b/.project @@ -0,0 +1,18 @@ + + + EDTComparator + + + + + + org.eclipse.xtext.ui.shared.xtextBuilder + + + + + + org.eclipse.xtext.ui.shared.xtextNature + com._1c.g5.v8.dt.core.V8ConfigurationNature + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/DT-INF/PROJECT.PMF b/DT-INF/PROJECT.PMF new file mode 100644 index 0000000..a796b55 --- /dev/null +++ b/DT-INF/PROJECT.PMF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Runtime-Version: 8.3.16 diff --git a/src/CommonModules/НастройкиКлиентСерверПереопределяемый/Module.bsl b/src/CommonModules/НастройкиКлиентСерверПереопределяемый/Module.bsl new file mode 100644 index 0000000..74d9446 --- /dev/null +++ b/src/CommonModules/НастройкиКлиентСерверПереопределяемый/Module.bsl @@ -0,0 +1,25 @@ +Функция ВерсияEDT() Экспорт + Возврат "2021.1.7"; +КонецФункции + +Функция ОсновнаяПрограммаСравнения2(Параметры) Экспорт + Возврат СтрШаблон("""C:\Users\Chtcherbakov\AppData\Local\Apps\Araxis\Araxis Merge\Compare.exe""" + + " /wait /2 /readonly /a1 /title1:%3 /title2:%4 %1 %2" + ,Параметры[0], Параметры[1] + ,ПараметрВСтроку(Параметры, 2), ПараметрВСтроку(Параметры, 3)); +КонецФункции + +Функция ОсновнаяПрограммаСравнения3(Параметры) Экспорт + Возврат СтрШаблон("""C:\Users\Chtcherbakov\AppData\Local\Apps\Araxis\Araxis Merge\Compare.exe""" + + " /wait /3 /readonly /a1 /title1:%4 /title2:%5 /title3:%6 %1 %2 %3" + ,Параметры[0], Параметры[1], Параметры[2] + ,ПараметрВСтроку(Параметры, 3), ПараметрВСтроку(Параметры, 4), ПараметрВСтроку(Параметры, 5)); +КонецФункции + +Функция ПараметрВСтроку(Параметры, ИндПараметра) + Если ИндПараметра <= Параметры.Количество() Тогда + Возврат """" + СтрЗаменить(Параметры[ИндПараметра], """", """""") + """"; + Иначе + Возврат ""; + КонецЕсли; +КонецФункции \ No newline at end of file diff --git a/src/CommonModules/НастройкиКлиентСерверПереопределяемый/НастройкиКлиентСерверПереопределяемый.mdo b/src/CommonModules/НастройкиКлиентСерверПереопределяемый/НастройкиКлиентСерверПереопределяемый.mdo new file mode 100644 index 0000000..2dafa33 --- /dev/null +++ b/src/CommonModules/НастройкиКлиентСерверПереопределяемый/НастройкиКлиентСерверПереопределяемый.mdo @@ -0,0 +1,12 @@ + + + НастройкиКлиентСерверПереопределяемый + + ru + Настройки клиент сервер переопределяемый + + true + true + true + true + diff --git a/src/Configuration/Configuration.mdo b/src/Configuration/Configuration.mdo new file mode 100644 index 0000000..2227147 --- /dev/null +++ b/src/Configuration/Configuration.mdo @@ -0,0 +1,34 @@ + + + Конфигурация + + + + + + + 8.3.16 + ManagedApplication + PersonalComputer + Russian + + AllowOSBackup + true + + Language.Русский + Managed + NotAutoFree + UseWithWarnings + UseWithWarnings + 8.3.10 + + Русский + + ru + Русский + + ru + + CommonModule.НастройкиКлиентСерверПереопределяемый + DataProcessor.СравнениеТабличныхДокументов + diff --git a/src/Configuration/ManagedApplicationModule.bsl b/src/Configuration/ManagedApplicationModule.bsl new file mode 100644 index 0000000..7708f12 --- /dev/null +++ b/src/Configuration/ManagedApplicationModule.bsl @@ -0,0 +1,41 @@ +#Если ТолстыйКлиентУправляемоеПриложение Тогда +Процедура ПередНачаломРаботыСистемы(Отказ) + Если СтрНачинаетсяС(ПараметрЗапуска, "ЗапускВнешнейОбработки") Тогда + // обычный запуск + Иначе + МассивПараметры = СтрРазделить(ПараметрЗапуска, ";", Истина); + Если МассивПараметры.Количество() = 0 Тогда + Предупреждение(НСтр("ru = 'Неверное количество параметров'")); + Отказ = Истина; + Возврат; + КонецЕсли; + + ЧтениеТекста = Новый ЧтениеТекста(МассивПараметры[0]); + ПерваяСтрока = ЧтениеТекста.ПрочитатьСтроку(); + ВтораяСтрока = ЧтениеТекста.ПрочитатьСтроку(); + Если ПерваяСтрока = "" + И СтрНачинаетсяС(ВтораяСтрока, " + + + ФормаКоманднаяПанель + -1 + true + true + + true + + Left + true + + + OnOpen + ПриОткрытии + + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DataProcessorObject.СравнениеТабличныхДокументов + + + true + + + true + +
true
+
+ + + + + +
diff --git a/src/DataProcessors/СравнениеТабличныхДокументов/Forms/Инициализация/Module.bsl b/src/DataProcessors/СравнениеТабличныхДокументов/Forms/Инициализация/Module.bsl new file mode 100644 index 0000000..7e82edb --- /dev/null +++ b/src/DataProcessors/СравнениеТабличныхДокументов/Forms/Инициализация/Module.bsl @@ -0,0 +1,260 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2021, Щербаков Вадим, chtcherbakov.vadim@gmail.com +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by-sa/4.0/legalcode + +#Если ТолстыйКлиентУправляемоеПриложение Тогда +&НаКлиенте +Перем ПутьКОбработкеПослеОткрытия; + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); + Поз = Найти(СтрокаСоединения, "File="""); + Если Поз = 0 Тогда + Предупреждение(НСтр("ru = 'Неверный тип ИБ'")); + Отказ = Истина; + Возврат; + КонецЕсли; + + СтрокаСоединения = Сред(СтрокаСоединения, Поз + 6); + Поз = Найти(СтрокаСоединения, """;"); + Если Поз = 0 Тогда + Предупреждение(НСтр("ru = 'Неверный путь к файловой ИБ'")); + Отказ = Истина; + Возврат; + КонецЕсли; + + МассивПараметры = СтрРазделить(ПараметрЗапуска, ";", Истина); + + Заголовок2 = Неопределено; + Если МассивПараметры.Количество() = 2 Тогда + Заголовок1 = ПолучитьЗаголовокСравнения(НСтр("ru = 'Старый'"), НСтр("ru = 'Новый'")); + + ИначеЕсли МассивПараметры.Количество() = 3 Тогда + Заголовок1 = ПолучитьЗаголовокСравнения(НСтр("ru = 'Старый'"), НСтр("ru = 'Текущий'")); + Заголовок2 = ПолучитьЗаголовокСравнения(НСтр("ru = 'Старый'"), НСтр("ru = 'Новый'")); + + ИначеЕсли МассивПараметры.Количество() = 4 Тогда + // 2-х стороннее сравнение + Заголовок1 = ПолучитьЗаголовокСравнения(МассивПараметры[2], МассивПараметры[3]); + + ИначеЕсли МассивПараметры.Количество() = 6 Тогда + // 3-х стороннее сравнение + Заголовок1 = ПолучитьЗаголовокСравнения(МассивПараметры[3], МассивПараметры[4]); + Заголовок2 = ПолучитьЗаголовокСравнения(МассивПараметры[3], МассивПараметры[5]); + Иначе + Предупреждение(НСтр("ru = 'Неверное количество параметров'")); + Отказ = Истина; + Возврат; + КонецЕсли; + + КаталогИБ = Лев(СтрокаСоединения, Поз - 1); + ОбъектКаталогаEDT = Новый Файл(КаталогИБ + "\edt"); + Если НЕ ОбъектКаталогаEDT.Существует() Тогда + // + ПараметрыКонфигурацияВФайлы = СтрШаблон("DESIGNER /DumpConfigToFiles %1" + ,КаталогИБ + "\export"); + + КодВозврата = Неопределено; + ЗапуститьСистему(ПараметрыКонфигурацияВФайлы, Истина, КодВозврата); + Если КодВозврата <> 0 Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + // + ПреобразоватьФайлыОбработок(КаталогИБ + "\export"); + + // + КомандаСоздатьРабочийКаталог= СтрШаблон("cmd.exe /c ring edt%1 workspace import --configuration-files %2 --workspace-location %3 --project-name main" + ,СуффиксВерсииEDT() + ,КаталогИБ + "\export\DataProcessors" + ,КаталогИБ + "\edt"); + + КодВозврата = Неопределено; + ЗапуститьПриложение(КомандаСоздатьРабочийКаталог, , Истина, КодВозврата); + Если КодВозврата <> 0 Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + КонецЕсли; + + ПутьКОбработкеПослеОткрытия = СоздатьОбработкуСравнения(КаталогИБ, МассивПараметры[0], МассивПараметры[1], Заголовок1, Отказ); + + Если Заголовок2 <> Неопределено Тогда + ПутьКОбработке = СоздатьОбработкуСравнения(КаталогИБ, МассивПараметры[0], МассивПараметры[2], Заголовок2, Отказ); + Если ПутьКОбработке <> Неопределено Тогда + ПараметрыОткрытьОбработку = СтрШаблон("/CЗапускВнешнейОбработки /Execute %1", ПутьКОбработке); + ЗапуститьСистему(ПараметрыОткрытьОбработку); + КонецЕсли; + КонецЕсли; + + ПодключитьОбработчикОжидания("ПослеОткрытия", 0.1, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ПослеОткрытия() + Если ПутьКОбработкеПослеОткрытия <> Неопределено Тогда + ВнешняяОбработка = ВнешниеОбработки.Создать(ПутьКОбработкеПослеОткрытия); + ОткрытьФорму("ВнешняяОбработка.СравнениеТабличныхДокументов.Форма"); + КонецЕсли; + + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Функция СоздатьОбработкуСравнения(КаталогИБ, Файл1, Файл2, Заголовок, Отказ) + // + КопироватьФайл(Файл1, КаталогИБ + "\edt\main\src\ExternalDataProcessors\СравнениеТабличныхДокументов\Templates\Макет1\Template.mxlx"); + КопироватьФайл(Файл2, КаталогИБ + "\edt\main\src\ExternalDataProcessors\СравнениеТабличныхДокументов\Templates\Макет2\Template.mxlx"); + + ЗаписьТекста = Новый ЗаписьТекста(КаталогИБ + "\edt\main\src\ExternalDataProcessors\СравнениеТабличныхДокументов\Templates\Заголовок\Template.txt"); + ЗаписьТекста.Записать(Заголовок); + ЗаписьТекста.Закрыть(); + + // + ИмяВременногоФайла = ПолучитьИмяВременногоФайла("epf"); + УдалитьФайлы(КаталогИБ + "\temp"); + + КомандаСоздатьФайлыОбработки = СтрШаблон("cmd.exe /c ring edt%1 workspace export --workspace-location %2 --configuration-files %3 --project-name main" + ,СуффиксВерсииEDT() + ,КаталогИБ + "\edt" + ,КаталогИБ + "\temp"); + + КодВозврата = Неопределено; + ЗапуститьПриложение(КомандаСоздатьФайлыОбработки, , Истина, КодВозврата); + Если КодВозврата <> 0 Тогда + Отказ = Истина; + Возврат Неопределено; + КонецЕсли; + + // + КомандаСоздатьОбработку = СтрШаблон("DESIGNER /LoadExternalDataProcessorOrReportFromFiles %1 %2" + ,КаталогИБ + "\temp\ExternalDataProcessors\СравнениеТабличныхДокументов.xml", ИмяВременногоФайла); + + КодВозврата = Неопределено; + ЗапуститьСистему(КомандаСоздатьОбработку, Истина, КодВозврата); + Если КодВозврата <> 0 Тогда + Отказ = Истина; + Возврат Неопределено; + КонецЕсли; + + Возврат ИмяВременногоФайла; +КонецФункции + +&НаКлиенте +Процедура ПреобразоватьФайлыОбработок(ПутьККаталогуПоставки) + МассивФайлы = НайтиФайлы(ПутьККаталогуПоставки + "\DataProcessors", "*.xml", Истина); + Для Каждого Файл Из МассивФайлы Цикл + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.ОткрытьФайл(Файл.ПолноеИмя); + + ПостроительDOM = Новый ПостроительDOM; + ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML); + ЧтениеXML.Закрыть(); + + ОбработатьУровеньDOM(ДокументDOM, ДокументDOM.ЭлементДокумента); + + ЗаписьXML = Новый ЗаписьXML(); + ЗаписьXML.УстановитьСтроку(ЧтениеXML.КодировкаXML); + + ЗаписьDOM = Новый ЗаписьDOM(); + ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML); + + Строка = ЗаписьXML.Закрыть(); + Строка = СтрЗаменить(Строка, "DataProcessor", "ExternalDataProcessor"); + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(Строка); + ТекстовыйДокумент.Записать(Файл.ПолноеИмя, ЧтениеXML.КодировкаXML); + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьУровеньDOM(Документ, Элемент, МассивДобавляемые = Неопределено, МассивУдаляемые = Неопределено) + Если Элемент.ТипУзла = ТипУзлаDOM.Элемент Тогда + Если Элемент.ИмяУзла = "DataProcessor" Тогда + Документ.ПереименоватьУзел(Элемент, Элемент.URIПространстваИмен, "http://v8.1c.ru/8.3/MDClasses/ExternalDataProcessor"); + + ИначеЕсли Элемент.ИмяУзла = "UseStandardCommands" + ИЛИ Элемент.ИмяУзла = "IncludeHelpInContents" + ИЛИ Элемент.ИмяУзла = "ExtendedPresentation" + ИЛИ Элемент.ИмяУзла = "Explanation" Тогда + + МассивУдаляемые.Добавить(Элемент); + Возврат; + + ИначеЕсли Элемент.URIПространстваИмен = "http://v8.1c.ru/8.3/xcf/readable" + И Элемент.ЛокальноеИмя = "GeneratedType" + И Элемент.Атрибуты.ПолучитьИменованныйЭлемент("category").Значение = "Manager" Тогда + + ЭлементDOM = Документ.СоздатьЭлемент("http://v8.1c.ru/8.3/xcf/readable", "ContainedObject"); + + Для Каждого ДочернийЭлемент Из Элемент.ДочерниеУзлы Цикл + Если ДочернийЭлемент.URIПространстваИмен = "http://v8.1c.ru/8.3/xcf/readable" + И ДочернийЭлемент.ЛокальноеИмя = "TypeId" Тогда + + ДочернийЭлементDOM = Документ.СоздатьЭлемент("http://v8.1c.ru/8.3/xcf/readable", "ClassId"); + ДочернийЭлементDOM.ТекстовоеСодержимое = "c3831ec8-d8d5-4f93-8a22-f9bfae07327f"; + + ЭлементDOM.ДобавитьДочерний(ДочернийЭлементDOM); + + ИначеЕсли ДочернийЭлемент.URIПространстваИмен = "http://v8.1c.ru/8.3/xcf/readable" + И ДочернийЭлемент.ЛокальноеИмя = "ValueId" Тогда + + ДочернийЭлементDOM = Документ.СоздатьЭлемент("http://v8.1c.ru/8.3/xcf/readable", "ObjectId"); + ДочернийЭлементDOM.ТекстовоеСодержимое = ДочернийЭлемент.ТекстовоеСодержимое; + + ЭлементDOM.ДобавитьДочерний(ДочернийЭлементDOM); + КонецЕсли; + КонецЦикла; + + МассивДобавляемые.Добавить(ЭлементDOM); + МассивУдаляемые.Добавить(Элемент); + КонецЕсли; + КонецЕсли; + + МассивДляДобавления = Новый Массив; + МассивДляУдаления = Новый Массив; + Для Каждого ДочернийУзел Из Элемент.ДочерниеУзлы Цикл + Если ТипЗнч(ДочернийУзел) = Тип("ЭлементDOM") Тогда + ОбработатьУровеньDOM(Документ, ДочернийУзел, МассивДляДобавления, МассивДляУдаления); + КонецЕсли; + КонецЦикла; + + Для Каждого ДочернийУзел Из МассивДляДобавления Цикл + Элемент.ДобавитьДочерний(ДочернийУзел); + КонецЦикла; + + Для Каждого ДочернийУзел Из МассивДляУдаления Цикл + Элемент.УдалитьДочерний(ДочернийУзел); + КонецЦикла; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция СуффиксВерсииEDT() + ВерсияEDT = НастройкиКлиентСерверПереопределяемый.ВерсияEDT(); + Возврат ?(ЗначениеЗаполнено(ВерсияEDT), "@" + ВерсияEDT, ""); +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПолучитьЗаголовокСравнения(Заголовок1, Заголовок2) + ОбщийЗаголовок = ""; + Для Инд = 1 По Мин(СтрДлина(Заголовок1), СтрДлина(Заголовок2)) Цикл + ТекущийСимвол = Сред(Заголовок1, Инд, 1); + Если ТекущийСимвол = Сред(Заголовок2, Инд, 1) + И ТекущийСимвол <> "(" Тогда + ОбщийЗаголовок = ОбщийЗаголовок + ТекущийСимвол; + Иначе + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат СтрШаблон("%1 [%2 <-> %3]" + ,ОбщийЗаголовок, Сред(Заголовок1, СтрДлина(ОбщийЗаголовок) + 1), Сред(Заголовок2, СтрДлина(ОбщийЗаголовок) + 1)); +КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/src/DataProcessors/СравнениеТабличныхДокументов/Forms/Форма/Form.form b/src/DataProcessors/СравнениеТабличныхДокументов/Forms/Форма/Form.form new file mode 100644 index 0000000..cb4ba4c --- /dev/null +++ b/src/DataProcessors/СравнениеТабличныхДокументов/Forms/Форма/Form.form @@ -0,0 +1,307 @@ + + + + ГруппаДокументы + 9 + + ТабличныйДокумент1 + 11 + true + true + + true + + + ТабличныйДокумент1 + + + ТабличныйДокумент1РасширеннаяПодсказка + 13 + true + true + + true + + Label + true + true + + Left + + + + ТабличныйДокумент1КонтекстноеМеню + 12 + true + true + + true + + true + + SpreadsheetDocumentField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + true + true + true + true + Special + ScrollAuto + ScrollAuto + Always + true + true + true + true + + + + ТабличныйДокумент2 + 14 + true + true + + true + + + ТабличныйДокумент2 + + + ТабличныйДокумент2РасширеннаяПодсказка + 16 + true + true + + true + + Label + true + true + + Left + + + + ТабличныйДокумент2КонтекстноеМеню + 15 + true + true + + true + + true + + SpreadsheetDocumentField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + true + true + true + true + Special + ScrollAuto + ScrollAuto + Always + true + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа документы</value> + + + ru + Группа документы + + + ГруппаДокументыРасширеннаяПодсказка + 10 + true + true + + true + + Label + true + true + + Left + + + UsualGroup + + AlwaysHorizontal + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаСравнить + 7 + true + true + + true + + + ФормаСравнитьРасширеннаяПодсказка + 8 + true + true + + true + + Label + true + true + + Left + + + Form.Command.Сравнить + Auto + true + true + UserCmds + Auto + Auto + + true + true + + true + + Left + true + + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnClose + ПриЗакрытии + + true + true + Vertical + true + true + true + true + true + + Объект + 1 + + DataProcessorObject.СравнениеТабличныхДокументов + + + true + + + true + +
true
+
+ + ТабличныйДокумент1 + + <key>ru</key> + <value>Табличный документ 1</value> + + 2 + + SpreadsheetDocument + + + true + + + true + + true + + + + ТабличныйДокумент2 + + <key>ru</key> + <value>Табличный документ 2</value> + + 3 + + SpreadsheetDocument + + + true + + + true + + true + + + + Сравнить + + <key>ru</key> + <value>Сравнить</value> + + 1 + + ru + Сравнить + + + true + + + + Сравнить + + + Auto + + + + + + +
diff --git a/src/DataProcessors/СравнениеТабличныхДокументов/Forms/Форма/Module.bsl b/src/DataProcessors/СравнениеТабличныхДокументов/Forms/Форма/Module.bsl new file mode 100644 index 0000000..22899d7 --- /dev/null +++ b/src/DataProcessors/СравнениеТабличныхДокументов/Forms/Форма/Module.bsl @@ -0,0 +1,85 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// Copyright (c) 2021, Щербаков Вадим, chtcherbakov.vadim@gmail.com +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by-sa/4.0/legalcode + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ТолстыйКлиент = Ложь; + #Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + ТолстыйКлиент = Истина; + #КонецЕсли + + Если НЕ ТолстыйКлиент Тогда + ПоказатьПредупреждение( , НСтр("ru = 'Обработка должна быть запущена в режиме толстого клиента'")); + Отказ = Истина; + КонецЕсли; + + #Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + ТабличныйДокумент1 = ПолучитьМакет("Макет1"); + ТабличныйДокумент2 = ПолучитьМакет("Макет2"); + УстановитьЗаголовокСистемы(ПолучитьМакет("Заголовок").ПолучитьТекст()); + + ПодключитьОбработчикОжидания("ПослеОткрытия", 0.1, Истина); + #КонецЕсли +КонецПроцедуры + +&НаКлиенте +Процедура ПослеОткрытия() + Сравнить(); +КонецПроцедуры + +&НаКлиенте +Процедура Сравнить(Команда = Неопределено) + #Если ТолстыйКлиентУправляемоеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда + ИмяВременногоФайла1 = ПолучитьИмяВременногоФайла("mxl"); + ТабличныйДокумент1.Записать(ИмяВременногоФайла1); + + ИмяВременногоФайла2 = ПолучитьИмяВременногоФайла("mxl"); + ТабличныйДокумент2.Записать(ИмяВременногоФайла2); + + СравнениеФайлов = Новый СравнениеФайлов; + СравнениеФайлов.СпособСравнения = СпособСравненияФайлов.ТабличныйДокумент; + СравнениеФайлов.ПервыйФайл = ИмяВременногоФайла1; + СравнениеФайлов.ВторойФайл = ИмяВременногоФайла2; + + СравнениеФайлов.ПоказатьРазличия(); + + УдалитьФайлы(ИмяВременногоФайла1); + УдалитьФайлы(ИмяВременногоФайла2); + #КонецЕсли +КонецПроцедуры + +&НаСервере +Функция ПолучитьМакет(ИмяМакета) + Возврат РеквизитФормыВЗначение("Объект") .ПолучитьМакет(ИмяМакета); +КонецФункции + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) + Если ЗавершениеРаботы <> Истина + И Модифицированность Тогда + + ОбработчикПродолжения = Новый ОписаниеОповещения("ПередЗакрытиемПослеВопроса", ЭтаФорма); + ПоказатьВопрос(ОбработчикПродолжения, НСтр("ru = 'Измененные данные будут потеряны. Продолжить?'") + ,РежимДиалогаВопрос.ДаНет); + Отказ = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытиемПослеВопроса(РезультатВопроса, ДополнительныеПараметры) Экспорт + Если РезультатВопроса = КодВозвратаДиалога.Да Тогда + Модифицированность = Ложь; + Закрыть(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии(ЗавершениеРаботы) + Если ЗавершениеРаботы <> Истина Тогда + ЗавершитьРаботуСистемы(Ложь); + КонецЕсли; +КонецПроцедуры diff --git a/src/DataProcessors/СравнениеТабличныхДокументов/Templates/Заголовок/Template.txt b/src/DataProcessors/СравнениеТабличныхДокументов/Templates/Заголовок/Template.txt new file mode 100644 index 0000000..08dcff8 --- /dev/null +++ b/src/DataProcessors/СравнениеТабличныхДокументов/Templates/Заголовок/Template.txt @@ -0,0 +1 @@ +Сравнение табличных документов diff --git a/src/DataProcessors/СравнениеТабличныхДокументов/Templates/Макет1/Template.mxlx b/src/DataProcessors/СравнениеТабличныхДокументов/Templates/Макет1/Template.mxlx new file mode 100644 index 0000000..4f74892 --- /dev/null +++ b/src/DataProcessors/СравнениеТабличныхДокументов/Templates/Макет1/Template.mxlx @@ -0,0 +1,33 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 1 + + + 0 + + + + 0 + + + + + + true + 1 + 1 + 1 + + 72 + + \ No newline at end of file diff --git a/src/DataProcessors/СравнениеТабличныхДокументов/Templates/Макет2/Template.mxlx b/src/DataProcessors/СравнениеТабличныхДокументов/Templates/Макет2/Template.mxlx new file mode 100644 index 0000000..4f74892 --- /dev/null +++ b/src/DataProcessors/СравнениеТабличныхДокументов/Templates/Макет2/Template.mxlx @@ -0,0 +1,33 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 1 + + + 0 + + + + 0 + + + + + + true + 1 + 1 + 1 + + 72 + + \ No newline at end of file diff --git a/src/DataProcessors/СравнениеТабличныхДокументов/СравнениеТабличныхДокументов.mdo b/src/DataProcessors/СравнениеТабличныхДокументов/СравнениеТабличныхДокументов.mdo new file mode 100644 index 0000000..d76682c --- /dev/null +++ b/src/DataProcessors/СравнениеТабличныхДокументов/СравнениеТабличныхДокументов.mdo @@ -0,0 +1,54 @@ + + + + + + + СравнениеТабличныхДокументов + + ru + Сравнение табличных документов + + true + DataProcessor.СравнениеТабличныхДокументов.Form.Форма + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + + Инициализация + + ru + Инициализация + + PersonalComputer + MobileDevice + + + Макет1 + + ru + Макет1 + + + + Макет2 + + ru + Макет2 + + + + Заголовок + + ru + Заголовок + + TextDocument + +