feat(meta-compile,meta-decompile): поддержка типа Document (Документы) (v1.43/v0.32)

Шестой тип. Базовый роундтрип 151-выборки acc+erp: TOTAL 11450→166 (−98.5%),
match 0→109/151, 0 крашей. Регресс 49/49 ps1+py, ps1==py identical. 1С-cert ✓.

Emit-DocumentProperties переписан на общие хелперы (был легаси-хардкод): выбило
Characteristics/формы/BasedOn/InputByString/презентации — декомпилятор их уже
захватывал, баг был чисто компиляторный. SA-conditional + профиль {Date:ShowError}.

Декомпилятор: Document-блок — нумерация, проведение, RegisterRecords (движения),
Numerator, DataHistory-триплет, checkUnique-дефолт.

Class-2 дефолт-фиксы (рассинхрон компилятор↔декомпилятор↔корпус): createOnInput
DontUse→Use, registerRecordsWritingOnPost WriteModified→WriteSelected,
dataLockControlMode Automatic→Managed.

Новые/исправленные ключи (общее для реквизитов, всплыло на Document): markNegatives,
choiceForm/choiceFoldersAndItems, format/editFormat станд.реквизита (SA-override),
TS fillChecking. TS-суппресс `lineNumber: ""` — opt-out наличия TS-блока стандартных
реквизитов (~6% ТЧ его опускают, правило не выводимо; чинит и хвост Catalog).

verify-snapshots: getStructuralDeps стабит регистры registerRecords по MDObjectRef.

Остаток (~166, 2 узких хвоста): choiceParameters FixedArray data-specific edge +
FillValue станд.реквизита decimal/DTR/пробелы. spec §7.2, кейс document-full.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-06 16:09:05 +03:00
parent 4e6c8311d8
commit 10933e7386
15 changed files with 1127 additions and 685 deletions
+25 -6
View File
@@ -572,28 +572,47 @@ LineNumber дефолтные. Ключ `lineNumber` на объектной ф
Декомпилятор: `inputByString` — только при отличии от выведенного дефолта (иначе опущен); `dataLockFields`/`basedOn` —
omit-on-empty. Поля пишутся частичной формой (`StandardAttribute.X`/`Attribute.X`).
### 7.2 Document
### 7.2 Document (Документ)
Общий с Catalog слой: `synonym`, `comment`, `useStandardCommands`, `inputByString` (§7.1.5, дефолт [Номер]),
формы (`defaultObjectForm`/`defaultListForm`/`defaultChoiceForm`/`auxiliary*`), `standardAttributes` (§7.1.1),
`characteristics` (§7.1.4), `basedOn`, `dataLockFields`, презентации, `createOnInput`, `choiceHistoryOnInput`,
`includeHelpInContents`. Стандартные реквизиты Document: Ref, DeletionMark, Date, Number, Posted. Блок SA
**условный** (профиль материализованного: **Дата → FillChecking=ShowError**, 974/1010 доков); опускается лишь у
редкого all-default дока.
| Поле JSON | Умолчание | XML элемент |
|-----------|----------|-------------|
| `numerator` | `""` | Numerator (ссылка `DocumentNumerator.X`, omit-on-empty) |
| `numberType` | `String` | NumberType |
| `numberLength` | `11` | NumberLength |
| `numberAllowedLength` | `Variable` | NumberAllowedLength |
| `numberPeriodicity` | `Year` | NumberPeriodicity |
| `numberPeriodicity` | `Year` | NumberPeriodicity *(корпусная мода; платформа-свежий `Nonperiodical`)* |
| `checkUnique` | `true` | CheckUnique |
| `autonumbering` | `true` | Autonumbering |
| `posting` | `Allow` | Posting |
| `realTimePosting` | `Deny` | RealTimePosting |
| `registerRecordsDeletion` | `AutoDelete` | RegisterRecordsDeletion |
| `registerRecordsWritingOnPost` | `WriteModified` | RegisterRecordsWritingOnPost |
| `registerRecordsDeletion` | `AutoDelete` | RegisterRecordsDeletion *(безопасный дефолт для авторства; в корпусе редкий)* |
| `registerRecordsWritingOnPost` | `WriteSelected` | RegisterRecordsWritingOnPost |
| `sequenceFilling` | `AutoFill` | SequenceFilling |
| `postInPrivilegedMode` | `true` | PostInPrivilegedMode |
| `unpostInPrivilegedMode` | `true` | UnpostInPrivilegedMode |
| `dataLockControlMode` | `Automatic` | DataLockControlMode |
| `createOnInput` | `Use` | CreateOnInput |
| `dataLockControlMode` | `Managed` | DataLockControlMode |
| `fullTextSearch` | `Use` | FullTextSearch |
| `registerRecords` | `[]` | RegisterRecords |
| `dataHistory` | `DontUse` | DataHistory (+ триплет Update/Execute) |
| `registerRecords` | `[]` | RegisterRecords (список MDObjectRef движений; рус.синонимы типов резолвятся) |
| `attributes` | `[]` | → Attribute в ChildObjects |
| `tabularSections` | `{}` | → TabularSection в ChildObjects |
**Реквизит** (общее для всех типов, всплыло на Document): `markNegatives` (bool, выделять отрицательные красным),
`choiceForm` (ссылка на форму выбора), `choiceFoldersAndItems` (Items|Folders|FoldersAndItems, дефолт Items),
`format`/`editFormat` стандартного реквизита (в `standardAttributes`-override, ML).
**Табличная часть** (объектная форма): `fillChecking` (обязательность заполнения ТЧ, дефолт DontCheck);
`lineNumber: ""` — **подавляет** эмиссию TS-блока стандартных реквизитов (LineNumber). Наличие блока — пер-ТЧ
исторический артефакт (~6% доковых ТЧ его опускают, правило не выводимо); по умолчанию блок эмитится (opt-out).
### 7.2a ExchangePlan (План обмена)
Близок к Catalog (без иерархии/владельцев/кодогенерации), плюс два своих флага. Общий с Catalog слой: `synonym`,