mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-27 07:01:02 +03:00
feat(meta-compile,meta-decompile): свойства формата 2.20 (платформа 8.3.27)
Дельта формата 2.17→2.20 содержит три безусловных свойства, которых компилятор
не эмитил. Все три пишутся ТОЛЬКО при формате >= 2.20 (Detect-FormatVersion),
поэтому 2.17-проекты не меняются: полная сюита зелёная, ни один существующий
снэпшот не сдвинулся.
- xr:TypeReductionMode — каждому стандартному реквизиту, после CreateOnInput.
TransformValues, кроме Owner → Deny (правило проверено против выгрузки acc:
9 из 9 реквизитов совпали, включая Owner).
- TypeReductionMode — измерениям регистра СВЕДЕНИЙ (у прочих семейств и у
реквизитов/ресурсов платформа его не пишет).
- LineNumberLength — табличным частям, последним в Properties.
LineNumberLength — прикладная возможность 8.3.27 (5..9 → до 999 999 999 строк
вместо 99 999), поэтому получил полноценный DSL-ключ и описание в spec §5.2.
Его дефолт зависит НЕ от версии формата, а от режима совместимости на момент
создания ТЧ (<=8_3_26 → 5, >=8_3_27 → 9) — платформа фиксирует значение и позже
не пересчитывает, поэтому в одной конфигурации соседствуют ТЧ с 5 и 9. Отсюда
новая Detect-CompatibilityMode: читает CompatibilityMode из Configuration.xml
(префикс 64 КБ — тег лежит на ~11-12 КБ, существующим 2000 байт не хватает).
Декомпилятор: TypeReductionMode захватывается только при отклонении от правила
(компилятор выводит его сам), LineNumberLength — всегда при наличии тега:
выводить его дефолт значило бы дублировать логику компилятора с риском разойтись.
Компараторы версий числовые по компонентам — строковое сравнение неверно
("2.9" > "2.17" лексикографически).
Тест-инфра: setup-фикстуры empty-config-220 и empty-config-220-compat24
(строятся тем же cf-init), два кейса — по одному на каждую ось.
Проверка: роундтрип реального 2.20-документа БП (АвансовыйОтчет, 7 ТЧ) —
по новым тегам 0 расхождений, значения и позиции совпали; остаточный хвост
52/39 идентичен такому же на 2.17, то есть пред-существующий. Сюита 570/570
ps1, 567+3 skipped py, ps1==py. 1С-сертификация обоих кейсов на 8.3.27 ✓.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
769b4d3dbd
commit
068928646d
+32
-1
@@ -308,7 +308,7 @@ JSON-**строка** → `xsi:type="xs:string"` (напр. год `"2000"`, к
|
||||
}
|
||||
```
|
||||
|
||||
Свойства объектной формы ТЧ: `synonym` (ML; нет ключа → авто из имени), `tooltip` (ML), `comment` (строка), `fillChecking` (`DontCheck`|`ShowError`|`ShowWarning`), `use` (`ForItem`|`ForFolder`|`ForFolderAndItem`, только Catalog/ПВХ; omit при дефолте `ForItem`), `attributes` (колонки; синоним `columns`), `lineNumber` (кастомизация стандартного реквизита НомерСтроки, см. ниже).
|
||||
Свойства объектной формы ТЧ: `synonym` (ML; нет ключа → авто из имени), `tooltip` (ML), `comment` (строка), `fillChecking` (`DontCheck`|`ShowError`|`ShowWarning`), `use` (`ForItem`|`ForFolder`|`ForFolderAndItem`, только Catalog/ПВХ; omit при дефолте `ForItem`), `attributes` (колонки; синоним `columns`), `lineNumber` (кастомизация стандартного реквизита НомерСтроки, см. ниже), `lineNumberLength` (разрядность номера строки, см. §5.2).
|
||||
|
||||
Для Catalog/ChartOfCharacteristicTypes в Properties ТЧ пишется `<Use>` (дефолт `ForItem`; ключ `use` объектной формы → `ForFolder`/`ForFolderAndItem`). Document `<Use>` не имеет.
|
||||
|
||||
@@ -341,6 +341,30 @@ LineNumber дефолтные. Ключ `lineNumber` на объектной ф
|
||||
Декомпилятор эмитит `lineNumber` только при отклонении ≥1 свойства от дефолта. NB: редкий хвост ТЧ (~2.5% корпуса)
|
||||
блок `<StandardAttributes>` вовсе опускает — правило не выведено; компилятор такие не воспроизводит (эмитит блок всегда).
|
||||
|
||||
### 5.2 `lineNumberLength` — разрядность номера строки (формат 2.20)
|
||||
|
||||
Свойство `<LineNumberLength>` появилось в формате **2.20** (платформа 8.3.27): целое **5..9**, задаёт
|
||||
предельное число строк ТЧ — `5` → 99 999 (прежний потолок), `9` → 999 999 999. Нужно прикладным решениям
|
||||
с большими табличными частями (классический пример — «Показатели» в документе расчёта зарплаты).
|
||||
|
||||
```json
|
||||
"tabularSections": {
|
||||
"Показатели": { "attributes": ["Значение: Number(15,2)"], "lineNumberLength": 9 }
|
||||
}
|
||||
```
|
||||
|
||||
Ключа нет → компилятор берёт **дефолт из режима совместимости** конфигурации (`CompatibilityMode`
|
||||
в `Configuration.xml`): `Version8_3_27` и выше → `9`, ниже → `5`. Это зеркалит конфигуратор, который
|
||||
фиксирует значение в момент создания ТЧ и позже не пересчитывает: в одной конфигурации нормально
|
||||
соседствуют ТЧ с `5` (созданные раньше) и `9` (созданные на новом режиме).
|
||||
|
||||
В формате 2.17 тег не эмитится вовсе. Декомпилятор захватывает значение при наличии тега — всегда,
|
||||
а не только при отличии от дефолта: дефолт зависит от режима совместимости, и выводить его повторно
|
||||
значило бы дублировать логику компилятора.
|
||||
|
||||
**Ограничение расширений:** у *заимствованной* ТЧ свойство переопределить нельзя (по документации 1С —
|
||||
до версии 8.3.28); у ТЧ, добавленных самим расширением, — можно.
|
||||
|
||||
---
|
||||
|
||||
## 6. Значения перечислений
|
||||
@@ -442,6 +466,13 @@ LineNumber дефолтные. Ключ `lineNumber` на объектной ф
|
||||
|
||||
В `standardAttributes` указывают **только отклонения** от профиля (переопределение синонима, нетиповой fillChecking и т.п.).
|
||||
|
||||
**Формат 2.20 — `TypeReductionMode`** (режим приведения типов). Платформа 8.3.27 пишет его каждому
|
||||
стандартному реквизиту; значение выводится компилятором и в DSL обычно не указывается:
|
||||
`TransformValues` для всех, кроме `Owner` — там `Deny`. Ключ `TypeReductionMode` в override оставлен
|
||||
на случай отклонения от этого правила (правило выведено на корпусе acc; при расхождении в другой
|
||||
конфигурации значение можно задать явно). У измерений регистра сведений действует то же свойство —
|
||||
ключ реквизита `typeReductionMode` (дефолт `TransformValues`). В формате 2.17 тег не эмитится.
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "Catalog", "name": "Контрагенты",
|
||||
|
||||
Reference in New Issue
Block a user