1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-01-23 18:54:40 +02:00

Рефакторинг и оптимизация

This commit is contained in:
alkoleft 2023-08-12 01:59:26 +03:00
parent cf0cb91f83
commit aa152a7cf0
9 changed files with 227 additions and 21 deletions

View File

@ -175,7 +175,7 @@
// Структура - Новый контекст конструктора:
// * Менеджер - Произвольный
// * Данные - Структура
// * Метаданные - см. ЮТМетаданные.ОписаниеОбъектМетаданных
// * Метаданные - см. ЮТМетаданные.ОписаниеОбъектаМетаданных
// * ТекущаяТабличнаяЧасть - Строка
// * ДополнительныеСвойства - Структура
Функция НовыйКонтекстКонструктора(Менеджер) Экспорт
@ -183,7 +183,7 @@
Контекст = Новый Структура("Менеджер, Данные, Метаданные", Менеджер, Новый Структура());
Контекст.Вставить("Менеджер", Менеджер);
Контекст.Вставить("Данные", Новый Структура());
Контекст.Вставить("Метаданные", ЮТМетаданные.ОписаниеОбъектМетаданных(Менеджер));
Контекст.Вставить("Метаданные", ЮТМетаданные.ОписаниеОбъектаМетаданных(Менеджер));
Контекст.Вставить("ТекущаяТабличнаяЧасть", "");
Контекст.Вставить("ДополнительныеСвойства", Новый Структура());

View File

@ -33,29 +33,40 @@
КонецФункции
// Описание менеджера.
// Описание объекта метаданных.
//
// Параметры:
// Значение - Произвольный
// Значение - ОбъектМетаданных
// - Тип - Тип объекта информационной базы
// - Строка - Полное имя объекта метаданных
// - Произвольный - Объект информационной базы
//
// Возвращаемое значение:
// Структура - Описание менеджера:
// * ОписаниеТипа - см. ЮТМетаданныеСервер.ОписаниеТипаМетаданных
// * Реквизиты - Структура из см. ЮТФабрика.ОписаниеРеквизита
// * ТабличныеЧасти - Структура из Структура -
Функция ОписаниеОбъектМетаданных(Знач Значение) Экспорт
Функция ОписаниеОбъектаМетаданных(Знач Значение) Экспорт
ТипЗначения = ТипЗнч(Значение);
#Если Сервер Тогда
Если ТипЗначения = Тип("ОбъектМетаданных") Тогда
Значение = Значение.ПолноеИмя();
ТипЗначения = Тип("Строка");
КонецЕсли;
#КонецЕсли
Если ТипЗначения <> Тип("Тип") И ТипЗначения <> Тип("Строка") Тогда
Значение = ТипЗнч(Значение);
ТипЗначения = Тип("Тип");
КонецЕсли;
Если ТипЗначения = Тип("Тип") Тогда
Возврат ЮТМетаданныеСервер.ОписаниеОбъектМетаданных(Значение);
ИдентификаторТипа = ЮТТипыДанныхСлужебный.ИдентификаторТипа(Значение); // Для работы кэширования
Возврат ЮТМетаданныеПовтИсп.ОписаниеОбъектаМетаданныхПоИдентификаторуТипа(ИдентификаторТипа);
Иначе
Возврат ЮТМетаданныеПовтИсп.ОписаниеОбъектМетаданных(Значение);
Возврат ЮТМетаданныеПовтИсп.ОписаниеОбъектаМетаданных(Значение);
КонецЕсли;
КонецФункции

View File

@ -24,9 +24,16 @@
КонецФункции
Функция ОписаниеОбъектМетаданных(Знач Менеджер) Экспорт
Функция ОписаниеОбъектаМетаданных(Знач Менеджер) Экспорт
Возврат ЮТМетаданныеСервер.ОписаниеОбъектМетаданных(Менеджер);
Возврат ЮТМетаданныеСервер.ОписаниеОбъектаМетаданных(Менеджер);
КонецФункции
Функция ОписаниеОбъектаМетаданныхПоИдентификаторуТипа(Знач ИдентификаторТипа) Экспорт
Тип = ЮТТипыДанныхСлужебный.ТипПоИдентификатору(ИдентификаторТипа);
Возврат ЮТМетаданныеСервер.ОписаниеОбъектаМетаданных(Тип);
КонецФункции

