From 0467ad72826c64526321cb129be83b593a6dbedd Mon Sep 17 00:00:00 2001 From: Maximov Valery Date: Mon, 10 Apr 2017 11:54:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=BD=D0=B4=D0=B5=D0=BA=D1=81?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=B2=20form.xml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit При мердже форм возникают ситуации, когда у разных элементов получаются одинаковые индексы (два разных разработчика добавили два новых элемента формы). Данный патч решает эту проблему --- v8files-extractor.os | 83 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/v8files-extractor.os b/v8files-extractor.os index a2dd617..d377e86 100644 --- a/v8files-extractor.os +++ b/v8files-extractor.os @@ -1,4 +1,4 @@ -// Copyright 2016 xDrivenDevelopment +// Copyright 2016 xDrivenDevelopment // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -344,6 +344,76 @@ КонецПроцедуры +Функция ОбновитьИндексыЭлементовВФорме(Знач ИмяФайла) + + Текст = Новый ТекстовыйДокумент; + Текст.Прочитать(ИмяФайла); + СодержимоеФайла = Текст.ПолучитьТекст(); + + Регексп = Новый РегулярноеВыражение("id=\""([0-9-]+)\""\/*>"); + Регексп.ИгнорироватьРегистр = ИСТИНА; + Регексп.Многострочный = ИСТИНА; + ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла); + Если ГруппыИндексов.Количество() = 0 Тогда + + Возврат ЛОЖЬ; + + КонецЕсли; + + ТЧ = Новый ТаблицаЗначений; + ТЧ.Колонки.Добавить("Значение"); + ТЧ.Колонки.Добавить("Количество"); + + СтрокиФайла = Новый Соответствие; + Для Каждого ГруппаИндексов Из ГруппыИндексов Цикл + + СтрокаТЧ = ТЧ.ДОбавить(); + СтрокаТЧ.Значение = Число(ГруппаИндексов.Группы[1].Значение); + СтрокаТЧ.Количество = 1; + + СтрокиФайла.Вставить(СтрокаТЧ.Значение, ГруппаИндексов.Группы[1].Индекс); + + КонецЦикла; + + ТЧ.Свернуть("Значение", "Количество"); + Если ТЧ.Количество() <> ГруппыИндексов.Количество() Тогда + + ТЧ.Сортировать("Значение УБЫВ"); + ПоследнийНомер = ТЧ[0].Значение; + ТЧ.Сортировать("Количество УБЫВ"); + + Для каждого СтрокаТЧ Из ТЧ Цикл + + Если СтрокаТЧ.Количество = 1 Тогда + + Прервать; + + КонецЕсли; + + ИсходнаяСтрока = "id=""" + СтрокаТЧ.Значение + """"; + ПоследнийНомер = ПоследнийНомер + 1; + СтрокаЗамены = "id=""" + ПоследнийНомер + """"; + + Поз = СтрНайти(СодержимоеФайла, ИсходнаяСтрока); + + НоваяСтрока = Лев(СодержимоеФайла, Поз - 1) + СтрокаЗамены; + СодержимоеФайла = НоваяСтрока + Сред(СодержимоеФайла, Поз + СтрДлина(ИсходнаяСтрока)); + + КонецЦикла; + + Иначе + + Возврат ЛОЖЬ; + + КонецЕсли; + + Текст.УстановитьТекст(СодержимоеФайла); + Текст.Записать(ИмяФайла); + + Возврат ИСТИНА; + +КонецФункции + Процедура УстановитьУровеньЛогаКонфигуратораРавнымУровнюПродукта() ЛогКонфигуратора = Логирование.ПолучитьЛог("oscript.lib.v8runner"); ЛогКонфигуратора.УстановитьУровень(Лог.Уровень()); @@ -461,7 +531,18 @@ Если УдалятьФайлыИзИндексаГит Тогда УдалитьФайлИзИндексаГит(ПолныйПуть); КонецЕсли; + + ИначеЕсли СтрСравнить(Файл.Имя, "Form.xml") = 0 Тогда + + Лог.Отладка("Обновление индексов в файле формы " + Файл.ПолноеИмя); + Если ОбновитьИндексыЭлементовВФорме(Файл.ПолноеИмя) Тогда + + СписокНовыхКаталогов.Добавить(Файл.ПолноеИмя); + + КонецЕсли; + КонецЕсли; + КонецЦикла; ДобавитьИсходникиВГит(СписокНовыхКаталогов);