mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-25 22:44:37 +03:00
feat(form-decompile,form-compile): string(N,fixed) — AllowedLength=Fixed для строк фикс. длины
Колонки/реквизиты строк фиксированной длины (ИНН/КПП/коды) несут <v8:AllowedLength>Fixed</v8:AllowedLength>, но DSL выражал только Variable: компилятор хардкодил Variable, декомпилятор не читал AllowedLength → Fixed терялся (форма ЭлектроннаяТранспортнаяНакладная/ТитулПеревозчика*: 3 LOST Fixed + 3 ADDED Variable — мультимножественный учёт тех же колонок). Корпус 8.3.24: AllowedLength ВСЕГДА присутствует в StringQualifiers (Variable 443127 + Fixed 2687, ABSENT=0) → always-эмиссия Variable верна. Fixed (2687) всегда с длиной > 0 (12/10/3/1/36…); при Length=0 — всегда Variable. Грамматика `string(N,fixed)` (по аналогии с `decimal(D,F,nonneg)`). Variable — дефолт (опускаем суффикс); `variable` принимается forgiving. Emit-SingleType (ps1+py) эмитит Fixed при суффиксе; декомпилятор Decompile-Type читает AllowedLength (Fixed → суффикс, Variable/Length=0 → плоский string(N)). Общий путь типов (реквизиты/колонки/valueType/составные). Выборка 46 форм с Fixed (вкл. указанную): 0 потерь AllowedLength, целевая форма → match. Round-trip декомпиляции снэпшота: string(12,fixed)/string(9,fixed) читаются обратно. Кейс attributes-types (+ValueTable с Fixed-колонками ИНН/Код) сертифицирован в 1С. Регресс 43/43 (ps1+py). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1095,8 +1095,9 @@ Forgiving-синонимы типа: XML-имя (`SpreadSheetDocumentField`) и
|
||||
|
||||
| DSL | XML |
|
||||
|-----|-----|
|
||||
| `"string"` | `xs:string` (неограниченная) |
|
||||
| `"string(100)"` | `xs:string` + Length=100 |
|
||||
| `"string"` | `xs:string` (неограниченная, AllowedLength=Variable) |
|
||||
| `"string(100)"` | `xs:string` + Length=100 (AllowedLength=Variable, дефолт) |
|
||||
| `"string(12,fixed)"` | `xs:string` + Length=12, AllowedLength=Fixed (строка фиксированной длины, напр. ИНН/КПП). Только с длиной > 0; `variable` принимается forgiving (= дефолт) |
|
||||
| `"decimal(15,2)"` | `xs:decimal` + Digits=15, FractionDigits=2, AllowedSign=Any |
|
||||
| `"decimal(10,0,nonneg)"` | `xs:decimal` + AllowedSign=Nonnegative |
|
||||
| `"boolean"` | `xs:boolean` |
|
||||
|
||||
Reference in New Issue
Block a user