1
0
mirror of https://github.com/shcherbakov-vadim/edt-comparator.git synced 2025-11-23 21:34:40 +02:00

Добавлена возможность сравнения табличных документов

This commit is contained in:
Shcherbakov Vadim
2021-10-12 13:08:49 +03:00
commit abf98d332e
15 changed files with 952 additions and 0 deletions

18
.project Normal file
View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>EDTComparator</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
<nature>com._1c.g5.v8.dt.core.V8ConfigurationNature</nature>
</natures>
</projectDescription>

View File

@@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

2
DT-INF/PROJECT.PMF Normal file
View File

@@ -0,0 +1,2 @@
Manifest-Version: 1.0
Runtime-Version: 8.3.16

View File

@@ -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));
КонецФункции
Функция ПараметрВСтроку(Параметры, ИндПараметра)
Если ИндПараметра <= Параметры.Количество() Тогда
Возврат """" + СтрЗаменить(Параметры[ИндПараметра], """", """""") + """";
Иначе
Возврат "";
КонецЕсли;
КонецФункции

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="84493121-edfa-4292-a263-1afb8ea16929">
<name>НастройкиКлиентСерверПереопределяемый</name>
<synonym>
<key>ru</key>
<value>Настройки клиент сервер переопределяемый</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Configuration xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="68790786-0949-4132-8186-f9efe21986b5">
<name>Конфигурация</name>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="7592a213-83b5-4b74-bc30-28cbd99c7ad5"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="cd6c4605-fdc9-42c9-b170-b399e18c3491"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="34660b80-6c80-472f-9ca6-383eadf6264a"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="c955357a-769e-42f7-bd98-991b642b32f2"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="98bc72d2-6633-4f98-b365-2f96dfdb0889"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="58a96081-d1b5-482a-a809-dce593faddf2"/>
<configurationExtensionCompatibilityMode>8.3.16</configurationExtensionCompatibilityMode>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
<scriptVariant>Russian</scriptVariant>
<requiredMobileApplicationPermissions>
<permission>AllowOSBackup</permission>
<use>true</use>
</requiredMobileApplicationPermissions>
<defaultLanguage>Language.Русский</defaultLanguage>
<dataLockControlMode>Managed</dataLockControlMode>
<objectAutonumerationMode>NotAutoFree</objectAutonumerationMode>
<modalityUseMode>UseWithWarnings</modalityUseMode>
<synchronousPlatformExtensionAndAddInCallUseMode>UseWithWarnings</synchronousPlatformExtensionAndAddInCallUseMode>
<compatibilityMode>8.3.10</compatibilityMode>
<languages uuid="7c6af2b3-ad62-4732-ae6d-79a3428096c0">
<name>Русский</name>
<synonym>
<key>ru</key>
<value>Русский</value>
</synonym>
<languageCode>ru</languageCode>
</languages>
<commonModules>CommonModule.НастройкиКлиентСерверПереопределяемый</commonModules>
<dataProcessors>DataProcessor.СравнениеТабличныхДокументов</dataProcessors>
</mdclass:Configuration>

View File

@@ -0,0 +1,41 @@
#Если ТолстыйКлиентУправляемоеПриложение Тогда
Процедура ПередНачаломРаботыСистемы(Отказ)
Если СтрНачинаетсяС(ПараметрЗапуска, "ЗапускВнешнейОбработки") Тогда
// обычный запуск
Иначе
МассивПараметры = СтрРазделить(ПараметрЗапуска, ";", Истина);
Если МассивПараметры.Количество() = 0 Тогда
Предупреждение(НСтр("ru = 'Неверное количество параметров'"));
Отказ = Истина;
Возврат;
КонецЕсли;
ЧтениеТекста = Новый ЧтениеТекста(МассивПараметры[0]);
ПерваяСтрока = ЧтениеТекста.ПрочитатьСтроку();
ВтораяСтрока = ЧтениеТекста.ПрочитатьСтроку();
Если ПерваяСтрока = "<?xml version=""1.0"" encoding=""UTF-8""?>"
И СтрНачинаетсяС(ВтораяСтрока, "<document xmlns=""http://v8.1c.ru/8.2/data/spreadsheet""") Тогда
ОткрытьФорму("Обработка.СравнениеТабличныхДокументов.Форма.Инициализация");
Иначе
Отказ = Истина;
Если МассивПараметры.Количество() = 2
ИЛИ МассивПараметры.Количество() = 4 Тогда
КомандаСравнения = НастройкиКлиентСерверПереопределяемый.ОсновнаяПрограммаСравнения2(МассивПараметры);
ИначеЕсли МассивПараметры.Количество() = 3
ИЛИ МассивПараметры.Количество() = 6 Тогда
КомандаСравнения = НастройкиКлиентСерверПереопределяемый.ОсновнаяПрограммаСравнения3(МассивПараметры);
Иначе
Предупреждение(НСтр("ru = 'Неверное количество параметров'"));
Возврат;
КонецЕсли;
ЗапуститьПриложение(КомандаСравнения, , Истина);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецЕсли

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form">
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<handlers>
<event>OnOpen</event>
<name>ПриОткрытии</name>
</handlers>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>true</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>Объект</name>
<id>1</id>
<valueType>
<types>DataProcessorObject.СравнениеТабличныхДокументов</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<main>true</main>
</attributes>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:ObjectFormExtInfo"/>
</form:Form>

