mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2024-11-30 08:36:50 +02:00
Merge pull request #435 from bia-technologies/feature/415
415 / Доработка получения типов из расширения
This commit is contained in:
commit
bd1cf5c48d
@ -18,6 +18,8 @@
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#Область РаботаСРаширениями
|
||||
|
||||
// МодулиРасширений
|
||||
// Выполняет чтение метаданных общих модулей, которые предположительно могут являться тестами
|
||||
//
|
||||
@ -44,6 +46,55 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция РасширенияСеанса() Экспорт
|
||||
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
|
||||
Возврат РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансАктивные);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СсылочныеТипыРасширений() Экспорт
|
||||
|
||||
МассивТипов = Новый Массив;
|
||||
|
||||
СсылочныеКоллекции = СсылочныеКоллекции();
|
||||
СобственныйОбъект = Метаданные.СвойстваОбъектов.ПринадлежностьОбъекта.Собственный;
|
||||
|
||||
Для Каждого Расширение Из РасширенияСеанса() Цикл
|
||||
|
||||
Если НЕ Расширение.ИзменяетСтруктуруДанных() Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
УстановитьБезопасныйРежим(Истина);
|
||||
// Создание через тип не работает, ошибка - конструктор не найден
|
||||
МетаданныеРасширения = Вычислить("Новый ОбъектМетаданныхКонфигурация(Расширение.ПолучитьДанные())");
|
||||
|
||||
Для Каждого ИмяКоллекции Из СсылочныеКоллекции Цикл
|
||||
|
||||
Коллекция = МетаданныеРасширения[ИмяКоллекции];
|
||||
ИмяЭлемента = ЮТМетаданныеСлужебныйПовтИсп.ТипыМетаданных()[ИмяКоллекции].Имя;
|
||||
|
||||
Для Каждого ОбъектМетаданных Из Коллекция Цикл
|
||||
|
||||
Если ОбъектМетаданных.ПринадлежностьОбъекта = СобственныйОбъект Тогда
|
||||
МассивТипов.Добавить(СтрШаблон("%1Ссылка.%2", ИмяЭлемента, ОбъектМетаданных.Имя));
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);
|
||||
Возврат ОписаниеТипов.Типы();
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Функция ИменаМодулейДвижка() Экспорт
|
||||
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
@ -258,6 +309,28 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОписаниеТиповЛюбаяСсылкаПоМетаданным() Экспорт
|
||||
|
||||
МассивТипов = Новый Массив;
|
||||
|
||||
СсылочныеКоллекции = СсылочныеКоллекции();
|
||||
|
||||
Для Каждого ИмяКоллекции Из СсылочныеКоллекции Цикл
|
||||
|
||||
Коллекция = Метаданные[ИмяКоллекции];
|
||||
ИмяЭлемента = ЮТМетаданныеСлужебныйПовтИсп.ТипыМетаданных()[ИмяКоллекции].Имя;
|
||||
|
||||
Для Каждого ОбъектМетаданных Из Коллекция Цикл
|
||||
|
||||
МассивТипов.Добавить(СтрШаблон("%1Ссылка.%2", ИмяЭлемента, ОбъектМетаданных.Имя));
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Новый ОписаниеТипов(СтрСоединить(МассивТипов, ","));
|
||||
|
||||
КонецФункции
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
@ -422,4 +495,17 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция СсылочныеКоллекции()
|
||||
|
||||
Возврат ЮТКоллекции.ЗначениеВМассиве("Справочники",
|
||||
"Документы",
|
||||
"БизнесПроцессы",
|
||||
"Задачи",
|
||||
"ПланыСчетов",
|
||||
"ПланыОбмена",
|
||||
"ПланыВидовХарактеристик",
|
||||
"ПланыВидовРасчета");
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -24,68 +24,4 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СсылочныеТипыДобавляемыеРасширениями() Экспорт
|
||||
|
||||
СсылочныеТипы = Новый Массив;
|
||||
ТипыОбъектовМетаданныхСсылочногоТипа = ТипыОбъектовМетаданныхСсылочногоТипа();
|
||||
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
РасширенияСеанса = РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансАктивные);
|
||||
|
||||
Для Каждого Расширение Из РасширенияСеанса Цикл
|
||||
|
||||
Если НЕ Расширение.ИзменяетСтруктуруДанных() Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ОМДРасширения = Новый ОбъектМетаданныхКонфигурация(Расширение.ПолучитьДанные());
|
||||
|
||||
Для Каждого ТипОМД Из ТипыОбъектовМетаданныхСсылочногоТипа Цикл
|
||||
ДополнитьТипы(СсылочныеТипы, ТипОМД, ОМДРасширения);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СсылочныеТипы;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ДополнитьТипы(СсылочныеТипы, ТипОМД, ОМДРасширения)
|
||||
|
||||
ПринадлежностьОбъекта = Метаданные.СвойстваОбъектов.ПринадлежностьОбъекта.Собственный;
|
||||
|
||||
Для Каждого ОМД Из ОМДРасширения[ТипОМД] Цикл
|
||||
|
||||
Если ОМД.ПринадлежностьОбъекта <> ПринадлежностьОбъекта Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ИмяПустойСсылкиТипа = ОМД.ПолноеИмя() + ".ПустаяСсылка";
|
||||
СсылкаДляОпределенияТипа = ПредопределенноеЗначение(ИмяПустойСсылкиТипа);
|
||||
СсылочныеТипы.Добавить(ТипЗнч(СсылкаДляОпределенияТипа));
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ТипыОбъектовМетаданныхСсылочногоТипа()
|
||||
|
||||
ТипыОбъектовМетаданныхСсылочногоТипа = Новый Массив;
|
||||
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("Справочники");
|
||||
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("Документы");
|
||||
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("БизнесПроцессы");
|
||||
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("Задачи");
|
||||
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("ПланыСчетов");
|
||||
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("ПланыОбмена");
|
||||
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("ПланыВидовХарактеристик");
|
||||
ТипыОбъектовМетаданныхСсылочногоТипа.Добавить("ПланыВидовРасчета");
|
||||
|
||||
Возврат ТипыОбъектовМетаданныхСсылочногоТипа;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -39,6 +39,32 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Проверяет версию платформы (без учета режима совместимости)
|
||||
//
|
||||
// Параметры:
|
||||
// ВерсияДляПроверки - Строка - Версия, с которой необходимо сравнить версию платформы
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Версия платформы больше или равна указанной
|
||||
Функция ВерсияПлатформыБольшеИлиРавна(ВерсияДляПроверки) Экспорт
|
||||
|
||||
Возврат ЮТСтроки.СравнитьВерсии(ЮТСлужебныйПовторногоИспользования.ВерсияПлатформы(), ВерсияДляПроверки) >= 0;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Проверяет версию платформы (без учета режима совместимости)
|
||||
//
|
||||
// Параметры:
|
||||
// ВерсияДляПроверки - Строка - Версия, с которой необходимо сравнить версию платформы
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Булево - Версия платформы меньше указанной
|
||||
Функция ВерсияПлатформыМеньше(ВерсияДляПроверки) Экспорт
|
||||
|
||||
Возврат ЮТСтроки.СравнитьВерсии(ЮТСлужебныйПовторногоИспользования.ВерсияПлатформы(), ВерсияДляПроверки) < 0;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Используется английский встроенный язык разработки.
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
|
@ -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(), ЮТМетаданныеСлужебныйВызовСервера.СсылочныеТипыРасширений())
|
||||
Иначе
|
||||
Результат = ЮТМетаданныеСлужебныйВызовСервера.ОписаниеТиповЛюбаяСсылкаПоМетаданным();
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
#Область СистемныеПеречисления
|
||||
@ -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);
|
||||
|
||||
КонецФункции
|
||||
#КонецЕсли
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -118,7 +118,8 @@
|
||||
|
||||
ЮТест.ОжидаетЧто(ЛюбаяСсылка)
|
||||
.ИмеетТип("ОписаниеТипов")
|
||||
.Что(ЛюбаяСсылка.СодержитТип(Тип("СправочникСсылка.Банки")));
|
||||
.Что(ЛюбаяСсылка.СодержитТип(Тип("СправочникСсылка.Банки")), "Содержит тип из конфигурации")
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user