Skip to content

Commit b713ea8

Browse files
committed
Создание иерархии типов
1 parent b869c05 commit b713ea8

File tree

2 files changed

+39
-2
lines changed

2 files changed

+39
-2
lines changed

bundles/com.e1c.ssl.bsl/src/com/e1c/ssl/bsl/CommonFunctionObjectAttributesValuesTypesComputer.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,8 +241,23 @@ protected List<TypeItem> createCustomTypeByPropertyNames(List<TypeItem> refTypes
241241

242242
IEObjectProvider provider =
243243
Registry.INSTANCE.get(TYPE_ITEM, this.versionSupport.getRuntimeVersionOrDefault(context, Version.LATEST));
244-
EObject proxyType = provider.getProxy(IEObjectTypeNames.STRUCTURE);
245-
Type structureType = (Type)EcoreUtil2.cloneWithProxies((TypeItem)EcoreUtil.resolve(proxyType, context));
244+
Type proxyType = provider.getProxy(IEObjectTypeNames.STRUCTURE);
245+
if (proxyType.eIsProxy())
246+
{
247+
proxyType = (Type)EcoreUtil.resolve(proxyType, context);
248+
}
249+
250+
Type structureType = BslFactory.eINSTANCE.createExtendedType();
251+
structureType.setContextDef(McoreFactory.eINSTANCE.createContextDef());
252+
structureType.setName("CustomStructure");
253+
structureType.setNameRu("ОсобаяСтруктура");
254+
structureType.setEnvironments(proxyType.getEnvironments());
255+
structureType.setExchangeWithServer(proxyType.isExchangeWithServer());
256+
structureType.setIndexAccessible(proxyType.isIndexAccessible());
257+
structureType.setIterable(proxyType.isIterable());
258+
structureType.setSysEnum(proxyType.isSysEnum());
259+
// set Structure as parent type
260+
structureType.setParentType(proxyType);
246261

247262
Map<String, Pair<Property, EObject>> newProperties = new HashMap<>();
248263

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,23 @@
1+
#Если Сервер Тогда
2+
3+
// Параметры:
4+
// Ссылка - СправочникСсылка.Товары -
5+
Процедура Тест(Ссылка) экспорт
6+
7+
ИмяРеквзита = "Поставщик";
8+
ИменаРеквизитов = Новый Массив("Родитель");
9+
ИменаРеквизитов.Добавить(ИмяРеквзита);
10+
ИменаРеквизитов.Добавить();
11+
ИменаРеквизитов.Добавить("Ссылка");
12+
Результат = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, ИменаРеквизитов);
13+
14+
ЕстьСвойство = Результат.Свойство("Поставщик"); // Тут тип возврата расчитывается
15+
16+
Если Результат.Свойство("Поставщик") Тогда // тут контент-ассист не подсказывает методы структуры
17+
18+
КонецЕсли;
19+
20+
КонецПроцедуры
21+
22+
#КонецЕсли
123

0 commit comments

Comments
 (0)