View File

@ -120,7 +120,7 @@
КонецФункции
Функция ОписаниеОбъектМетаданных(Знач Значение, Знач ЗаполнятьРеквизиты = Истина) Экспорт
Функция ОписаниеОбъектаМетаданных(Знач Значение, ЗаполнятьРеквизиты = Истина) Экспорт
МетаданныеОбъекта = ОбъектМетаданных(Значение);
ОписаниеТипа = ОписаниеТипаМетаданных(МетаданныеОбъекта);
@ -248,12 +248,15 @@
ИначеЕсли ТипЗначение = Тип("Строка") Тогда
ЧастиСтроки = СтрРазделить(Значение, ".");
Если ЧастиСтроки.Количество() = 2 Тогда
ТипыМетаданных = ЮТМетаданные.ТипыМетаданных();
ОписаниеТипа = ТипыМетаданных[ЧастиСтроки[0]];
Если ОписаниеТипа <> Неопределено Тогда
ОбъектМетаданных = Метаданные[ОписаниеТипа.ИмяКоллекции][ЧастиСтроки[1]];
КонецЕсли;
КонецЕсли;
Иначе

View File

@ -716,17 +716,7 @@
Функция ПредставлениеТипа(Тип) Экспорт
#Если ВебКлиент Тогда
ВызватьИсключение МетодНеДоступен("ЮТОбщий.ПредставлениеТипа");
#Иначе
ТипXML = СериализаторXDTO.XMLТип(Тип);
Если ТипXML = Неопределено Тогда
Возврат Строка(Тип);
Иначе
Возврат ТипXML.ИмяТипа;
КонецЕсли;
#КонецЕсли
Возврат ЮТТипыДанныхСлужебный.ПредставлениеТипа(Тип);
КонецФункции

View File

@ -48,4 +48,17 @@
КонецФункции
Функция ПримитивныеТипы() Экспорт
Типы = Новый Массив();
Типы.Добавить(Тип("Строка"));
Типы.Добавить(Тип("Число"));
Типы.Добавить(Тип("Дата"));
Типы.Добавить(Тип("Булево"));
Типы.Добавить(Тип("УникальныйИдентификатор"));
Возврат Новый ФиксированныйМассив(Типы);
КонецФункции
#КонецОбласти

View File

