Процедура ОсновныеДействияФормыВыполнить(Кнопка)
// Если указать ИсполняемыйФайлПлатформы, то будет ошибка при загрузке расширения из файлов
// Неизвестная версия формата 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", "" + ВерсияРасширения + "");
ТекстФайлаПриемника = ирОбщий.СтрЗаменитьЛкс(ТекстФайлаПриемника, "ирРазработчик", "");
ТекстФайлаПриемника = ирОбщий.СтрЗаменитьЛкс(ТекстФайлаПриемника, "", "");
ТекстФайлаПриемника = ирОбщий.СтрЗаменитьЛкс(ТекстФайлаПриемника, "ирАлгоритмы", "");
ТекстФайлаПриемника = ирОбщий.СтрЗаменитьЛкс(ТекстФайлаПриемника, "ирКомандаРедактироватьОбъект", "");
ТекстФайлаПриемника = ирОбщий.СтрЗаменитьЛкс(ТекстФайлаПриемника, "ирОбъектыДляОтладки", "");
ТекстовыйДокумент.УстановитьТекст(ТекстФайлаПриемника);
ТекстовыйДокумент.Записать(ФайлКонфигурацииПриемника);
// Загрузка расширения из файлов
Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/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",, Элемент.Значение);
Если ЗначениеЗаполнено(РезультатВыбора) Тогда
Элемент.Значение = РезультатВыбора;
КонецЕсли;
КонецПроцедуры