1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2025-01-07 23:01:46 +02:00

Добавлен сценарий обработки описаний форм для исправелния конфликтов индексов элементов

This commit is contained in:
Maxmov Valery 2017-10-02 18:47:03 +03:00
parent 72f4444d34
commit 6a1f85b67c

View File

@ -0,0 +1,137 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией сценариев обработки файлов КорректировкаОписанияФорм
//
///////////////////////////////////////////////////////////////////////////////
// ИмяСценария
// Возвращает имя сценария обработки файлов
//
// Возвращаемое значение:
// Строка - Имя текущего сценария обработки файлов
//
Функция ИмяСценария() Экспорт
Возврат "КорректировкаОписанияФорм";
КонецФункции // ИмяСценария()
// ОбработатьФайл
// Выполняет обработку файла
//
// Параметры:
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария
// и которые необходимо дообработать
//
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
//
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
Если АнализируемыйФайл.Существует() И ЭтоФайлОписанияФормы(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если ОбновитьИндексыЭлементовВФорме(АнализируемыйФайл.ПолноеИмя) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
Возврат ИСТИНА;
КонецЕсли;
КонецФункции // ОбработатьФайл()
Функция ЭтоФайлОписанияФормы(Файл)
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Имя, "Form.xml") = 0;
КонецФункции
Функция ОбновитьИндексыЭлементовВФорме(Знач ИмяФайла)
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ИмяФайла);
СодержимоеФайла = Текст.ПолучитьТекст();
Регексп = Новый РегулярноеВыражение("id=\""([0-9-]+)\""\/*>");
Регексп.ИгнорироватьРегистр = ИСТИНА;
Регексп.Многострочный = ИСТИНА;
ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла);
Если ГруппыИндексов.Количество() = 0 Тогда
Возврат ЛОЖЬ;
КонецЕсли;
ТЧ = Новый ТаблицаЗначений;
ТЧ.Колонки.Добавить("Значение");
ТЧ.Колонки.Добавить("Количество");
СтрокиФайла = Новый Соответствие;
Для Каждого ГруппаИндексов Из ГруппыИндексов Цикл
СтрокаТЧ = ТЧ.ДОбавить();
СтрокаТЧ.Значение = Число(ГруппаИндексов.Группы[1].Значение);
СтрокаТЧ.Количество = 1;
СтрокиФайла.Вставить(СтрокаТЧ.Значение, ГруппаИндексов.Группы[1].Индекс);
КонецЦикла;
ТЧ.Свернуть("Значение", "Количество");
Если ТЧ.Количество() <> ГруппыИндексов.Количество() Тогда
ТЧ.Сортировать("Значение УБЫВ");
ПоследнийНомер = ТЧ[0].Значение;
ТЧ.Сортировать("Количество УБЫВ");
Для каждого СтрокаТЧ Из ТЧ Цикл
Если СтрокаТЧ.Количество = 1 Тогда
Прервать;
КонецЕсли;
Пока СтрокаТЧ.Количество > 1 Цикл
ИсходнаяСтрока = "id=""" + СтрокаТЧ.Значение + """";
ПоследнийНомер = ПоследнийНомер + 1;
СтрокаЗамены = "id=""" + ПоследнийНомер + """";
Поз = СтрНайти(СодержимоеФайла, ИсходнаяСтрока);
НоваяСтрока = Лев(СодержимоеФайла, Поз - 1) + СтрокаЗамены;
СодержимоеФайла = НоваяСтрока + Сред(СодержимоеФайла, Поз + СтрДлина(ИсходнаяСтрока));
СтрокаТЧ.Количество = СтрокаТЧ.Количество - 1;
КонецЦикла;
КонецЦикла;
Текст.УстановитьТекст(СодержимоеФайла);
Текст.Записать(ИмяФайла);
Возврат ИСТИНА;
КонецЕсли;
Возврат ЛОЖЬ;
КонецФункции