Skip to content

Commit

Permalink
Merge pull request #435 from bia-technologies/feature/415
Browse files Browse the repository at this point in the history
415 / Доработка получения типов из расширения
  • Loading branch information
alkoleft authored Nov 21, 2024
2 parents 1189797 + 91f0718 commit bd1cf5c
Show file tree
Hide file tree
Showing 5 changed files with 141 additions and 80 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

#Область СлужебныйПрограммныйИнтерфейс

#Область РаботаСРаширениями

// МодулиРасширений
// Выполняет чтение метаданных общих модулей, которые предположительно могут являться тестами
//
Expand All @@ -44,6 +46,55 @@

КонецФункции

Функция РасширенияСеанса() Экспорт

УстановитьПривилегированныйРежим(Истина);

Возврат РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансАктивные);

КонецФункции

Функция СсылочныеТипыРасширений() Экспорт

МассивТипов = Новый Массив;

СсылочныеКоллекции = СсылочныеКоллекции();
СобственныйОбъект = Метаданные.СвойстваОбъектов.ПринадлежностьОбъекта.Собственный;

Для Каждого Расширение Из РасширенияСеанса() Цикл

Если НЕ Расширение.ИзменяетСтруктуруДанных() Тогда
Продолжить;
КонецЕсли;

УстановитьБезопасныйРежим(Истина);
// Создание через тип не работает, ошибка - конструктор не найден
МетаданныеРасширения = Вычислить("Новый ОбъектМетаданныхКонфигурация(Расширение.ПолучитьДанные())");

Для Каждого ИмяКоллекции Из СсылочныеКоллекции Цикл

Коллекция = МетаданныеРасширения[ИмяКоллекции];
ИмяЭлемента = ЮТМетаданныеСлужебныйПовтИсп.ТипыМетаданных()[ИмяКоллекции].Имя;

Для Каждого ОбъектМетаданных Из Коллекция Цикл

Если ОбъектМетаданных.ПринадлежностьОбъекта = СобственныйОбъект Тогда
МассивТипов.Добавить(СтрШаблон("%1Ссылка.%2", ИмяЭлемента, ОбъектМетаданных.Имя));
КонецЕсли;

КонецЦикла;

КонецЦикла;

КонецЦикла;

ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);
Возврат ОписаниеТипов.Типы();

КонецФункции

#КонецОбласти

Функция ИменаМодулейДвижка() Экспорт

УстановитьПривилегированныйРежим(Истина);
Expand Down Expand Up @@ -258,6 +309,28 @@

КонецФункции

Функция ОписаниеТиповЛюбаяСсылкаПоМетаданным() Экспорт

МассивТипов = Новый Массив;

СсылочныеКоллекции = СсылочныеКоллекции();

Для Каждого ИмяКоллекции Из СсылочныеКоллекции Цикл

Коллекция = Метаданные[ИмяКоллекции];
ИмяЭлемента = ЮТМетаданныеСлужебныйПовтИсп.ТипыМетаданных()[ИмяКоллекции].Имя;

Для Каждого ОбъектМетаданных Из Коллекция Цикл

МассивТипов.Добавить(СтрШаблон("%1Ссылка.%2", ИмяЭлемента, ОбъектМетаданных.Имя));

КонецЦикла;

КонецЦикла;

Возврат Новый ОписаниеТипов(СтрСоединить(МассивТипов, ","));

КонецФункции
#КонецОбласти

#Область СлужебныеПроцедурыИФункции
Expand Down Expand Up @@ -422,4 +495,17 @@

КонецПроцедуры

Функция СсылочныеКоллекции()

Возврат ЮТКоллекции.ЗначениеВМассиве("Справочники",
"Документы",
"БизнесПроцессы",
"Задачи",
"ПланыСчетов",
"ПланыОбмена",
"ПланыВидовХарактеристик",
"ПланыВидовРасчета");

КонецФункции

#КонецОбласти
Original file line number Diff line number Diff line change
Expand Up @@ -24,68 +24,4 @@

КонецФункции

Функция СсылочныеТипыДобавляемыеРасширениями() Экспорт

СсылочныеТипы = Новый Массив;
ТипыОбъектовМетаданныхСсылочногоТипа = ТипыОбъектовМетаданныхСсылочногоТипа();

УстановитьПривилегированныйРежим(Истина);
РасширенияСеанса = РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансАктивные);

Для Каждого Расширение Из РасширенияСеанса Цикл

Если НЕ Расширение.ИзменяетСтруктуруДанных() Тогда
Продолжить;
КонецЕсли;

ОМДРасширения = Новый ОбъектМетаданныхКонфигурация(Расширение.ПолучитьДанные());

Для Каждого ТипОМД Из ТипыОбъектовМетаданныхСсылочногоТипа Цикл
ДополнитьТипы(СсылочныеТипы, ТипОМД, ОМДРасширения);
КонецЦикла;

КонецЦикла;

Возврат СсылочныеТипы;

КонецФункции

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура ДополнитьТипы(СсылочныеТипы, ТипОМД, ОМДРасширения)

ПринадлежностьОбъекта = Метаданные.СвойстваОбъектов.ПринадлежностьОбъекта.Собственный;

Для Каждого ОМД Из ОМДРасширения[ТипОМД] Цикл

Если ОМД.ПринадлежностьОбъекта <> ПринадлежностьОбъекта Тогда
Продолжить;
КонецЕсли;

