feat(meta-compile,meta-decompile): кастомизация LineNumber табличной части (v1.32/v0.22)

У каждой ТЧ ровно один стандартный реквизит — НомерСтроки (LineNumber), и его
свойства (синоним/подсказка/полнотекстовый поиск/…) тоже переопределяемы.
Раньше компилятор эмитил only-default блок, декомпилятор кастомизацию не ловил.

DSL `lineNumber` на объектной форме ТЧ (omit-on-default по каждому свойству):
synonym/comment/fullTextSearch/tooltip/format/editFormat/choiceHistoryOnInput.
Emit-StandardAttribute расширен (Format/EditFormat через Emit-MLText,
ChoiceHistoryOnInput из ov — были захардкожены); Emit-TabularStandardAttributes
принимает spec и строит ov. Декомпилятор захватывает из
xr:StandardAttribute[@name='LineNumber'] → ключ lineNumber.

Покрыта КАСТОМИЗАЦИЯ (в корпусе 2/1728, только synonym — но задокументирован
полный набор из 7 свойств). 44/1728 ТЧ блок вовсе ОПУСКАЮТ — правило опущения не
выводится (FillChecking/Use не различают опускающие/имеющие), компилятор эмитит
блок всегда → not-covered хвост (решение совместное).

Аддитивно: all-default блок (1684/1728) эмитится идентично, регрессий нет
(TOTAL 78 без изменений). Регресс 47/47 ps1+py, ps1↔py identical. spec §5.1,
кейс catalog-ts-linenumber.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-04 19:03:26 +03:00
parent 177c9bb0fa
commit 027e6a4a89
10 changed files with 657 additions and 26 deletions
+30 -1
View File
@@ -296,10 +296,39 @@ JSON-**строка** → `xsi:type="xs:string"` (напр. год `"2000"`, к
}
```
Свойства объектной формы ТЧ: `synonym` (ML; нет ключа → авто из имени), `tooltip` (ML), `comment` (строка), `attributes` (колонки; синоним `columns`).
Свойства объектной формы ТЧ: `synonym` (ML; нет ключа → авто из имени), `tooltip` (ML), `comment` (строка), `attributes` (колонки; синоним `columns`), `lineNumber` (кастомизация стандартного реквизита НомерСтроки, см. ниже).
Для Catalog добавляется `<Use>ForItem</Use>` в Properties табличной части. Для Document Use не применяется.
### 5.1 `lineNumber` — кастомизация стандартного реквизита НомерСтроки
У каждой ТЧ ровно один стандартный реквизит — **LineNumber** (НомерСтроки). Платформа материализует блок
`<StandardAttributes>` с ним практически всегда (компилятор эмитит его безусловно), но по умолчанию все свойства
LineNumber дефолтные. Ключ `lineNumber` на объектной форме ТЧ переопределяет их (omit-on-default по каждому свойству):
| Ключ | XML | Умолчание | Тип |
|------|-----|-----------|-----|
| `synonym` | Synonym | пусто | ML (строка/`{ru,en}`) |
| `comment` | Comment | пусто | строка |
| `fullTextSearch` | FullTextSearch | Use | Use/DontUse |
| `tooltip` | ToolTip | пусто | ML |
| `format` | Format | пусто | ML (форматная строка) |
| `editFormat` | EditFormat | пусто | ML |
| `choiceHistoryOnInput` | ChoiceHistoryOnInput | Auto | Auto/DontUse |
```json
"tabularSections": {
"Строки": {
"lineNumber": { "synonym": "Номер п/п", "fullTextSearch": "DontUse" },
"attributes": ["Товар: CatalogRef.Номенклатура"]
}
}
```
Прочие свойства LineNumber (FillChecking, CreateOnInput и т.п.) платформа не даёт переопределять — они всегда дефолтные.
Декомпилятор эмитит `lineNumber` только при отклонении ≥1 свойства от дефолта. NB: редкий хвост ТЧ (~2.5% корпуса)
блок `<StandardAttributes>` вовсе опускает — правило не выведено; компилятор такие не воспроизводит (эмитит блок всегда).
---
## 6. Значения перечислений