From 43333f1481874e710381d6c3bf52510191e70628 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 7 Feb 2026 19:05:27 +0300 Subject: [PATCH] Initial commit: EPF skills for Claude Code 7 skills for working with 1C external data processor XML sources: - epf-init: scaffold a new processor (root XML + ObjectModule.bsl) - epf-add-form: add a managed form with BSL module - epf-add-template: add a template (HTML/Text/SpreadsheetDocument/BinaryData) - epf-remove-form: remove a form and update root XML - epf-remove-template: remove a template and update root XML - epf-build: build EPF from XML (documentation only) - epf-dump: dump EPF to XML (documentation only) Includes XML format spec and build/dump command reference. Co-Authored-By: Claude Opus 4.6 --- .claude/skills/epf-add-form/SKILL.md | 63 ++ .../skills/epf-add-form/scripts/add-form.ps1 | 202 ++++++ .claude/skills/epf-add-template/SKILL.md | 62 ++ .../epf-add-template/scripts/add-template.ps1 | 166 +++++ .claude/skills/epf-build/SKILL.md | 78 +++ .claude/skills/epf-dump/SKILL.md | 93 +++ .claude/skills/epf-init/SKILL.md | 54 ++ .claude/skills/epf-init/scripts/init.ps1 | 86 +++ .claude/skills/epf-remove-form/SKILL.md | 49 ++ .../epf-remove-form/scripts/remove-form.ps1 | 84 +++ .claude/skills/epf-remove-template/SKILL.md | 48 ++ .../scripts/remove-template.ps1 | 78 +++ .gitignore | 11 + README.md | 90 +++ docs/1c-xml-format-spec.md | 655 ++++++++++++++++++ docs/build-spec.md | 74 ++ 16 files changed, 1893 insertions(+) create mode 100644 .claude/skills/epf-add-form/SKILL.md create mode 100644 .claude/skills/epf-add-form/scripts/add-form.ps1 create mode 100644 .claude/skills/epf-add-template/SKILL.md create mode 100644 .claude/skills/epf-add-template/scripts/add-template.ps1 create mode 100644 .claude/skills/epf-build/SKILL.md create mode 100644 .claude/skills/epf-dump/SKILL.md create mode 100644 .claude/skills/epf-init/SKILL.md create mode 100644 .claude/skills/epf-init/scripts/init.ps1 create mode 100644 .claude/skills/epf-remove-form/SKILL.md create mode 100644 .claude/skills/epf-remove-form/scripts/remove-form.ps1 create mode 100644 .claude/skills/epf-remove-template/SKILL.md create mode 100644 .claude/skills/epf-remove-template/scripts/remove-template.ps1 create mode 100644 .gitignore create mode 100644 README.md create mode 100644 docs/1c-xml-format-spec.md create mode 100644 docs/build-spec.md diff --git a/.claude/skills/epf-add-form/SKILL.md b/.claude/skills/epf-add-form/SKILL.md new file mode 100644 index 00000000..db154747 --- /dev/null +++ b/.claude/skills/epf-add-form/SKILL.md @@ -0,0 +1,63 @@ +--- +name: epf-add-form +description: Добавить управляемую форму к внешней обработке 1С +allowed-tools: + - Bash + - Read + - Write + - Edit + - Glob + - Grep +--- + +# /epf-add-form — Добавление формы + +Создаёт управляемую форму и регистрирует её в корневом XML обработки. + +## Usage + +``` +/epf-add-form [Synonym] [--main] +``` + +| Параметр | Обязательный | По умолчанию | Описание | +|---------------|:------------:|--------------|-------------------------------------------| +| ProcessorName | да | — | Имя обработки (должна существовать) | +| FormName | да | — | Имя формы | +| Synonym | нет | = FormName | Синоним формы | +| --main | нет | false | Установить как форму по умолчанию | +| SrcDir | нет | `src` | Каталог исходников | + +## Команда + +```powershell +pwsh -NoProfile -File .claude/skills/epf-add-form/scripts/add-form.ps1 -ProcessorName "" -FormName "" [-Synonym ""] [-Main] [-SrcDir ""] +``` + +## Что создаётся + +``` +//Forms/ +├── .xml # Метаданные формы (1 UUID) +└── / + └── Ext/ + ├── Form.xml # Описание формы (logform namespace) + └── Form/ + └── Module.bsl # BSL-модуль с 4 регионами +``` + +## Что модифицируется + +- `/.xml` — добавляется `
` в `ChildObjects`, при `--main` обновляется `DefaultForm` + +## Детали + +- FormType: Managed +- UsePurposes: PlatformApplication, MobilePlatformApplication +- AutoCommandBar с id=-1 +- Реквизит "Объект" с MainAttribute=true +- BSL-модуль содержит 5 регионов: ОбработчикиСобытийФормы, ОбработчикиСобытийЭлементовФормы, ОбработчикиКомандФормы, ОбработчикиОповещений, СлужебныеПроцедурыИФункции + +## Спецификация + +Подробности формата: `docs/1c-xml-format-spec.md` diff --git a/.claude/skills/epf-add-form/scripts/add-form.ps1 b/.claude/skills/epf-add-form/scripts/add-form.ps1 new file mode 100644 index 00000000..297f2189 --- /dev/null +++ b/.claude/skills/epf-add-form/scripts/add-form.ps1 @@ -0,0 +1,202 @@ +param( + [Parameter(Mandatory)] + [string]$ProcessorName, + + [Parameter(Mandatory)] + [string]$FormName, + + [string]$Synonym = $FormName, + + [switch]$Main, + + [string]$SrcDir = "src" +) + +$ErrorActionPreference = "Stop" + +# --- Проверки --- + +$rootXmlPath = Join-Path $SrcDir "$ProcessorName.xml" +if (-not (Test-Path $rootXmlPath)) { + Write-Error "Корневой файл обработки не найден: $rootXmlPath. Сначала выполните epf-init." + exit 1 +} + +$processorDir = Join-Path $SrcDir $ProcessorName +$formsDir = Join-Path $processorDir "Forms" +$formMetaPath = Join-Path $formsDir "$FormName.xml" + +if (Test-Path $formMetaPath) { + Write-Error "Форма уже существует: $formMetaPath" + exit 1 +} + +# --- Создание каталогов --- + +$formDir = Join-Path $formsDir $FormName +$formExtDir = Join-Path $formDir "Ext" +$formModuleDir = Join-Path $formExtDir "Form" + +New-Item -ItemType Directory -Path $formModuleDir -Force | Out-Null + +# --- Кодировка --- + +$encBom = New-Object System.Text.UTF8Encoding($true) +$encNoBom = New-Object System.Text.UTF8Encoding($false) + +# --- 1. Метаданные формы (Forms/.xml) --- + +$formUuid = [guid]::NewGuid().ToString() + +$formMetaXml = @" + + + + + $FormName + + + ru + $Synonym + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + + + +"@ + +[System.IO.File]::WriteAllText($formMetaPath, $formMetaXml, $encBom) + +# --- 2. Описание формы (Forms//Ext/Form.xml) --- + +$formXmlPath = Join-Path $formExtDir "Form.xml" + +$formXml = @" + +
+ + true + + + + + + cfg:ExternalDataProcessorObject.$ProcessorName + + true + + + +"@ + +[System.IO.File]::WriteAllText($formXmlPath, $formXml, $encBom) + +# --- 3. BSL-модуль (Forms//Ext/Form/Module.bsl) --- + +$modulePath = Join-Path $formModuleDir "Module.bsl" + +$moduleBsl = @" +#Область ОбработчикиСобытийФормы + +#КонецОбласти + +#Область ОбработчикиСобытийЭлементовФормы + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +#КонецОбласти + +#Область ОбработчикиОповещений + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +#КонецОбласти +"@ + +[System.IO.File]::WriteAllText($modulePath, $moduleBsl, $encBom) + +# --- 4. Модификация корневого XML --- + +$rootXmlFull = Resolve-Path $rootXmlPath +$xmlDoc = New-Object System.Xml.XmlDocument +$xmlDoc.PreserveWhitespace = $true +$xmlDoc.Load($rootXmlFull.Path) + +$nsMgr = New-Object System.Xml.XmlNamespaceManager($xmlDoc.NameTable) +$nsMgr.AddNamespace("md", "http://v8.1c.ru/8.3/MDClasses") + +$childObjects = $xmlDoc.SelectSingleNode("//md:ChildObjects", $nsMgr) +if (-not $childObjects) { + Write-Error "Не найден элемент ChildObjects в $rootXmlPath" + exit 1 +} + +# Добавить
перед первым