@ -0,0 +1,168 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//
#Область СлужебныйПрограммныйИнтерфейс
Функция ПредставлениеТипа(Тип) Экспорт
#Если ВебКлиент Тогда
ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТТипыДанныхСлужебный.ПредставлениеТипа");
#Иначе
//@skip-check Undefined variable
ТипXML = СериализаторXDTO.XMLТип(Тип);
Если ТипXML = Неопределено Тогда
Возврат Строка(Тип);
Иначе
Возврат ТипXML.ИмяТипа;
КонецЕсли;
#КонецЕсли
КонецФункции
Функция ИдентификаторТипа(Тип) Экспорт
#Если ВебКлиент Тогда
ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТТипыДанныхСлужебный.ПредставлениеТипа");
#ИначеЕсли Сервер Тогда
Возврат ЗначениеВСтрокуВнутр(Тип); // Не все серверные типы сериализуются через СериализаторXDTO
#Иначе
ТипXML = СериализаторXDTO.XMLТип(Тип);
Возврат ТипXML.ИмяТипа;
#КонецЕсли
КонецФункции
Функция ТипПоИдентификатору(ИдентификаторТипа) Экспорт
#Если ВебКлиент Тогда
ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТТипыДанныхСлужебный.ПредставлениеТипа");
#ИначеЕсли Сервер Тогда
Если СтрНачинаетсяС(ИдентификаторТипа, "{") Тогда
Возврат ЗначениеИзСтрокиВнутр(ИдентификаторТипа);
КонецЕсли;
#КонецЕсли
Возврат ТипПоПредставлению(ИдентификаторТипа);
КонецФункции
Функция ТипПоПредставлению(ПредставлениеТипа) Экспорт
#Если ВебКлиент Тогда
ВызватьИсключение ЮТОбщий.МетодНеДоступен("ЮТТипыДанныхСлужебный.ТипПоПредставлению");
#Иначе
//@skip-check Undefined variable
Сериализатор = СериализаторXDTO;
Если СтрНайти(ПредставлениеТипа, ".") Тогда
Результат = Сериализатор.ИзXMLТипа(ПредставлениеТипа, "http://v8.1c.ru/8.1/data/enterprise/current-config");
Иначе
Результат = Сериализатор.ИзXMLТипа(ПредставлениеТипа, "http://www.w3.org/2001/XMLSchema");
Если Результат = Неопределено Тогда
Результат = Сериализатор.ИзXMLТипа(ПредставлениеТипа, "http://v8.1c.ru/8.1/data/core");
КонецЕсли;
Если Результат = Неопределено Тогда
Результат = Сериализатор.ИзXMLТипа(ПредставлениеТипа, "http://v8.1c.ru/8.1/data/enterprise");
КонецЕсли;
КонецЕсли;
Если Результат = Неопределено Тогда
ВызватьИсключение СтрШаблон("Не удалось определить тип по представлению `%1`", ПредставлениеТипа);
КонецЕсли;
Возврат Результат;
#КонецЕсли
КонецФункции
#Область СистемныеПеречисления
Функция ЭтоСистемноеПеречисление(Тип) Экспорт
Возврат ТипыСистемныхПеречислений().СодержитТип(Тип);
КонецФункции
Функция ТипыСистемныхПеречислений() Экспорт
Возврат Новый ОписаниеТипов(
"ВидДвиженияБухгалтерии,
|ВидДвиженияНакопления,
|ВидПериодаРегистраРасчета,
|ВидСчета,
|ВидТочкиМаршрутаБизнесПроцесса,
|ИспользованиеГруппИЭлементов,
|ИспользованиеСреза,
|ИспользованиеРежимаПроведения,
|РежимАвтоВремя,
|РежимЗаписиДокумента,
|РежимПроведенияДокумента,
|ПериодичностьАгрегатаРегистраНакопления,
|ИспользованиеАгрегатаРегистраНакопления");
КонецФункции
Функция ИмяСистемногоПеречисления(Тип) Экспорт
Возврат Строка(Тип);
КонецФункции
Функция ЭтоКоллекцияПримитивныхТипов(Типы) Экспорт
Для Каждого Тип Из Типы Цикл
Если НЕ ЭтоПримитивныйТип(Тип) Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
Функция ЭтоПримитивныйТип(Тип) Экспорт
ПримитивныеТипы = ЮТПовторногоИспользования.ПримитивныеТипы();
ТипПараметра = ТипЗнч(Тип);
Если ТипПараметра = Тип("Тип") Тогда
Возврат ПримитивныеТипы.Найти(Тип) <> Неопределено;
КонецЕсли;
Для Каждого Тип Из Тип.Типы() Цикл
Если ПримитивныеТипы.Найти(Тип) = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#КонецОбласти

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="4089d47b-14fd-4dba-b573-0004f6590c82">
<name>ЮТТипыДанныхСлужебный</name>
<synonym>
<key>ru</key>
<value>Типы данных</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -88,6 +88,7 @@
<commonModules>CommonModule.ЮТПредикаты</commonModules>
<commonModules>CommonModule.ЮТПредикатыКлиентСервер</commonModules>
<commonModules>CommonModule.ЮТПреобразования</commonModules>
<commonModules>CommonModule.ЮТПреобразованияСервер</commonModules>
<commonModules>CommonModule.ЮТРасширения</commonModules>
<commonModules>CommonModule.ЮТРегистрацияОшибок</commonModules>
<commonModules>CommonModule.ЮТСобытия</commonModules>
@ -97,8 +98,10 @@
<commonModules>CommonModule.ЮТТестовыеДанные</commonModules>
<commonModules>CommonModule.ЮТТестовыеДанные_ТаблицыЗначений</commonModules>
<commonModules>CommonModule.ЮТТестовыеДанныеВызовСервера</commonModules>
<commonModules>CommonModule.ЮТТестовыеДанныеКлиент</commonModules>
<commonModules>CommonModule.ЮТТестовыеДанныеСлужебный</commonModules>
<commonModules>CommonModule.ЮТТесты</commonModules>
<commonModules>CommonModule.ЮТТипыДанныхСлужебный</commonModules>
<commonModules>CommonModule.ЮТУтверждения</commonModules>
<commonModules>CommonModule.ЮТУтвержденияИБ</commonModules>
<commonModules>CommonModule.ЮТФабрика</commonModules>