mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-01 01:07:46 +03:00
Дельта формата 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>
141 lines
8.6 KiB
Markdown
141 lines
8.6 KiB
Markdown
# Объектная форма реквизита и табличной части
|
|
|
|
Когда реквизиту (в `attributes` / `dimensions` / `resources` / колонках ТЧ) нужны свойства сверх
|
|
shorthand — вместо строки задаётся объект:
|
|
|
|
```json
|
|
{ "name": "Цена", "type": "Number(15,2)", "tooltip": "Цена за единицу", "fillValue": 0 }
|
|
```
|
|
|
|
`name` и `type` обязательны (тип можно задать и раздельно: `"type": "Number", "length": 15, "precision": 2`).
|
|
Остальные ключи — ниже, все со значением по умолчанию (не задавать, если устраивает дефолт).
|
|
|
|
## Свойства реквизита
|
|
|
|
| Ключ | Умолчание | Значения |
|
|
|------|-----------|----------|
|
|
| `synonym` | из имени | ML (строка или `{ru,en}`) |
|
|
| `tooltip` | пусто | ML |
|
|
| `comment` | пусто | строка |
|
|
| `fillChecking` | `DontCheck` | `DontCheck` / `ShowError` / `ShowWarning` (то же, что флаг `req`) |
|
|
| `fullTextSearch` | `Use` | `Use` / `DontUse` |
|
|
| `fillFromFillingValue` | `false` | bool |
|
|
| `fillValue` | по типу (см. ниже) | значение заполнения |
|
|
| `createOnInput` | `Auto` | `Auto` / `Use` / `DontUse` |
|
|
| `quickChoice` | `Auto` | `Auto` / `Use` / `DontUse` |
|
|
| `choiceHistoryOnInput` | `Auto` | `Auto` / `DontUse` |
|
|
| `dataHistory` | `Use` | `Use` / `DontUse` |
|
|
| `use` | `ForItem` | `ForItem` / `ForFolder` / `ForFolderAndItem` (реквизит иерархического справочника) |
|
|
| `passwordMode` | `false` | bool |
|
|
| `multiLine` | `false` | bool (то же, что флаг `multiline`) |
|
|
| `extendedEdit` | `false` | bool (расширенное редактирование — многострочный ввод) |
|
|
| `mask` | пусто | строка маски ввода |
|
|
| `format` / `editFormat` | пусто | форматная строка 1С (ML) |
|
|
| `markNegatives` | `false` | bool (выделять отрицательные, для Number) |
|
|
| `minValue` / `maxValue` | не задано | граница диапазона (см. ниже) |
|
|
| `choiceParameterLinks` | пусто | связи параметров выбора (см. ниже) |
|
|
| `choiceParameters` | пусто | параметры выбора (см. ниже) |
|
|
| `choiceForm` | пусто | ссылка на форму выбора `Тип.Объект.Form.ИмяФормы` |
|
|
| `choiceFoldersAndItems` | `Items` | `Items` / `Folders` / `FoldersAndItems` (что выбирать в иерарх. справочнике) |
|
|
|
|
Индексирование задаётся флагом `index` / `indexAdditional` в shorthand, либо в объекте — как и в строковой форме,
|
|
через `"type": "… | index"`.
|
|
|
|
### `fillValue` — значение заполнения
|
|
|
|
Пустое значение по типу компилятор подставляет сам — ключ **не задают**:
|
|
|
|
| Тип реквизита | Пустое значение |
|
|
|---------------|-----------------|
|
|
| String | пустая строка |
|
|
| Number | `0` |
|
|
| Boolean, Date, ссылочный, составной | не задано (nil) |
|
|
|
|
Ключ `fillValue` задают для **конкретного** значения — интерпретируется по типу реквизита:
|
|
|
|
- **Boolean** — `true` / `false`.
|
|
- **Number** — число (`21`, `1.5`).
|
|
- **String** — строка.
|
|
- **Date** — ISO-строка `"2020-01-01T00:00:00"`.
|
|
- **Ссылочный** — путь: `"Catalog.Валюты.EmptyRef"` (пустая ссылка), `"Enum.Периодичность.EnumValue.Месяц"`
|
|
(значение перечисления), `"Catalog.СтраныМира.Россия"` (предопределённый элемент).
|
|
- **`null`** — явно «значение не задано» (nil), когда нужно перекрыть непустой дефолт типа.
|
|
- **`{ "emptyRef": true }`** — пустая ссылка для реквизита типа `DefinedType.X` (когда тип из пути не выводится).
|
|
|
|
> Пустая ссылка (`EmptyRef`) и `null` — разное: платформа хранит их отдельно.
|
|
|
|
### `minValue` / `maxValue` — границы диапазона
|
|
|
|
Число → числовая граница; строка → строковая (напр. год `"2000"`). Без ключа — граница не задана.
|
|
|
|
### `choiceParameterLinks` — связи параметров выбора
|
|
|
|
Связывают параметр выбора этого реквизита с другим реквизитом объекта. Массив строк или объектов:
|
|
|
|
```json
|
|
"choiceParameterLinks": ["Отбор.Организация=Организация", "Отбор.Договор=Договор:DontChange"]
|
|
"choiceParameterLinks": [{ "name": "Отбор.Организация", "dataPath": "Организация", "valueChange": "Clear" }]
|
|
```
|
|
|
|
- `dataPath` — реквизит **того же объекта**: имя обычного реквизита (`"Организация"`) или стандартного
|
|
(`"Владелец"`, `"Ссылка"`).
|
|
- `valueChange` — `Clear` (по умолчанию) / `DontChange`.
|
|
|
|
### `choiceParameters` — параметры выбора
|
|
|
|
Фиксируют параметр выбора значением. Массив строк или объектов:
|
|
|
|
```json
|
|
"choiceParameters": ["Отбор.ЭтоГруппа=false"]
|
|
"choiceParameters": [{ "name": "Отбор.Владелец", "value": "Catalog.Организации.EmptyRef" }]
|
|
```
|
|
|
|
- `value` — bool / число / строка / ссылочный путь (несёт тип) ИЛИ массив (список фиксированных значений).
|
|
- Для набора голых имён-значений добавьте `type` (тип поля-фильтра), чтобы они стали ссылками:
|
|
`{ "name": "Отбор.Тип", "type": "EnumRef.ТипыВЕТИС", "value": ["EmptyRef", "ТТН"] }`.
|
|
|
|
### Редкие ключи
|
|
|
|
`linkByType` — связь по типу (тип реквизита-Характеристики берётся из другого реквизита):
|
|
`{ "dataPath": "Свойство", "linkItem": 0 }` или строка-путь. Применяется для реквизитов-характеристик.
|
|
|
|
---
|
|
|
|
## Табличная часть — объектная форма
|
|
|
|
Значение в `tabularSections` — массив колонок ЛИБО объект со свойствами самой ТЧ:
|
|
|
|
```json
|
|
"tabularSections": {
|
|
"Товары": {
|
|
"synonym": { "ru": "Товары", "en": "Goods" },
|
|
"tooltip": "Строки заказа",
|
|
"fillChecking": "ShowError",
|
|
"attributes": ["Номенклатура: CatalogRef.Номенклатура", "Количество: Number(15,3)"]
|
|
}
|
|
}
|
|
```
|
|
|
|
| Ключ | Умолчание | Значения |
|
|
|------|-----------|----------|
|
|
| `synonym` | из имени | ML |
|
|
| `tooltip` | пусто | ML |
|
|
| `comment` | пусто | строка |
|
|
| `fillChecking` | `DontCheck` | `DontCheck` / `ShowError` / `ShowWarning` (обязательность заполнения ТЧ) |
|
|
| `use` | `ForItem` | `ForItem` / `ForFolder` / `ForFolderAndItem` (только Catalog / ChartOfCharacteristicTypes) |
|
|
| `attributes` | `[]` | колонки (shorthand или объектная форма реквизита) |
|
|
| `lineNumber` | — | кастомизация стандартного реквизита НомерСтроки (см. ниже) |
|
|
| `lineNumberLength` | по режиму совместимости | `5`…`9` — разрядность номера строки: `5` → до 99 999 строк, `9` → до 999 999 999. Требует формата 2.20 (платформа 8.3.27) |
|
|
|
|
### `lineNumber` — стандартный реквизит НомерСтроки
|
|
|
|
У каждой ТЧ есть стандартный реквизит НомерСтроки. По умолчанию все его свойства типовые. Ключ `lineNumber`
|
|
на объектной форме ТЧ их переопределяет:
|
|
|
|
```json
|
|
"Строки": { "lineNumber": { "synonym": "Номер п/п", "fullTextSearch": "DontUse" }, "attributes": [...] }
|
|
```
|
|
|
|
Переопределяемые: `synonym`, `comment`, `fullTextSearch` (`Use`/`DontUse`), `tooltip`, `format`, `editFormat`,
|
|
`choiceHistoryOnInput` (`Auto`/`DontUse`).
|