$npx -y skills add Nikolay-Shirokov/cc-1c-skills --skill skd-compileКомпиляция схемы компоновки данных 1С (СКД) из компактного JSON-определения. Используй когда нужно создать СКД с нуля
| 1 | # /skd-compile — генерация СКД из JSON DSL |
| 2 | |
| 3 | Принимает JSON-определение схемы компоновки данных → генерирует Template.xml (DataCompositionSchema). |
| 4 | |
| 5 | ## Параметры и команда |
| 6 | |
| 7 | | Параметр | Описание | |
| 8 | |----------|----------| |
| 9 | | `DefinitionFile` | Путь к JSON-файлу с определением СКД (взаимоисключающий с Value) | |
| 10 | | `Value` | JSON-строка с определением СКД (взаимоисключающий с DefinitionFile) | |
| 11 | | `OutputPath` | Путь к выходному Template.xml | |
| 12 | |
| 13 | ```powershell |
| 14 | # Из файла |
| 15 | powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/skd-compile.ps1" -DefinitionFile "<json>" -OutputPath "<Template.xml>" |
| 16 | |
| 17 | # Из строки (без промежуточного файла) |
| 18 | powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/skd-compile.ps1" -Value '<json-string>' -OutputPath "<Template.xml>" |
| 19 | ``` |
| 20 | |
| 21 | ## JSON DSL — краткий справочник |
| 22 | |
| 23 | Справочник ниже. Все примеры компилируемы как есть. |
| 24 | |
| 25 | ### Корневая структура |
| 26 | |
| 27 | ```json |
| 28 | { |
| 29 | "dataSets": [...], |
| 30 | "calculatedFields": [...], |
| 31 | "totalFields": [...], |
| 32 | "parameters": [...], |
| 33 | "templates": [...], |
| 34 | "groupTemplates": [...], |
| 35 | "dataSetLinks": [...], |
| 36 | "settingsVariants": [...] |
| 37 | } |
| 38 | ``` |
| 39 | |
| 40 | Умолчания: `dataSources` → авто `ИсточникДанных1/Local`; `settingsVariants` → авто "Основной" с деталями. |
| 41 | |
| 42 | ### Наборы данных |
| 43 | |
| 44 | Тип по ключу: `query` → DataSetQuery, `objectName` → DataSetObject, `items` → DataSetUnion. |
| 45 | |
| 46 | ```json |
| 47 | { "name": "Продажи", "query": "ВЫБРАТЬ ...", "fields": [...] } |
| 48 | ``` |
| 49 | |
| 50 | Запрос поддерживает `@file` — ссылку на внешний .sql файл вместо inline-текста: `"query": "@queries/sales.sql"`. Путь разрешается относительно JSON-файла, затем CWD. |
| 51 | |
| 52 | **DataSetObject** — внешний набор данных (без источника-запроса). Поля описываются явно; данные передаются вторым параметром `ПроцессорКомпоновкиДанных.Инициализировать(Макет, Новый Структура("<objectName>", ТЗ), ...)`. |
| 53 | |
| 54 | ```json |
| 55 | { "name": "ЖурналОшибок", "objectName": "ЖурналОшибок", "fields": [ |
| 56 | { "field": "ТекстСообщения", "title": "Текст сообщения", "type": "string(150)" }, |
| 57 | { "field": "Расшифровка", "title": "Описание", "type": "CatalogRef.СтруктураПредприятия" } |
| 58 | ]} |
| 59 | ``` |
| 60 | |
| 61 | `name` — имя набора в схеме, `objectName` — ключ в структуре передачи данных. |
| 62 | |
| 63 | ### Поля — shorthand и объектная форма |
| 64 | |
| 65 | ``` |
| 66 | "Наименование" — просто имя |
| 67 | "Количество: decimal(15,2)" — имя + тип |
| 68 | "Организация: CatalogRef.Организации @dimension" — + роль |
| 69 | "Служебное: string #noFilter #noOrder" — + ограничения |
| 70 | ``` |
| 71 | |
| 72 | Объектная форма — когда нужен title или другие свойства: |
| 73 | ```json |
| 74 | { "field": "ОстатокНаНачалоПериода", "title": "Остаток на начало периода" } |
| 75 | ``` |
| 76 | `dataPath` автоматически берётся из `field`, если не указан явно. |
| 77 | |
| 78 | Многоязычный заголовок: `"title": { "ru": "...", "en": "..." }`. Применимо везде, где принимается title/presentation (поля, calculatedFields, parameters, settingsVariants, availableValues и пр.). Строка эквивалентна `{ "ru": "..." }`. |
| 79 | |
| 80 | Типы: `string`, `string(N)`, `decimal`, `decimal(D)`, `decimal(D,F)`, `boolean`, `date`, `dateTime`, `CatalogRef.X`, `DocumentRef.X`, `EnumRef.X`, `StandardPeriod`. Ссылочные типы эмитируются с inline namespace `d5p1:` (`http://v8.1c.ru/8.1/data/enterprise/current-config`). Сборка EPF со ссылочными типами требует базу с соответствующей конфигурацией. |
| 81 | |
| 82 | `decimal` без скобок = `10,2` (деньги по умолчанию), `decimal(N)` = `N,0` (целое); `,nonneg` в конце скобок → AllowedSign=Nonnegative. |
| 83 | |
| 84 | Составной тип (несколько типов значений) — массив в объектной форме: `"type": ["CatalogRef.A", "CatalogRef.B"]`. Квалификаторы (`(N)`, `(D,F)`) применяются к каждому элементу. |
| 85 | |
| 86 | Роли (shorthand или объект): |
| 87 | |
| 88 | - `@`-флаги: `@dimension`, `@account`, `@balance`, `@period`, `@required`, `@autoOrder`, `@ignoreNullValues` |
| 89 | - KV: `balanceGroupName`, `balanceType` (`OpeningBalance`/`ClosingBalance`), `parentDimension`, `accountTypeExpression`, `expression`, `orderType` (`Asc`/`Desc`), `periodNumber`, `periodType` |
| 90 | |
| 91 | ``` |
| 92 | "Сумма: decimal(15,2) @balance balanceGroupName=Сумма balanceType=OpeningBalance" |
| 93 | ``` |
| 94 | |
| 95 | Ограничения: `#noField`, `#noFilter`, `#noGroup`, `#noOrder`. |
| 96 | |
| 97 | В объектной форме: `"useRestriction": { "field": true, "condition": true, "group": true, "order": true }` или `"restrict": ["noField", "noFilter"]`. |
| 98 | |
| 99 | Дополнительные ключи объектной формы: |
| 100 | - `"presentationExpression": "<выражение>"` — что показывать вместо значения поля. Исходное значение остаётся «под капотом» для перехода/расшифровки. |
| 101 | - `"appearance": { "<параметр>": "<значение>" }` — оформление колонки по умолчанию (применяется во всех вариантах настроек). Ключи — параметры платформы (`ГоризонтальноеПоложение`, `МинимальнаяШирина`, `Формат`, `Текст` и т.п.). |
| 102 | - `"orderExpression": { "expression": "<выражение>", "orderType": "Asc"/"Desc", "autoOrder": true/false }` — сортировк |