$npx -y skills add Nikolay-Shirokov/cc-1c-skills --skill form-compileКомпиляция управляемой формы 1С из JSON-определения или из метаданных объекта. Используй когда нужно создать форму с нуля по описанию элементов или сгенерировать типовую форму
| 1 | # /form-compile — Генерация Form.xml |
| 2 | |
| 3 | Два режима: |
| 4 | 1. **JSON DSL** — из JSON-определения формы |
| 5 | 2. **From object** (`-FromObject`) — автоматически из метаданных объекта 1С по пресету ERP |
| 6 | |
| 7 | > **При проектировании формы с нуля (5+ элементов или нечёткие требования)** — вызовите `/form-patterns` для загрузки справочника. Для простых форм (1–3 поля) — не нужно. |
| 8 | |
| 9 | ## Параметры |
| 10 | |
| 11 | | Параметр | Обязательный | Описание | |
| 12 | |------------|:------------:|---------------------------------| |
| 13 | | JsonPath | режим 1 | Путь к JSON-определению формы | |
| 14 | | OutputPath | да | Путь к выходному Form.xml | |
| 15 | | FromObject | режим 2 | Флаг (без значения) — генерация по метаданным объекта | |
| 16 | |
| 17 | ## Команда |
| 18 | |
| 19 | ```powershell |
| 20 | # Режим JSON DSL |
| 21 | powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/form-compile.ps1" -JsonPath "<json>" -OutputPath "<Form.xml>" |
| 22 | |
| 23 | # Режим from-object (объект и purpose выводятся из OutputPath; Document и Catalog) |
| 24 | powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/form-compile.ps1" -FromObject -OutputPath "<.../TypePlural/ObjectName/Forms/FormName/Ext/Form.xml>" |
| 25 | ``` |
| 26 | |
| 27 | ## JSON DSL — справка |
| 28 | |
| 29 | ### Структура верхнего уровня |
| 30 | |
| 31 | ```json |
| 32 | { |
| 33 | "title": "Заголовок формы", |
| 34 | "properties": { "autoTitle": false, ... }, |
| 35 | "events": { "OnCreateAtServer": "ПриСозданииНаСервере" }, |
| 36 | "excludedCommands": ["Reread"], |
| 37 | "elements": [ ... ], |
| 38 | "attributes": [ ... ], |
| 39 | "commands": [ ... ], |
| 40 | "parameters": [ ... ] |
| 41 | } |
| 42 | ``` |
| 43 | |
| 44 | - `title` — заголовок формы (multilingual). Можно указать и в `properties`, но лучше на верхнем уровне |
| 45 | - `properties` — свойства формы: `autoTitle`, `windowOpeningMode`, `commandBarLocation`, `saveDataInSettings`, `width`, `height` и др. |
| 46 | - `events` — обработчики событий формы (ключ: имя события 1С, значение: имя процедуры) |
| 47 | - `excludedCommands` — исключённые стандартные команды |
| 48 | |
| 49 | ### Элементы (ключ определяет тип) |
| 50 | |
| 51 | | DSL ключ | XML элемент | Значение ключа | |
| 52 | |--------------|-------------------|---------------------------------------------------| |
| 53 | | `"group"` | UsualGroup | ориентация: `"vertical"` / `"horizontalIfPossible"` / `"alwaysHorizontal"` (поведение — отдельный ключ `behavior`) | |
| 54 | | `"columnGroup"` | ColumnGroup | `"horizontal"` / `"vertical"` / `"inCell"` — только внутри `columns` таблицы | |
| 55 | | `"input"` | InputField | имя элемента | |
| 56 | | `"check"` | CheckBoxField | имя | |
| 57 | | `"radio"` | RadioButtonField | имя | |
| 58 | | `"label"` | LabelDecoration | имя (текст задаётся через `title`) | |
| 59 | | `"labelField"` | LabelField | имя | |
| 60 | | `"table"` | Table | имя | |
| 61 | | `"pages"` | Pages | имя | |
| 62 | | `"page"` | Page | имя | |
| 63 | | `"button"` | Button | имя | |
| 64 | | `"picture"` | PictureDecoration | имя | |
| 65 | | `"picField"` | PictureField | имя | |
| 66 | | `"calendar"` | CalendarField | имя | |
| 67 | | `"cmdBar"` | CommandBar | имя | |
| 68 | | `"autoCmdBar"` | AutoCommandBar формы | имя — наполняет главную АКП формы (id=-1), не попадает в `<ChildItems>` | |
| 69 | | `"popup"` | Popup | имя | |
| 70 | |
| 71 | ### Общие свойства (все типы элементов) |
| 72 | |
| 73 | | Ключ | Описание | |
| 74 | |------|----------| |
| 75 | | `name` | Переопределить имя (по умолчанию = значение ключа типа). Имена уникальны во всех коллекциях формы (элементы, реквизиты, команды, колонки) | |
| 76 | | `title` | Заголовок элемента | |
| 77 | | `tooltip` | Всплывающая подсказка элемента (строка или `{ru,en}`) | |
| 78 | | `visible: false` | Скрыть (синоним: `hidden: true`) | |
| 79 | | `enabled: false` | Сделать недоступным (синоним: `disabled: true`) | |
| 80 | | `readOnly: true` | Только чтение | |
| 81 | | `events: {...}` | Обработчики событий: `{ "OnChange": "ИмяОбработчика" }`. Тот же формат, что у событий формы. Значение `null` → имя обработчика сгенерируется автоматически | |
| 82 | |
| 83 | ### Допустимые имена событий (`events`) |
| 84 | |
| 85 | Компилятор предупреждает о неизвестных событиях. Имена регистрозависимы — используйте точно как указано. |
| 86 | |
| 87 | **Форма** (`events`): `OnCreateAtServer`, `OnOpen`, `BeforeClose`, `OnClose`, `NotificationProcessing`, `ChoiceProcessing`, `OnReadAtServer`, `Befo |