Перем ирПлатформа; Процедура ОсновныеДействияФормыВыполнить(Кнопка) // Если указать ИсполняемыйФайлПлатформы, то будет ошибка при загрузке расширения из файлов // Неизвестная версия формата 2.6 загружаемого файла ЭтаФорма.ИсполняемыйФайлПлатформы = ""; КаталогВыгрузкиКонфигурации = ПолучитьИмяВременногоФайла(); СоздатьКаталог(КаталогВыгрузкиКонфигурации); ТекстЛога = ""; // Выгружаем конфигурацию в файлы Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/DumpConfigToFiles """ + КаталогВыгрузкиКонфигурации + """ -Format Hierarchical", СтрокаСоединенияИнформационнойБазы(), ТекстЛога,, "Выгрузка конфигурации в файлы",,,, ИмяПользователя, ПарольПользователя); Если Не Успех Тогда УдалитьФайлы(КаталогВыгрузкиКонфигурации); Сообщить(ТекстЛога); Возврат; КонецЕсли; //КаталогВыгрузкиКонфигурации = "Z:\Ир"; // Для отладки Результат = СоздатьРасширение("e", КаталогВыгрузкиКонфигурации); УдалитьФайлы(КаталогВыгрузкиКонфигурации); Сообщить(Результат); //Предупреждение("Не забудь вручную убрать флажок ""Проверять значения языка"" у расширения!"); КонецПроцедуры Функция СоздатьРасширение(Знач СуффиксВерсии, Знач КаталогВыгрузкиКонфигурации) ВерсияРасширения = Метаданные.Версия + СуффиксВерсии; ИмяРасширения = "Расширение1"; ИмяВременногоФайла = ПолучитьИмяВременногоФайла("cfe"); ПолучитьОбщийМакет("ирШаблонРасширения").Записать(ИмяВременногоФайла); ТекстЛога = ""; Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/LoadCfg """ + ИмяВременногоФайла + """ -Extension """ + ИмяРасширения + """", , ТекстЛога,,, Истина, ИсполняемыйФайлПлатформы); Если Не Успех Тогда УдалитьФайлы(ИмяВременногоФайла); Сообщить(ТекстЛога); Возврат Неопределено; КонецЕсли; УдалитьФайлы(ИмяВременногоФайла); ТекстЛога = ""; КаталогВыгрузкиРасширения = ПолучитьИмяВременногоФайла(); СоздатьКаталог(КаталогВыгрузкиРасширения); // Выгрузка расширения в файлы Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/DumpConfigToFiles """ + КаталогВыгрузкиРасширения + """ -Extension """ + ИмяРасширения + """ -Format Hierarchical", , ТекстЛога,, "Выгрузка расширения в файлы",, ИсполняемыйФайлПлатформы); Если Не Успех Тогда УдалитьФайлы(КаталогВыгрузкиРасширения); Сообщить(ТекстЛога); Возврат Неопределено; КонецЕсли; // Скопируем все папки кроме Catalogs и Ext и файла ConfigDumpInfo.xml Файлы = НайтиФайлы(КаталогВыгрузкиКонфигурации, "*"); Для Каждого Файл Из Файлы Цикл Если Ложь Или Файл.Имя = "Catalogs" Или Файл.Имя = "Ext" Или Не Файл.ЭтоКаталог() Тогда Продолжить; КонецЕсли; ФайлПриемник = Новый Файл(КаталогВыгрузкиРасширения + "\" + Файл.Имя); Если Не ФайлПриемник.Существует() Тогда СоздатьКаталог(ФайлПриемник.ПолноеИмя); КонецЕсли; ирОбщий.СкопироватьФайлыЛкс(КаталогВыгрузкиКонфигурации + "\" + Файл.Имя, КаталогВыгрузкиРасширения + "\" + Файл.Имя); КонецЦикла; // Во всех CommonCommands удалить ... Файлы = НайтиФайлы(КаталогВыгрузкиРасширения + "\CommonCommands", "*.xml"); Для Каждого Файл Из Файлы Цикл ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(Файл.ПолноеИмя); ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); ЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайла, "", "", Ложь, Истина); ТекстФайла = СтрЗаменить(ТекстФайла, ЧтоЗаменить, ""); ТекстовыйДокумент.УстановитьТекст(ТекстФайла); ТекстовыйДокумент.Записать(Файл.ПолноеИмя); КонецЦикла; // Из SubSystems вырезаем фрагменты Catalog.ирОбъектыДляОтладки Файлы = НайтиФайлы(КаталогВыгрузкиРасширения + "\SubSystems", "*.xml"); Для Каждого Файл Из Файлы Цикл ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(Файл.ПолноеИмя); ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); ТекстФайла = СтрЗаменить(ТекстФайла, "Catalog.ирАлгоритмы", ""); ТекстФайла = СтрЗаменить(ТекстФайла, "Catalog.ирКомандаРедактироватьОбъект", ""); ТекстФайла = СтрЗаменить(ТекстФайла, "Catalog.ирОбъектыДляОтладки", ""); ТекстФайла = СтрЗаменить(ТекстФайла, "CommonCommand.ирОткрытьНастройкиАлгоритмов", ""); ТекстовыйДокумент.УстановитьТекст(ТекстФайла); ТекстовыйДокумент.Записать(Файл.ПолноеИмя); КонецЦикла; // У общего модуля ирГлобальный убираем флажок Сервер, т.к. в расширении такие общие модули недопустимы ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирГлобальный.xml"; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ИмяФайла); ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); ТекстФайла = СтрЗаменить(ТекстФайла, "true", "false"); ТекстовыйДокумент.УстановитьТекст(ТекстФайла); ТекстовыйДокумент.Записать(ИмяФайла); //// Скопируем глобальные методы в общий модуль ирОтладка //ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирГлобальный\Ext\Module.bsl"; //ТекстовыйДокумент = Новый ТекстовыйДокумент; //ТекстовыйДокумент.Прочитать(ИмяФайла); //ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); //ТекстМетодов = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайла, "#Область ГлобальныеПортативныеМетоды", "#КонецОбласти", Ложь, Истина); //ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирОтладка\Ext\Module.bsl"; //ТекстовыйДокумент = Новый ТекстовыйДокумент; //ТекстовыйДокумент.Прочитать(ИмяФайла); //ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); //ТекстФайла = ТекстФайла + ТекстМетодов; //ТекстовыйДокумент.УстановитьТекст(ТекстФайла); //ТекстовыйДокумент.Записать(ИмяФайла); // У общего модуля ирПривилегированный убираем флажок Привилегированный ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирПривилегированный.xml"; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ИмяФайла); ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); ТекстФайла = СтрЗаменить(ТекстФайла, "true", "false"); ТекстовыйДокумент.УстановитьТекст(ТекстФайла); ТекстовыйДокумент.Записать(ИмяФайла); // У подсистемы ИнструментыРазработчикаTormozit обновим версию ИмяФайла = КаталогВыгрузкиРасширения + "\SubSystems\ИнструментыРазработчикаTormozit.xml"; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ИмяФайла); ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); ЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайла, "", "", Ложь, Истина); ТекстФайла = СтрЗаменить(ТекстФайла, ЧтоЗаменить, "" + ВерсияРасширения + ""); ЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайла, "Инструменты разработчика ", "", Ложь, Истина); ТекстФайла = СтрЗаменить(ТекстФайла, ЧтоЗаменить, "Инструменты разработчика " + ВерсияРасширения + ""); ТекстовыйДокумент.УстановитьТекст(ТекстФайла); ТекстовыйДокумент.Записать(ИмяФайла); ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирИнтерфейсДляВстраивания\Ext\Module.bsl"; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ИмяФайла); ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); ТекстФайла = СтрЗаменить(ТекстФайла, "// Версия модуля X.XX", "// Версия модуля " + Метаданные.Версия); ТекстовыйДокумент.УстановитьТекст(ТекстФайла); ТекстовыйДокумент.Записать(ИмяФайла); ИмяФайла = КаталогВыгрузкиРасширения + "\Languages\Русский.xml"; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ИмяФайла); ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); ТекстФайла = СтрЗаменить(ТекстФайла, "Русский", "РусскийAdopted"); ТекстовыйДокумент.УстановитьТекст(ТекстФайла); ТекстовыйДокумент.Записать(ИмяФайла); // Заменим элемент в файле Configuration.xml ФайлКонфигурацииИсточника = КаталогВыгрузкиКонфигурации + "\Configuration.xml"; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ФайлКонфигурацииИсточника); ТекстФайлаИсточника = ТекстовыйДокумент.ПолучитьТекст(); ФайлКонфигурацииПриемника = КаталогВыгрузкиРасширения + "\Configuration.xml"; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ФайлКонфигурацииПриемника); ТекстФайлаПриемника = ТекстовыйДокумент.ПолучитьТекст(); ЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайлаПриемника, "", "", Ложь, Истина); НаЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайлаИсточника, "", "", Ложь, Истина); ТекстФайлаПриемника = СтрЗаменить(ТекстФайлаПриемника, ЧтоЗаменить, НаЧтоЗаменить); ТекстФайлаПриемника = СтрЗаменить(ТекстФайлаПриемника, "4.00", "" + ВерсияРасширения + ""); ТекстФайлаПриемника = СтрЗаменить(ТекстФайлаПриемника, "ирРазработчик", ""); ТекстФайлаПриемника = СтрЗаменить(ТекстФайлаПриемника, "", ""); ТекстовыйДокумент.УстановитьТекст(ТекстФайлаПриемника); ТекстовыйДокумент.Записать(ФайлКонфигурацииПриемника); //Предупреждение(1); // Загрузка расширения из файлов Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/LoadConfigFromFiles """ + КаталогВыгрузкиРасширения + """ -Extension """ + ИмяРасширения + """ -Format Hierarchical", , ТекстЛога,, "Загрузка расширения из файлов",, ИсполняемыйФайлПлатформы); УдалитьФайлы(КаталогВыгрузкиРасширения); // Закомментировано для отладки Если Не Успех Тогда Сообщить(ТекстЛога); Возврат Неопределено; КонецЕсли; //// Выгружаем расширение в файлы //Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/DumpConfigToFiles """ + КаталогВыгрузкиРасширения + """ -Extension """ + ИмяРасширения + """ -Format Hierarchical", , ТекстЛога); //Если Не Успех Тогда // УдалитьФайлы(КаталогВыгрузкиРасширения); // Сообщить(ТекстЛога); // Возврат; //КонецЕсли; //ФайлКонфигурацииИсточника = КаталогВыгрузкиРасширения + "\Configuration.xml"; //ТекстовыйДокумент = Новый ТекстовыйДокумент; //ТекстовыйДокумент.Прочитать(ФайлКонфигурацииИсточника); //ТекстФайлаИсточника = ТекстовыйДокумент.ПолучитьТекст(); //Предупреждение(1); //ТекстФайлаИсточника = СтрЗаменить(ТекстФайлаИсточника, "Language.ирРусский", ""); // На первом проходе в 8.3.10 невозможно сделать //ТекстовыйДокумент.УстановитьТекст(ТекстФайлаИсточника); //ТекстовыйДокумент.Записать(ФайлКонфигурацииИсточника); // //// Загружаем расширение из файлов //Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/LoadConfigFromFiles """ + КаталогВыгрузкиРасширения + """ -Extension """ + ИмяРасширения + """ -Format Hierarchical", , ТекстЛога); //Если Не Успех Тогда // УдалитьФайлы(КаталогВыгрузкиРасширения); // Сообщить(ТекстЛога); // Возврат; //КонецЕсли; // Выгружаем расширение КонечныйФайл = Каталог + "\ИР " + ВерсияРасширения + ".cfe"; Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/DumpCfg """ + КонечныйФайл + """ -Extension """ + ИмяРасширения + """", , ТекстЛога,,,, ИсполняемыйФайлПлатформы); Если Не Успех Тогда Сообщить(ТекстЛога); Возврат Неопределено; КонецЕсли; Если ирКэш.НомерВерсииПлатформыЛкс() < 803013 Тогда // https://partners.v8.1c.ru/forum/t/1713417/m/1713417 Сообщить("Выполните изменение свойства ""Режим совместимости"" расширения, оставив его выключенным"); ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("",,,,,,, Ложь); КонецЕсли; Возврат КонечныйФайл; КонецФункции Процедура КаталогНачалоВыбора(Элемент, СтандартнаяОбработка) ирОбщий.ВыбратьКаталогВФормеЛкс(Каталог); КонецПроцедуры Процедура ПриЗакрытии() ирОбщий.СохранитьЗначениеЛкс("ирВыпускВариантаРасширение.Каталог", Каталог); ирОбщий.СохранитьЗначениеЛкс("ирВыпускВариантаРасширение.ИсполняемыйФайлПлатформы", ИсполняемыйФайлПлатформы); КонецПроцедуры Процедура ПриОткрытии() ЭтаФорма.Каталог = ирОбщий.ВосстановитьЗначениеЛкс("ирВыпускВариантаРасширение.Каталог"); ЭтаФорма.ИсполняемыйФайлПлатформы = ирОбщий.ВосстановитьЗначениеЛкс("ирВыпускВариантаРасширение.ИсполняемыйФайлПлатформы"); ирОбщий.ЗаполнитьСписокАдминистраторовБазыЛкс(ЭлементыФормы.ИмяПользователя.СписокВыбора); ЭтаФорма.ИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя; КонецПроцедуры Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) Если ирКэш.НомерВерсииПлатформыЛкс() < 803010 Тогда Сообщить("Поддерживается только платформа 8.3.10 и выше"); Отказ = Истина; КонецЕсли; КонецПроцедуры Процедура ИсполняемыйФайлПлатформыНачалоВыбора(Элемент, СтандартнаяОбработка) РезультатВыбора = ирОбщий.ВыбратьФайлЛкс(, "exe",, Элемент.Значение); Если ЗначениеЗаполнено(РезультатВыбора) Тогда Элемент.Значение = РезультатВыбора; КонецЕсли; КонецПроцедуры ирПлатформа = ирКэш.Получить();