View File

@@ -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));
КонецФункции
#КонецЕсли

View File

@@ -0,0 +1,307 @@
<?xml version="1.0" encoding="UTF-8"?>
<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form">
<items xsi:type="form:FormGroup">
<name>ГруппаДокументы</name>
<id>9</id>
<items xsi:type="form:FormField">
<name>ТабличныйДокумент1</name>
<id>11</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ТабличныйДокумент1</segments>
</dataPath>
<extendedTooltip>
<name>ТабличныйДокумент1РасширеннаяПодсказка</name>
<id>13</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТабличныйДокумент1КонтекстноеМеню</name>
<id>12</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>SpreadsheetDocumentField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:SpreadSheetDocFieldExtInfo">
<width>50</width>
<autoMaxWidth>true</autoMaxWidth>
<height>10</height>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<verticalStretch>true</verticalStretch>
<showGrid>true</showGrid>
<showHeaders>true</showHeaders>
<showCellNames>true</showCellNames>
<showRowAndColumnNames>true</showRowAndColumnNames>
<pointerType>Special</pointerType>
<verticalScrollBar>ScrollAuto</verticalScrollBar>
<horizontalScrollBar>ScrollAuto</horizontalScrollBar>
<selectionShowMode>Always</selectionShowMode>
<edit>true</edit>
<showGroups>true</showGroups>
<enableStartDrag>true</enableStartDrag>
<enableDrag>true</enableDrag>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ТабличныйДокумент2</name>
<id>14</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ТабличныйДокумент2</segments>
</dataPath>
<extendedTooltip>
<name>ТабличныйДокумент2РасширеннаяПодсказка</name>
<id>16</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТабличныйДокумент2КонтекстноеМеню</name>
<id>15</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<autoFill>true</autoFill>
</contextMenu>
<type>SpreadsheetDocumentField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:SpreadSheetDocFieldExtInfo">
<width>50</width>
<autoMaxWidth>true</autoMaxWidth>
<height>10</height>
<autoMaxHeight>true</autoMaxHeight>
<horizontalStretch>true</horizontalStretch>
<verticalStretch>true</verticalStretch>
<showGrid>true</showGrid>
<showHeaders>true</showHeaders>
<showCellNames>true</showCellNames>
<showRowAndColumnNames>true</showRowAndColumnNames>
<pointerType>Special</pointerType>
<verticalScrollBar>ScrollAuto</verticalScrollBar>
<horizontalScrollBar>ScrollAuto</horizontalScrollBar>
<selectionShowMode>Always</selectionShowMode>
<edit>true</edit>
<showGroups>true</showGroups>
<enableStartDrag>true</enableStartDrag>
<enableDrag>true</enableDrag>
</extInfo>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<title>
<key>ru</key>
<value>Группа документы</value>
</title>
<toolTip>
<key>ru</key>
<value>Группа документы</value>
</toolTip>
<extendedTooltip>
<name>ГруппаДокументыРасширеннаяПодсказка</name>
<id>10</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualGroup</type>
<extInfo xsi:type="form:UsualGroupExtInfo">
<group>AlwaysHorizontal</group>
<showLeftMargin>true</showLeftMargin>
<united>true</united>
<throughAlign>Auto</throughAlign>
<currentRowUse>Auto</currentRowUse>
</extInfo>
</items>
<autoCommandBar>
<name>ФормаКоманднаяПанель</name>
<id>-1</id>
<items xsi:type="form:Button">
<name>ФормаСравнить</name>
<id>7</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ФормаСравнитьРасширеннаяПодсказка</name>
<id>8</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<commandName>Form.Command.Сравнить</commandName>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<toolTipRepresentation>Auto</toolTipRepresentation>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<horizontalAlign>Left</horizontalAlign>
<autoFill>true</autoFill>
</autoCommandBar>
<handlers>
<event>OnOpen</event>
<name>ПриОткрытии</name>
</handlers>
<handlers>
<event>BeforeClose</event>
<name>ПередЗакрытием</name>
</handlers>
<handlers>
<event>OnClose</event>
<name>ПриЗакрытии</name>
</handlers>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
<group>Vertical</group>
<autoFillCheck>true</autoFillCheck>
<allowFormCustomize>true</allowFormCustomize>
<enabled>true</enabled>
<showTitle>true</showTitle>
<showCloseButton>true</showCloseButton>
<attributes>
<name>Объект</name>
<id>1</id>
<valueType>
<types>DataProcessorObject.СравнениеТабличныхДокументов</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<main>true</main>
</attributes>
<attributes>
<name>ТабличныйДокумент1</name>
<title>
<key>ru</key>
<value>Табличный документ 1</value>
</title>
<id>2</id>
<valueType>
<types>SpreadsheetDocument</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<savedData>true</savedData>
<extInfo xsi:type="form:SpreadsheetDocumentExtInfo"/>
</attributes>
<attributes>
<name>ТабличныйДокумент2</name>
<title>
<key>ru</key>
<value>Табличный документ 2</value>
</title>
<id>3</id>
<valueType>
<types>SpreadsheetDocument</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
<savedData>true</savedData>
<extInfo xsi:type="form:SpreadsheetDocumentExtInfo"/>
</attributes>
<formCommands>
<name>Сравнить</name>
<title>
<key>ru</key>
<value>Сравнить</value>
</title>
<id>1</id>
<toolTip>
<key>ru</key>
<value>Сравнить</value>
</toolTip>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>Сравнить</name>
</handler>
</action>
<currentRowUse>Auto</currentRowUse>
</formCommands>
<commandInterface>
<navigationPanel/>
<commandBar/>
</commandInterface>
<extInfo xsi:type="form:ObjectFormExtInfo"/>
</form:Form>

