From 1c-skills
Compiles 1С managed forms (Form.xml) from JSON definitions or object metadata. Use when creating forms from scratch or generating standard object forms.
How this skill is triggered — by the user, by Claude, or both
Slash command
/1c-skills:form-compile <JsonPath> <OutputPath> | -FromObject <OutputPath><JsonPath> <OutputPath> | -FromObject <OutputPath>This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Два режима:
Два режима:
-FromObject) — автоматически из метаданных объекта 1С по пресету ERPПри проектировании формы с нуля (5+ элементов или нечёткие требования) — вызовите
/form-patternsдля загрузки справочника. Для простых форм (1–3 поля) — не нужно.
| Параметр | Обязательный | Описание |
|---|---|---|
| JsonPath | режим 1 | Путь к JSON-определению формы |
| OutputPath | да | Путь к выходному Form.xml |
| FromObject | режим 2 | Флаг (без значения) — генерация по метаданным объекта |
# Режим JSON DSL
powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/form-compile.ps1" -JsonPath "<json>" -OutputPath "<Form.xml>"
# Режим from-object (объект и purpose выводятся из OutputPath; Document и Catalog)
powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/form-compile.ps1" -FromObject -OutputPath "<.../TypePlural/ObjectName/Forms/FormName/Ext/Form.xml>"
{
"title": "Заголовок формы",
"properties": { "autoTitle": false, ... },
"events": { "OnCreateAtServer": "ПриСозданииНаСервере" },
"excludedCommands": ["Reread"],
"elements": [ ... ],
"attributes": [ ... ],
"commands": [ ... ],
"parameters": [ ... ]
}
title — заголовок формы (multilingual). Можно указать и в properties, но лучше на верхнем уровнеproperties — свойства формы: autoTitle, windowOpeningMode, commandBarLocation, saveDataInSettings, width, height и др.events — обработчики событий формы (ключ: имя события 1С, значение: имя процедуры)excludedCommands — исключённые стандартные команды| DSL ключ | XML элемент | Значение ключа |
|---|---|---|
"group" | UsualGroup | ориентация: "vertical" / "horizontalIfPossible" / "alwaysHorizontal" (поведение — отдельный ключ behavior) |
"columnGroup" | ColumnGroup | "horizontal" / "vertical" / "inCell" — только внутри columns таблицы |
"input" | InputField | имя элемента |
"check" | CheckBoxField | имя |
"radio" | RadioButtonField | имя |
"label" | LabelDecoration | имя (текст задаётся через title) |
"labelField" | LabelField | имя |
"table" | Table | имя |
"pages" | Pages | имя |
"page" | Page | имя |
"button" | Button | имя |
"picture" | PictureDecoration | имя |
"picField" | PictureField | имя |
"calendar" | CalendarField | имя |
"cmdBar" | CommandBar | имя |
"autoCmdBar" | AutoCommandBar формы | имя — наполняет главную АКП формы (id=-1), не попадает в <ChildItems> |
"popup" | Popup | имя |
| Ключ | Описание |
|---|---|
name | Переопределить имя (по умолчанию = значение ключа типа). Имена уникальны во всех коллекциях формы (элементы, реквизиты, команды, колонки) |
title | Заголовок элемента |
tooltip | Всплывающая подсказка элемента (строка или {ru,en}) |
visible: false | Скрыть (синоним: hidden: true) |
enabled: false | Сделать недоступным (синоним: disabled: true) |
readOnly: true | Только чтение |
events: {...} | Обработчики событий: { "OnChange": "ИмяОбработчика" }. Тот же формат, что у событий формы. Значение null → имя обработчика сгенерируется автоматически |
events)Компилятор предупреждает о неизвестных событиях. Имена регистрозависимы — используйте точно как указано.
Форма (events): OnCreateAtServer, OnOpen, BeforeClose, OnClose, NotificationProcessing, ChoiceProcessing, OnReadAtServer, BeforeWriteAtServer, OnWriteAtServer, AfterWriteAtServer, BeforeWrite, AfterWrite, FillCheckProcessingAtServer, BeforeLoadDataFromSettingsAtServer, OnLoadDataFromSettingsAtServer, ExternalEvent, Opening
input / picField: OnChange, StartChoice, ChoiceProcessing, AutoComplete, TextEditEnd, Clearing, Creating, EditTextChange
check / radio: OnChange
table: OnStartEdit, OnEditEnd, OnChange, Selection, ValueChoice, BeforeAddRow, BeforeDeleteRow, AfterDeleteRow, BeforeRowChange, BeforeEditEnd, OnActivateRow, OnActivateCell, Drag, DragStart, DragCheck, DragEnd
label / picture: Click, URLProcessing
labelField: OnChange, StartChoice, ChoiceProcessing, Click, URLProcessing, Clearing
button: Click
pages: OnCurrentPageChange
| Ключ | Описание | Пример |
|---|---|---|
path | DataPath — привязка к данным | "Объект.Организация" |
titleLocation | Размещение заголовка | "none", "left", "right", "top", "bottom", "auto" |
multiLine: true | Многострочное поле | текстовое поле, комментарий |
passwordMode: true | Режим пароля (звёздочки) | поле ввода пароля |
choiceButton: true | Кнопка выбора ("...") | ссылочное поле |
clearButton: true | Кнопка очистки ("X") | |
spinButton: true | Кнопка прокрутки | числовые поля |
dropListButton: true | Кнопка выпадающего списка | |
markIncomplete: true | Пометка незаполненного | обязательные поля |
skipOnInput: true | Пропускать при обходе Tab | |
inputHint | Подсказка в пустом поле | "Введите наименование..." |
width / height | Размер | числа |
autoMaxWidth: false | Снять авто-ограничение ширины (поле растянется) | |
maxWidth / maxHeight | Жёсткое ограничение размера | числа; обычно вместе с autoMaxWidth: false |
horizontalStretch: true | Растягивать по ширине |
| Ключ | Описание |
|---|---|
path | DataPath |
titleLocation | Размещение заголовка |
Радиокнопки или тумблер для выбора одного значения из списка.
| Ключ | Описание | Пример |
|---|---|---|
path | DataPath — привязка к реквизиту | "СпособКурса" |
radioButtonType | Вид переключателя | "Auto" (по умолчанию), "RadioButtons", "Tumbler" |
columnsCount | Число колонок раскладки | 1, 2, ... |
titleLocation | Размещение заголовка | по умолчанию "none" |
choiceList | Список вариантов: массив {value, presentation} | см. ниже |
choiceList[*]:
| Ключ | Описание |
|---|---|
value | Значение варианта. Строка/число/булево; для перечисления — "Enum.ИмяТипа.EnumValue.ИмяЗначения" |
presentation | Текст рядом с переключателем. Строка (русский) либо объект {ru, en, ...} для мультиязычности |
{
"radio": "СпособКурса",
"path": "Объект.СпособУстановкиКурса",
"radioButtonType": "Auto",
"choiceList": [
{ "value": "Enum.СпособыКурса.EnumValue.Авто", "presentation": { "ru": "Автоматически", "en": "Automatic" } },
{ "value": "Enum.СпособыКурса.EnumValue.Ручной", "presentation": "вручную" }
]
}
| Ключ | Описание |
|---|---|
title | Текст надписи (обязательно) |
hyperlink: true | Сделать ссылкой |
width / height | Размер |
Значение ключа задаёт ориентацию: "vertical", "horizontalIfPossible", "alwaysHorizontal".
| Ключ | Описание |
|---|---|
behavior | Поведение группы: "collapsible" (сворачиваемая) / "popup" (всплывающая). Опустить = обычная |
showTitle: true | Показывать заголовок группы |
united: false | Левый край полей ввода выравнивается только в пределах этой группы (по умолчанию true — сквозное выравнивание по самому длинному заголовку, в т.ч. с соседними группами) |
collapsed: true | Для behavior: "collapsible" / "popup" — группа создаётся свёрнутой |
representation | "none", "normal", "weak", "strong" |
children: [...] | Вложенные элементы |
Важно: таблица требует связанный реквизит формы типа ValueTable с колонками (см. раздел "Связки").
| Ключ | Описание |
|---|---|
path | DataPath (привязка к реквизиту-таблице) |
columns: [...] | Колонки — массив элементов (обычно input) |
changeRowSet: true | Разрешить добавление/удаление строк |
changeRowOrder: true | Разрешить перемещение строк |
height | Высота в строках таблицы |
header: false | Скрыть шапку |
footer: true | Показать подвал |
commandBarLocation | "None", "Top", "Bottom", "Auto" |
searchStringLocation | "None", "Top", "Bottom", "CommandBar", "PullFromTop", "Auto" |
choiceMode: true | Режим выбора (для форм выбора) |
initialTreeView | "ExpandTopLevel" и др. (иерархические списки) |
enableDrag: true | Разрешить перетаскивание |
enableStartDrag: true | Разрешить начало перетаскивания |
rowPictureDataPath | Путь к картинке строки (напр. "Список.DefaultPicture") |
tableAutofill: false | Управление Autofill внутреннего AutoCommandBar |
Колонки можно группировать через columnGroup (см. ниже).
Используется только внутри columns таблицы. Значение ключа задаёт ориентацию: "horizontal", "vertical", "inCell" (склеивает колонки в одну ячейку шапки). Допускается вложение columnGroup в columnGroup.
| Ключ | Описание |
|---|---|
name | Имя элемента (рекомендуется задавать явно) |
title | Заголовок группы |
showTitle: false | Скрыть заголовок |
showInHeader: true/false | Показывать ли группу в шапке таблицы |
width | Ширина |
horizontalStretch: false | Растягивание |
children: [...] | Колонки внутри группы (input, labelField, picField, вложенный columnGroup …) |
{ "table": "Список", "path": "Список", "columns": [
{ "columnGroup": "horizontal", "name": "ГруппаДата", "title": "Срок", "children": [
{ "input": "СрокИсполнения", "path": "Список.СрокИсполнения" },
{ "labelField": "Просрочено", "path": "Список.Просрочено" }
]},
{ "columnGroup": "inCell", "name": "ГруппаИсполнитель", "showInHeader": true, "children": [
{ "input": "Исполнитель", "path": "Список.Исполнитель" }
]},
{ "input": "Комментарий", "path": "Список.Комментарий" }
]}
PictureField, привязанный к булеву/числу, рисует иконку только при заданном valuesPicture:
| Ключ | Описание |
|---|---|
valuesPicture | Ref картинки значения: "StdPicture.Favorites", "CommonPicture.X" |
loadTransparent: true | Скрыть кадр «нет значения» |
| Ключ (pages) | Описание |
|---|---|
pagesRepresentation | "None", "TabsOnTop", "TabsOnBottom" и др. |
children: [...] | Массив page |
| Ключ (page) | Описание |
|---|---|
title | Заголовок вкладки |
group | Ориентация внутри страницы |
children: [...] | Содержимое страницы |
| Ключ | Описание |
|---|---|
command | Имя команды формы → Form.Command.Имя |
stdCommand | Стандартная команда: "Close" → Form.StandardCommand.Close; с точкой: "Товары.Add" → Form.Item.Товары.StandardCommand.Add |
defaultButton: true | Кнопка по умолчанию |
type | "usual", "hyperlink". По умолчанию "usual". Конкретный XML-вид (UsualButton/Hyperlink/CommandBarButton/CommandBarHyperlink) подставляется автоматически по контексту |
picture | Картинка кнопки |
representation | "Auto", "Text", "Picture", "PictureAndText" |
locationInCommandBar | "Auto", "InCommandBar", "InAdditionalSubmenu" |
Дополнительная пользовательская панель команд, размещается как обычный элемент в layout формы.
| Ключ | Описание |
|---|---|
autofill: true | Автозаполнение стандартными командами |
children: [...] | Кнопки панели |
Наполняет встроенную AutoCommandBar формы (id=-1) кастомными кнопками. Указывать только если нужно добавить свои кнопки на главную панель или явно управлять автозаполнением.
| Ключ | Описание |
|---|---|
autofill: true/false | Автозаполнение стандартными командами |
horizontalAlign | "Left" / "Center" / "Right" |
children: [...] | Кнопки/popup |
{ "autoCmdBar": "ФормаКоманднаяПанель", "autofill": true, "children": [
{ "button": "ИзменитьВыделенные", "command": "ИзменитьВыделенные",
"locationInCommandBar": "InAdditionalSubmenu" }
]}
Кнопки основных действий формы и подменю размещают здесь, а не в отдельной группе на форме. Отдельной кнопкой в layout — только если она логически привязана к конкретному полю или группе.
| Ключ | Описание |
|---|---|
title | Заголовок подменю |
children: [...] | Кнопки подменю |
Используется внутри cmdBar для группировки кнопок в подменю:
{ "cmdBar": "Панель", "children": [
{ "popup": "Добавить", "title": "Добавить", "children": [
{ "button": "ДобавитьСтроку", "stdCommand": "Товары.Add" },
{ "button": "ДобавитьИзДокумента", "command": "ДобавитьИзДокумента", "title": "Из документа" }
]}
]}
{ "name": "Объект", "type": "DataProcessorObject.Загрузка", "main": true }
{ "name": "Список", "type": "DynamicList", "main": true, "settings": {
"mainTable": "Catalog.Номенклатура", "dynamicDataRead": true
}}
{ "name": "Итого", "type": "decimal(15,2)" }
{ "name": "Таблица", "type": "ValueTable", "columns": [
{ "name": "Номенклатура", "type": "CatalogRef.Номенклатура" },
{ "name": "Количество", "type": "decimal(10,3)" }
]}
savedData: true — сохраняемые данныеmain: true — главный реквизит формы (например, основной *Object.*, DynamicList, *RecordSet.*){ "name": "Загрузить", "action": "ЗагрузитьОбработка", "shortcut": "Ctrl+Enter" }
title — заголовок (если отличается от name)picture — картинка командыПримитивные:
| DSL | XML |
|---|---|
"string" / "string(100)" | xs:string + StringQualifiers |
"decimal(15,2)" | xs:decimal + NumberQualifiers |
"decimal(10,0,nonneg)" | с AllowedSign=Nonnegative |
"boolean" | xs:boolean |
"date" / "dateTime" / "time" | xs:dateTime + DateFractions |
Ссылочные и объектные (cfg:Prefix.Name):
| DSL | Описание |
|---|---|
"CatalogRef.XXX" / "CatalogObject.XXX" | Справочник |
"DocumentRef.XXX" / "DocumentObject.XXX" | Документ |
"EnumRef.XXX" | Перечисление |
"DataProcessorObject.XXX" / "ReportObject.XXX" | Обработка / Отчёт |
"InformationRegisterRecordSet.XXX" | Набор записей регистра сведений |
"AccumulationRegisterRecordSet.XXX" | Набор записей регистра накопления |
"DynamicList" | Динамический список |
Также допустимы: ChartOfAccountsRef/Object, ChartOfCharacteristicTypesRef/Object, ChartOfCalculationTypesRef/Object, ExchangePlanRef/Object, BusinessProcessRef/Object, TaskRef/Object, AccountingRegisterRecordSet, InformationRegisterRecordManager, ConstantsSet.
Платформенные:
| DSL | XML |
|---|---|
"ValueTable" | v8:ValueTable |
"ValueTree" | v8:ValueTree |
"ValueList" | v8:ValueListType |
"TypeDescription" | v8:TypeDescription |
"UUID" | v8:UUID |
"FormattedString" | v8ui:FormattedString |
"Picture" / "Color" / "Font" | v8ui:* |
"DataCompositionSettings" | dcsset:DataCompositionSettings |
"Type1 | Type2" | составной тип (несколько <v8:Type>) |
Недопустимые типы (XDTO-ошибка при загрузке):
FormDataStructure,FormDataCollection,FormDataTree— runtime-типы 1С, не существуют в XML-схеме. Вместо них используйтеCatalogObject.XXX,DocumentObject.XXX,DataProcessorObject.XXX,ValueTable,ValueTree.
Таблица и некоторые поля требуют связанный реквизит. Элемент ссылается на реквизит через path.
Таблица — элемент table + реквизит ValueTable:
{
"elements": [
{ "table": "Товары", "path": "Объект.Товары", "columns": [
{ "input": "Номенклатура", "path": "Объект.Товары.Номенклатура" }
]}
],
"attributes": [
{ "name": "Объект", "type": "DataProcessorObject.Загрузка", "main": true,
"columns": [
{ "name": "Товары", "type": "ValueTable", "columns": [
{ "name": "Номенклатура", "type": "CatalogRef.Номенклатура" }
]}
]
}
]
}
Или, если таблица привязана к реквизиту формы (не к Объект):
{
"elements": [
{ "table": "ТаблицаДанных", "path": "ТаблицаДанных", "columns": [
{ "input": "Наименование", "path": "ТаблицаДанных.Наименование" }
]}
],
"attributes": [
{ "name": "ТаблицаДанных", "type": "ValueTable", "columns": [
{ "name": "Наименование", "type": "string(150)" }
]}
]
}
{
"title": "Загрузка из файла",
"properties": { "autoTitle": false },
"events": { "OnCreateAtServer": "ПриСозданииНаСервере" },
"elements": [
{ "group": "horizontal", "name": "ГруппаФайл", "children": [
{ "input": "ИмяФайла", "path": "ИмяФайла", "title": "Файл", "inputHint": "Выберите файл...", "choiceButton": true, "events": { "StartChoice": "ИмяФайлаНачалоВыбора" } },
{ "check": "ПерваяСтрокаЗаголовок", "path": "ПерваяСтрокаЗаголовок" }
]},
{ "input": "Результат", "path": "Результат", "multiLine": true, "height": 8, "readOnly": true, "title": "Лог" },
{ "autoCmdBar": "ФормаКоманднаяПанель", "children": [
{ "button": "Загрузить", "command": "Загрузить", "defaultButton": true },
{ "button": "Закрыть", "stdCommand": "Close" }
]}
],
"attributes": [
{ "name": "Объект", "type": "ExternalDataProcessorObject.ЗагрузкаИзФайла", "main": true },
{ "name": "ИмяФайла", "type": "string" },
{ "name": "ПерваяСтрокаЗаголовок", "type": "boolean" },
{ "name": "Результат", "type": "string" }
],
"commands": [
{ "name": "Загрузить", "action": "ЗагрузитьОбработка", "shortcut": "Ctrl+Enter" }
]
}
{
"title": "Мастер настройки",
"properties": { "autoTitle": false },
"elements": [
{ "pages": "СтраницыМастера", "pagesRepresentation": "None", "children": [
{ "page": "Шаг1", "title": "Параметры", "children": [
{ "input": "Параметр1", "path": "Параметр1" }
]},
{ "page": "Шаг2", "title": "Результат", "children": [
{ "input": "Итог", "path": "Итог", "readOnly": true }
]}
]},
{ "group": "horizontal", "name": "Навигация", "children": [
{ "button": "Назад", "command": "Назад", "title": "< Назад" },
{ "button": "Далее", "command": "Далее", "title": "Далее >" }
]}
],
"attributes": [
{ "name": "Объект", "type": "ExternalDataProcessorObject.Мастер", "main": true },
{ "name": "Параметр1", "type": "string" },
{ "name": "Итог", "type": "string" }
],
"commands": [
{ "name": "Назад", "action": "НазадОбработка" },
{ "name": "Далее", "action": "ДалееОбработка" }
]
}
{
"title": "Просмотр данных",
"elements": [
{ "group": "horizontal", "name": "Фильтр", "children": [
{ "input": "Период", "path": "Период", "events": { "OnChange": "ПериодПриИзменении" } },
{ "input": "Организация", "path": "Организация", "events": { "OnChange": "ОрганизацияПриИзменении" } }
]},
{ "table": "Данные", "path": "Данные", "changeRowSet": true, "columns": [
{ "input": "Дата", "path": "Данные.Дата" },
{ "input": "Сумма", "path": "Данные.Сумма" },
{ "input": "Комментарий", "path": "Данные.Комментарий" }
]}
],
"attributes": [
{ "name": "Объект", "type": "ExternalDataProcessorObject.Просмотр", "main": true },
{ "name": "Период", "type": "date" },
{ "name": "Организация", "type": "string" },
{ "name": "Данные", "type": "ValueTable", "columns": [
{ "name": "Дата", "type": "date" },
{ "name": "Сумма", "type": "decimal(15,2)" },
{ "name": "Комментарий", "type": "string(200)" }
]}
]
}
Описанного выше хватает для большинства форм. Под конкретную задачу подгрузите файл из references/:
dynamic-list.md — форма списка: источник, отбор, сортировка, группировки, параметры запросаappearance.md — условное и статическое оформление элементов (цвета/шрифты/рамки)choice-params.md — параметры и связи выбора у полей вводаcommand-interface.md — командный интерфейс формыroles-access.md — пользовательская видимость и доступ по ролямcompanion-panels.md — контент расширенной подсказки и контекстного менюspecial-fields.md — поля документа/датчика (HTML, текст, индикатор, ползунок)charts.md — диаграммы и планировщикreport-form.md — свойства формы отчётаtype-system-advanced.md — наборы и составные типыtable-advanced.md — расширенные свойства таблицlayout-advanced.md — тонкая компоновка и геометрия/form-compile генерирует Form.xml и автоматически регистрирует <Form> в ChildObjects родительского объекта (если OutputPath следует конвенции .../TypePlural/ObjectName/Forms/FormName/Ext/Form.xml).ФормаСписка.xml) и Module.bsl создаёт /form-add. Если /form-add ещё не вызывался — вызови после /form-compile. Он не перезаписывает существующий Form.xml./form-validate, /form-info./form-validate <OutputPath> — проверка корректности XML
/form-info <OutputPath> — визуальная сводка структуры
ExternalDataProcessorObject.ИмяОбработки (не DataProcessorObject)ИмяРеквизита), а не Объект.ИмяРеквизита — у внешних обработок нет реквизитов объекта в метаданныхCatalogRef.XXX, DocumentRef.XXX допустимы в XML, но для сборки EPF потребуется база с целевой конфигурацией (см. /epf-build)npx claudepluginhub nikolay-shirokov/cc-1c-skills --plugin 1c-skills-pyReference for 1C managed form layout patterns including document, data processor, list, catalog element, and wizard forms. Use before designing forms to apply archetypes, naming conventions, and advanced techniques.
Generates paste-ready YAML for Power Apps Canvas Apps from UI mockups, screenshots of existing screens, or text descriptions. Replicates designs, improves screens, or builds new ones.
Generates and reviews Odoo XML views (Form, List, Kanban, Search, Calendar, Graph) for Odoo 14-17, with correct visibility syntax, groups, and domain usage.