1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2024-11-24 08:32:25 +02:00

#ORAIS-902

Новый сценарий "Сортировка состава ФО"
This commit is contained in:
Berlinskiy Nikolay 2023-06-09 16:28:50 +03:00
parent 043d58edd8
commit 89d63e02e3
13 changed files with 243 additions and 5 deletions

View File

@ -51,6 +51,7 @@
- `СортировкаДереваМетаданных` - упорядочивает объекты метаданных верхнего уровня по алфавиту в файле описания конфигурации (кроме подсистем), удаляет дубли. Помещает объекты с префиксом в низ списка, если настроено. Поддерживается как файл в формате выгрузки конфигуратора (`Configuration.xml`), так и в формате EDT (`Configuration.mdo`).
- `СортировкаСоставаОпределяемыхТипов` - сортирует состав определяемых типов. [См. подробнее](/docs/СортировкаСоставаОпределяемыхТипов.md)
- `СортировкаСоставаПодсистем` - сортирует состав подсистем. [См. подробнее](/docs/СортировкаСоставаПодсистем.md)
- `СортировкаСоставаФункциональныхОпций` - сортирует состав функциональных опций. [См. подробнее](/docs/СортировкаСоставаФункциональныхОпций.md)
- `УдалениеДублейМетаданных` - удаляет дубли объектов метаданных в файле описания конфигурации (могут образоваться при объединениях). Поддерживается как файл в формате выгрузки конфигуратора (`Configuration.xml`), так и в формате EDT (`Configuration.mdo`)..
- `УдалениеЛишнихКонцевыхПробелов` - удаляет лишние пробелы и табы в конце не пустых строк в файлах модулей.
- `УдалениеЛишнихПустыхСтрок` - удаляет лишние пустые строки в модулях (лишними считаются 2 и более идущих подряд пустых строк).

View File

@ -0,0 +1,22 @@
# Сценарий `СортировкаСоставаФункциональныхОпций`
Упорядочивает объекты состава по алфавиту в файлах описаний функциональных опций, удаляет дубли и битые ссылки. Помещает объекты с префиксами в конец списка, если настроено. Поддерживаются как файлы в формате выгрузки конфигуратора, так и в формате EDT.
Пример настройки:
```JSON
{
"Precommt4onecСценарии": {
"НастройкиСценариев": {
"СортировкаСоставаФункциональныхОпций": {
"УчитываяПрефикс": [
"ИР_",
"БСП_"
]
}
}
}
}
```
Значение `УчитываяПрефикс` может быть массивом или строкой, содержащей один или несколько префиксов, разделенных запятыми. Между собой префиксы сортируются в порядке следования в настройке.

View File

