1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2025-05-31 23:09:33 +02:00

- ORAIS-773: Добавлена обработка имен метаданных таблиц внешних источников

- исправлены ошибки в тестах
This commit is contained in:
Maximov Valery 2023-04-18 10:20:11 +03:00
parent 9d36d85f15
commit 9f6ed7e304
6 changed files with 59 additions and 29 deletions

View File

@ -282,7 +282,11 @@
Функция ЭтоНовый() Экспорт
Возврат Настройки().ЭтоНовый();
Если НЕ НастройкиИнициализированы Тогда
Возврат Истина;
Иначе
Возврат Настройки().ЭтоНовый();
КонецЕсли;
КонецФункции

View File

@ -3,8 +3,7 @@
ТекущийКаталогСценариев = МенеджерПриложения.КаталогСценариев();
ВсеЗагруженные = Новый Массив;
ФайлыГлобальныхСценариев = НайтиФайлы(ТекущийКаталогСценариев, "*.os");
ФайлыЛокальныхСценариев = Новый Массив;
ФайлыЛокальныхСценариев = Новый Массив;
Лог = МенеджерПриложения.ПолучитьЛог();

View File

@ -39,8 +39,8 @@
Если АнализируемыйФайл.Существует() Тогда
Если ТипыФайлов.ЭтоФайлОписанияПодсистемы(АнализируемыйФайл) ИЛИ
ТипыФайлов.ЭтоФайлОписанияПодсистемыEDT(АнализируемыйФайл) Тогда
Если ТипыФайлов.ЭтоФайлОписанияПодсистемы(АнализируемыйФайл)
ИЛИ ТипыФайлов.ЭтоФайлОписанияПодсистемыEDT(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
ЭтоЕДТ = ТипыФайлов.ЭтоФайлОписанияПодсистемыEDT(АнализируемыйФайл);
@ -57,18 +57,14 @@
КонецЕсли;
Возврат ЛОЖЬ;
Возврат Ложь;
КонецФункции // ОбработатьФайл()
Функция ОтсортироватьПодсистему(Знач ИмяФайла, ЭтоЕДТ)
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
ПоискДочерних = ?(ЭтоЕДТ, "(?:<content>)([\w\W]+)(?:<\/content>)", "(<Content>\s+)(<[\w\W]+>)(\s+<\/Content>)");
Регексп = Новый РегулярноеВыражение(ПоискДочерних);
Регексп.ИгнорироватьРегистр = ИСТИНА;
Регексп.Многострочный = ИСТИНА;
Регексп = РегекспСостав(ЭтоЕДТ);
ПодчиненныеМетаданные = Регексп.НайтиСовпадения(СодержимоеФайла);
Если ПодчиненныеМетаданные.Количество() = 0 Тогда
@ -78,31 +74,33 @@
КонецЕсли;
ИсходнаяСтрока = ПодчиненныеМетаданные[0].Группы[0].Значение;
//Тип.Объект или GUID
ПоискМетаданных = ?(ЭтоЕДТ, "^\s*<[\w]+>(?:([a-zA-Z]+)\.([а-яa-zA-ZА-Я0-9_]+)|(([a-zA-z0-9\-]+)))<\/[\w]+>", "^\s+<[\w:\s=""]+>(?:([a-zA-Z0-9_]+).([а-яa-zA-ZА-Я0-9_]+)|(([a-zA-z0-9\-]+)))<\/[\w:]+>");
РегекспМетаданные = Новый РегулярноеВыражение(ПоискМетаданных);
РегекспМетаданные.ИгнорироватьРегистр = Истина;
РегекспМетаданные.Многострочный = Истина;
ОбъектыМетаданныхСтроки = РегекспМетаданные.НайтиСовпадения(ИсходнаяСтрока);
ОбъектыМетаданныхСтроки = РегекспМетаданные(ЭтоЕДТ).НайтиСовпадения(ИсходнаяСтрока);
ОбъектыТипаПоПорядку = Новый СписокЗначений; // отдельный список с типами, нужен для того, чтобы сохранить порядок при обходе соответствия
// отдельный список с типами, нужен для того, чтобы сохранить порядок при обходе соответствия
ОбъектыТипаПоПорядку = Новый СписокЗначений;
ОбъектыМетаданных = Новый Соответствие;
ПоследнийТип = "";
ОбъектыТипа = Новый СписокЗначений;
Для Каждого ОбъектМетаданных Из ОбъектыМетаданныхСтроки Цикл
Список = ОбъектыМетаданных.Получить(ОбъектМетаданных.Группы[1].Значение);
ТипМетаданных = ОбъектМетаданных.Группы[1].Значение;
СтрокаМетаданных = ОбъектМетаданных.Группы[0].Значение;
ИмяМетаданного = ОбъектМетаданных.Группы[2].Значение;
Если СтрНачинаетсяС(ИмяМетаданного, ".") Тогда
ИмяМетаданного = Сред(ИмяМетаданного, 2);
КонецЕсли;
Список = ОбъектыМетаданных.Получить(ТипМетаданных);
Если Список = Неопределено Тогда
Список = Новый СписокЗначений;
ОбъектыМетаданных.Вставить(ОбъектМетаданных.Группы[1].Значение, Список);
ОбъектыТипаПоПорядку.Добавить(ОбъектМетаданных.Группы[1].Значение);
КонецЕсли;
ОбъектыМетаданных.Вставить(ТипМетаданных, Список);
ОбъектыТипаПоПорядку.Добавить(ТипМетаданных);
КонецЕсли;
Если Список.НайтиПоЗначению(ОбъектМетаданных.Группы[0].Значение) = Неопределено Тогда
Список.Добавить(ОбъектМетаданных.Группы[0].Значение, ОбъектМетаданных.Группы[2].Значение);
Список.Добавить(ОбъектМетаданных.Группы[0].Значение, ИмяМетаданного);
КонецЕсли;
КонецЦикла;
@ -120,7 +118,8 @@
КонецЦикла;
Если НЕ ЭтоЕДТ Тогда
СтрокаЗамены = ПодчиненныеМетаданные[0].Группы[1].Значение + СокрЛП(СтрокаЗамены) + ПодчиненныеМетаданные[0].Группы[3].Значение;
СтрокаЗамены = ПодчиненныеМетаданные[0].Группы[1].Значение + СокрЛП(СтрокаЗамены)
+ ПодчиненныеМетаданные[0].Группы[3].Значение;
КонецЕсли;
Если СтрСравнить(ИсходнаяСтрока, СтрокаЗамены) = 0 Тогда
@ -139,4 +138,28 @@
Возврат Истина;
КонецФункции
КонецФункции
Функция РегекспСостав(ЭтоЕДТ)
ПоискДочерних = ?(ЭтоЕДТ, "(?:<content>)([\w\W]+)(?:<\/content>)", "(<Content>\s+)(<[\w\W]+>)(\s+<\/Content>)");
Регексп = Новый РегулярноеВыражение(ПоискДочерних);
Регексп.ИгнорироватьРегистр = Истина;
Регексп.Многострочный = Истина;
Возврат Регексп;
КонецФункции
Функция РегекспМетаданные(ЭтоЕДТ)
ШаблонНачало = ?(ЭтоЕДТ, "^\s*<[\w]+>", "^\s+<[\w:\s=""]+>");
ШаблонИмяМетаданных = "([a-zA-Z]+)((?:\.(?:[а-яa-zA-ZА-Я0-9_]+))+)";
ШаблонУИД = "(([a-zA-z0-9\-]+))";
ПоискМетаданных = СтрШаблон("%1(?:%2|%3)<\/[\w:]+>", ШаблонНачало, ШаблонУИД, ШаблонИмяМетаданных);
Регексп = Новый РегулярноеВыражение(ПоискМетаданных);
Регексп.ИгнорироватьРегистр = Истина;
Регексп.Многострочный = Истина;
Возврат Регексп;
КонецФункции

View File

@ -25,6 +25,7 @@
<xr:Item xsi:type="xr:MDObjectRef">4308b2f2-9e92-486e-8c34-13c11fd5fb49</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Enum.Енум7</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Enum.Енум6</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">ExternalDataSource.ТекущаяСУБД.Table.ИнформацияОбОшибках</xr:Item>
</Content>
</Properties>
<ChildObjects>

View File

@ -14,5 +14,6 @@
<content>CommonModule.УведомленияПереопределяемый</content>
<content>Catalog.ВидыУведомлений</content>
<content>CommonModule.УведомленияСерверПовтИсп</content>
<content>ExternalDataSource.ТекущаяСУБД.Table.ИнформацияОбОшибках</content>
<parentSubsystem>Subsystem.ПодсистемыБСП.Subsystem.ОбменСообщениями</parentSubsystem>
</mdclass:Subsystem>

View File

@ -3,6 +3,7 @@
#Использовать logos
#Использовать tempfiles
#Использовать fs
#Использовать ".."
Перем юТест;
Перем Лог;
@ -102,7 +103,7 @@
Ожидаем.Что(Результат, Истина).ЭтоИстина();
ТекстПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
Ожидаем.Что(ТекстДо, Истина).Не_().Равно(ТекстПосле);
Ожидаем.Что(СтрЧислоСтрок(ТекстДо), Истина).Равно(СтрЧислоСтрок(ТекстПосле));
ИмяФайла = "СортировкаОбъектовВПодсистемах/УведомленияПриИзмененииОбъектов.mdo";
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла, "УведомленияПриИзмененииОбъектов.mdo", "Subsystems");
@ -111,6 +112,7 @@
Ожидаем.Что(Результат, Истина).ЭтоИстина();
ТекстПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
Ожидаем.Что(ТекстДо, Истина).Не_().Равно(ТекстПосле);
Ожидаем.Что(СтрЧислоСтрок(ТекстДо), Истина).Равно(СтрЧислоСтрок(ТекстПосле));
ИмяФайла = "СортировкаОбъектовВПодсистемах/ОбменСообщениями.mdo";
Файл = ПодготовитьИзменяемыйТестовыйФайл(ИмяФайла, "ОбменСообщениями.mdo", "Subsystems");
@ -120,7 +122,7 @@
Ожидаем.Что(Результат, Истина).ЭтоИстина();
ТекстПосле = ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя);
Ожидаем.Что(ТекстДо, Истина).Равно(ТекстПосле);
Ожидаем.Что(СтрЧислоСтрок(ТекстДо), Истина).Равно(СтрЧислоСтрок(ТекстПосле));
КонецПроцедуры