--- name: epf-expert description: > Этот скилл MUST быть вызван для всех операций с внешними обработками 1С (EPF): создание (init), сборка (build), разборка (dump), добавление формы (add-form), регистрация в БСП (bsp-init), добавление команды БСП (bsp-add-command). SHOULD также вызывать при любой работе с EPF-файлами и их исходниками. Do NOT использовать для внешних отчётов (ERF) — используй erf-expert; для добавления формы к объекту конфигурации — form-add. argument-hint: " [args...] # modes: init|build|dump|add-form|bsp-init|bsp-add-command" allowed-tools: - Bash - Read - Write - Edit - Glob - Grep --- # /epf-expert — Внешние обработки 1С (EPF) Единый скилл для всех операций с внешними обработками EPF. Выбери нужный режим: | Режим | Что делает | |-------|-----------| | `init` | Создать новую пустую обработку (scaffold XML) | | `build` | Собрать EPF из XML-исходников | | `dump` | Разобрать EPF в XML-исходники | | `add-form` | Добавить управляемую форму к обработке | | `bsp-init` | Зарегистрировать обработку в подсистеме БСП | | `bsp-add-command` | Добавить команду в регистрацию БСП | --- ## Режим: init — создание обработки Генерирует минимальный набор XML-исходников для внешней обработки (EPF) 1С. ### Usage ``` /epf-expert init [Synonym] [SrcDir] ``` | Параметр | Обязательный | По умолчанию | Описание | |----------|:------------:|--------------|----------| | Name | да | — | Имя обработки (латиница/кириллица) | | Synonym | нет | = Name | Синоним (отображаемое имя) | | SrcDir | нет | `src` | Каталог исходников относительно CWD | ### Команда ```powershell powershell.exe -NoProfile -File .claude/skills/epf-expert/scripts/epf-init.ps1 -Name "" [-Synonym ""] [-SrcDir ""] ``` ### Что создаётся ``` / ├── .xml # Корневой файл метаданных (4 UUID) └── / └── Ext/ └── ObjectModule.bsl # Модуль объекта с 3 регионами ``` - Корневой XML содержит `MetaDataObject/ExternalDataProcessor` с пустыми `DefaultForm` и `ChildObjects` - ClassId фиксирован: `c3831ec8-d8d5-4f93-8a22-f9bfae07327f` - Файл создаётся в UTF-8 с BOM ### Дальнейшие шаги - Добавить форму: `/epf-expert add-form` - Добавить макет: `/mxl-expert template-add` - Добавить справку: `/help-add` - Собрать EPF: `/epf-expert build` --- ## Режим: build — сборка EPF Собирает EPF файл из XML-исходников с помощью платформы 1С. ### Usage ``` /epf-expert build [SrcDir] [OutDir] ``` | Параметр | Обязательный | По умолчанию | Описание | |----------|:------------:|--------------|----------| | Name | да | — | Имя объекта (имя корневого XML) | | SrcDir | нет | `src` | Каталог исходников | | OutDir | нет | `build` | Каталог для результата | ### Параметры подключения Прочитай `.v8-project.json` из корня проекта. Возьми `v8path` и разреши базу: 1. Если пользователь указал параметры (путь, сервер) — используй напрямую 2. Если указал базу по имени — ищи в `.v8-project.json` 3. Если не указал — сопоставь ветку Git с `databases[].branches` 4. Если ветка не совпала — используй `default` 5. Если `.v8-project.json` нет — создай пустую ИБ в `./base` Если `v8path` не задан: `Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort -Desc | Select -First 1` ### Команда ```powershell powershell.exe -NoProfile -File .claude/skills/epf-expert/scripts/epf-build.ps1 -InfoBasePath "<путь>" -SourceFile "src\.xml" -OutputFile "build\.epf" ``` | Параметр | Обязательный | Описание | |----------|:------------:|----------| | `-V8Path <путь>` | нет | Каталог bin платформы | | `-InfoBasePath <путь>` | * | Файловая база | | `-InfoBaseServer <сервер>` | * | Сервер 1С | | `-InfoBaseRef <имя>` | * | Имя базы на сервере | | `-UserName <имя>` | нет | Пользователь | | `-Password <пароль>` | нет | Пароль | | `-SourceFile <путь>` | да | Корневой XML исходников | | `-OutputFile <путь>` | да | Выходной EPF файл | > `*` — нужен либо `-InfoBasePath`, либо пара `-InfoBaseServer` + `-InfoBaseRef` **Примечание:** Если объект использует ссылочные типы конфигурации — сборка в пустой базе упадёт с ошибкой XDTO. Зарегистрируй базу с целевой конфигурацией через `/db-list add`. --- ## Режим: dump — разборка EPF Разбирает EPF файл в XML-исходники с помощью платформы 1С (иерархический формат). ### Usage ``` /epf-expert dump [OutDir] ``` | Параметр | Обязательный | По умолчанию | Описание | |----------|:------------:|--------------|----------| | File | да | — | Путь к EPF файлу | | OutDir | нет | `src` | Каталог для выгрузки исходников | ### Параметры подключения Аналогично режиму `build` — разрешение базы через `.v8-project.json`. ### Команда ```powershell powershell.exe -NoProfile -File .claude/skills/epf-expert/scripts/epf-dump.ps1 -InfoBasePath "<путь>" -InputFile "<файл>.epf" -OutputDir "src" ``` | Параметр | Обязательный | Описание | |----------|:------------:|----------| | `-V8Path <путь>` | нет | Каталог bin платформы | | `-InfoBasePath <путь>` | * | Файловая база | | `-InfoBaseServer <сервер>` | * | Сервер 1С | | `-InfoBaseRef <имя>` | * | Имя базы на сервере | | `-UserName <имя>` | нет | Пользователь | | `-Password <пароль>` | нет | Пароль | | `-InputFile <путь>` | да | Путь к EPF файлу | | `-OutputDir <путь>` | да | Каталог для выгрузки | | `-Format <формат>` | нет | `Hierarchical` (по умолч.) / `Plain` | ### Структура результата (Hierarchical) ``` / ├── .xml └── / ├── Ext/ │ └── ObjectModule.bsl ├── Forms/ │ ├── .xml │ └── /Ext/Form.xml └── Templates/ ├── .xml └── /Ext/Template. ``` --- ## Режим: add-form — добавление формы Создаёт управляемую форму и регистрирует её в корневом XML обработки. ### Usage ``` /epf-expert add-form [Synonym] [--main] ``` | Параметр | Обязательный | По умолчанию | Описание | |---------------|:------------:|--------------|----------| | ProcessorName | да | — | Имя обработки (должна существовать) | | FormName | да | — | Имя формы | | Synonym | нет | = FormName | Синоним формы | | --main | нет | авто | Установить как форму по умолчанию | | SrcDir | нет | `src` | Каталог исходников | ### Команда ```powershell powershell.exe -NoProfile -File .claude/skills/epf-expert/scripts/add-form.ps1 -ProcessorName "" -FormName "" [-Synonym ""] [-Main] [-SrcDir ""] ``` ### Что создаётся ``` //Forms/ ├── .xml # Метаданные формы (1 UUID) └── / └── Ext/ ├── Form.xml # Описание формы (logform namespace) └── Form/ └── Module.bsl # BSL-модуль с 5 регионами ``` - `/.xml` — добавляется `
` в `ChildObjects`, обновляется `DefaultForm` - FormType: Managed; UsePurposes: PlatformApplication, MobilePlatformApplication - AutoCommandBar с id=-1; Реквизит "Объект" с MainAttribute=true --- ## Режим: bsp-init — регистрация в БСП Добавляет в модуль объекта обработки функцию `СведенияОВнешнейОбработке()` для подсистемы БСП. ### Usage ``` /epf-expert bsp-init <Вид> [Назначение...] ``` | Параметр | Обязательный | По умолчанию | Описание | |---------------|:------------:|--------------|----------| | ProcessorName | да | — | Имя обработки | | Вид | да | — | Вид обработки (см. маппинг) | | Назначение | * | — | Объекты для назначаемых видов | | SrcDir | нет | `src` | Каталог исходников | \* Обязательно для: ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов. ### Маппинг вида обработки | Пользователь пишет | Вид | API-метод | |---------------------|-----|-----------| | доп обработка, глобальная | ДополнительнаяОбработка | `ВидОбработкиДополнительнаяОбработка()` | | доп отчёт, глобальный отчёт | ДополнительныйОтчет | `ВидОбработкиДополнительныйОтчет()` | | заполнение | ЗаполнениеОбъекта | `ВидОбработкиЗаполнениеОбъекта()` | | отчёт (назначаемый) | Отчет | `ВидОбработкиОтчет()` | | печатная форма, печать | ПечатнаяФорма | `ВидОбработкиПечатнаяФорма()` | | создание связанных объектов | СозданиеСвязанныхОбъектов | `ВидОбработкиСозданиеСвязанныхОбъектов()` | ### Тип команды по умолчанию | Вид | ТипКоманды | |-----|-----------| | ДополнительнаяОбработка | `ТипКомандыОткрытиеФормы()` | | ДополнительныйОтчет | `ТипКомандыОткрытиеФормы()` | | ЗаполнениеОбъекта | `ТипКомандыВызовСерверногоМетода()` | | Отчет | `ТипКомандыОткрытиеФормы()` | | ПечатнаяФорма | `ТипКомандыВызовСерверногоМетода()` | | СозданиеСвязанныхОбъектов | `ТипКомандыВызовСерверногоМетода()` | ### Шаблон функции ```bsl Функция СведенияОВнешнейОбработке() Экспорт МетаданныеОбработки = Метаданные(); ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1"); ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.{{ВидОбработки}}; ПараметрыРегистрации.Версия = "1.0"; {{СЕКЦИЯ_НАЗНАЧЕНИЕ}} // только для назначаемых видов НоваяКоманда = ПараметрыРегистрации.Команды.Добавить(); НоваяКоманда.Представление = МетаданныеОбработки.Представление(); НоваяКоманда.Идентификатор = МетаданныеОбработки.Имя; НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.{{ТипКоманды}}; НоваяКоманда.ПоказыватьОповещение = Ложь; {{СЕКЦИЯ_МОДИФИКАТОР}} // только для ПечатнаяФорма: НоваяКоманда.Модификатор = "ПечатьMXL" Возврат ПараметрыРегистрации; КонецФункции ``` ### Инструкции 1. Найди `ObjectModule.bsl`: `src/{{ProcessorName}}/Ext/ObjectModule.bsl` 2. Если `СведенияОВнешнейОбработке` уже есть — сообщи, не дублируй 3. Найди область `#Область ПрограммныйИнтерфейс` и вставь функцию внутрь 4. Для видов с серверным обработчиком — добавь соответствующую процедуру после функции 5. Используй табы для отступов --- ## Режим: bsp-add-command — добавление команды БСП Добавляет команду в существующую функцию `СведенияОВнешнейОбработке()`. Предварительно должен быть вызван `bsp-init`. ### Usage ``` /epf-expert bsp-add-command <Идентификатор> [ТипКоманды] [Представление] ``` | Параметр | Обязательный | По умолчанию | Описание | |---------------|:------------:|--------------|----------| | ProcessorName | да | — | Имя обработки | | Идентификатор | да | — | Внутреннее имя команды (латиница) | | ТипКоманды | нет | из вида | Тип запуска | | Представление | нет | = Идентификатор | Отображаемое имя | | SrcDir | нет | `src` | Каталог исходников | ### Маппинг типов команд | Пользователь пишет | ТипКоманды | |--------------------|-----------| | открыть форму | `ТипКомандыОткрытиеФормы()` | | клиентский метод | `ТипКомандыВызовКлиентскогоМетода()` | | серверный метод | `ТипКомандыВызовСерверногоМетода()` | | заполнение формы | `ТипКомандыЗаполнениеФормы()` | | сценарий | `ТипКомандыСценарийВБезопасномРежиме()` | ### Шаблон вставляется перед `Возврат ПараметрыРегистрации` ```bsl НоваяКоманда = ПараметрыРегистрации.Команды.Добавить(); НоваяКоманда.Представление = НСтр("ru = '{{Представление}}'"); НоваяКоманда.Идентификатор = "{{Идентификатор}}"; НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.{{ТипКоманды}}; НоваяКоманда.ПоказыватьОповещение = Ложь; ``` ### Инструкции 1. Найди и прочитай `ObjectModule.bsl` 2. Убедись что `СведенияОВнешнейОбработке()` существует — если нет, предложи `bsp-init` 3. Определи вид обработки из существующего кода 4. Вставь блок команды перед `Возврат ПараметрыРегистрации` 5. Добавь обработчик: для серверных — в `ObjectModule.bsl`, для клиентских — в модуль формы 6. Если обработчик уже есть — добавь ветку `ИначеЕсли`, не дублируй процедуру