بنقرة واحدة
form-compile
1C form - compile Form.xml from JSON or object metadata.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
1C form - compile Form.xml from JSON or object metadata.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Операционный слой разработки 1С — генерация и редактирование XML-артефактов. Сборка, тесты и работа с БД вынесены в skills-1c-project-v8runner
1C EPF - create empty XML scaffold for external processor.
1C ERF - create empty report XML scaffold.
1C form - add an empty managed form to a config object.
Декомпиляция управляемой формы 1С (Form.xml) в JSON-черновик в формате form-compile. Используй для scaffold новой формы по образцу или структурного рефакторинга. Не для точечных правок
1C form - edit Form.xml elements, attributes, commands, events.
| name | form-compile |
| description | 1C form - compile Form.xml from JSON or object metadata. |
Два режима:
-FromObject) — автоматически из метаданных объекта 1С по пресету ERPПри проектировании формы с нуля (5+ элементов или нечёткие требования) — вызовите
$form-patternsдля загрузки справочника. Для простых форм (1–3 поля) — не нужно.
| Параметр | Обязательный | Описание |
|---|---|---|
| JsonPath | режим 1 | Путь к JSON-определению формы |
| OutputPath | да | Путь к выходному Form.xml |
| FromObject | режим 2 | Флаг (без значения) — генерация по метаданным объекта |
# Режим JSON DSL
python .agents/skills/form-compile/scripts/form-compile.py -JsonPath "<json>" -OutputPath "<Form.xml>"
# Режим from-object (объект и purpose выводятся из OutputPath; Document и Catalog)
python .agents/skills/form-compile/scripts/form-compile.py -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 | "horizontal" / "vertical" / "alwaysHorizontal" / "alwaysVertical" / "collapsible" |
"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 | Заголовок элемента |
visible: false | Скрыть (синоним: hidden: true) |
enabled: false | Сделать недоступным (синоним: disabled: true) |
readOnly: true | Только чтение |
on: [...] | События с автоименованием обработчиков |
handlers: {...} | Явное задание имён обработчиков: {"OnChange": "МоёИмя"} |
on)Компилятор предупреждает о неизвестных событиях. Имена регистрозависимы — используйте точно как указано.
Форма (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", "top" |
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 | Размер |
Значение ключа задаёт ориентацию: "horizontal", "vertical", "alwaysHorizontal", "alwaysVertical", "collapsible".
| Ключ | Описание |
|---|---|
showTitle: true | Показывать заголовок группы |
united: false | Левый край полей ввода выравнивается только в пределах этой группы (по умолчанию true — сквозное выравнивание по самому длинному заголовку, в т.ч. с соседними группами) |
collapsed: true | Только для "group": "collapsible" — группа создаётся свёрнутой |
representation | "none", "normal", "weak", "strong" |
children: [...] | Вложенные элементы |
Важно: таблица требует связанный реквизит формы типа ValueTable с колонками (см. раздел "Связки").
| Ключ | Описание |
|---|---|
path | DataPath (привязка к реквизиту-таблице) |
columns: [...] | Колонки — массив элементов (обычно input) |
changeRowSet: true | Разрешить добавление/удаление строк |
changeRowOrder: true | Разрешить перемещение строк |
height | Высота в строках таблицы |
header: false | Скрыть шапку |
footer: true | Показать подвал |
commandBarLocation | "None", "Top", "Auto" |
searchStringLocation | "None", "Top", "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": "Список.Комментарий" }
]}
| Ключ (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, "on": ["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": "Период", "on": ["OnChange"] },
{ "input": "Организация", "path": "Организация", "on": ["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)" }
]}
]
}
"on": ["OnChange"] → ОрганизацияПриИзменении$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)