ИмяПустойСсылкиТипа = ОМД.ПолноеИмя() + ".ПустаяСсылка";
СсылкаДляОпределенияТипа = ПредопределенноеЗначение(ИмяПустойСсылкиТипа);
СсылочныеТипы.Добавить(ТипЗнч(СсылкаДляОпределенияТипа));

КонецЦикла;

КонецПроцедуры

Функция ТипыОбъектовМетаданныхСсылочногоТипа()

ТипыОбъектовМетаданныхСсылочногоТипа = Новый Массив;
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("Справочники");
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("Документы");
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("БизнесПроцессы");
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("Задачи");
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("ПланыСчетов");
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("ПланыОбмена");
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("ПланыВидовХарактеристик");
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("ПланыВидовРасчета");

Возврат ТипыОбъектовМетаданныхСсылочногоТипа;

КонецФункции

#КонецОбласти
26 changes: 26 additions & 0 deletions exts/yaxunit/src/CommonModules/ЮТОкружение/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,32 @@

КонецФункции

// Проверяет версию платформы (без учета режима совместимости)
//
// Параметры:
// ВерсияДляПроверки - Строка - Версия, с которой необходимо сравнить версию платформы
//
// Возвращаемое значение:
// Булево - Версия платформы больше или равна указанной
Функция ВерсияПлатформыБольшеИлиРавна(ВерсияДляПроверки) Экспорт

Возврат ЮТСтроки.СравнитьВерсии(ЮТСлужебныйПовторногоИспользования.ВерсияПлатформы(), ВерсияДляПроверки) >= 0;

КонецФункции

// Проверяет версию платформы (без учета режима совместимости)
//
// Параметры:
// ВерсияДляПроверки - Строка - Версия, с которой необходимо сравнить версию платформы
//
// Возвращаемое значение:
// Булево - Версия платформы меньше указанной
Функция ВерсияПлатформыМеньше(ВерсияДляПроверки) Экспорт

Возврат ЮТСтроки.СравнитьВерсии(ЮТСлужебныйПовторногоИспользования.ВерсияПлатформы(), ВерсияДляПроверки) < 0;

КонецФункции

// Используется английский встроенный язык разработки.
//
// Возвращаемое значение:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,29 +144,28 @@

Если Кешировать Тогда
Возврат ЮТСлужебныйПовторногоИспользования.ОписаниеТиповЛюбаяСсылка();
Иначе
КонецЕсли;

#Если ВебКлиент Или ТонкийКлиент Тогда
Параметры = Новый Массив(1);
Параметры[0] = Ложь;
Возврат ЮТМетодыСлужебный.ВызватьФункциюКонфигурацииНаСервере("ЮТТипыДанныхСлужебный", "ОписаниеТиповЛюбаяСсылка", Параметры);
#Иначе
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(
"<TypeDescription xmlns=""http://v8.1c.ru/8.1/data/core"">
| <TypeSet xmlns:cc=""http://v8.1c.ru/8.1/data/enterprise/current-config"">cc:AnyRef</TypeSet>
|</TypeDescription>");
ОписаниеТипаЛюбаяСсылка = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);

СсылочныеТипыРасширений = ЮТМетодыСлужебныйВызовСервера.СсылочныеТипыДобавляемыеРасширениями();

Если СсылочныеТипыРасширений.Количество() <> 0 Тогда
ОписаниеТипаЛюбаяСсылка = Новый ОписаниеТипов(ОписаниеТипаЛюбаяСсылка, СсылочныеТипыРасширений);
КонецЕсли;

Возврат ОписаниеТипаЛюбаяСсылка;
#КонецЕсли
Если ЮТОкружение.ВерсияПлатформыМеньше("8.3.11") Или ЮТОкружение.ВерсияПлатформыБольшеИлиРавна("8.3.20.1549") Тогда
// До 8.3.11 не было возможности добавлять свои ссылочные объекты
// С версии 8.3.20.1549 AnyRef включает в себя типы из расширений
Результат = AnyRef();
// ИначеЕсли ЮТОкружение.ВерсияПлатформыБольшеИлиРавна("8.3.13") Тогда
// Этот вариант на два порядка медленнее, на конфигурации из проекта 4.485 сек против 0.040 сек (100 итераций, на одной схоже)
// Результат = Новый ОписаниеТипов(AnyRef(), ЮТМетаданныеСлужебныйВызовСервера.СсылочныеТипыРасширений())
Иначе
Результат = ЮТМетаданныеСлужебныйВызовСервера.ОписаниеТиповЛюбаяСсылкаПоМетаданным();
КонецЕсли;

Возврат Результат;
#КонецЕсли

КонецФункции

#Область СистемныеПеречисления
Expand Down Expand Up @@ -296,4 +295,17 @@

КонецФункции

#Если НЕ ВебКлиент Тогда
Функция AnyRef() Экспорт

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(
"<TypeDescription xmlns=""http://v8.1c.ru/8.1/data/core"">
| <TypeSet xmlns:cc=""http://v8.1c.ru/8.1/data/enterprise/current-config"">cc:AnyRef</TypeSet>
|</TypeDescription>");
Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML);

КонецФункции
#КонецЕсли

#КонецОбласти
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,8 @@

ЮТест.ОжидаетЧто(ЛюбаяСсылка)
.ИмеетТип("ОписаниеТипов")
.Что(ЛюбаяСсылка.СодержитТип(Тип("СправочникСсылка.Банки")));
.Что(ЛюбаяСсылка.СодержитТип(Тип("СправочникСсылка.Банки")), "Содержит тип из конфигурации")
;

КонецПроцедуры

Expand Down

0 comments on commit bd1cf5c

Please sign in to comment.