@ -42,6 +42,7 @@ y
y
y
y
y
local
n
"""
@ -70,6 +71,7 @@ n
"СортировкаДереваМетаданных.os",
"СортировкаСоставаОпределяемыхТипов.os",
"СортировкаСоставаПодсистем.os",
"СортировкаСоставаФункциональныхОпций.os",
"УдалениеДублейМетаданных.os",
"УдалениеЛишнихКонцевыхПробелов.os",
"УдалениеЛишнихПустыхСтрок.os"

View File

@ -40,7 +40,7 @@
Установленные настройки: Базовые настройки
ИспользоватьСценарииРепозитория = Нет
КаталогЛокальныхСценариев =
ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.os,ЗапретИспользованияПерейти.os,ИсправлениеНеКаноническогоНаписания.os,КорректировкаXMLФорм.os,ОбработкаЮнитТестов.os,ОтключениеПолнотекстовогоПоиска.os,ОтключениеРазрешенияИзменятьФорму.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиИнструкцийПрепроцессора.os,ПроверкаКорректностиОбластей.os,ПроверкаНецензурныхСлов.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаДереваМетаданных.os,СортировкаСоставаОпределяемыхТипов.os,СортировкаСоставаПодсистем.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os
ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.os,ЗапретИспользованияПерейти.os,ИсправлениеНеКаноническогоНаписания.os,КорректировкаXMLФорм.os,ОбработкаЮнитТестов.os,ОтключениеПолнотекстовогоПоиска.os,ОтключениеРазрешенияИзменятьФорму.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиИнструкцийПрепроцессора.os,ПроверкаКорректностиОбластей.os,ПроверкаНецензурныхСлов.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаДереваМетаданных.os,СортировкаСоставаОпределяемыхТипов.os,СортировкаСоставаПодсистем.os,СортировкаСоставаФункциональныхОпций.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os
ОтключенныеСценарии =
НастройкиСценариев = Соответствие
ОтключениеПолнотекстовогоПоиска = Соответствие

View File

@ -244,6 +244,34 @@
КонецФункции
// ЭтоФайлОписанияФункциональнойОпции
// Возвращает истину, если файл является описанием функциональной опции
// Параметры:
// Файл - Файл - Полный путь к файлу
//
// Возвращаемое значение:
// Булево - Признак
//
Функция ЭтоФайлОписанияФункциональнойОпции(Файл) Экспорт
Возврат ЭтоФайлОписанияМетаданныхКонфигуратора(Файл) И ПутьСодержитКаталог(Файл, "functionaloptions");
КонецФункции
// ЭтоФайлОписанияФункциональнойОпцииEDT
// Возвращает истину, если файл является описанием функциональной опции в формате EDT
// Параметры:
// Файл - Файл - Полный путь к файлу
//
// Возвращаемое значение:
// Булево - Признак
//
Функция ЭтоФайлОписанияФункциональнойОпцииEDT(Файл) Экспорт
Возврат ЭтоФайлОписанияМетаданныхEDT(Файл) И ПутьСодержитКаталог(Файл, "functionaloptions");
КонецФункции
// ЭтоМодульМенеджера
// Возвращает истину, если файл является модулем менеджера
// Параметры:

View File

@ -0,0 +1,89 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией сценария обработки файла <СортировкаСоставаФункциональныхОпций>
//
///////////////////////////////////////////////////////////////////////////////
// ИмяСценария
// Возвращает имя сценария обработки файлов
//
// Возвращаемое значение:
// Строка - Имя текущего сценария обработки файлов
//
Функция ИмяСценария() Экспорт
Возврат "СортировкаСоставаФункциональныхОпций";
КонецФункции // ИмяСценария()
// ОбработатьФайл
// Выполняет обработку файла
//
// Параметры:
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать
//
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
//
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.Настройки.Получить(ИмяСценария());
УчитываяПрефикс = НастройкиСценария.Получить("УчитываяПрефикс");
ФайлОбработан = Ложь;
Если АнализируемыйФайл.Существует() Тогда
ЭтоФункциональнаяОпцияЕДТ = ТипыФайлов.ЭтоФайлОписанияФункциональнойОпцииEDT(АнализируемыйФайл);
Если ЭтоФункциональнаяОпцияЕДТ Или ТипыФайлов.ЭтоФайлОписанияФункциональнойОпции(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
ФайлОбработан = ОтсортироватьФункциональнуюОпцию(АнализируемыйФайл.ПолноеИмя, ЭтоФункциональнаяОпцияЕДТ, УчитываяПрефикс);
Если ФайлОбработан Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат ФайлОбработан;
КонецФункции // ОбработатьФайл()
Функция ОтсортироватьФункциональнуюОпцию(Знач ИмяФайла, ЭтоЕДТ, УчитываяПрефикс)
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
ВыполненаСортировка = Ложь;
Если ЭтоЕДТ Тогда
ИмяТега = "content";
РазделительЭлементов = Символы.ПС + " ";
ВыполненаСортировка = РегулярныеВыражения.СортироватьМассивТеговСостава(
СодержимоеФайла, ИмяТега, РазделительЭлементов, УчитываяПрефикс);
Иначе
ИмяРодительскогоТега = "Content";
ОтступРодительскогоТега = " ";
РазделительЭлементов = Символы.ПС + " ";
ВыполненаСортировка = РегулярныеВыражения.СортироватьВложенныйМассивТеговСостава(
СодержимоеФайла, ИмяРодительскогоТега, ОтступРодительскогоТега, РазделительЭлементов, УчитываяПрефикс);
КонецЕсли;
Если ВыполненаСортировка Тогда
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:FunctionalOption xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1561bc6b-15c1-4bb7-8950-c026f08554e2">
<name>ИнтегрироватьETL</name>
<synonym>
<key>ru</key>
<value>Интегрировать ETL</value>
</synonym>
<comment>Управляет механизмом интеграции с ETL</comment>
<location>Constant.ИнтегрироватьETL</location>
<privilegedGetMode>true</privilegedGetMode>
<content>Subsystem.ПодсистемыБСП.Subsystem.Интеграция.Subsystem.ETL</content>
<content>ExchangePlan.ИзмененияETL</content>
<content>InformationRegister.ЛогВыгрузкиДанныхETL</content>
</mdclass:FunctionalOption>

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<FunctionalOption uuid="7b89c258-d9e8-4dc6-b496-0534fc4f2575">
<Properties>
<Name>ИспользоватьВалюты</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Использовать валюты</v8:content>
</v8:item>
</Synonym>
<Comment>Управляет использованием валютами</Comment>
<Location>Constant.ИспользоватьВалюты</Location>
<PrivilegedGetMode>true</PrivilegedGetMode>
<Content>
<xr:Object>InformationRegister.КурсыВалют</xr:Object>
<xr:Object>DataProcessor.ЗагрузкаКурсовВалют</xr:Object>
<xr:Object>Catalog.Валюты</xr:Object>
<xr:Object>Catalog.Валюты.Command.ИсторияКурсов</xr:Object>
<xr:Object>Catalog.Валюты.Command.ОткрытьФормуСписка</xr:Object>
<xr:Object>DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют</xr:Object>
<xr:Object>DataProcessor.ЗагрузкаКурсовВалют.Attribute.ОкончаниеПериодаЗагрузки</xr:Object>
<xr:Object>DataProcessor.ЗагрузкаКурсовВалют.Attribute.НачалоПериодаЗагрузки</xr:Object>
<xr:Object>DataProcessor.ЗагрузкаКурсовВалют.Command.ЗагрузкаКурсовВалют</xr:Object>
<xr:Object>Constant.ЗагружатьКурсыВалютССервера1С</xr:Object>
</Content>
</Properties>
</FunctionalOption>
</MetaDataObject>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:FunctionalOption xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1561bc6b-15c1-4bb7-8950-c026f08554e2">
<name>ИнтегрироватьETL</name>
<synonym>
<key>ru</key>
<value>Интегрировать ETL</value>
</synonym>
<comment>Управляет механизмом интеграции с ETL</comment>
<location>Constant.ИнтегрироватьETL</location>
<privilegedGetMode>true</privilegedGetMode>
<content>ExchangePlan.ИзмененияETL</content>
<content>InformationRegister.ЛогВыгрузкиДанныхETL</content>
<content>Subsystem.ПодсистемыБСП.Subsystem.Интеграция.Subsystem.ETL</content>
</mdclass:FunctionalOption>

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<FunctionalOption uuid="7b89c258-d9e8-4dc6-b496-0534fc4f2575">
<Properties>
<Name>ИспользоватьВалюты</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Использовать валюты</v8:content>
</v8:item>
</Synonym>
<Comment>Управляет использованием валютами</Comment>
<Location>Constant.ИспользоватьВалюты</Location>
<PrivilegedGetMode>true</PrivilegedGetMode>
<Content>
<xr:Object>Catalog.Валюты.Command.ИсторияКурсов</xr:Object>
<xr:Object>Catalog.Валюты.Command.ОткрытьФормуСписка</xr:Object>
<xr:Object>Catalog.Валюты</xr:Object>
<xr:Object>Constant.ЗагружатьКурсыВалютССервера1С</xr:Object>
<xr:Object>DataProcessor.ЗагрузкаКурсовВалют.Attribute.НачалоПериодаЗагрузки</xr:Object>
<xr:Object>DataProcessor.ЗагрузкаКурсовВалют.Attribute.ОкончаниеПериодаЗагрузки</xr:Object>
<xr:Object>DataProcessor.ЗагрузкаКурсовВалют.Command.ЗагрузкаКурсовВалют</xr:Object>
<xr:Object>DataProcessor.ЗагрузкаКурсовВалют.TabularSection.СписокВалют</xr:Object>
<xr:Object>DataProcessor.ЗагрузкаКурсовВалют</xr:Object>
<xr:Object>InformationRegister.КурсыВалют</xr:Object>
</Content>
</Properties>
</FunctionalOption>
</MetaDataObject>

View File

@ -103,6 +103,7 @@
ОжидаемыеСценарии.Добавить("СортировкаДереваМетаданных.os");
ОжидаемыеСценарии.Добавить("СортировкаСоставаОпределяемыхТипов.os");
ОжидаемыеСценарии.Добавить("СортировкаСоставаПодсистем.os");
ОжидаемыеСценарии.Добавить("СортировкаСоставаФункциональныхОпций.os");
ИменаЗагружаемыхСценариев = МенеджерНастроек.ИменаЗагружаемыхСценариев();

View File

@ -22,6 +22,7 @@
ВсеТесты.Добавить("ТестДолжен_ПроверитьСортировкуСоставаМетаданных");
ВсеТесты.Добавить("ТестДолжен_ПроверитьСценарийСортировкаСоставаПодсистем");
ВсеТесты.Добавить("ТестДолжен_ПроверитьСценарийСортировкаСоставаОпределяемыхТипов");
ВсеТесты.Добавить("ТестДолжен_ПроверитьСценарийСортировкаСоставаФункциональныхОпций");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл");
@ -99,6 +100,13 @@
КонецПроцедуры
Процедура ТестДолжен_ПроверитьСценарийСортировкаСоставаФункциональныхОпций() Экспорт
ИмяСценария = "СортировкаСоставаФункциональныхОпций";
ПроверитьОбработкуФайлов(ИмяСценария, "FunctionalOptions");
КонецПроцедуры
Процедура ПроверитьОбработкуФайлов(ИмяСценария, ПодкаталогИсходников)
ОбъектСценария = ПолучитьСценарий(ИмяСценария);

View File

@ -20,6 +20,7 @@
"СортировкаДереваМетаданных.os",
"СортировкаСоставаОпределяемыхТипов.os",
"СортировкаСоставаПодсистем.os",
"СортировкаСоставаФункциональныхОпций.os",
"УдалениеДублейМетаданных.os",
"УдалениеЛишнихКонцевыхПробелов.os",
"УдалениеЛишнихПустыхСтрок.os"