From 5d0c735618790401da258f11d2aef0b9694e9ee5 Mon Sep 17 00:00:00 2001 From: KovAlexey Date: Tue, 17 Dec 2024 15:33:39 +1000 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B4=D0=B8=D1=81=D0=BA=D1=80=D0=B5=D1=82=D0=BD?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=B2=D1=8B=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8?= =?UTF-8?q?=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20CLI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Forms/ФормаЭлемента/Module.bsl | 14 +- .../КонвертацияХранилища/Module.bsl | 53 +++++++- .../ОбщегоНазначенияКлиентСервер/Module.bsl | 126 ++++++++++++++++++ 3 files changed, 186 insertions(+), 7 deletions(-) diff --git a/GitConverter/src/Catalogs/ХранилищаКонфигураций/Forms/ФормаЭлемента/Module.bsl b/GitConverter/src/Catalogs/ХранилищаКонфигураций/Forms/ФормаЭлемента/Module.bsl index d85c4bd..f541959 100644 --- a/GitConverter/src/Catalogs/ХранилищаКонфигураций/Forms/ФормаЭлемента/Module.bsl +++ b/GitConverter/src/Catalogs/ХранилищаКонфигураций/Forms/ФормаЭлемента/Module.bsl @@ -761,7 +761,9 @@ РезультатОперации.Вставить("ВерсииEDT", Новый Массив()); ИспользоватьНесколькоВерсийEDT = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВерсийEDT"); - Если Не ЗначениеЗаполнено(Объект.ВерсияEDT) И ИспользоватьНесколькоВерсийEDT Тогда + Если НЕ Объект.ИспользуетсяCLI + И Не ЗначениеЗаполнено(Объект.ВерсияEDT) + И ИспользоватьНесколькоВерсийEDT Тогда Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = НСтр("ru = 'Поле Версия EDT не заполнено.'"); @@ -774,12 +776,18 @@ Возврат РезультатОперации; КонецЕсли; - Если Не ИспользоватьНесколькоВерсийEDT И КонвертацияХранилища.НеобходимоЗаполнитьВерсиюEDT() Тогда + Если Объект.ИспользуетсяCLI + И Не ИспользоватьНесколькоВерсийEDT + И КонвертацияХранилища.НеобходимоЗаполнитьВерсиюEDT() Тогда РезультатОперации.КодОшибки = "ВключитьИспользованиеВерсийEDT"; Возврат РезультатОперации; КонецЕсли; - РезультатОперации.ВерсииEDT = КонвертацияХранилища.ПолучитьСписокВерсийПлатформыEDT(Объект.ВерсияEDT); + Если Не Объект.ИспользуетсяCLI Тогда + РезультатОперации.ВерсииEDT = КонвертацияХранилища.ПолучитьСписокВерсийПлатформыEDT(Объект.ВерсияEDT); + Иначе + //РезультатОперации.ВерсииEDT = конверт + КонецЕсли; Возврат РезультатОперации; diff --git a/GitConverter/src/CommonModules/КонвертацияХранилища/Module.bsl b/GitConverter/src/CommonModules/КонвертацияХранилища/Module.bsl index 6e73562..03d9fee 100644 --- a/GitConverter/src/CommonModules/КонвертацияХранилища/Module.bsl +++ b/GitConverter/src/CommonModules/КонвертацияХранилища/Module.bsl @@ -1341,15 +1341,55 @@ ВыгрузитьКонфигурациюВФайлы(Параметры); + + КаталогФайловКонфигурации = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Параметры.КаталогФайловКонфигурации); // Если в хранилище 2 версии с одинаковым состоянием ConfigDumpInfo и выгрузки изменений не произошло // то - выполняем полную выгрузку Если Параметры.ВыгружатьИзменения Тогда - НайденныеФайлы = НайтиФайлы(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Параметры.КаталогФайловКонфигурации), "*", Истина); + НайденныеФайлы = НайтиФайлы(КаталогФайловКонфигурации, "*", Истина); + Если НайденныеФайлы.Количество() = 0 - ИЛИ НайденныеФайлы.Количество() = 1 - И НайденныеФайлы[0].Имя = "ConfigDumpInfo.xml" Тогда + ИЛИ НайденныеФайлы.Количество() = 1 + И НайденныеФайлы[0].Имя = "ConfigDumpInfo.xml" Тогда Параметры.ВыгружатьИзменения = Ложь; ВыгрузитьКонфигурациюВФайлы(Параметры); + + // Если диффы выгрузились, проверяем существование корня + ИначеЕсли Параметры.ИспользуетсяCLI Тогда + НайденныеФайлыКорня = НайтиФайлы(КаталогФайловКонфигурации, "Configuration.xml", Ложь); + + Если НайденныеФайлыКорня.Количество() = 0 Тогда + // Попробуем выгрузить корень отдельно + ПараметрыВыгрузкиКорня = ОбщегоНазначенияКлиентСервер.СкопироватьРекурсивно(Параметры); + + КаталогВыгрузкиКорня = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( + Параметры.КаталогВременныхФайлов) + "dump_configuration"; + ИмяФайлаОбъектов = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( + Параметры.КаталогВременныхФайлов) + "export_object_conf.txt"; + + Файл = Новый Файл(КаталогВыгрузкиКорня); + Если Файл.Существует() Тогда + УдалитьФайлы(КаталогВыгрузкиКорня); + КонецЕсли; + + ПараметрыВыгрузкиКорня.КаталогФайловКонфигурации = КаталогВыгрузкиКорня; + ПараметрыВыгрузкиКорня.Вставить("ВыгружатьПоСписку", Истина); + ПараметрыВыгрузкиКорня.Вставить("ФайлСпискаВыгрузки", ИмяФайлаОбъектов); + ПараметрыВыгрузкиКорня.ВыгружатьИзменения = Ложь; + + ЗаписьФайла = Новый ЗаписьТекста(ИмяФайлаОбъектов); + ЗаписьФайла.Записать("Configuration"); + ЗаписьФайла.Закрыть(); + СоздатьКаталог(КаталогВыгрузкиКорня); + + ВыгрузитьКонфигурациюВФайлы(ПараметрыВыгрузкиКорня); + + ФайлыКорняККопированию = НайтиФайлы(КаталогВыгрузкиКорня, "*.*", Ложь); + Для Каждого ФайлКорняККопированию Из ФайлыКорняККопированию Цикл + ИтоговыйПуть = КаталогФайловКонфигурации + ФайлКорняККопированию.Имя; + КопироватьФайл(ФайлКорняККопированию.ПолноеИмя, ИтоговыйПуть); + КонецЦикла; + КонецЕсли; КонецЕсли; КонецЕсли; @@ -1556,7 +1596,7 @@ КонецЕсли; КодВозврата = Неопределено; - СтрокаКоманды = ?(ЭтоWindowsСервер, "cmd /C ", "") + СтрокаКоманды; + СтрокаКоманды = ?(ЭтоWindowsСервер, "cmd /C chcp 65001 && ", "") + СтрокаКоманды; ЗапуститьПриложение(СтрокаКоманды, Параметры.КаталогВременныхФайлов, Истина, КодВозврата); ДобавитьЗаписьВЛог(Параметры, НСтр("ru='Окончание импорта в 1C:EDT'"), "Код возврата: " @@ -3062,6 +3102,11 @@ КонецЕсли; КодВозврата = Неопределено; + Если ОбщегоНазначенияПовтИсп.ЭтоWindowsСервер() + И Параметры.ИспользуетсяCLI Тогда + СтрокаКоманды = "cmd /C chcp 65001 && " + СтрокаКоманды; + КонецЕсли; + ЗапуститьПриложение(СтрокаКоманды, Параметры.КаталогИсполняемогоФайла, Истина, КодВозврата); КодРезультата = ПрочитатьФайлРезультата(Параметры.ИмяФайлаРезультатов); diff --git a/GitConverter/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/GitConverter/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl index 7d1a1d3..d074607 100644 --- a/GitConverter/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl +++ b/GitConverter/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -252,4 +252,130 @@ КонецФункции +// Создает полную копию структуры, соответствия, массива, списка или таблицы значений, рекурсивно, +// с учетом типов дочерних элементов. При этом содержимое значений объектных типов +// (СправочникОбъект, ДокументОбъект и т.п.) не копируются, а возвращаются ссылки на исходный объект. +// +// Параметры: +// Источник - Структура +// - ФиксированнаяСтруктура +// - Соответствие +// - ФиксированноеСоответствие +// - Массив +// - ФиксированныйМассив +// - СписокЗначений - объект, который необходимо скопировать. +// ФиксироватьДанные - Булево +// - Неопределено - если Истина - фиксировать, +// если Ложь - снять фиксацию, если Неопределено - не изменять. +// +// Возвращаемое значение: +// Структура - , ФиксированнаяСтруктура, +// Соответствие +// ФиксированноеСоответствие +// Массив +// ФиксированныйМассив +// СписокЗначений - копия объекта, переданного в параметре Источник. +// +Функция СкопироватьРекурсивно(Источник, ФиксироватьДанные = Неопределено) Экспорт + + Перем Приемник; + + ТипИсточника = ТипЗнч(Источник); + + Если ТипИсточника = Тип("ТаблицаЗначений") Тогда + Приемник = Источник.Скопировать(); + ИначеЕсли ТипИсточника = Тип("Структура") + Или ТипИсточника = Тип("ФиксированнаяСтруктура") Тогда + Приемник = СкопироватьСтруктуру(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("Соответствие") + Или ТипИсточника = Тип("ФиксированноеСоответствие") Тогда + Приемник = СкопироватьСоответствие(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("Массив") + Или ТипИсточника = Тип("ФиксированныйМассив") Тогда + Приемник = СкопироватьМассив(Источник, ФиксироватьДанные); + ИначеЕсли ТипИсточника = Тип("СписокЗначений") Тогда + Приемник = СкопироватьСписокЗначений(Источник, ФиксироватьДанные); + Иначе + Приемник = Источник; + КонецЕсли; + + Возврат Приемник; + +КонецФункции + +#Область СкопироватьРекурсивно + +Функция СкопироватьСтруктуру(СтруктураИсточник, ФиксироватьДанные) + + СтруктураРезультат = Новый Структура; + + Для Каждого КлючИЗначение Из СтруктураИсточник Цикл + СтруктураРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(СтруктураИсточник) = Тип("ФиксированнаяСтруктура") Тогда + + Возврат Новый ФиксированнаяСтруктура(СтруктураРезультат); + КонецЕсли; + + Возврат СтруктураРезультат; + +КонецФункции + +Функция СкопироватьСоответствие(СоответствиеИсточник, ФиксироватьДанные) + + СоответствиеРезультат = Новый Соответствие; + + Для Каждого КлючИЗначение Из СоответствиеИсточник Цикл + СоответствиеРезультат.Вставить(КлючИЗначение.Ключ, СкопироватьРекурсивно(КлючИЗначение.Значение, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(СоответствиеИсточник) = Тип("ФиксированноеСоответствие") Тогда + Возврат Новый ФиксированноеСоответствие(СоответствиеРезультат); + КонецЕсли; + + Возврат СоответствиеРезультат; + +КонецФункции + +Функция СкопироватьМассив(МассивИсточник, ФиксироватьДанные) + + МассивРезультат = Новый Массив; + + Для Каждого Элемент Из МассивИсточник Цикл + МассивРезультат.Добавить(СкопироватьРекурсивно(Элемент, ФиксироватьДанные)); + КонецЦикла; + + Если ФиксироватьДанные = Истина + Или ФиксироватьДанные = Неопределено + И ТипЗнч(МассивИсточник) = Тип("ФиксированныйМассив") Тогда + Возврат Новый ФиксированныйМассив(МассивРезультат); + КонецЕсли; + + Возврат МассивРезультат; + +КонецФункции + +Функция СкопироватьСписокЗначений(СписокИсточник, ФиксироватьДанные) + + СписокРезультат = Новый СписокЗначений; + + Для Каждого ЭлементСписка Из СписокИсточник Цикл + СписокРезультат.Добавить( + СкопироватьРекурсивно(ЭлементСписка.Значение, ФиксироватьДанные), + ЭлементСписка.Представление, + ЭлементСписка.Пометка, + ЭлементСписка.Картинка); + КонецЦикла; + + Возврат СписокРезультат; + +КонецФункции + +#КонецОбласти + #КонецОбласти