mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-29 08:01:02 +03:00
fix(meta-compile): типы ValueStorage/UUID → v8:ValueStorage/v8:UUID + прощающие синонимы (v1.20)
Раундтрип-находка (класс-2): meta-compile эмитил ValueStorage как xs:base64Binary, а канон 1С — v8:ValueStorage (2954 реквизита корпуса; xs:base64Binary как тип реквизита НЕ встречается — только в Template.xml). UUID эмитился raw. Оба типа теперь эмитятся канонически. Прощающий ввод (по идее: модель может ошибиться формой): base64Binary / ХранилищеЗначений / ХранилищеЗначения → ValueStorage; УникальныйИдентификатор → UUID. spec v2.5 (§3.1 типы + §3.3 синонимы); тест-кейс catalog-mixed-types расширен ValueStorage/UUID. Валидация: v8:Type-категория 0 на таргет-выборке; регресс 36/36 (ps+py); 1С-cert зелёный. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
253a4fbce0
commit
53ed8c4489
@@ -400,6 +400,13 @@ $script:typeSynonyms["boolean"] = "Boolean"
|
|||||||
$script:typeSynonyms["date"] = "Date"
|
$script:typeSynonyms["date"] = "Date"
|
||||||
$script:typeSynonyms["datetime"] = "DateTime"
|
$script:typeSynonyms["datetime"] = "DateTime"
|
||||||
$script:typeSynonyms["bool"] = "Boolean"
|
$script:typeSynonyms["bool"] = "Boolean"
|
||||||
|
# ValueStorage / UUID — прощающий ввод (модель может написать base64Binary / рус. форму → канон).
|
||||||
|
$script:typeSynonyms["valuestorage"] = "ValueStorage"
|
||||||
|
$script:typeSynonyms["base64binary"] = "ValueStorage"
|
||||||
|
$script:typeSynonyms["хранилищезначений"] = "ValueStorage"
|
||||||
|
$script:typeSynonyms["хранилищезначения"] = "ValueStorage"
|
||||||
|
$script:typeSynonyms["uuid"] = "UUID"
|
||||||
|
$script:typeSynonyms["уникальныйидентификатор"] = "UUID"
|
||||||
# Reference synonyms (Russian, lowercase)
|
# Reference synonyms (Russian, lowercase)
|
||||||
$script:typeSynonyms["справочникссылка"] = "CatalogRef"
|
$script:typeSynonyms["справочникссылка"] = "CatalogRef"
|
||||||
$script:typeSynonyms["документссылка"] = "DocumentRef"
|
$script:typeSynonyms["документссылка"] = "DocumentRef"
|
||||||
@@ -528,9 +535,14 @@ function Emit-TypeContent {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
# ValueStorage
|
# ValueStorage (ХранилищеЗначения) — канон v8:ValueStorage (не xs:base64Binary, хоть 1С и принимает оба).
|
||||||
if ($typeStr -eq "ValueStorage") {
|
if ($typeStr -eq "ValueStorage") {
|
||||||
X "$indent<v8:Type>xs:base64Binary</v8:Type>"
|
X "$indent<v8:Type>v8:ValueStorage</v8:Type>"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
# UUID (УникальныйИдентификатор)
|
||||||
|
if ($typeStr -eq "UUID") {
|
||||||
|
X "$indent<v8:Type>v8:UUID</v8:Type>"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -445,6 +445,13 @@ type_synonyms = {
|
|||||||
'date': 'Date',
|
'date': 'Date',
|
||||||
'datetime': 'DateTime',
|
'datetime': 'DateTime',
|
||||||
'bool': 'Boolean',
|
'bool': 'Boolean',
|
||||||
|
# ValueStorage / UUID — прощающий ввод (base64Binary / рус. форма → канон).
|
||||||
|
'valuestorage': 'ValueStorage',
|
||||||
|
'base64binary': 'ValueStorage',
|
||||||
|
'хранилищезначений': 'ValueStorage',
|
||||||
|
'хранилищезначения': 'ValueStorage',
|
||||||
|
'uuid': 'UUID',
|
||||||
|
'уникальныйидентификатор': 'UUID',
|
||||||
# Reference synonyms (Russian, lowercase)
|
# Reference synonyms (Russian, lowercase)
|
||||||
'справочникссылка': 'CatalogRef',
|
'справочникссылка': 'CatalogRef',
|
||||||
'документссылка': 'DocumentRef',
|
'документссылка': 'DocumentRef',
|
||||||
@@ -557,9 +564,13 @@ def emit_type_content(indent, type_str):
|
|||||||
dt_name = m.group(1)
|
dt_name = m.group(1)
|
||||||
X(f'{indent}<v8:TypeSet>cfg:DefinedType.{dt_name}</v8:TypeSet>')
|
X(f'{indent}<v8:TypeSet>cfg:DefinedType.{dt_name}</v8:TypeSet>')
|
||||||
return
|
return
|
||||||
# ValueStorage
|
# ValueStorage (ХранилищеЗначения) — канон v8:ValueStorage (не xs:base64Binary).
|
||||||
if type_str == 'ValueStorage':
|
if type_str == 'ValueStorage':
|
||||||
X(f'{indent}<v8:Type>xs:base64Binary</v8:Type>')
|
X(f'{indent}<v8:Type>v8:ValueStorage</v8:Type>')
|
||||||
|
return
|
||||||
|
# UUID (УникальныйИдентификатор)
|
||||||
|
if type_str == 'UUID':
|
||||||
|
X(f'{indent}<v8:Type>v8:UUID</v8:Type>')
|
||||||
return
|
return
|
||||||
|
|
||||||
# Reference types — use local xmlns declaration for 1C compatibility
|
# Reference types — use local xmlns declaration for 1C compatibility
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Meta DSL — спецификация JSON-формата для объектов метаданных 1С
|
# Meta DSL — спецификация JSON-формата для объектов метаданных 1С
|
||||||
|
|
||||||
Версия: 2.4
|
Версия: 2.5
|
||||||
|
|
||||||
## Обзор
|
## Обзор
|
||||||
|
|
||||||
@@ -67,6 +67,8 @@ JSON DSL для описания объектов метаданных конф
|
|||||||
| `Boolean` | `xs:boolean` |
|
| `Boolean` | `xs:boolean` |
|
||||||
| `Date` | `xs:dateTime` + DateFractions=Date |
|
| `Date` | `xs:dateTime` + DateFractions=Date |
|
||||||
| `DateTime` | `xs:dateTime` + DateFractions=DateTime |
|
| `DateTime` | `xs:dateTime` + DateFractions=DateTime |
|
||||||
|
| `ValueStorage` | `v8:ValueStorage` (ХранилищеЗначения) |
|
||||||
|
| `UUID` | `v8:UUID` (УникальныйИдентификатор) |
|
||||||
|
|
||||||
### 3.2 Ссылочные типы
|
### 3.2 Ссылочные типы
|
||||||
|
|
||||||
@@ -102,6 +104,8 @@ JSON DSL для описания объектов метаданных конф
|
|||||||
| `БизнесПроцессСсылка.Xxx` | `BusinessProcessRef.Xxx` |
|
| `БизнесПроцессСсылка.Xxx` | `BusinessProcessRef.Xxx` |
|
||||||
| `ЗадачаСсылка.Xxx` | `TaskRef.Xxx` |
|
| `ЗадачаСсылка.Xxx` | `TaskRef.Xxx` |
|
||||||
| `ОпределяемыйТип.Xxx` | `DefinedType.Xxx` |
|
| `ОпределяемыйТип.Xxx` | `DefinedType.Xxx` |
|
||||||
|
| `ХранилищеЗначений` / `ХранилищеЗначения` / `base64Binary` | `ValueStorage` |
|
||||||
|
| `УникальныйИдентификатор` | `UUID` |
|
||||||
|
|
||||||
Регистронезависимые.
|
Регистронезависимые.
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,9 @@
|
|||||||
"Активен: Boolean",
|
"Активен: Boolean",
|
||||||
"СуммаДоговора: Number(15,2)",
|
"СуммаДоговора: Number(15,2)",
|
||||||
"Ответственный: CatalogRef.ФизическиеЛица",
|
"Ответственный: CatalogRef.ФизическиеЛица",
|
||||||
"Статус: EnumRef.СтатусыКонтрагентов"
|
"Статус: EnumRef.СтатусыКонтрагентов",
|
||||||
|
"Вложение: ValueStorage",
|
||||||
|
"Идентификатор: UUID"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"validatePath": "Catalogs/Контрагенты",
|
"validatePath": "Catalogs/Контрагенты",
|
||||||
|
|||||||
+80
@@ -339,6 +339,86 @@
|
|||||||
<DataHistory>Use</DataHistory>
|
<DataHistory>Use</DataHistory>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Attribute>
|
</Attribute>
|
||||||
|
<Attribute uuid="UUID-018">
|
||||||
|
<Properties>
|
||||||
|
<Name>Вложение</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Вложение</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type>v8:ValueStorage</v8:Type>
|
||||||
|
</Type>
|
||||||
|
<PasswordMode>false</PasswordMode>
|
||||||
|
<Format/>
|
||||||
|
<EditFormat/>
|
||||||
|
<ToolTip/>
|
||||||
|
<MarkNegatives>false</MarkNegatives>
|
||||||
|
<Mask/>
|
||||||
|
<MultiLine>false</MultiLine>
|
||||||
|
<ExtendedEdit>false</ExtendedEdit>
|
||||||
|
<MinValue xsi:nil="true"/>
|
||||||
|
<MaxValue xsi:nil="true"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:nil="true"/>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<LinkByType/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<Use>ForItem</Use>
|
||||||
|
<Indexing>DontIndex</Indexing>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<DataHistory>Use</DataHistory>
|
||||||
|
</Properties>
|
||||||
|
</Attribute>
|
||||||
|
<Attribute uuid="UUID-019">
|
||||||
|
<Properties>
|
||||||
|
<Name>Идентификатор</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Идентификатор</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type>v8:UUID</v8:Type>
|
||||||
|
</Type>
|
||||||
|
<PasswordMode>false</PasswordMode>
|
||||||
|
<Format/>
|
||||||
|
<EditFormat/>
|
||||||
|
<ToolTip/>
|
||||||
|
<MarkNegatives>false</MarkNegatives>
|
||||||
|
<Mask/>
|
||||||
|
<MultiLine>false</MultiLine>
|
||||||
|
<ExtendedEdit>false</ExtendedEdit>
|
||||||
|
<MinValue xsi:nil="true"/>
|
||||||
|
<MaxValue xsi:nil="true"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:nil="true"/>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<LinkByType/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<Use>ForItem</Use>
|
||||||
|
<Indexing>DontIndex</Indexing>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<DataHistory>Use</DataHistory>
|
||||||
|
</Properties>
|
||||||
|
</Attribute>
|
||||||
</ChildObjects>
|
</ChildObjects>
|
||||||
</Catalog>
|
</Catalog>
|
||||||
</MetaDataObject>
|
</MetaDataObject>
|
||||||
|
|||||||
Reference in New Issue
Block a user