mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-07 18:50:53 +03:00
fix(meta-compile,meta-edit): synonym decimal и документация типов без синонима
Ревью собственной работы против плана нашло три упущения. 1. Синоним `decimal(p,s)` был в плане, но в код не попал — после включения отказа компилятора стандартный SQL-тип стал отвергаться. Добавлен в оба навыка и покрыт кейсом. 2. Тип Null в таблице примитивных типов не описан. Голого синонима у него нет и не будет: в DSL он задаётся как `v8:Null`. Заодно сказано прямым текстом, что имя С префиксом проходит как есть — так задаются типы без синонима (`v8:ValueTable`, `ent:AccountType`, `v8ui:Color`). 3. Раздел 9.1 в 1c-form-spec помечен как общий справочник типов, а не «про формы»: там самые полные перечни v8/v8ui/dcs/ent, и они относятся к любому объекту метаданных. Проверено: meta-compile 94/94 и meta-edit 32/32 в обоих рантаймах, 11 гардов, снэпшот sql-type-synonyms с decimal принят платформой. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NBsZA5cr2WFThtgp7i5WVi
This commit is contained in:
co-authored by
Claude Opus 5
parent
ed160c65b5
commit
6169a7ff93
@@ -1,4 +1,4 @@
|
||||
# meta-compile v1.111 — Compile 1C metadata object from JSON
|
||||
# meta-compile v1.112 — Compile 1C metadata object from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
[CmdletBinding(PositionalBinding=$false)]
|
||||
param(
|
||||
@@ -627,6 +627,7 @@ $script:typeSynonyms["int2"] = "Number(5,0)"
|
||||
$script:typeSynonyms["varchar"] = "String"
|
||||
$script:typeSynonyms["character varying"] = "String"
|
||||
$script:typeSynonyms["numeric"] = "Number"
|
||||
$script:typeSynonyms["decimal"] = "Number"
|
||||
$script:typeSynonyms["timestamp"] = "DateTime"
|
||||
$script:typeSynonyms["bytea"] = "BinaryData"
|
||||
# Платформенные типы, требующие префикса v8: (коллекции/периоды, частые в реквизитах обработок/отчётов).
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# meta-compile v1.111 — Compile 1C metadata object from JSON
|
||||
# meta-compile v1.112 — Compile 1C metadata object from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
|
||||
import argparse
|
||||
@@ -758,6 +758,7 @@ type_synonyms = {
|
||||
'varchar': 'String',
|
||||
'character varying': 'String',
|
||||
'numeric': 'Number',
|
||||
'decimal': 'Number',
|
||||
'timestamp': 'DateTime',
|
||||
'bytea': 'BinaryData',
|
||||
# Reference synonyms (Russian, lowercase)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# meta-edit v1.51 — Edit existing 1C metadata object XML
|
||||
# meta-edit v1.52 — Edit existing 1C metadata object XML
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
[CmdletBinding(PositionalBinding=$false)]
|
||||
param(
|
||||
@@ -526,6 +526,7 @@ $script:typeSynonyms["int2"] = "Number(5,0)"
|
||||
$script:typeSynonyms["varchar"] = "String"
|
||||
$script:typeSynonyms["character varying"] = "String"
|
||||
$script:typeSynonyms["numeric"] = "Number"
|
||||
$script:typeSynonyms["decimal"] = "Number"
|
||||
$script:typeSynonyms["timestamp"] = "DateTime"
|
||||
$script:typeSynonyms["bytea"] = "BinaryData"
|
||||
$script:typeSynonyms["таблицазначений"] = "ValueTable"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
# meta-edit v1.51 — Edit existing 1C metadata object XML
|
||||
# meta-edit v1.52 — Edit existing 1C metadata object XML
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
|
||||
import argparse
|
||||
@@ -560,6 +560,7 @@ type_synonyms = {
|
||||
"varchar": "String",
|
||||
"character varying": "String",
|
||||
"numeric": "Number",
|
||||
"decimal": "Number",
|
||||
"timestamp": "DateTime",
|
||||
"bytea": "BinaryData",
|
||||
"таблицазначений": "ValueTable",
|
||||
|
||||
@@ -963,6 +963,11 @@ ChildItems
|
||||
|
||||
### 9.1. Система типов
|
||||
|
||||
Перечни ниже — самые полные в документации и НЕ только про формы: те же имена стоят в `<v8:Type>`
|
||||
любого объекта метаданных. Набор доступных типов зависит от владельца: у реквизита, хранимого в базе,
|
||||
это скаляры + ссылочные + ОпределяемыйТип/Характеристика; у реквизита обработки или формы — ещё и рантайм-типы
|
||||
из таблиц `v8:*`, `v8ui:*`, `dcs*:*` и системные перечисления `ent:*`.
|
||||
|
||||
#### Примитивные типы (xs:*)
|
||||
|
||||
```xml
|
||||
|
||||
@@ -80,6 +80,7 @@ JSON DSL для описания объектов метаданных конф
|
||||
| `ValueStorage` | `v8:ValueStorage` (ХранилищеЗначения) |
|
||||
| `UUID` | `v8:UUID` (УникальныйИдентификатор) |
|
||||
| `BinaryData` или `BinaryData(N[,fixed\|variable])` | `xs:base64Binary` + BinaryDataQualifiers (ДвоичныеДанные) |
|
||||
| `v8:Null` | `v8:Null` — тип «Null»; задаётся только с префиксом, голого синонима нет |
|
||||
|
||||
Типы СУБД на входе компилятор переводит сам — соответствие замерено на стенде PostgreSQL и совпадает
|
||||
с тем, что делает Конфигуратор при импорте структуры таблицы:
|
||||
@@ -92,6 +93,10 @@ JSON DSL для описания объектов метаданных конф
|
||||
| `varchar(n)`, `character varying(n)` | `String(n)` | | `bytea` | `BinaryData` |
|
||||
| `numeric(p,s)`, `decimal(p,s)` | `Number(p,s)` | | | |
|
||||
|
||||
Имя типа без префикса, которое не совпало ни с одной из форм выше, компилятор отвергает: так выглядит
|
||||
и опечатка, и неподдержанный тип СУБД. А вот имя С префиксом проходит как есть — так задаются
|
||||
типы, у которых нет синонима в DSL: `v8:Null`, `v8:ValueTable`, `ent:AccountType`, `v8ui:Color`.
|
||||
|
||||
Важное ограничение: типы 1С получает ОТ ДРАЙВЕРА ODBC, а не из схемы БД. Поэтому `boolean`
|
||||
в список НЕ входит: в DSL это Булево, а psqlODBC при реальном импорте отдаёт `Строка(5)` (опция
|
||||
драйвера *Bools as Char*). `text`, `real`, `double precision`, `money`, `json` и массивы не поддержаны —
|
||||
|
||||
+45
-3
@@ -334,6 +334,48 @@
|
||||
</Properties>
|
||||
</Field>
|
||||
<Field uuid="UUID-024">
|
||||
<Properties>
|
||||
<Name>price2</Name>
|
||||
<Synonym>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>price2</v8:content>
|
||||
</v8:item>
|
||||
</Synonym>
|
||||
<Comment/>
|
||||
<Type>
|
||||
<v8:Type>xs:decimal</v8:Type>
|
||||
<v8:NumberQualifiers>
|
||||
<v8:Digits>12</v8:Digits>
|
||||
<v8:FractionDigits>3</v8:FractionDigits>
|
||||
<v8:AllowedSign>Any</v8:AllowedSign>
|
||||
</v8:NumberQualifiers>
|
||||
</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:type="xs:decimal">0</FillValue>
|
||||
<FillChecking>DontCheck</FillChecking>
|
||||
<ChoiceParameterLinks/>
|
||||
<ChoiceParameters/>
|
||||
<QuickChoice>Auto</QuickChoice>
|
||||
<CreateOnInput>Auto</CreateOnInput>
|
||||
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||
<ChoiceForm/>
|
||||
<NameInDataSource>price2</NameInDataSource>
|
||||
<ReadOnly>false</ReadOnly>
|
||||
<AllowNull>false</AllowNull>
|
||||
</Properties>
|
||||
</Field>
|
||||
<Field uuid="UUID-025">
|
||||
<Properties>
|
||||
<Name>created</Name>
|
||||
<Synonym>
|
||||
@@ -373,7 +415,7 @@
|
||||
<AllowNull>false</AllowNull>
|
||||
</Properties>
|
||||
</Field>
|
||||
<Field uuid="UUID-025">
|
||||
<Field uuid="UUID-026">
|
||||
<Properties>
|
||||
<Name>born</Name>
|
||||
<Synonym>
|
||||
@@ -413,7 +455,7 @@
|
||||
<AllowNull>false</AllowNull>
|
||||
</Properties>
|
||||
</Field>
|
||||
<Field uuid="UUID-026">
|
||||
<Field uuid="UUID-027">
|
||||
<Properties>
|
||||
<Name>uid</Name>
|
||||
<Synonym>
|
||||
@@ -450,7 +492,7 @@
|
||||
<AllowNull>false</AllowNull>
|
||||
</Properties>
|
||||
</Field>
|
||||
<Field uuid="UUID-027">
|
||||
<Field uuid="UUID-028">
|
||||
<Properties>
|
||||
<Name>blob</Name>
|
||||
<Synonym>
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
"name: varchar(150)",
|
||||
"descr: character varying(50)",
|
||||
"price: numeric(15,2)",
|
||||
"price2: decimal(12,3)",
|
||||
"created: timestamp",
|
||||
"born: date",
|
||||
"uid: uuid",
|
||||
@@ -35,7 +36,8 @@
|
||||
"<v8:Length>150</v8:Length>",
|
||||
"<v8:DateFractions>DateTime</v8:DateFractions>",
|
||||
"<v8:Type>v8:UUID</v8:Type>",
|
||||
"<v8:Type>xs:base64Binary</v8:Type>"
|
||||
"<v8:Type>xs:base64Binary</v8:Type>",
|
||||
"<v8:Digits>12</v8:Digits>"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user