mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-16 16:29:01 +03:00
Merge branch 'dev' into feature/web-test-runner
This commit is contained in:
+43
-7
@@ -515,6 +515,7 @@ DataCompositionSchema
|
||||
| `useRestriction` | нет | `true` — параметр скрыт от пользователя, `false` — доступен |
|
||||
| `expression` | нет | Выражение для автоматического вычисления (например, `&Период.ДатаНачала`) |
|
||||
| `availableAsField` | нет | `false` — параметр недоступен как поле в отчёте |
|
||||
| `valueListAllowed` | нет | `true` — разрешает передавать список значений в параметр |
|
||||
| `use` | нет | Режим: `Always` (всегда), `Auto` (автоматически) |
|
||||
|
||||
### Типы значений параметров
|
||||
@@ -562,26 +563,61 @@ DataCompositionSchema
|
||||
|---|---|
|
||||
| `name` | Имя макета (ссылаются groupTemplate) |
|
||||
| `template` (вложенный) | Описание строк/ячеек (`dcsat:AreaTemplate`) |
|
||||
| `parameter` | Параметры макета (`dcsat:ExpressionAreaTemplateParameter`) — выражения для подстановки |
|
||||
| `parameter` (Expression) | Параметры макета (`dcsat:ExpressionAreaTemplateParameter`) — выражения для подстановки |
|
||||
| `parameter` (Details) | Параметры расшифровки (`dcsat:DetailsAreaTemplateParameter`) — для drilldown |
|
||||
|
||||
#### DetailsAreaTemplateParameter
|
||||
|
||||
Параметр расшифровки — активирует drilldown при клике на ячейку:
|
||||
|
||||
```xml
|
||||
<parameter xmlns:dcsat="http://v8.1c.ru/8.1/data-composition-system/area-template"
|
||||
xsi:type="dcsat:DetailsAreaTemplateParameter">
|
||||
<dcsat:name>Расшифровка_ПоступлениеСырья</dcsat:name>
|
||||
<dcsat:fieldExpression>
|
||||
<dcsat:field>ИмяРесурса</dcsat:field>
|
||||
<dcsat:expression>"ПоступлениеСырья"</dcsat:expression>
|
||||
</dcsat:fieldExpression>
|
||||
<dcsat:mainAction>DrillDown</dcsat:mainAction>
|
||||
</parameter>
|
||||
```
|
||||
|
||||
Привязка к ячейке — через appearance `Расшифровка`:
|
||||
|
||||
```xml
|
||||
<dcscor:item>
|
||||
<dcscor:parameter>Расшифровка</dcscor:parameter>
|
||||
<dcscor:value xsi:type="dcscor:Parameter">Расшифровка_ПоступлениеСырья</dcscor:value>
|
||||
</dcscor:item>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. Привязки макетов группировок (groupTemplate)
|
||||
## 10. Привязки макетов группировок (groupTemplate, groupHeaderTemplate)
|
||||
|
||||
Связывают группировку с пользовательским макетом:
|
||||
Связывают группировку с пользовательским макетом. Два XML-элемента:
|
||||
|
||||
- `<groupTemplate>` — шаблон строки данных (`Header`) и итогов (`OverallHeader`)
|
||||
- `<groupHeaderTemplate>` — шаблон заголовка группировки (шапка таблицы)
|
||||
|
||||
```xml
|
||||
<groupTemplate>
|
||||
<groupField>ТипЦен</groupField>
|
||||
<groupHeaderTemplate>
|
||||
<groupName>ДанныеОтчета</groupName>
|
||||
<templateType>Header</templateType>
|
||||
<template>Макет1</template>
|
||||
</groupHeaderTemplate>
|
||||
<groupTemplate>
|
||||
<groupField>Счет</groupField>
|
||||
<templateType>Header</templateType>
|
||||
<template>Макет2</template>
|
||||
</groupTemplate>
|
||||
```
|
||||
|
||||
| Элемент | Описание |
|
||||
|---|---|
|
||||
| `groupField` | Имя поля группировки |
|
||||
| `templateType` | Тип: `Header` (заголовок), `Footer` (подвал), `Overall` (общий) |
|
||||
| `groupField` | Привязка к полю группировки |
|
||||
| `groupName` | Привязка к именованной группировке в структуре варианта |
|
||||
| `templateType` | `Header` (строки данных), `OverallHeader` (итоги) |
|
||||
| `template` | Ссылка на имя template из раздела 9 |
|
||||
|
||||
---
|
||||
|
||||
+3
-4
@@ -7,7 +7,6 @@
|
||||
| Навык | Параметры | Описание |
|
||||
|-------|-----------|----------|
|
||||
| `/epf-init` | `<Name> [Synonym]` | Создать новую обработку (корневой XML + модуль объекта) |
|
||||
| `/epf-add-form` | `<ProcessorName> <FormName> [Synonym]` | Добавить управляемую форму к обработке |
|
||||
| `/epf-build` | `<ProcessorName>` | Собрать EPF из XML (через 1cv8.exe) |
|
||||
| `/epf-dump` | `<EpfFile>` | Разобрать EPF в XML (через 1cv8.exe) |
|
||||
| `/epf-bsp-init` | `<ProcessorName> <Вид>` | Добавить регистрацию БСП (СведенияОВнешнейОбработке) |
|
||||
@@ -52,7 +51,7 @@
|
||||
> Создай обработку ЗагрузкаПрайса с формой
|
||||
```
|
||||
|
||||
Claude выполнит `/epf-init` и `/epf-add-form` с правильными параметрами.
|
||||
Claude выполнит `/epf-init` и `/form-add` с правильными параметрами.
|
||||
|
||||
### Внешняя печатная форма
|
||||
|
||||
@@ -98,7 +97,7 @@ Claude вызовет `/epf-build` или `/erf-build` в зависимости
|
||||
|
||||
```
|
||||
> /epf-init МояОбработка "Моя обработка"
|
||||
> /epf-add-form МояОбработка Форма
|
||||
> /form-add МояОбработка.xml Форма
|
||||
> /template-add МояОбработка Макет HTML
|
||||
> /help-add МояОбработка
|
||||
> /epf-build МояОбработка
|
||||
@@ -120,7 +119,7 @@ src/
|
||||
└── ObjectModule.bsl # Модуль объекта
|
||||
```
|
||||
|
||||
После `/epf-add-form` и `/template-add`:
|
||||
После `/form-add` и `/template-add`:
|
||||
|
||||
```
|
||||
src/
|
||||
|
||||
+25
-1
@@ -205,6 +205,30 @@ Claude создаст JSON-определение и вызовет `/form-compi
|
||||
|
||||
`/form-validate` проверит структурную корректность (ID, companions, ссылки), `/form-info` покажет результат в виде компактной сводки.
|
||||
|
||||
## Генерация из метаданных объекта
|
||||
|
||||
`/form-compile` умеет автоматически генерировать форму из метаданных объекта (XML-выгрузки). Скрипт читает реквизиты, табличные части, стандартные реквизиты и строит форму по стандарту ERP.
|
||||
|
||||
```
|
||||
> Создай форму документа ЗаказКлиенту
|
||||
```
|
||||
|
||||
Claude вызовет `/form-compile` с флагом `-FromObject`. Назначение формы (Purpose) автоматически определяется из имени формы (ФормаДокумента -> Item, ФормаСписка -> List, ФормаВыбора -> Choice).
|
||||
|
||||
Поддерживаемые типы: Document, Catalog, InformationRegister, AccumulationRegister, ChartOfCharacteristicTypes, ExchangePlan, ChartOfAccounts.
|
||||
|
||||
Не поддерживается: DataProcessor (реквизиты объекта пустые -- форма строится на реквизитах формы, используйте JSON DSL).
|
||||
|
||||
### Project-level пресеты
|
||||
|
||||
Раскладка формы управляется пресетом (по умолчанию `erp-standard`). Для настройки под проект создайте файл:
|
||||
|
||||
```
|
||||
<project-root>/presets/skills/form/erp-standard.json
|
||||
```
|
||||
|
||||
Файл накладывается поверх встроенного пресета через deep merge -- достаточно указать только переопределяемые ключи. Полная документация ключей: `.claude/skills/form-compile/presets/README.md`.
|
||||
|
||||
## Примеры слеш-команд
|
||||
|
||||
```
|
||||
@@ -228,7 +252,7 @@ Claude создаст JSON-определение и вызовет `/form-compi
|
||||
|
||||
При работе с внешними обработками:
|
||||
|
||||
1. `/epf-add-form` — создать форму (каркас)
|
||||
1. `/form-add` — создать форму (каркас)
|
||||
2. `/form-compile` — сгенерировать Form.xml из JSON-определения
|
||||
3. `/form-edit` — добавить элементы/реквизиты/команды в существующую форму
|
||||
4. `/form-validate` — проверить корректность
|
||||
|
||||
@@ -148,6 +148,7 @@ JSON DSL для описания объектов метаданных конф
|
||||
| `req` | FillChecking = ShowError | attributes, dimensions, resources |
|
||||
| `index` | Indexing = Index | attributes, dimensions |
|
||||
| `indexAdditional` | Indexing = IndexWithAdditionalOrder | attributes |
|
||||
| `multiline` | MultiLine = true | attributes |
|
||||
| `nonneg` | MinValue = 0 (+ nonneg для Number) | attributes, resources |
|
||||
| `master` | Master = true | dimensions (РС) |
|
||||
| `mainFilter` | MainFilter = true | dimensions (РС) |
|
||||
@@ -206,13 +207,20 @@ JSON DSL для описания объектов метаданных конф
|
||||
|-----------|----------|-------------|
|
||||
| `hierarchical` | `false` | Hierarchical |
|
||||
| `hierarchyType` | `HierarchyFoldersAndItems` | HierarchyType |
|
||||
| `limitLevelCount` | `false` | LimitLevelCount |
|
||||
| `levelCount` | `2` | LevelCount |
|
||||
| `foldersOnTop` | `true` | FoldersOnTop |
|
||||
| `codeLength` | `9` | CodeLength |
|
||||
| `codeType` | `String` | CodeType |
|
||||
| `codeAllowedLength` | `Variable` | CodeAllowedLength |
|
||||
| `codeSeries` | `WholeCatalog` | CodeSeries |
|
||||
| `descriptionLength` | `25` | DescriptionLength |
|
||||
| `autonumbering` | `true` | Autonumbering |
|
||||
| `checkUnique` | `false` | CheckUnique |
|
||||
| `defaultPresentation` | `AsDescription` | DefaultPresentation |
|
||||
| `subordinationUse` | `ToItems` | SubordinationUse |
|
||||
| `quickChoice` | `true` | QuickChoice |
|
||||
| `choiceMode` | `BothWays` | ChoiceMode |
|
||||
| `dataLockControlMode` | `Automatic` | DataLockControlMode |
|
||||
| `fullTextSearch` | `Use` | FullTextSearch |
|
||||
| `owners` | `[]` | Owners |
|
||||
|
||||
+91
-6
@@ -297,7 +297,7 @@ XML-маппинг — по `<group>` на каждый элемент:
|
||||
### Shorthand
|
||||
|
||||
```
|
||||
"<name>: <type> [= <default>] [@autoDates]"
|
||||
"<name>: <type> [= <default>] [@autoDates] [@valueList] [@hidden]"
|
||||
```
|
||||
|
||||
Примеры:
|
||||
@@ -332,6 +332,25 @@ XML-маппинг — по `<group>` на каждый элемент:
|
||||
"parameters": ["Период: StandardPeriod = LastMonth @autoDates"]
|
||||
```
|
||||
|
||||
### @valueList
|
||||
|
||||
Флаг `@valueList` генерирует `<valueListAllowed>true</valueListAllowed>` — разрешает передавать список значений в параметр:
|
||||
|
||||
```json
|
||||
"parameters": ["Организации: CatalogRef.Организации @valueList"]
|
||||
```
|
||||
|
||||
### @hidden
|
||||
|
||||
Флаг `@hidden` — скрытый параметр. Автоматически ставит `availableAsField=false` и исключает параметр из автогенерируемых `dataParameters` при `"dataParameters": "auto"`:
|
||||
|
||||
```json
|
||||
"parameters": [
|
||||
{ "name": "Счет43", "type": "ChartOfAccountsRef.Хозрасчетный", "value": "...", "hidden": true },
|
||||
"СкрытыйПараметр: string = test @hidden"
|
||||
]
|
||||
```
|
||||
|
||||
### Объектная форма
|
||||
|
||||
```json
|
||||
@@ -355,8 +374,31 @@ XML-маппинг — по `<group>` на каждый элемент:
|
||||
| `value` | Значение по умолчанию |
|
||||
| `expression` | Выражение для вычисления |
|
||||
| `availableAsField` | `false` — скрыть из полей |
|
||||
| `valueListAllowed` | `true` — разрешить список значений |
|
||||
| `hidden` | `true` — скрытый параметр (авто `availableAsField=false`, исключение из `dataParameters: auto`) |
|
||||
| `useRestriction` | `true` — скрыть от пользователя |
|
||||
| `use` | `"Always"`, `"Auto"` |
|
||||
| `denyIncompleteValues` | `true` — запретить произвольные значения (только из availableValues) |
|
||||
| `availableValues` | Массив `[{value, presentation}]` — допустимые значения с представлениями |
|
||||
|
||||
### availableValues
|
||||
|
||||
Список допустимых значений параметра. Тип значения определяется автоматически (`Перечисление.*`, `Справочник.*` и др. → `dcscor:DesignTimeValue`):
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "ПорядокОкругления",
|
||||
"type": "EnumRef.Округления",
|
||||
"value": "Перечисление.Округления.Окр1_00",
|
||||
"use": "Always",
|
||||
"denyIncompleteValues": true,
|
||||
"availableValues": [
|
||||
{"value": "Перечисление.Округления.Окр1_00", "presentation": "руб. коп"},
|
||||
{"value": "Перечисление.Округления.Окр1", "presentation": "руб."},
|
||||
{"value": "Перечисление.Округления.Окр1000", "presentation": "тыс. руб"}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Значения параметров по типу
|
||||
|
||||
@@ -399,6 +441,8 @@ XML-маппинг — по `<group>` на каждый элемент:
|
||||
}
|
||||
```
|
||||
|
||||
Ключ `field` — алиас для `dataPath` (используется если `dataPath` не указан).
|
||||
|
||||
---
|
||||
|
||||
## 8. Связи наборов (dataSetLinks)
|
||||
@@ -458,6 +502,16 @@ XML-маппинг — по `<group>` на каждый элемент:
|
||||
- Строка → `SelectedItemField`
|
||||
- `"Auto"` → `SelectedItemAuto` (только на уровне группировок; на верхнем уровне settings игнорируется)
|
||||
- Объект с `field`/`title` → `SelectedItemField` с `lwsTitle`
|
||||
- Объект с `folder`/`items` → `SelectedItemFolder` — группа полей с заголовком и `placement=Auto`:
|
||||
|
||||
```json
|
||||
"selection": [
|
||||
"Auto",
|
||||
"Счет",
|
||||
{"folder": "Поступление", "items": ["ПолеА", "ПолеБ", "ПолеВ"]},
|
||||
{"folder": "Выбытие", "items": ["ВыбытиеРеализовано", "ВыбытиеПрочее"]}
|
||||
]
|
||||
```
|
||||
|
||||
### filter
|
||||
|
||||
@@ -480,7 +534,8 @@ XML-маппинг — по `<group>` на каждый элемент:
|
||||
- `@quickAccess` → `viewMode=QuickAccess`
|
||||
- `@normal` → `viewMode=Normal`
|
||||
- `@inaccessible` → `viewMode=Inaccessible`
|
||||
- Типы значений автоопределяются: `true`/`false` → boolean, `2024-01-01T00:00:00` → dateTime, числа → decimal, прочее → string
|
||||
- Типы значений автоопределяются: `true`/`false` → boolean, `2024-01-01T00:00:00` → dateTime, числа → decimal, `Перечисление.*`/`Справочник.*`/`ПланСчетов.*`/`Документ.*` → DesignTimeValue, прочее → string
|
||||
- OrGroup: `{"group": "Or", "items": ["условие1", "условие2"]}` — объединяет условия через ИЛИ
|
||||
|
||||
#### Объектная форма
|
||||
|
||||
@@ -574,7 +629,7 @@ XML-маппинг — по `<group>` на каждый элемент:
|
||||
**Типы значений appearance** определяются автоматически:
|
||||
- `style:XXX`, `web:XXX`, `win:XXX` → `v8ui:Color`
|
||||
- `true`/`false` → `xs:boolean`
|
||||
- Параметр `Текст` или `Заголовок` → `v8:LocalStringType`
|
||||
- Параметр `Формат`, `Текст` или `Заголовок` → `v8:LocalStringType`
|
||||
- Прочее → `xs:string`
|
||||
|
||||
Поддержка `use=false` на уровне параметра:
|
||||
@@ -606,6 +661,14 @@ XML-маппинг — по `<group>` на каждый элемент:
|
||||
|
||||
### dataParameters
|
||||
|
||||
#### Автогенерация
|
||||
|
||||
```json
|
||||
"dataParameters": "auto"
|
||||
```
|
||||
|
||||
Генерирует записи `dataParameters` для всех не-hidden параметров с `userSettingID`. Скрытые параметры (`hidden: true` / `@hidden`) исключаются.
|
||||
|
||||
#### Shorthand-строка
|
||||
|
||||
```json
|
||||
@@ -760,7 +823,7 @@ XML-маппинг — по `<group>` на каждый элемент:
|
||||
| `style` | Именованный пресет оформления (по умолчанию `"data"`) |
|
||||
| `widths` | Массив ширин колонок (применяется ко всем строкам) |
|
||||
| `minHeight` | Минимальная высота первой строки (для шапок) |
|
||||
| `parameters` | Параметры макета — выражения для подстановки |
|
||||
| `parameters` | Параметры макета — выражения для подстановки (поддерживают `drilldown`) |
|
||||
|
||||
#### Синтаксис ячеек
|
||||
|
||||
@@ -768,7 +831,8 @@ XML-маппинг — по `<group>` на каждый элемент:
|
||||
|----------|----------|
|
||||
| `"текст"` | Статический текст (`v8:LocalStringType`) |
|
||||
| `"{Имя}"` | Параметр шаблона (`dcscor:Parameter`), задаётся через `parameters` |
|
||||
| `"\|"` | Вертикальное объединение с ячейкой выше |
|
||||
| `"\|"` | Вертикальное объединение с ячейкой выше (`ОбъединятьПоВертикали`) |
|
||||
| `">"` | Горизонтальное объединение с ячейкой слева (`ОбъединятьПоГоризонтали`) |
|
||||
| `null` | Пустая ячейка (без содержимого) |
|
||||
|
||||
#### Встроенные пресеты стилей
|
||||
@@ -820,14 +884,35 @@ XML-маппинг — по `<group>` на каждый элемент:
|
||||
|
||||
Детект: если есть `rows` — используется компактный DSL, иначе — raw XML из `template`.
|
||||
|
||||
#### Расшифровка (drilldown) в параметрах шаблона
|
||||
|
||||
Ключ `drilldown` в параметре шаблона автоматически генерирует:
|
||||
1. `DetailsAreaTemplateParameter` с именем `Расшифровка_<значение>`, `fieldExpression` по полю `ИмяРесурса`, `mainAction=DrillDown`
|
||||
2. Привязку `Расшифровка` в appearance ячеек, ссылающихся на этот параметр через `{Имя}`
|
||||
|
||||
```json
|
||||
"parameters": [
|
||||
{ "name": "Сырье", "expression": "ПоступлениеСырья", "drilldown": "ПоступлениеСырья" }
|
||||
]
|
||||
```
|
||||
|
||||
### groupTemplates
|
||||
|
||||
```json
|
||||
"groupTemplates": [
|
||||
{ "groupField": "ТипЦен", "templateType": "Header", "template": "Макет1" }
|
||||
{ "groupName": "ДанныеОтчета", "templateType": "GroupHeader", "template": "Макет1" },
|
||||
{ "groupField": "Счет", "templateType": "Header", "template": "Макет2" },
|
||||
{ "groupField": "Счет", "templateType": "OverallHeader", "template": "Макет3" }
|
||||
]
|
||||
```
|
||||
|
||||
| Ключ | Описание |
|
||||
|------|----------|
|
||||
| `groupField` | Привязка к полю группировки → `<groupField>` |
|
||||
| `groupName` | Привязка к именованной группировке в структуре варианта → `<groupName>` |
|
||||
| `templateType` | `Header` / `OverallHeader` → `<groupTemplate>`, `GroupHeader` → `<groupHeaderTemplate>` |
|
||||
| `template` | Имя макета |
|
||||
|
||||
---
|
||||
|
||||
## 11. Полный пример — минимальный
|
||||
|
||||
+10
-4
@@ -71,7 +71,7 @@
|
||||
]
|
||||
```
|
||||
|
||||
`@autoDates` автоматически генерирует параметры `ДатаНачала`/`ДатаОкончания` (заменяет 5 строк на 1).
|
||||
Флаги: `@autoDates` (авто ДатаНачала/ДатаОкончания), `@valueList` (разрешить список значений), `@hidden` (скрыть параметр, исключить из `dataParameters: auto`).
|
||||
|
||||
### Вычисляемые поля — shorthand
|
||||
|
||||
@@ -96,9 +96,11 @@
|
||||
```
|
||||
|
||||
- **filter shorthand**: `"Поле оператор значение @флаги"` — флаги `@off`, `@user`, `@quickAccess`, `@normal`, `@inaccessible`
|
||||
- **dataParameters shorthand**: `"Имя = значение @флаги"`
|
||||
- **dataParameters shorthand**: `"Имя = значение @флаги"`, или `"auto"` — автогенерация для всех не-hidden параметров
|
||||
- **structure shorthand**: `"Поле1 > Поле2 > details"` — `>` разделяет уровни группировки
|
||||
- **conditionalAppearance**: условное оформление с автоопределением типов значений (Color, Boolean, LocalStringType)
|
||||
- **conditionalAppearance**: условное оформление с автоопределением типов (Color, Boolean, LocalStringType для Формат/Текст/Заголовок, DesignTimeValue для ссылок), OrGroup через `{"group": "Or", "items": [...]}`
|
||||
- **selection**: поддержка `{"folder": "Название", "items": [...]}` для группировки полей (SelectedItemFolder)
|
||||
- **parameters**: `availableValues`, `denyIncompleteValues`, `use: "Always"` в объектной форме
|
||||
|
||||
### Шаблоны вывода — компактный DSL
|
||||
|
||||
@@ -125,13 +127,17 @@
|
||||
}
|
||||
],
|
||||
"groupTemplates": [
|
||||
{ "groupField": "Счет", "templateType": "GroupHeader", "template": "Макет1" },
|
||||
{ "groupName": "ДанныеОтчета", "templateType": "GroupHeader", "template": "Макет1" },
|
||||
{ "groupField": "Счет", "templateType": "Header", "template": "Макет2" }
|
||||
]
|
||||
```
|
||||
|
||||
Синтаксис ячеек: `"текст"` — статика, `"{Имя}"` — параметр, `"|"` — объединение с ячейкой выше, `null` — пустая.
|
||||
|
||||
Привязки: `groupField` — к полю, `groupName` — к именованной группировке. `templateType`: `Header`/`OverallHeader` → `<groupTemplate>`, `GroupHeader` → `<groupHeaderTemplate>`.
|
||||
|
||||
Расшифровка (drilldown): ключ `drilldown` в параметре шаблона генерирует `DetailsAreaTemplateParameter` и привязку `Расшифровка` в appearance ячеек.
|
||||
|
||||
Встроенные стили: `header` (фон, центр, перенос), `data` (фон группы), `subheader` (без фона, центр), `total` (без фона). Все — Arial 10, рамки Solid 1px, цвета через стили платформы. Пользовательские стили — через `skd-styles.json` в директории проекта.
|
||||
|
||||
### Объектная форма
|
||||
|
||||
Reference in New Issue
Block a user