1
0
mirror of https://github.com/1C-Company/GitConverter.git synced 2025-03-29 21:47:04 +02:00

Поддержка конвертации в EDT с частичной выгрузкой

This commit is contained in:
Dmitriy Marmyshev 2018-04-25 18:15:52 +03:00
parent 5c9570134d
commit 96f3ca1665
2 changed files with 137 additions and 6 deletions

View File

@ -1282,19 +1282,38 @@
КонецЕсли;
Если Параметры.ВыгружатьИзменения Тогда
ФайлИзменений = Новый ТекстовыйДокумент();
ФайлИзменений.Прочитать(Параметры.ФайлИзменений);
Параметры.Вставить("ВыгрузкаИзменений", Ложь);
ТекстИзменений = ФайлИзменений.ПолучитьТекст();
Если НРег(СокрЛП(ТекстИзменений)) <> "fulldump" Тогда
ВерсияОбъект = ВерсияХранилища.ПолучитьОбъект();
ВерсияОбъект.ВыгрузкаИзменений = Истина;
ВерсияОбъект.Записать();
Параметры.Вставить("ВыгрузкаИзменений", Истина);
КонецЕсли;
Если Параметры.КонвертироватьВФорматEDT И Параметры.ВыгрузкаИзменений Тогда
ДлительныеОперации.СообщитьПрогресс(50, "Анализ частичной выгрузки для конвертации в EDT");
ОбъектыДовыгрузки = ПолучитьСписокОбъектовДовыгрузки(ФайлИзменений, ИмяФайлаПриемника);
Если ОбъектыДовыгрузки.Количество() > 0 Тогда
ДлительныеОперации.СообщитьПрогресс(55, "Подготовка частичной выгрузки для конвертации в EDT");
Параметры.ВыгружатьИзменения = Ложь;
Параметры.Вставить("ФайлСпискаВыгрузки", Параметры.КаталогВременныхФайлов + "dumplist.txt");
Параметры.Вставить("ВыгружатьПоСписку", Истина);
ФайлОбъектовВыгрузки = Новый ТекстовыйДокумент();
Для Каждого ОбъектВыгрузки Из ОбъектыДовыгрузки Цикл
ФайлОбъектовВыгрузки.ДобавитьСтроку(ОбъектВыгрузки);
КонецЦикла;
ФайлОбъектовВыгрузки.Записать(Параметры.ФайлСпискаВыгрузки, КодировкаТекста.UTF8);
ДлительныеОперации.СообщитьПрогресс(60, "Довыгрузка объектов для конвертации в EDT");
ВыгрузитьКонфигурациюВФайлы(Параметры);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Параметры.УдалятьКонфигурацииПоставщиков Тогда
ДлительныеОперации.СообщитьПрогресс(90, "Удаление конфигураций поставщиков");
@ -1660,13 +1679,14 @@
Прервать;
ИначеЕсли Пути.Количество() > 2 И КвалифицированныеИмена.Получить(Пути[Пути.ВГраница()]) <> Неопределено Тогда
ИмяДочернегоОбъекта = Путь;
ТипДочернегоОбъекта = КвалифицированныеИмена.Получить(Пути[Пути.ВГраница()]);
СегментПутиДочернегоОбъекта = Пути[Пути.ВГраница()];
ТипДочернегоОбъекта = КвалифицированныеИмена.Получить(СегментПутиДочернегоОбъекта);
Пути.Удалить(Пути.ВГраница());
Пути.Добавить(Пути[Пути.ВГраница()] + ".mdo");
ПолноеИмяРодителя = СтрСоединить(Пути, ПолучитьРазделительПути());
Уровень = Пути.Количество();
Пути.Удалить(Пути.ВГраница());
Пути.Добавить(ТипДочернегоОбъекта);
Пути.Добавить(СегментПутиДочернегоОбъекта);
Пути.Добавить(ИмяДочернегоОбъекта);
Прервать;
ИначеЕсли Пути[0] = "Subsystems" И Пути[Пути.ВГраница()-1] = "Subsystems" Тогда
@ -2760,7 +2780,7 @@
Пока ЧтениеXML.Прочитать()
И ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Цикл
Если ЧтениеXML.Имя = "Name" Тогда
Если ЧтениеXML.Имя = "name" Тогда
ЧтениеXML.Прочитать();
ПодчиненныйОбъект.Вставить("Имя", ЧтениеXML.Значение);
@ -2877,6 +2897,117 @@
КонецПроцедуры
// Составляет список объектов дополнительных объектов для выгрузки
//
// Параметры:
// ФайлИзменений - ТекстовыйДокумент - Файл с описанием измененений
// ИмяФайлаДампа - Строка - Имя файл информации дампа
// Возвращаемое значение:
// Массив - список объектов которые необходимо выгрузить дополнительно
Функция ПолучитьСписокОбъектовДовыгрузки(ФайлИзменений, ИмяФайлаДампа)
СписокОбъектов = Новый Массив;
ВыгруженныеИзменения = Новый Соответствие();
Для индекс = 1 По ФайлИзменений.КоличествоСтрок() Цикл
СтрокаИзменений = ФайлИзменений.ПолучитьСтроку(индекс);
СтрокаИзменений = СтрЗаменить(СтрокаИзменений, "New:", "");
СтрокаИзменений = СтрЗаменить(СтрокаИзменений, "Modified:", "");
СтрокаИзменений = СокрЛП(СтрокаИзменений);
Если ПустаяСтрока(СтрокаИзменений) Тогда
Продолжить;
КонецЕсли;
Сегменты = СтрРазделить(СтрокаИзменений, ".");
Если Сегменты.Количество() > 0 И (Сегменты[0] = "Language" ИЛИ Сегменты[0] = "Configuration") Тогда
Родитель = Сегменты[0];
ИначеЕсли Сегменты.Количество() > 1 Тогда
Родитель = Сегменты[0] + "." + Сегменты[1];
Иначе
Родитель = СтрокаИзменений;
КонецЕсли;
Изменения = ВыгруженныеИзменения.Получить(Родитель);
Если Изменения = Неопределено Тогда
Изменения = Новый Массив;
КонецЕсли;
Если Изменения.Найти(СтрокаИзменений) = Неопределено Тогда
Изменения.Добавить(СтрокаИзменений);
КонецЕсли;
ВыгруженныеИзменения.Вставить(Родитель, Изменения);
// Добавляем для корня конфигурации - языки, а для языков - корень конфигурации
Если Сегменты.Количество() > 0 И (Сегменты[0] = "Language" ИЛИ Сегменты[0] = "Configuration") Тогда
Если Сегменты[0] = "Configuration" Тогда
Родитель = "Language";
Иначе
Родитель = "Configuration";
КонецЕсли;
Изменения = ВыгруженныеИзменения.Получить(Родитель);
Если Изменения = Неопределено Тогда
Изменения = Новый Массив;
ВыгруженныеИзменения.Вставить(Родитель, Изменения);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ДочерниеОбъекты = Новый Массив;
ДочерниеОбъекты.Добавить("Form");
ДочерниеОбъекты.Добавить("Template");
ДочерниеОбъекты.Добавить("Recalculation");
ДочерниеОбъекты.Добавить("Subsystem");
Попытка
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайлаДампа);
Если ЧтениеXML.Прочитать() И ЧтениеXML.Имя = "ConfigDumpInfo" И ЧтениеXML.Прочитать() И ЧтениеXML.Имя = "ConfigVersions" Тогда
Пока ЧтениеXML.Прочитать() И ЧтениеXML.Имя = "Metadata" Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Продолжить;
КонецЕсли;
ИмяОбъекта = "";
Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда
Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
Если ЧтениеXML.Имя = "name" Тогда
ИмяОбъекта = ЧтениеXML.Значение;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ЗначениеЗаполнено(ИмяОбъекта) Тогда
Сегменты = СтрРазделить(ИмяОбъекта, ".");
Если Сегменты.Количество() > 0 И (Сегменты[0] = "Language" ИЛИ Сегменты[0] = "Configuration") Тогда
Родитель = Сегменты[0];
ИначеЕсли Сегменты.Количество() > 1 Тогда
Родитель = Сегменты[0] + "." + Сегменты[1];
Иначе
Родитель = ИмяОбъекта;
КонецЕсли;
Если Сегменты.Количество() > 2 И ДочерниеОбъекты.Найти(Сегменты[2]) = Неопределено Тогда
Продолжить;
КонецЕсли;
Изменения = ВыгруженныеИзменения.Получить(Родитель);
Если Изменения <> Неопределено И Изменения.Найти(ИмяОбъекта) = Неопределено Тогда
СписокОбъектов.Добавить(ИмяОбъекта);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ЧтениеXML.Закрыть();
Исключение
КонецПопытки;
Возврат СписокОбъектов;
КонецФункции
// Формирует файлы коммита и записывает в зависимости от ОС
//

View File

@ -21,7 +21,7 @@
<defaultRoles>Role.АдминистраторСистемы</defaultRoles>
<defaultRoles>Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок</defaultRoles>
<vendor>Фирма &quot;1С&quot;</vendor>
<version>1.0.5.2</version>
<version>1.0.5.3</version>
<updateCatalogAddress>http://downloads.v8.1c.ru/tmplts/</updateCatalogAddress>
<includeHelpInContents>true</includeHelpInContents>
<help>