View File

@@ -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 = 'Измененные данные будут потеряны. Продолжить?'")
,РежимДиалогаВопрос.ДаНет);
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытиемПослеВопроса(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
Модифицированность = Ложь;
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
Если ЗавершениеРаботы <> Истина Тогда
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
КонецПроцедуры

View File

@@ -0,0 +1 @@
Сравнение табличных документов

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<languageSettings>
<currentLanguage>ru</currentLanguage>
<defaultLanguage>ru</defaultLanguage>
<languageInfo>
<id>ru</id>
<code>Русский</code>
<description>Русский</description>
</languageInfo>
</languageSettings>
<columns>
<size>1</size>
</columns>
<rowsItem>
<index>0</index>
<row>
<c>
<c>
<f>0</f>
<tl/>
</c>
</c>
</row>
</rowsItem>
<templateMode>true</templateMode>
<defaultFormatIndex>1</defaultFormatIndex>
<height>1</height>
<vgRows>1</vgRows>
<format>
<width>72</width>
</format>
</document>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<languageSettings>
<currentLanguage>ru</currentLanguage>
<defaultLanguage>ru</defaultLanguage>
<languageInfo>
<id>ru</id>
<code>Русский</code>
<description>Русский</description>
</languageInfo>
</languageSettings>
<columns>
<size>1</size>
</columns>
<rowsItem>
<index>0</index>
<row>
<c>
<c>
<f>0</f>
<tl/>
</c>
</c>
</row>
</rowsItem>
<templateMode>true</templateMode>
<defaultFormatIndex>1</defaultFormatIndex>
<height>1</height>
<vgRows>1</vgRows>
<format>
<width>72</width>
</format>
</document>

View File

@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:DataProcessor xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="b427fa32-a2ff-4767-aff6-d40ea2a29257">
<producedTypes>
<objectType typeId="c612d528-2bca-467d-b9b3-4889624e0246" valueTypeId="f517b230-71a5-4398-abc4-383e26b267b6"/>
<managerType typeId="2fe1958b-162d-4f08-93e5-56c46d69e101" valueTypeId="e62e71a2-adb6-4a6e-be41-96ff7f147066"/>
</producedTypes>
<name>СравнениеТабличныхДокументов</name>
<synonym>
<key>ru</key>
<value>Сравнение табличных документов</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<defaultForm>DataProcessor.СравнениеТабличныхДокументов.Form.Форма</defaultForm>
<forms uuid="16a35c95-80c2-4386-a33d-b71cacca0596">
<name>Форма</name>
<synonym>
<key>ru</key>
<value>Форма</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<forms uuid="4784da7c-c146-4fe5-8b34-b206a018fbb1">
<name>Инициализация</name>
<synonym>
<key>ru</key>
<value>Инициализация</value>
</synonym>
<usePurposes>PersonalComputer</usePurposes>
<usePurposes>MobileDevice</usePurposes>
</forms>
<templates uuid="f28066ba-e578-47cc-b501-f65b90583f76">
<name>Макет1</name>
<synonym>
<key>ru</key>
<value>Макет1</value>
</synonym>
</templates>
<templates uuid="66526956-1d10-4fcc-a14f-b0c30f440256">
<name>Макет2</name>
<synonym>
<key>ru</key>
<value>Макет2</value>
</synonym>
</templates>
<templates uuid="d28575b0-be11-48ba-92e9-73de0e3afd69">
<name>Заголовок</name>
<synonym>
<key>ru</key>
<value>Заголовок</value>
</synonym>
<templateType>TextDocument</templateType>
</templates>
</mdclass:DataProcessor>