feat(meta-compile,meta-decompile): поддержка типов Report + DataProcessor (v1.52/v0.43)

14-й/15-й типы, 2546 объектов acc+erp. Рерайт Emit-ReportProperties/
Emit-DataProcessorProperties на общие хелперы (был легаси-хардкод Comment/
UseStandardCommands/формы/презентации). Декомпилятор: снят гейт +оба;
Report-специфика (defaultForm/mainDataCompositionSchema/*SettingsForm/
defaultVariantForm/variantsStorage/settingsStorage/extendedPresentation),
DataProcessor-специфика (defaultForm/auxiliaryForm/extendedPresentation).

Общие фиксы (не только Report/DataProcessor):
- Emit-VerbatimRef: ссылки форм/схем/хранилищ без Normalize-FormRef — имя формы
  может быть буквально «Форма» (Normalize перевёл бы имя-сегмент Форма→Form).
- Пустой <Type/> (реквизит без типа): маркер typeEmpty (декомпилятор type:"",
  компилятор <Type/> + FillValue nil вместо xs:string). Отличаем present-"" от absent.
- Платформенные типы v8:-префикса (ValueTable/ValueTree/ValueList/StandardPeriod/…),
  current-config cfg:-типы (ConstantsSet/ReportBuilder/*Object.X), выделенные ns
  (Chart/SettingsComposer/SpreadsheetDocument) — компилятор возвращал голое имя.
- Expand-DataPath: голый (отрицательный) индекс-маркер (-8 в ChoiceParameterLinks) verbatim.

Class-2: UseStandardCommands дефолт true (совместно с пользователем — авторски-
безопасно: доступность через стандартный командный интерфейс; при false и без
переопределения размещения команд объект доступен лишь по навигационной ссылке).
Декомпилятор явно фиксирует false. У DataProcessor мода корпуса и так true.

ПОЛНЫЙ КОРПУС 2546: match 2546/2546, TOTAL 0, byte-exact order-preserved (сверено
с реальными 1С-файлами). Регресс 52/52 ps1+py, ps1==py identical. spec §7.11/§7.12,
кейсы report-full/data-processor-full.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-09 17:24:11 +03:00
parent 117a06ff3e
commit db29324215
19 changed files with 1240 additions and 126 deletions
+41 -22
View File
@@ -1004,39 +1004,58 @@ true); `characteristics` (§7.1.4); `basedOn`/`inputByString`/`dataLockFields` (
{ "type": "EventSubscription", "name": "ПередЗаписьюКонтрагента", "source": ["CatalogObject.Контрагенты"], "event": "BeforeWrite", "handler": "ОбщегоНазначенияСервер.ПередЗаписьюКонтрагента" }
```
### 7.11 Report
### 7.11 Report (Отчёт)
| Поле JSON | Умолчание | XML элемент |
|-----------|----------|-------------|
| `defaultForm` | `""` | DefaultForm |
| `auxiliaryForm` | `""` | AuxiliaryForm |
| `mainDataCompositionSchema` | `""` | MainDataCompositionSchema |
| `defaultSettingsForm` | `""` | DefaultSettingsForm |
| `auxiliarySettingsForm` | `""` | AuxiliarySettingsForm |
| `defaultVariantForm` | `""` | DefaultVariantForm |
| `comment` | пусто | Comment |
| `useStandardCommands` | `true` | UseStandardCommands |
| `defaultForm` / `auxiliaryForm` | `""` | DefaultForm / AuxiliaryForm (ссылка verbatim) |
| `mainDataCompositionSchema` | `""` | MainDataCompositionSchema (ссылка на макет СКД, напр. `Report.X.Template.ОсновнаяСхемаКомпоновкиДанных`) |
| `defaultSettingsForm` / `auxiliarySettingsForm` / `defaultVariantForm` | `""` | *SettingsForm / DefaultVariantForm (ссылки) |
| `variantsStorage` / `settingsStorage` | `""` | VariantsStorage / SettingsStorage (напр. `SettingsStorage.ХранилищеВариантовОтчетов`) |
| `extendedPresentation` / `explanation` | пусто | ExtendedPresentation / Explanation (ML) |
| `includeHelpInContents` | `false` | IncludeHelpInContents |
| `attributes` | `[]` | → Attribute в ChildObjects |
| `tabularSections` | `{}` | → TabularSection в ChildObjects |
> **`useStandardCommands`** управляет доступностью объекта через стандартный командный интерфейс. Дефолт `true`
> (авторски-безопасно). При `false` и без переопределения размещения команд/подсистем отчёт доступен пользователю
> только по навигационной ссылке (в типовых часто `false` — доступ идёт через панель отчётов БСП/командный интерфейс подсистемы).
Ссылки на формы/схемы/хранилища пишутся **verbatim** (без прощающего резолва — имя формы может быть буквально «Форма»).
Модули: `Ext/ObjectModule.bsl` (пустой).
```json
{ "type": "Report", "name": "АнализПродаж", "comment": "(Демо)", "useStandardCommands": false,
"mainDataCompositionSchema": "Report.АнализПродаж.Template.ОсновнаяСхемаКомпоновкиДанных",
"variantsStorage": "SettingsStorage.ХранилищеВариантовОтчетов",
"attributes": ["Период: StandardPeriod", { "name": "Данные", "type": "" }] }
```
### 7.12 DataProcessor (Обработка)
| Поле JSON | Умолчание | XML элемент |
|-----------|----------|-------------|
| `comment` | пусто | Comment |
| `useStandardCommands` | `true` | UseStandardCommands (см. ремарку у Report) |
| `defaultForm` / `auxiliaryForm` | `""` | DefaultForm / AuxiliaryForm (ссылка verbatim) |
| `extendedPresentation` / `explanation` | пусто | ExtendedPresentation / Explanation (ML) |
| `includeHelpInContents` | `false` | IncludeHelpInContents |
| `attributes` | `[]` | → Attribute в ChildObjects |
| `tabularSections` | `{}` | → TabularSection в ChildObjects |
Модули: `Ext/ObjectModule.bsl` (пустой).
```json
{ "type": "Report", "name": "ОстаткиТоваров", "attributes": ["НачалоПериода: Date", "КонецПериода: Date"] }
{ "type": "DataProcessor", "name": "ЗагрузкаТаблиц", "useStandardCommands": false,
"attributes": [{ "name": "Таблица", "type": "ValueTree" }, { "name": "Произвольные", "type": "" }] }
```
### 7.12 DataProcessor
| Поле JSON | Умолчание | XML элемент |
|-----------|----------|-------------|
| `defaultForm` | `""` | DefaultForm |
| `auxiliaryForm` | `""` | AuxiliaryForm |
| `attributes` | `[]` | → Attribute в ChildObjects |
| `tabularSections` | `{}` | → TabularSection в ChildObjects |
Модули: `Ext/ObjectModule.bsl` (пустой).
```json
{ "type": "DataProcessor", "name": "ЗагрузкаДанных", "attributes": ["ПутьКФайлу: String(500)"] }
```
**Типы реквизитов обработок/отчётов** (помимо общих §3): пустой `type: ""` → реквизит без типа (`<Type/>`,
значение заполнения nil); платформенные коллекции `ValueTable`/`ValueTree`/`ValueList`(=ValueListType)/`StandardPeriod`
→ `v8:`-префикс; типы current-config `ConstantsSet`/`ReportBuilder`/`CatalogObject.X`/`DataProcessorObject.X`/… →
`cfg:`-префикс; `Chart`/`SettingsComposer`/`SpreadsheetDocument` → выделенное пространство имён.
### 7.13 ExchangePlan