From 80f24b13b7f5f54031466e97ace1379d9a7a8330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=97=D0=B0=D0=B7=D1=83=D0=BB=D0=BE=D0=B2=20=D0=90=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=90=D0=BB=D0=B5=D0=BA=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D0=B4=D1=80=D0=BE=D0=B2=D0=B8=D1=87=20=28=D0=97?= =?UTF-8?q?=D0=9A-0001393=29?= Date: Mon, 16 Dec 2024 07:13:37 +0300 Subject: [PATCH] =?UTF-8?q?ORAIS-1870:=20=D0=9D=D0=BE=D0=B2=D1=8B=D0=B9=20?= =?UTF-8?q?=D1=81=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8=D0=B9=20"=D0=A1?= =?UTF-8?q?=D0=BE=D1=80=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D1=81?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B0=D0=B2=D0=B0=20=D0=BE=D0=B1=D1=89=D0=B8?= =?UTF-8?q?=D1=85=20=D1=80=D0=B5=D0=BA=D0=B2=D0=B8=D0=B7=D0=B8=D1=82=D0=BE?= =?UTF-8?q?=D0=B2".?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/СортировкаСостава.md | 2 + src/Классы/НастройкиСортировкиСостава.os | 10 ++-- src/Модули/ТипыОбъектовДляСортировки.os | 12 +++-- src/Модули/ТипыФайлов.os | 12 +++++ src/СценарииОбработки/СортировкаСостава.os | 30 +++++++++-- .../CommonAttributes/Configuration/До/Реквизит.mdo | 36 +++++++++++++ .../CommonAttributes/Configuration/До/Реквизит.xml | 50 +++++++++++++++++++ .../CommonAttributes/Configuration/После/Реквизит.mdo | 36 +++++++++++++ .../CommonAttributes/Configuration/После/Реквизит.xml | 50 +++++++++++++++++++ .../CommonAttributes/Ext/До/Реквизит.mdo | 35 +++++++++++++ .../CommonAttributes/Ext/До/Реквизит.xml | 42 ++++++++++++++++ .../CommonAttributes/Ext/После/Реквизит.mdo | 35 +++++++++++++ .../CommonAttributes/Ext/После/Реквизит.xml | 42 ++++++++++++++++ tests/ТестПроверкаСценариевОбработки.os | 6 +++ 14 files changed, 385 insertions(+), 13 deletions(-) create mode 100644 tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/До/Реквизит.mdo create mode 100644 tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/До/Реквизит.xml create mode 100644 tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/После/Реквизит.mdo create mode 100644 tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/После/Реквизит.xml create mode 100644 tests/fixtures/СортировкаСостава/CommonAttributes/Ext/До/Реквизит.mdo create mode 100644 tests/fixtures/СортировкаСостава/CommonAttributes/Ext/До/Реквизит.xml create mode 100644 tests/fixtures/СортировкаСостава/CommonAttributes/Ext/После/Реквизит.mdo create mode 100644 tests/fixtures/СортировкаСостава/CommonAttributes/Ext/После/Реквизит.xml diff --git a/docs/СортировкаСостава.md b/docs/СортировкаСостава.md index 485a0b1..7d53fba 100644 --- a/docs/СортировкаСостава.md +++ b/docs/СортировкаСостава.md @@ -8,6 +8,7 @@ - Конфигурации (все объекты верхнего уровня, кроме языков и подсистем) - Определяемых типов +- Общих реквизитов - Планов обмена - Функциональных опций - Подсистем @@ -26,6 +27,7 @@ "ОтключенныеОбъекты": [ "Конфигурация", "ОпределяемыйТип", + "ОбщийРеквизит", "ПланОбмена", "ФункциональнаяОпция", "Подсистема" diff --git a/src/Классы/НастройкиСортировкиСостава.os b/src/Классы/НастройкиСортировкиСостава.os index 67bf18c..3811986 100644 --- a/src/Классы/НастройкиСортировкиСостава.os +++ b/src/Классы/НастройкиСортировкиСостава.os @@ -11,7 +11,7 @@ Перем ЕДТ; // Признак формата ЕДТ содержимого Перем Заимствованный; // Признак отношения файла к расширению и заимствованности из основной конфигурации Перем Сценарии; // Сценарии обработки файла -Перем Пустой; // Признак отсутствия настроек +Перем Пустой; // Признак отсутствия настроек // Конструктор создания на основании анализируемого файла Процедура ПриСозданииОбъекта(АнализируемыйФайл) @@ -41,6 +41,7 @@ КонецФункции Процедура ДобавитьСценарий(НастройкиСценария) Экспорт + ТекстАтрибутов = ?(НастройкиСценария.САтрибутами(), "[^>]*", ""); // 1-я группа: состав объектов ШаблонПоискаСостава = ""; @@ -49,15 +50,14 @@ ШаблонПоискаСостава = "\s*()[ \t]*\n*"; ИначеЕсли НастройкиСценария.ЕстьРодительскийЭлемент() Тогда РодительскийЭлемент = НастройкиСценария.РодительскийЭлемент(); - ШаблонПоискаСостава = СтрШаблон("\s*<%1>([\w\W]*?)<\/%2>[ \t]*\n*", - РодительскийЭлемент.Имя, РодительскийЭлемент.Завершение); + ШаблонПоискаСостава = СтрШаблон("\s*<%1%2>([\w\W]*?)<\/%3>[ \t]*\n*", + РодительскийЭлемент.Имя, ТекстАтрибутов, РодительскийЭлемент.Завершение); Иначе - ШаблонПоискаСостава = СтрШаблон("\s*(<%1>[\w\W]*<\/%1>)[ \t]*\n*", НастройкиСценария.ИмяЭлемента()); + ШаблонПоискаСостава = СтрШаблон("\s*(<%1%2>[\w\W]*<\/%1>)[ \t]*\n*", НастройкиСценария.ИмяЭлемента(), ТекстАтрибутов); КонецЕсли; // 1-я группа: имя объекта состава ШаблонПоискаЭлементов = ""; - ТекстАтрибутов = ?(НастройкиСценария.САтрибутами(), "\s+[^>]+", ""); Если НастройкиСценария.ЕстьВложенный() Тогда ШаблонПоискаЭлементов = СтрШаблон( // BSLLS:NestedFunctionInParameters-off используются геттеры "<%1%2>[\w\W]*?<%3>([^<]*?)<\/%3>[\w\W]*?<\/%1>", diff --git a/src/Модули/ТипыОбъектовДляСортировки.os b/src/Модули/ТипыОбъектовДляСортировки.os index f3c6491..3880f82 100644 --- a/src/Модули/ТипыОбъектовДляСортировки.os +++ b/src/Модули/ТипыОбъектовДляСортировки.os @@ -10,6 +10,7 @@ Перем Конфигурация Экспорт; Перем ОпределяемыйТип Экспорт; +Перем ОбщийРеквизит Экспорт; Перем ПланОбмена Экспорт; Перем ФункциональнаяОпция Экспорт; Перем Подсистема Экспорт; @@ -24,22 +25,24 @@ Если ЭтоЕДТ Или ТипыФайлов.ЭтоФайлОписанияКонфигурации(АнализируемыйФайл) Тогда Описание.Тип = Конфигурация; Описание.ЕДТ = ЭтоЕДТ; - Описание.Заимствованный = ТипыФайлов.ЭтоФайлЗаимствованногоОбъектаРасширения(АнализируемыйФайл); ИначеЕсли ТипыФайлов.ЭтоФайлОписанияОпределяемогоТипа(АнализируемыйФайл) Тогда Описание.Тип = ОпределяемыйТип; Описание.ЕДТ = ТипыФайлов.ЭтоФайлОписанияОпределяемогоТипаEDT(АнализируемыйФайл); - Описание.Заимствованный = ТипыФайлов.ЭтоФайлЗаимствованногоОбъектаРасширения(АнализируемыйФайл); ИначеЕсли ТипыФайлов.ЭтоФайлОписанияПланаОбмена(АнализируемыйФайл) Тогда Описание.Тип = ПланОбмена; Описание.ЕДТ = ТипыФайлов.ЭтоФайлОписанияПланаОбменаEDT(АнализируемыйФайл); - Описание.Заимствованный = ТипыФайлов.ЭтоФайлЗаимствованногоОбъектаРасширения(АнализируемыйФайл); ИначеЕсли ТипыФайлов.ЭтоФайлОписанияФункциональнойОпции(АнализируемыйФайл) Тогда Описание.Тип = ФункциональнаяОпция; Описание.ЕДТ = ТипыФайлов.ЭтоФайлОписанияФункциональнойОпцииEDT(АнализируемыйФайл); - Описание.Заимствованный = ТипыФайлов.ЭтоФайлЗаимствованногоОбъектаРасширения(АнализируемыйФайл); ИначеЕсли ТипыФайлов.ЭтоФайлОписанияПодсистемы(АнализируемыйФайл) Тогда Описание.Тип = Подсистема; Описание.ЕДТ = ТипыФайлов.ЭтоФайлОписанияПодсистемыEDT(АнализируемыйФайл); + ИначеЕсли ТипыФайлов.ЭтоФайлОписанияОбщегоРеквизита(АнализируемыйФайл) Тогда + Описание.Тип = ОбщийРеквизит; + Описание.ЕДТ = ТипыФайлов.ЭтоФайлОписанияОбщегоРеквизитаEDT(АнализируемыйФайл); + КонецЕсли; + + Если Описание.Тип <> Неизвестный Тогда Описание.Заимствованный = ТипыФайлов.ЭтоФайлЗаимствованногоОбъектаРасширения(АнализируемыйФайл); КонецЕсли; @@ -48,6 +51,7 @@ Конфигурация = "Конфигурация"; ОпределяемыйТип = "ОпределяемыйТип"; +ОбщийРеквизит = "ОбщийРеквизит"; ПланОбмена = "ПланОбмена"; ФункциональнаяОпция = "ФункциональнаяОпция"; Подсистема = "Подсистема"; diff --git a/src/Модули/ТипыФайлов.os b/src/Модули/ТипыФайлов.os index c0bbccd..59b0338 100644 --- a/src/Модули/ТипыФайлов.os +++ b/src/Модули/ТипыФайлов.os @@ -235,6 +235,18 @@ Возврат ЭтоФайлОписанияМетаданныхEDT(Файл) И ПутьСодержитКаталог(Файл, "definedtypes"); КонецФункции +Функция ЭтоФайлОписанияОбщегоРеквизита(Файл) Экспорт + Возврат ЭтоФайлОписанияОбщегоРеквизитаКонфигуратора(Файл) Или ЭтоФайлОписанияОбщегоРеквизитаEDT(Файл); +КонецФункции + +Функция ЭтоФайлОписанияОбщегоРеквизитаКонфигуратора(Файл) Экспорт + Возврат ЭтоФайлОписанияМетаданныхКонфигуратора(Файл) И ПутьСодержитКаталог(Файл, "commonattributes"); +КонецФункции + +Функция ЭтоФайлОписанияОбщегоРеквизитаEDT(Файл) Экспорт + Возврат ЭтоФайлОписанияМетаданныхEDT(Файл) И ПутьСодержитКаталог(Файл, "commonattributes"); +КонецФункции + Функция ЭтоФайлОписанияПланаОбмена(Файл) Экспорт Возврат ЭтоФайлОписанияПланаОбменаКонфигуратора(Файл) Или ЭтоФайлОписанияПланаОбменаEDT(Файл); КонецФункции diff --git a/src/СценарииОбработки/СортировкаСостава.os b/src/СценарииОбработки/СортировкаСостава.os index 7c69722..803b5d5 100644 --- a/src/СценарииОбработки/СортировкаСостава.os +++ b/src/СценарииОбработки/СортировкаСостава.os @@ -73,6 +73,7 @@ ПрефиксыСортировки = ПрефиксыСортировки(НастройкиСценария); НесортируемыеТипыМетаданных = НесортируемыеТипыМетаданных(); КонецЕсли; + Возврат НастройкиСортировкиСостава; КонецФункции @@ -87,6 +88,8 @@ УстановитьУсловияОбработкиФайлаОпределяемыйТип(НастройкиСортировки); ИначеЕсли НастройкиСортировки.Тип = ТипыОбъектовДляСортировки.ПланОбмена Тогда УстановитьУсловияОбработкиФайлаПланОбмена(НастройкиСортировки); + ИначеЕсли НастройкиСортировки.Тип = ТипыОбъектовДляСортировки.ОбщийРеквизит Тогда + УстановитьУсловияОбработкиФайлаОбщийРеквизит(НастройкиСортировки); Иначе ВызватьИсключение "Неизвестный тип для сортировки"; КонецЕсли; @@ -160,6 +163,29 @@ КонецЕсли; КонецПроцедуры +Процедура УстановитьУсловияОбработкиФайлаОбщийРеквизит(НастройкиСортировки) + Если НастройкиСортировки.ЕДТ() Тогда + Если НастройкиСортировки.Заимствованный() Тогда + НастройкаСценарияСортировкиСостава = Новый НастройкаСценарияСортировкиСостава("extension"); + НастройкаСценарияСортировкиСостава.УстановитьЕстьАтрибуты(); + НастройкаСценарияСортировкиСостава.УстановитьРазделительЭлементов(" "); + НастройкаСценарияСортировкиСостава.УстановитьИмяВложенного("content"); + НастройкиСортировки.ДобавитьСценарий(НастройкаСценарияСортировкиСостава); + КонецЕсли; + + НастройкаСценарияСортировкиСостава = Новый НастройкаСценарияСортировкиСостава("content"); + НастройкаСценарияСортировкиСостава.УстановитьРазделительЭлементов(" "); + НастройкаСценарияСортировкиСостава.УстановитьИмяВложенного("metadata"); + НастройкиСортировки.ДобавитьСценарий(НастройкаСценарияСортировкиСостава); + Иначе + НастройкаСценарияСортировкиСостава = Новый НастройкаСценарияСортировкиСостава("xr:Item"); + НастройкаСценарияСортировкиСостава.УстановитьРодительскийЭлемент("Content", " "); + НастройкаСценарияСортировкиСостава.УстановитьРазделительЭлементов(" "); + НастройкаСценарияСортировкиСостава.УстановитьИмяВложенного("xr:Metadata"); + НастройкиСортировки.ДобавитьСценарий(НастройкаСценарияСортировкиСостава); + КонецЕсли; +КонецПроцедуры + Процедура УстановитьУсловияОбработкиФайлаПланОбмена(НастройкиСортировки) Если НастройкиСортировки.ЕДТ() Тогда Если НастройкиСортировки.Заимствованный() Тогда @@ -203,13 +229,11 @@ ЗначениеНастройки = НастройкиСценария.Получить(ИмяНастройки); Если ЗначениеЗаполнено(ЗначениеНастройки) Тогда - Если ТипЗнч(ЗначениеНастройки) <> Тип("Массив") Тогда ЗначениеНастройки = СтрРазделить(Строка(ЗначениеНастройки), ",", Ложь); КонецЕсли; Для Каждого Элемент Из ЗначениеНастройки Цикл - Если Не ЗначениеЗаполнено(Элемент) Тогда Продолжить; КонецЕсли; @@ -223,9 +247,7 @@ КонецЕсли; Результат.Добавить(Элемент); - КонецЦикла; - КонецЕсли; Возврат Результат; diff --git a/tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/До/Реквизит.mdo b/tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/До/Реквизит.mdo new file mode 100644 index 0000000..461cfab --- /dev/null +++ b/tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/До/Реквизит.mdo @@ -0,0 +1,36 @@ + + + Реквизит + + ru + Реквизит + + + CatalogRef.Пользователи + + + + InformationRegister.УчетФН + Use + + + Catalog.СертификатыЭП + Use + + + Catalog.Должности + Use + + + InformationRegister.РасширенныеНастройкиРегламентныхЗаданий + DontUse + + + Document.ЧекККМ + Use + + DontUse + DontUse + DontUse + DontUse + diff --git a/tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/До/Реквизит.xml b/tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/До/Реквизит.xml new file mode 100644 index 0000000..f93650c --- /dev/null +++ b/tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/До/Реквизит.xml @@ -0,0 +1,50 @@ + + + + + Реквизит + + + ru + Реквизит + + + + + cfg:CatalogRef.Пользователи + + + DontCheck + + + InformationRegister.УчетФН + Use + + + + Catalog.СертификатыЭП + Use + + + + Catalog.Должности + Use + + + + InformationRegister.РасширенныеНастройкиРегламентныхЗаданий + DontUse + + + + Document.ЧекККМ + Use + + + + DontUse + DontUse + Independently + + + \ No newline at end of file diff --git a/tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/После/Реквизит.mdo b/tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/После/Реквизит.mdo new file mode 100644 index 0000000..2823181 --- /dev/null +++ b/tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/После/Реквизит.mdo @@ -0,0 +1,36 @@ + + + Реквизит + + ru + Реквизит + + + CatalogRef.Пользователи + + + + Catalog.Должности + Use + + + Catalog.СертификатыЭП + Use + + + Document.ЧекККМ + Use + + + InformationRegister.РасширенныеНастройкиРегламентныхЗаданий + DontUse + + + InformationRegister.УчетФН + Use + + DontUse + DontUse + DontUse + DontUse + diff --git a/tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/После/Реквизит.xml b/tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/После/Реквизит.xml new file mode 100644 index 0000000..e521b74 --- /dev/null +++ b/tests/fixtures/СортировкаСостава/CommonAttributes/Configuration/После/Реквизит.xml @@ -0,0 +1,50 @@ + + + + + Реквизит + + + ru + Реквизит + + + + + cfg:CatalogRef.Пользователи + + + DontCheck + + + Catalog.Должности + Use + + + + Catalog.СертификатыЭП + Use + + + + Document.ЧекККМ + Use + + + + InformationRegister.РасширенныеНастройкиРегламентныхЗаданий + DontUse + + + + InformationRegister.УчетФН + Use + + + + DontUse + DontUse + Independently + + + \ No newline at end of file diff --git a/tests/fixtures/СортировкаСостава/CommonAttributes/Ext/До/Реквизит.mdo b/tests/fixtures/СортировкаСостава/CommonAttributes/Ext/До/Реквизит.mdo new file mode 100644 index 0000000..0afc7b0 --- /dev/null +++ b/tests/fixtures/СортировкаСостава/CommonAttributes/Ext/До/Реквизит.mdo @@ -0,0 +1,35 @@ + + + Реквизит + Adopted + + Checked + + + Checked + CatalogRef.Пользователи + + + Checked + + + InformationRegister.УчетФН + Use + + + Catalog.СертификатыЭП + Use + + + Catalog.Должности + Use + + + InformationRegister.РасширенныеНастройкиРегламентныхЗаданий + DontUse + + + Document.ЧекККМ + Use + + diff --git a/tests/fixtures/СортировкаСостава/CommonAttributes/Ext/До/Реквизит.xml b/tests/fixtures/СортировкаСостава/CommonAttributes/Ext/До/Реквизит.xml new file mode 100644 index 0000000..303983d --- /dev/null +++ b/tests/fixtures/СортировкаСостава/CommonAttributes/Ext/До/Реквизит.xml @@ -0,0 +1,42 @@ + + + + + + Реквизит + + Adopted + f6342b71-f550-435c-843b-e197aff119f0 + + cfg:CatalogRef.Пользователи + + + + InformationRegister.УчетФН + Use + + + + Catalog.СертификатыЭП + Use + + + + Catalog.Должности + Use + + + + InformationRegister.РасширенныеНастройкиРегламентныхЗаданий + DontUse + + + + Document.ЧекККМ + Use + + + + + + \ No newline at end of file diff --git a/tests/fixtures/СортировкаСостава/CommonAttributes/Ext/После/Реквизит.mdo b/tests/fixtures/СортировкаСостава/CommonAttributes/Ext/После/Реквизит.mdo new file mode 100644 index 0000000..9fdc587 --- /dev/null +++ b/tests/fixtures/СортировкаСостава/CommonAttributes/Ext/После/Реквизит.mdo @@ -0,0 +1,35 @@ + + + Реквизит + Adopted + + Checked + + + Checked + CatalogRef.Пользователи + + + Checked + + + Catalog.Должности + Use + + + Catalog.СертификатыЭП + Use + + + Document.ЧекККМ + Use + + + InformationRegister.РасширенныеНастройкиРегламентныхЗаданий + DontUse + + + InformationRegister.УчетФН + Use + + diff --git a/tests/fixtures/СортировкаСостава/CommonAttributes/Ext/После/Реквизит.xml b/tests/fixtures/СортировкаСостава/CommonAttributes/Ext/После/Реквизит.xml new file mode 100644 index 0000000..2f47f2a --- /dev/null +++ b/tests/fixtures/СортировкаСостава/CommonAttributes/Ext/После/Реквизит.xml @@ -0,0 +1,42 @@ + + + + + + Реквизит + + Adopted + f6342b71-f550-435c-843b-e197aff119f0 + + cfg:CatalogRef.Пользователи + + + + Catalog.Должности + Use + + + + Catalog.СертификатыЭП + Use + + + + Document.ЧекККМ + Use + + + + InformationRegister.РасширенныеНастройкиРегламентныхЗаданий + DontUse + + + + InformationRegister.УчетФН + Use + + + + + + \ No newline at end of file diff --git a/tests/ТестПроверкаСценариевОбработки.os b/tests/ТестПроверкаСценариевОбработки.os index 7ffd342..982075f 100644 --- a/tests/ТестПроверкаСценариевОбработки.os +++ b/tests/ТестПроверкаСценариевОбработки.os @@ -23,6 +23,7 @@ ВсеТесты.Добавить("СортировкаСостава_ExchangePlans"); ВсеТесты.Добавить("СортировкаСостава_FunctionalOptions"); ВсеТесты.Добавить("СортировкаСостава_Subsystems"); + ВсеТесты.Добавить("СортировкаСостава_CommonAttributes"); ВсеТесты.Добавить("ТипыФайлов_ЗащищенныеМодулиНеОпределяютсяКакФайлИсходников"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСинхронизацияОбъектовМетаданныхВызываетИсключение"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение"); @@ -95,6 +96,11 @@ ПроверитьОбработкуФайлов("СортировкаСостава", "Subsystems\Ext"); КонецПроцедуры +Процедура СортировкаСостава_CommonAttributes() Экспорт + ПроверитьОбработкуФайлов("СортировкаСостава", "CommonAttributes\Configuration"); + ПроверитьОбработкуФайлов("СортировкаСостава", "CommonAttributes\Ext"); +КонецПроцедуры + Процедура ПроверитьОбработкуФайлов(ИмяСценария, ПодкаталогИсходников) ОбъектСценария = ПолучитьСценарий(ИмяСценария);