Перем ирПлатформа; // Параметры: // КаталогРаспаковки - Строка(0,П) // Функция ПолучитьФайлСтруктурыХранилищаОбъектаМетаданных(Знач КаталогРаспаковки = "") Экспорт RegExp = ирПлатформа.RegExp; RegExp.Global = Ложь; RegExp.Pattern = "{2,(" + ирПлатформа.шGUID + "),"; ФайлКорневогоУказателя = Новый Файл(КаталогРаспаковки + "root.data.und"); ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ФайлКорневогоУказателя.ПолноеИмя); РезультатыПоиска = RegExp.Execute(ТекстовыйДокумент.ПолучитьТекст()); КорневойИД = РезультатыПоиска.Item(0).Submatches(0); ФайлСтруктуры = Новый Файл(КаталогРаспаковки + КорневойИД + ".data.und"); Результат = ФайлСтруктуры; Возврат Результат; КонецФункции // Параметры: // ПолноеИмяФайлаВнешнейОбработки - Строка(0,П) // ИмяФормы - Строка(0,П) - Если не указана, используется Основая форма, а если основная форма не указана, используется единственная форма. Для быстрого выполнения нужно указывать. // МассивДобавляемыхРеквизитов - Массив - !Проверка уникальности не выполняется. Ее нужно делать снаружи // СтарыйТекстМодуля - Строка(0,П) // Функция ПроверитьОбновитьМодульИРеквизитыФормыВФайле(Знач ПолноеИмяФайлаВнешнейОбработки = "", Знач ИмяФормы = "", Знач МассивДобавляемыхРеквизитов, НовыйТекстМодуля, СтарыйТекстМодуля = "") Экспорт ФайлВнешнейОбработки = Новый Файл(ПолноеИмяФайлаВнешнейОбработки); Если Не ЗначениеЗаполнено(ИмяФормы) Тогда ВнешнийОбъект = ВнешниеОбработки.Создать(ФайлВнешнейОбработки.ПолноеИмя); ОбъектМетаданных = ВнешнийОбъект.Метаданные(); Если ОбъектМетаданных.ОсновнаяФорма <> Неопределено Тогда ИмяФормы = ОбъектМетаданных.ОсновнаяФорма.Имя; ИначеЕсли ОбъектМетаданных.Формы.Количество() = 1 Тогда ИмяФормы = ОбъектМетаданных.Формы[0].Имя; Иначе ВызватьИсключение "Невозможно определить форму внешней обработки для обновления"; КонецЕсли; КонецЕсли; ИмяКаталогаСборки = "Rebuild"; ИмяКаталогаРаспаковки = ФайлВнешнейОбработки.Путь + ИмяКаталогаСборки; КаталогРаспаковки = ИмяКаталогаРаспаковки + "\"; УдалитьФайлы(ИмяКаталогаРаспаковки, "*.*"); СоздатьКаталог(ИмяКаталогаРаспаковки); ирПлатформа.РаспаковатьФайлВнешнейОбработки(ФайлВнешнейОбработки.ПолноеИмя, КаталогРаспаковки); БылаМодификация = Ложь; RegExp = ирПлатформа.RegExp; // Получаем модуль формы и изменяем его, если не соответствует стандарту //ФайлСпискаФорм = Новый файл(КаталогРаспаковки + "copyinfo.data.und"); //ТекстовыйДокумент = Новый ТекстовыйДокумент; //ТекстовыйДокумент.Прочитать(ФайлСпискаФорм.ПолноеИмя); //RegExp.Global = Ложь; //RegExp.Pattern = "(" + ирПлатформа.шGUID + "),1,\n\{d5b0e5ed-256d-401c-9c36-f630cafd8a62,""" + ИмяФормы + """"; //РезультатыПоиска = RegExp.Execute(ТекстовыйДокумент.ПолучитьТекст()); //СтарыеТекстыМодулейФорм = Новый Структура; //ИДФормы = РезультатыПоиска.Item(0).Submatches(0); ФайлСтруктуры = ПолучитьФайлСтруктурыХранилищаОбъектаМетаданных(КаталогРаспаковки); ТекстСтруктуры = Новый ТекстовыйДокумент; ТекстСтруктуры.Прочитать(ФайлСтруктуры.ПолноеИмя); RegExp.Global = Ложь; RegExp.Pattern = "\{d5b0e5ed-256d-401c-9c36-f630cafd8a62,\d+((?:," + ирПлатформа.шGUID + ")*)\}"; РезультатыПоиска = RegExp.Execute(ТекстСтруктуры.ПолучитьТекст()); ТекстСпискаИД = РезультатыПоиска.Item(0).Submatches(0); RegExp.Global = Истина; RegExp.Pattern = ирПлатформа.шGUID; РезультатыПоиска = RegExp.Execute(ТекстСпискаИД); Для Каждого Вхождение Из РезультатыПоиска Цикл ТекстФайлаФормы = Новый ТекстовыйДокумент; ТекстФайлаФормы.Прочитать(КаталогРаспаковки + Вхождение.Value + ".data.und"); //RegExp.Global = Ложь; //RegExp.Pattern = Вхождение.Value + "\},""(" + ирПлатформа.шИмя + ")""; //РезультатыПоиска2 = RegExp.Execute(ТекстФайлаФормы.ПолучитьТекст()); Маркер = Вхождение.Value + "},""" + ИмяФормы + """"; Если Найти(НРег(ТекстФайлаФормы.ПолучитьТекст()), Нрег(Маркер)) > 0 Тогда ИДФормы = Вхождение.Value; Прервать; КонецЕсли; КонецЦикла; Если ИДФормы = Неопределено Тогда ВызватьИсключение "Не удалось определить внутренний идентификатор формы """ + ИмяФормы + """"; КонецЕсли; ФайлМодуляФормы = Новый Файл(КаталогРаспаковки + ИДФормы + ".0.data.und.unp\" + "module.data"); СтарыйТекстМодуляФормы = Неопределено; Результат = Ложь; ТекстДляПроверки = Новый ТекстовыйДокумент; ТекстДляПроверки.Прочитать(ФайлМодуляФормы.ПолноеИмя); ТекстОбразец = Новый ТекстовыйДокумент; ТекстОбразец.УстановитьТекст(НовыйТекстМодуля); СтарыйТекстМодуля = ТекстДляПроверки.ПолучитьТекст(); Если ТекстОбразец.ПолучитьТекст() <> СтарыйТекстМодуля Тогда ТекстОбразец.Записать(ФайлМодуляФормы.ПолноеИмя); Результат = Истина; КонецЕсли; Если Истина И МассивДобавляемыхРеквизитов <> Неопределено И МассивДобавляемыхРеквизитов.Количество() > 0 Тогда ФайлДиалогаФормы = Новый Файл(ФайлМодуляФормы.Путь + "form.data"); ТекстДиалога = Новый ТекстовыйДокумент; ТекстДиалога.Прочитать(ФайлДиалогаФормы.ПолноеИмя); КоличествоНовыхРеквизитов = МассивДобавляемыхРеквизитов.Количество(); ОстатокТекста0 = ТекстДиалога.ПолучитьТекст(); RegExp.Global = Ложь; RegExp.Pattern = "},\d+,\d+,\d+,0,\d+,4,4,\d+},"; Вхождения = RegExp.Execute(ОстатокТекста0); Если Вхождения.Count = 0 Тогда Сообщить("При анализе диалога не найден маркер1"); Возврат Неопределено; ИначеЕсли Вхождения.Count > 1 Тогда Сообщить("При анализе диалога найдено более одного маркера1"); Возврат Неопределено; КонецЕсли; Позиция = Вхождения.Item(0).FirstIndex; Позиция = Позиция + СтрДлина(Вхождения.Item(0).Value); Фрагмент1 = Лев(ОстатокТекста0, Позиция); ОстатокТекста1 = Сред(ОстатокТекста0, Позиция + 1); //Маркер = "},"; //Позиция = Найти(ОстатокТекста1, Маркер); //Фрагмент2 = Лев(ОстатокТекста1, Позиция + СтрДлина(Маркер)); Фрагмент2 = ""; ОстатокТекста2 = Сред(ОстатокТекста1, СтрДлина(Фрагмент2) + 1); Маркер = ", |{"; Позиция = Найти(ОстатокТекста2, Маркер); Если Позиция = 0 Тогда Сообщить("Не найден маркер2"); Возврат Неопределено; КонецЕсли; Позиция = Позиция + СтрДлина(Маркер) - 1; Фрагмент3 = Лев(ОстатокТекста2, Позиция); ОстатокТекста3 = Сред(ОстатокТекста2, СтрДлина(Фрагмент3) + 1); Позиция = Найти(ОстатокТекста3, "}"); Позиция2 = Найти(ОстатокТекста3, ","); Если Позиция2 > 0 Тогда Позиция = Мин(Позиция, Позиция2); КонецЕсли; Фрагмент4 = Лев(ОстатокТекста3, Позиция - 1); ОстатокТекста4 = Сред(ОстатокТекста3, СтрДлина(Фрагмент4) + 1); Число = Число(Фрагмент4); Число = Число + КоличествоНовыхРеквизитов; Фрагмент4 = Формат(Число, "ЧГ="); Разделитель = ","; СтрокаРеквизитов = ""; Счетчик = 1; // Если у формы нет ни одного реквизита, то может получиться ошибка формата потока Строка1 = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ОстатокТекста4, "},", ","""); Если Ложь Или Не ЗначениеЗаполнено(Строка1) Или СтрДлина(Строка1) > 5 Тогда // у формы нет ни одного реквизита Если ирПлатформа.ИДВерсииПлатформы = "81" Тогда Строка1 = "0,1"; ИначеЕсли ирПлатформа.ИДВерсииПлатформы >= "82" Тогда // Здесь может быть нужно и "0,1" использовать, если в конфигураторе форму ни разу не сохраняли еще, а только конвертировали через ConvertFiles // Если такое случается, то при попытке открыть такую внешнюю обработку платформа будет падать Строка1 = "1,0,1"; КонецЕсли; КонецЕсли; Для Каждого ИмяРеквизита Из МассивДобавляемыхРеквизитов Цикл СтрокаРеквизитов = СтрокаРеквизитов + Разделитель + " |{ |{" + Формат(1000 + Счетчик, "ЧГ=") + "}," + Строка1 + ",""" + ИмяРеквизита + """, |{""Pattern""} |}"; Счетчик = Счетчик + 1; КонецЦикла; НовыйТекст = Фрагмент1 + Фрагмент2 + Фрагмент3 + Фрагмент4 + СтрокаРеквизитов + ОстатокТекста4; ТекстДиалога.УстановитьТекст(НовыйТекст); ТекстДиалога.Записать(ФайлДиалогаФормы.ПолноеИмя); Результат = Истина; КонецЕсли; Если Результат Тогда // Здесь часто возникает ошибка //{Обработка.ирПлатформа.МодульОбъекта(5 163)}: //Ошибка при вызове метода контекста (Записать) // ПолучитьМакет("v8unpack").Записать(Каталог + "\" + ИмяФайлаПакера); //Ошибка совместного доступа к файлу 'D:\Users\Сергей\AppData\Local\1C\1Cv82\File__D__1C_v82_DB_2iSРазработка__\b\Rebuild\v8unpack.exe' // ВызватьИсключение Ошибка;//#Служебное ирПлатформа.УпаковатьФайлВнешнейОбработки(КаталогРаспаковки, ФайлВнешнейОбработки.ПолноеИмя); КонецЕсли; Возврат Результат; КонецФункции Функция ТабличныйДокументИзОбщихКартинокПодсистемы() Экспорт ТабличныйДокумент = Новый ТабличныйДокумент; ШрифтЖирный = Новый Шрифт(,,Истина); ТабличныйДокумент.Область("R1C1:R1C1").Текст = "Имя"; ТабличныйДокумент.Область("R1C2:R1C2").Текст = "Картинка"; ТабличныйДокумент.Область("R1C1:R1C2").Шрифт = ШрифтЖирный; Для Каждого ОбщаяКартинка Из Метаданные.ОбщиеКартинки Цикл Если Не Метаданные.Подсистемы.ИнструментыРазработчикаTormozit.Состав.Содержит(ОбщаяКартинка) Тогда Продолжить; КонецЕсли; Рисунок = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка); Рисунок.Картинка = БиблиотекаКартинок[ОбщаяКартинка.Имя]; Рисунок.Имя = ОбщаяКартинка.Имя; Рисунок.РазмерКартинки = РазмерКартинки.РеальныйРазмер; ВысотаТаблицы = ТабличныйДокумент.ВысотаТаблицы + 1; ТабличныйДокумент.Область("R" + XMLСтрока(ВысотаТаблицы) + "C1:R" + XMLСтрока(ВысотаТаблицы) + "C1").Текст = ОбщаяКартинка.Имя; Рисунок.Расположить(ТабличныйДокумент.Область("R" + XMLСтрока(ВысотаТаблицы) + "C2:R" + XMLСтрока(ВысотаТаблицы) + "C2")); КонецЦикла; Возврат ТабличныйДокумент; КонецФункции Функция СгенерироватьМодульИнициализацииФормПодсистемыДляПортативногоРежима() Экспорт ТекстМодуля = Новый ЗаписьXML; ТекстМодуля.УстановитьСтроку(""); //ТекстМодуля.ЗаписатьБезОбработки(" //|Перем ирОбщий Экспорт; //|Перем ирСервер Экспорт; //|Перем ирКэш Экспорт; //|Перем ирПривилегированный Экспорт; //|Перем ирПортативный Экспорт; //| //|Перем ирПлатформа Экспорт; //|"); ТипыМетаданных = ирПлатформа.ПолучитьТаблицуТиповМетаОбъектов(Истина, Ложь, Ложь); ИндикаторТиповМетаданных = ирОбщий.ПолучитьИндикаторПроцессаЛкс(ТипыМетаданных.Количество(), "Типы метаданных"); Для Каждого СтрокаТипаМетаданных Из ТипыМетаданных Цикл ирОбщий.ОбработатьИндикаторЛкс(ИндикаторТиповМетаданных); Если СтрокаТипаМетаданных.Единственное = "Перерасчет" Тогда КоллекцияМетаОбъектов = Новый Массив; Для Каждого МетаРегистрРасчета Из Метаданные.РегистрыРасчета Цикл Для Каждого Перерасчет Из МетаРегистрРасчета.Перерасчеты Цикл КоллекцияМетаОбъектов.Добавить(Перерасчет); КонецЦикла; КонецЦикла; Иначе КоллекцияМетаОбъектов = Метаданные[СтрокаТипаМетаданных.Множественное]; КонецЕсли; Индикатор2 = ирОбщий.ПолучитьИндикаторПроцессаЛкс(КоллекцияМетаОбъектов.Количество(), СтрокаТипаМетаданных.Множественное); Для Каждого МетаОбъект Из КоллекцияМетаОбъектов Цикл Если Не Метаданные.Подсистемы.ИнструментыРазработчикаTormozit.Состав.Содержит(МетаОбъект) Тогда Продолжить; КонецЕсли; ирОбщий.ОбработатьИндикаторЛкс(Индикатор2); Попытка МетаФормы = МетаОбъект.Формы; Исключение Продолжить; КонецПопытки; МенеджерОбъектаМетаданных = ирОбщий.ПолучитьМенеджерЛкс(МетаОбъект); Индикатор3 = ирОбщий.ПолучитьИндикаторПроцессаЛкс(МетаФормы.Количество(), "Формы"); Для Каждого МетаФорма Из МетаФормы Цикл ирОбщий.ОбработатьИндикаторЛкс(Индикатор3); ПолноеИмяФормы = МетаФорма.ПолноеИмя(); //Сообщить(ПолноеИмяФормы); //ПолноеИмяФормы = МетаОбъект.ПолноеИмя() + ".Форма." + МетаФорма.Имя; Попытка //Форма = ПолучитьФорму(ПолноеИмяФормы); // Так исключение не сработает и будет отображен диалог об ошибке. Особенность платформы Форма = МенеджерОбъектаМетаданных.ПолучитьФорму(МетаФорма.Имя,,Новый УникальныйИдентификатор()); Исключение Сообщить("Ошибка при получении формы " + ПолноеИмяФормы + ": " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное); Продолжить; КонецПопытки; ТелоМетода = Новый ЗаписьXML; ТелоМетода.УстановитьСтроку(""); ПроверитьСвойстваОбъектаДляПортативногоРежимаЛкс("ЭтаФорма", Форма, ТелоМетода); ТелоМетода = ТелоМетода.Закрыть(); ТекстМодуля.ЗаписатьБезОбработки(" |Процедура ИнициализироватьФорму_" + ирПлатформа.ПолучитьИдентификаторИзПредставления(ПолноеИмяФормы) + "(ЭтаФорма) Экспорт | |" + ТелоМетода + " |КонецПроцедуры |"); КонецЦикла; ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); КонецЦикла; ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); КонецЦикла; ирОбщий.ОсвободитьИндикаторПроцессаЛкс(); Результат = "//#Область ОбработчикиИнициализацииФорм |" + ТекстМодуля.Закрыть() + " |//#КонецОбласти"; Возврат Результат; КонецФункции Процедура ПроверитьСвойстваОбъектаДляПортативногоРежимаЛкс(ПутьКОбъекту, Объект, ТелоМетода) СтруктураТипа = ирПлатформа.ПолучитьСтруктуруТипаИзЗначения(Объект); ВнутренняяТаблицаСлов = ирПлатформа.ПолучитьТаблицуСловСтруктурыТипа(СтруктураТипа); Для Каждого ВнутренняяСтрокаСлова Из ВнутренняяТаблицаСлов Цикл Если ВнутренняяСтрокаСлова.ТипСлова = "Свойство" Тогда ИмяСвойства = ВнутренняяСтрокаСлова.Слово; Если Ложь Или ИмяСвойства = "ИсточникДействий" Или ИмяСвойства = "КонтекстноеМеню" Тогда // Защита от длинных путей и зацикливания Продолжить; КонецЕсли; Попытка Структура = Новый Структура(ИмяСвойства); Исключение // "КартинкаКнопкиВыбора#&^@^%&*^#1" Продолжить; КонецПопытки; Попытка ЗаполнитьЗначенияСвойств(Структура, Объект); Исключение // Не всегда доступное свойство Продолжить; КонецПопытки; ЗначениеСвойства = Структура[ИмяСвойства]; Если ТипЗнч(ЗначениеСвойства) = Тип("Картинка") Тогда Если ЗначениеСвойства.Вид = ВидКартинки.ИзБиблиотеки Тогда ИмяОбщейКартинки = СериализаторXDTO.записатьXDTO(ЗначениеСвойства).ref.ЛокальноеИмя; Если Метаданные.ОбщиеКартинки.Найти(ИмяОбщейКартинки) <> Неопределено Тогда ТелоМетода.ЗаписатьБезОбработки(Символы.Таб + ПутьКОбъекту + "." + ИмяСвойства + " = ирОбщий.ПолучитьОбщуюКартинкуЛкс(""" + ИмяОбщейКартинки + """);" + Символы.ПС); КонецЕсли; КонецЕсли; ИначеЕсли ТипЗнч(ЗначениеСвойства) = Тип("Цвет") Тогда ИмяЦветаСтиля = СериализаторXDTO.записатьXDTO(ЗначениеСвойства).ЛексическоеЗначение; ПозицияСкобки = Найти(ИмяЦветаСтиля, "}"); Если ПозицияСкобки > 0 Тогда ИмяЦветаСтиля = Сред(ИмяЦветаСтиля, ПозицияСкобки + 1); Если Метаданные.ЭлементыСтиля.Найти(ИмяЦветаСтиля) <> Неопределено Тогда ТелоМетода.ЗаписатьБезОбработки(Символы.Таб + ПутьКОбъекту + "." + ИмяСвойства + " = ирОбщий.ПолучитьЦветСтиляЛкс(""" + ИмяЦветаСтиля + """);" + Символы.ПС); КонецЕсли; КонецЕсли; КонецЕсли; Если ирПлатформа.мМассивТиповЭлементовУправления.Найти(ТипЗнч(ЗначениеСвойства)) <> Неопределено Тогда ПроверитьСвойстваОбъектаДляПортативногоРежимаЛкс(ПутьКОбъекту + "." + ИмяСвойства, ЗначениеСвойства, ТелоМетода); КонецЕсли; Если ирОбщий.ЭтоКоллекцияЛкс(ЗначениеСвойства) Тогда ЕстьИндексПоИмени = Ложь; Для Каждого ЭлементКоллекции Из ЗначениеСвойства Цикл Если Не ЕстьИндексПоИмени Тогда Попытка Пустышка = Вычислить("ЗначениеСвойства." + ЭлементКоллекции.Имя); Исключение // Если к элементу по имени нельзя обратиться, то он нас не интересует. Прервать; КонецПопытки; КонецЕсли; ЕстьИндексПоИмени = Истина; Если Ложь Или ирПлатформа.мМассивТиповЭлементовУправления.Найти(ТипЗнч(ЭлементКоллекции)) <> Неопределено Или ТипЗнч(ЭлементКоллекции) = Тип("КнопкаКоманднойПанели") Тогда ПроверитьСвойстваОбъектаДляПортативногоРежимаЛкс(ПутьКОбъекту + "." + ИмяСвойства + "." + ЭлементКоллекции.Имя, ЭлементКоллекции, ТелоМетода); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры Процедура ОсновныеДействияФормыВыполнить(Кнопка) ИмяРасширения = "Расширение1"; ТекстЛога = ""; ВерсияРасширения = Метаданные.Версия + "e"; ИмяВременногоФайла = ПолучитьИмяВременногоФайла("cfe"); ПолучитьОбщийМакет("ирШаблонРасширения").Записать(ИмяВременногоФайла); Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/LoadCfg """ + ИмяВременногоФайла + """ -Extension """ + ИмяРасширения + """", , ТекстЛога); Если Не Успех Тогда УдалитьФайлы(ИмяВременногоФайла); Сообщить(ТекстЛога); Возврат; КонецЕсли; УдалитьФайлы(ИмяВременногоФайла); КаталогВыгрузкиРасширения = ПолучитьИмяВременногоФайла(); СоздатьКаталог(КаталогВыгрузкиРасширения); // Выгрузка расширения в файлы Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/DumpConfigToFiles """ + КаталогВыгрузкиРасширения + """ -Extension """ + ИмяРасширения + """ -Format Hierarchical", , ТекстЛога,, "Выгрузка расширения в файлы"); Если Не Успех Тогда УдалитьФайлы(КаталогВыгрузкиРасширения); Сообщить(ТекстЛога); Возврат; КонецЕсли; КаталогВыгрузкиКонфигурации = ПолучитьИмяВременногоФайла(); СоздатьКаталог(КаталогВыгрузкиКонфигурации); ТекстЛога = ""; // Выгружаем конфигурацию в файлы Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/DumpConfigToFiles """ + КаталогВыгрузкиКонфигурации + """ -Format Hierarchical", СтрокаСоединенияИнформационнойБазы(), ТекстЛога,, "Выгрузка конфигурации в файлы"); Если Не Успех Тогда УдалитьФайлы(КаталогВыгрузкиКонфигурации); Сообщить(ТекстЛога); Возврат; КонецЕсли; //КаталогВыгрузкиКонфигурации = "Z:\Ир"; // Для отладки // Скопируем все папки кроме Catalogs и Ext и файла ConfigDumpInfo.xml Файлы = НайтиФайлы(КаталогВыгрузкиКонфигурации, "*"); Для Каждого Файл Из Файлы Цикл Если Ложь Или Файл.Имя = "Catalogs" Или Файл.Имя = "Ext" Или Не Файл.ЭтоКаталог() Тогда Продолжить; КонецЕсли; ФайлПриемник = Новый Файл(КаталогВыгрузкиРасширения + "\" + Файл.Имя); Если Не ФайлПриемник.Существует() Тогда СоздатьКаталог(ФайлПриемник.ПолноеИмя); КонецЕсли; ирОбщий.СкопироватьФайлыЛкс(КаталогВыгрузкиКонфигурации + "\" + Файл.Имя, КаталогВыгрузкиРасширения + "\" + Файл.Имя); КонецЦикла; // Переименуем язык Русский->ирРусский ИмяФайла = КаталогВыгрузкиРасширения + "\Languages\Русский.xml"; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ИмяФайла); ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); ТекстФайла = СтрЗаменить(ТекстФайла, "Русский", "ирРусский"); ТекстовыйДокумент.УстановитьТекст(ТекстФайла); ТекстовыйДокумент.Записать(ИмяФайла); // Во всех CommonCommands удалить ... Файлы = НайтиФайлы(КаталогВыгрузкиРасширения + "\CommonCommands", "*.xml"); Для Каждого Файл Из Файлы Цикл ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(Файл.ПолноеИмя); ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); ЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайла, "", "", Ложь, Истина); ТекстФайла = СтрЗаменить(ТекстФайла, ЧтоЗаменить, ""); ТекстовыйДокумент.УстановитьТекст(ТекстФайла); ТекстовыйДокумент.Записать(Файл.ПолноеИмя); КонецЦикла; // Из SubSystems вырезаем фрагменты Catalog.ирОбъектыДляОтладки Файлы = НайтиФайлы(КаталогВыгрузкиРасширения + "\SubSystems", "*.xml"); Для Каждого Файл Из Файлы Цикл ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(Файл.ПолноеИмя); ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); ТекстФайла = СтрЗаменить(ТекстФайла, "Catalog.ирАлгоритмы", ""); ТекстФайла = СтрЗаменить(ТекстФайла, "Catalog.ирКомандаРедактироватьОбъект", ""); ТекстФайла = СтрЗаменить(ТекстФайла, "Catalog.ирОбъектыДляОтладки", ""); ТекстовыйДокумент.УстановитьТекст(ТекстФайла); ТекстовыйДокумент.Записать(Файл.ПолноеИмя); КонецЦикла; // У общего модуля ирГлобальный убираем флажок Сервер ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирГлобальный.xml"; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ИмяФайла); ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); ТекстФайла = СтрЗаменить(ТекстФайла, "true", "false"); ТекстовыйДокумент.УстановитьТекст(ТекстФайла); ТекстовыйДокумент.Записать(ИмяФайла); //// Скопируем глобальные методы в общий модуль ирОтладка //ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирГлобальный\Ext\Module.bsl"; //ТекстовыйДокумент = Новый ТекстовыйДокумент; //ТекстовыйДокумент.Прочитать(ИмяФайла); //ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); //ТекстМетодов = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайла, "#Область ГлобальныеПортативныеМетоды", "#КонецОбласти", Ложь, Истина); //ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирОтладка\Ext\Module.bsl"; //ТекстовыйДокумент = Новый ТекстовыйДокумент; //ТекстовыйДокумент.Прочитать(ИмяФайла); //ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); //ТекстФайла = ТекстФайла + ТекстМетодов; //ТекстовыйДокумент.УстановитьТекст(ТекстФайла); //ТекстовыйДокумент.Записать(ИмяФайла); // У общего модуля ирПривилегированный убираем флажок Привилегированный ИмяФайла = КаталогВыгрузкиРасширения + "\CommonModules\ирПривилегированный.xml"; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ИмяФайла); ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); ТекстФайла = СтрЗаменить(ТекстФайла, "true", "false"); ТекстовыйДокумент.УстановитьТекст(ТекстФайла); ТекстовыйДокумент.Записать(ИмяФайла); // У подсистемы ИнструментыРазработчикаTormozit обновим версию ИмяФайла = КаталогВыгрузкиРасширения + "\SubSystems\ИнструментыРазработчикаTormozit.xml"; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ИмяФайла); ТекстФайла = ТекстовыйДокумент.ПолучитьТекст(); ЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайла, "", "", Ложь, Истина); ТекстФайла = СтрЗаменить(ТекстФайла, ЧтоЗаменить, "" + ВерсияРасширения + ""); ЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайла, "Инструменты разработчика ", "", Ложь, Истина); ТекстФайла = СтрЗаменить(ТекстФайла, ЧтоЗаменить, "Инструменты разработчика " + ВерсияРасширения + ""); ТекстовыйДокумент.УстановитьТекст(ТекстФайла); ТекстовыйДокумент.Записать(ИмяФайла); // Заменим элемент в файле Configuration.xml ФайлКонфигурацииИсточника = КаталогВыгрузкиКонфигурации + "\Configuration.xml"; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ФайлКонфигурацииИсточника); ТекстФайлаИсточника = ТекстовыйДокумент.ПолучитьТекст(); ФайлКонфигурацииПриемника = КаталогВыгрузкиРасширения + "\Configuration.xml"; ТекстовыйДокумент = Новый ТекстовыйДокумент; ТекстовыйДокумент.Прочитать(ФайлКонфигурацииПриемника); ТекстФайлаПриемника = ТекстовыйДокумент.ПолучитьТекст(); ЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайлаПриемника, "", "", Ложь, Истина); НаЧтоЗаменить = ирОбщий.ПолучитьСтрокуМеждуМаркерамиЛкс(ТекстФайлаИсточника, "", "", Ложь, Истина); ТекстФайлаПриемника = СтрЗаменить(ТекстФайлаПриемника, ЧтоЗаменить, НаЧтоЗаменить); ТекстФайлаПриемника = СтрЗаменить(ТекстФайлаПриемника, "4.00", "" + ВерсияРасширения + ""); ТекстФайлаПриемника = СтрЗаменить(ТекстФайлаПриемника, "Russian", "RussianLanguage.Русский"); // Без этого многоязычные строки все будут пустыми ТекстовыйДокумент.УстановитьТекст(ТекстФайлаПриемника); ТекстовыйДокумент.Записать(ФайлКонфигурацииПриемника); // Загрузка расширения из файлов Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/LoadConfigFromFiles """ + КаталогВыгрузкиРасширения + """ -Extension """ + ИмяРасширения + """ -Format Hierarchical", , ТекстЛога,, "Загрузка расширения из файлов"); УдалитьФайлы(КаталогВыгрузкиРасширения); Если Не Успех Тогда Сообщить(ТекстЛога); Возврат; КонецЕсли; //// Выгружаем расширение в файлы //Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/DumpConfigToFiles """ + КаталогВыгрузкиРасширения + """ -Extension """ + ИмяРасширения + """ -Format Hierarchical", , ТекстЛога); //Если Не Успех Тогда // УдалитьФайлы(КаталогВыгрузкиРасширения); // Сообщить(ТекстЛога); // Возврат; //КонецЕсли; //ФайлКонфигурацииИсточника = КаталогВыгрузкиРасширения + "\Configuration.xml"; //ТекстовыйДокумент = Новый ТекстовыйДокумент; //ТекстовыйДокумент.Прочитать(ФайлКонфигурацииИсточника); //ТекстФайлаИсточника = ТекстовыйДокумент.ПолучитьТекст(); //Предупреждение(1); //ТекстФайлаИсточника = СтрЗаменить(ТекстФайлаИсточника, "Language.ирРусский", ""); // На первом проходе в 8.3.10 невозможно сделать //ТекстовыйДокумент.УстановитьТекст(ТекстФайлаИсточника); //ТекстовыйДокумент.Записать(ФайлКонфигурацииИсточника); // //// Загружаем расширение из файлов //Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/LoadConfigFromFiles """ + КаталогВыгрузкиРасширения + """ -Extension """ + ИмяРасширения + """ -Format Hierarchical", , ТекстЛога); //Если Не Успех Тогда // УдалитьФайлы(КаталогВыгрузкиРасширения); // Сообщить(ТекстЛога); // Возврат; //КонецЕсли; // Выгружаем расширение КонечныйФайл = Каталог + "\ИР " + Метаданные.Версия + ".cfe"; Успех = ирОбщий.ВыполнитьКомандуКонфигуратораЛкс("/DumpCfg """ + КонечныйФайл + """ -Extension """ + ИмяРасширения + """", , ТекстЛога); Если Не Успех Тогда Сообщить(ТекстЛога); Возврат; КонецЕсли; УдалитьФайлы(КаталогВыгрузкиКонфигурации); УдалитьФайлы(КаталогВыгрузкиРасширения); Предупреждение("Не забудь вручную убрать флажок ""Проверять значения языка"" у расширения!"); КонецПроцедуры Процедура КаталогНачалоВыбора(Элемент, СтандартнаяОбработка) ирОбщий.ВыбратьКаталогВФормеЛкс(Каталог); КонецПроцедуры Процедура ПриЗакрытии() СохранитьЗначение("ирВыпускВариантаРасширение.Каталог", Каталог); КонецПроцедуры Процедура ПриОткрытии() Подверсия = "1"; Каталог = ВосстановитьЗначение("ирВыпускВариантаРасширение.Каталог"); КонецПроцедуры Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) ВерсияПлатформы = ирПлатформа.ВерсияПлатформы; Если ВерсияПлатформы < 803010 Тогда Сообщить("Поддерживается только платформа 8.3.10 и выше"); Отказ = Истина; КонецЕсли; КонецПроцедуры ирПлатформа = ирКэш.Получить();