1c-bsp-registration
Добавить функцию регистрации БСП (СведенияОВнешнейОбработке) в модуль объекта обработки
Install
npx skills add https://github.com/Desko77/claude-code-skills-1c/tree/main/skills/1c-bsp-registration
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install desko77-claude-code-skills-1c@llmmart
git clone https://github.com/Desko77/claude-code-skills-1c.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole desko77/claude-code-skills-1c collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
/epf-bsp-init - Регистрация обработки в БСП
Добавляет в модуль объекта обработки функцию СведенияОВнешнейОбработке(), необходимую для регистрации в подсистеме "Дополнительные отчеты и обработки" БСП.
Usage
/epf-bsp-init <ProcessorName> <Вид> [Назначение...]
| Параметр | Обязательный | По умолчанию | Описание |
|---|---|---|---|
| ProcessorName | да | - | Имя обработки (должна быть создана через /epf-init) |
| Вид | да | - | Вид обработки (см. маппинг ниже) |
| Назначение | * | - | Объекты метаданных для назначаемых видов |
| SrcDir | нет | src |
Каталог исходников |
* Назначение обязательно для видов: ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов.
Маппинг вида обработки
Пользователь может указать вид в свободной форме. Определи нужный по контексту:
| Пользователь пишет | Вид | API-метод |
|---|---|---|
| доп обработка, обработка, глобальная | ДополнительнаяОбработка | ВидОбработкиДополнительнаяОбработка() |
| доп отчет, глобальный отчет | ДополнительныйОтчет | ВидОбработкиДополнительныйОтчет() |
| заполнение, заполнить | ЗаполнениеОбъекта | ВидОбработкиЗаполнениеОбъекта() |
| отчет (назначаемый, для объекта) | Отчет | ВидОбработкиОтчет() |
| печатная форма, печать | ПечатнаяФорма | ВидОбработкиПечатнаяФорма() |
| создание связанных объектов | СозданиеСвязанныхОбъектов | ВидОбработкиСозданиеСвязанныхОбъектов() |
Тип команды по умолчанию
| Вид | ТипКоманды по умолчанию |
|---|---|
| ДополнительнаяОбработка | ТипКомандыОткрытиеФормы() |
| ДополнительныйОтчет | ТипКомандыОткрытиеФормы() |
| ЗаполнениеОбъекта | ТипКомандыВызовСерверногоМетода() |
| Отчет | ТипКомандыОткрытиеФормы() |
| ПечатнаяФорма | ТипКомандыВызовСерверногоМетода() |
| СозданиеСвязанныхОбъектов | ТипКомандыВызовСерверногоМетода() |
Шаблон: СведенияОВнешнейОбработке
Базовый шаблон - одинаковый для всех видов, отличаются только вызовы API-методов и условные секции.
Функция СведенияОВнешнейОбработке() Экспорт
МетаданныеОбработки = Метаданные();
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.{{ВидОбработки}};
ПараметрыРегистрации.Версия = "1.0";
{{СЕКЦИЯ_НАЗНАЧЕНИЕ}}
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = МетаданныеОбработки.Представление();
НоваяКоманда.Идентификатор = МетаданныеОбработки.Имя;
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.{{ТипКоманды}};
НоваяКоманда.ПоказыватьОповещение = Ложь;
{{СЕКЦИЯ_МОДИФИКАТОР}}
Возврат ПараметрыРегистрации;
КонецФункции
Подстановки
{{ВидОбработки}}- API-метод из таблицы маппинга вида{{ТипКоманды}}- API-метод из таблицы типа команды по умолчанию
Условные секции
{{СЕКЦИЯ_НАЗНАЧЕНИЕ}} - только для назначаемых видов (ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов). Одна строка на каждый объект:
ПараметрыРегистрации.Назначение.Добавить("Документ.СчетНаОплату");
Формат имени объекта: ИмяКлассаОбъектаМетаданного.ИмяОбъекта (например Документ.СчетНаОплату, Справочник.Контрагенты).
Для глобальных видов (ДополнительнаяОбработка, ДополнительныйОтчет) - секция не нужна, удалить вместе с пустой строкой.
{{СЕКЦИЯ_МОДИФИКАТОР}} - только для ПечатнаяФорма:
НоваяКоманда.Модификатор = "ПечатьMXL";
Для остальных видов - удалить вместе с пустой строкой.
Шаблоны серверных обработчиков
Для видов с типом команды ВызовСерверногоМетода добавь соответствующую процедуру-обработчик в ту же область ПрограммныйИнтерфейс, после СведенияОВнешнейОбработке.
Для ЗаполнениеОбъекта / СозданиеСвязанныхОбъектов
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполненияКоманды) Экспорт
// TODO: Реализация
КонецПроцедуры
Для ПечатнаяФорма
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// TODO: Реализация
КонецПроцедуры
Для ДополнительнаяОбработка / ДополнительныйОтчет (с ВызовСерверногоМетода)
Если пользователь явно выбрал серверный метод вместо открытия формы:
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
// TODO: Реализация
КонецПроцедуры
Обрати внимание: у глобальных обработок нет параметра ОбъектыНазначения.
Инструкции
- Найди
ObjectModule.bslчерез Glob:src/{{ProcessorName}}/Ext/ObjectModule.bsl - Прочитай файл
- Если
СведенияОВнешнейОбработкеуже есть - сообщи пользователю и не дублируй - Если файл не найден - предложи сначала вызвать
/epf-init - Найди область
#Область ПрограммныйИнтерфейс...#КонецОбласти - Вставь функцию
СведенияОВнешнейОбработке()внутрь этой области - Если вид требует серверный обработчик - вставь его тоже в эту область, после функции
- Используй табы для отступов (как в исходном файле)
Пример
Пользователь: /epf-bsp-init МояОбработка печатная форма для Документ.СчетНаОплату
Результат в ObjectModule.bsl:
#Область ОписаниеПеременных
#КонецОбласти
#Область ПрограммныйИнтерфейс
Функция СведенияОВнешнейОбработке() Экспорт
МетаданныеОбработки = Метаданные();
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.Назначение.Добавить("Документ.СчетНаОплату");
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = МетаданныеОбработки.Представление();
НоваяКоманда.Идентификатор = МетаданныеОбработки.Имя;
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Ложь;
НоваяКоманда.Модификатор = "ПечатьMXL";
Возврат ПараметрыРегистрации;
КонецФункции
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// TODO: Реализация
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#КонецОбласти
Дальнейшие шаги
- Добавить еще команду:
/epf-bsp-add-command - Добавить форму:
/epf-add-form - Добавить макет:
/template-add - Собрать EPF:
/epf-build
Files (claude-code-skills-1c)
-
evals
-
evals.json 3.9 KB
{ "skill_name": "1c-bsp-registration", "evals": [ { "id": "register-print-form", "prompt": "Зарегистрируй обработку ФормированиеНакладных как форму печати для Документ.РеализацияТоваровУслуг. Исходники в src/.", "expected_output": "В src/ФормированиеНакладных/Ext/ObjectModule.bsl в регионе PublicInterface добавлена функция ExternalDataProcessorInfo() с видом PrintForm и назначением Document.РеализацияТоваровУслуг, а также процедура Print.", "expectations": [ "В ObjectModule.bsl появилась функция ExternalDataProcessorInfo() Export в регионе PublicInterface", "Функция ExternalDataProcessorInfo содержит RegistrationParameters.Kind = AdditionalReportsAndDataProcessorsClientServer.ProcessorKindPrintForm()", "Функция ExternalDataProcessorInfo содержит RegistrationParameters.Purpose.Add(\"Document.РеализацияТоваровУслуг\")", "Поле NewCommand.Modifier = \"PrintMXL\" присутствует в функции", "Добавлена процедура Print(ObjectsArray, PrintFormsCollection, PrintObjects, OutputParameters) Export" ], "expect": [ "ExternalDataProcessorInfo", "PrintForm", "Document\\.РеализацияТоваровУслуг" ], "forbid": [ "AdditionalDataProcessor" ], "should_activate": true }, { "id": "register-object-filling", "prompt": "Зарегистрируй обработку ЗаполнениеРеквизитов как заполнение объекта для Справочник.Контрагенты. Исходники в src/.", "expected_output": "В ObjectModule.bsl добавлена ExternalDataProcessorInfo() с видом ObjectFilling, назначением Catalog.Контрагенты и процедурой ExecuteCommand с параметром TargetObjects.", "expectations": [ "Функция ExternalDataProcessorInfo содержит ProcessorKindObjectFilling()", "Функция ExternalDataProcessorInfo содержит RegistrationParameters.Purpose.Add(\"Catalog.Контрагенты\")", "NewCommand.Use содержит CommandTypeServerMethodCall()", "Добавлена процедура ExecuteCommand(CommandID, TargetObjects, CommandExecutionParameters) Export" ], "expect": [ "ExternalDataProcessorInfo", "ObjectFilling", "Catalog\\.Контрагенты" ], "forbid": [ "PrintForm" ], "should_activate": true }, { "id": "register-global", "prompt": "Зарегистрируй обработку УниверсальнаяОбработка как дополнительную обработку (глобальная). Исходники в src/.", "expected_output": "В ObjectModule.bsl добавлена ExternalDataProcessorInfo() с видом AdditionalDataProcessor, без секции Purpose, с командой CommandTypeOpenForm().", "expectations": [ "Функция ExternalDataProcessorInfo содержит ProcessorKindAdditionalDataProcessor()", "В функции ExternalDataProcessorInfo отсутствует вызов RegistrationParameters.Purpose.Add (глобальная обработка)", "NewCommand.Use содержит CommandTypeOpenForm()", "Поле NewCommand.Modifier отсутствует (не форма печати)" ], "expect": [ "ExternalDataProcessorInfo", "AdditionalDataProcessor" ], "forbid": [ "ObjectFilling", "PrintForm" ], "should_activate": true } ] }
-
-
SKILL.md 12.1 KB
--- name: 1c-bsp-registration description: Добавить функцию регистрации БСП (СведенияОВнешнейОбработке) в модуль объекта обработки argument-hint: <ProcessorName> <Вид> allowed-tools: - Read - Edit - Glob - Grep --- # /epf-bsp-init - Регистрация обработки в БСП Добавляет в модуль объекта обработки функцию `СведенияОВнешнейОбработке()`, необходимую для регистрации в подсистеме "Дополнительные отчеты и обработки" БСП. ## Usage ``` /epf-bsp-init <ProcessorName> <Вид> [Назначение...] ``` | Параметр | Обязательный | По умолчанию | Описание | |---------------|:------------:|--------------|---------------------------------------------------------| | ProcessorName | да | - | Имя обработки (должна быть создана через `/epf-init`) | | Вид | да | - | Вид обработки (см. маппинг ниже) | | Назначение | * | - | Объекты метаданных для назначаемых видов | | SrcDir | нет | `src` | Каталог исходников | \* Назначение обязательно для видов: ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов. ## Маппинг вида обработки Пользователь может указать вид в свободной форме. Определи нужный по контексту: | Пользователь пишет | Вид | API-метод | |-------------------------------------------|----------------------------|----------------------------------------------| | доп обработка, обработка, глобальная | ДополнительнаяОбработка | `ВидОбработкиДополнительнаяОбработка()` | | доп отчет, глобальный отчет | ДополнительныйОтчет | `ВидОбработкиДополнительныйОтчет()` | | заполнение, заполнить | ЗаполнениеОбъекта | `ВидОбработкиЗаполнениеОбъекта()` | | отчет (назначаемый, для объекта) | Отчет | `ВидОбработкиОтчет()` | | печатная форма, печать | ПечатнаяФорма | `ВидОбработкиПечатнаяФорма()` | | создание связанных объектов | СозданиеСвязанныхОбъектов | `ВидОбработкиСозданиеСвязанныхОбъектов()` | ## Тип команды по умолчанию | Вид | ТипКоманды по умолчанию | |----------------------------|-------------------------------------------| | ДополнительнаяОбработка | `ТипКомандыОткрытиеФормы()` | | ДополнительныйОтчет | `ТипКомандыОткрытиеФормы()` | | ЗаполнениеОбъекта | `ТипКомандыВызовСерверногоМетода()` | | Отчет | `ТипКомандыОткрытиеФормы()` | | ПечатнаяФорма | `ТипКомандыВызовСерверногоМетода()` | | СозданиеСвязанныхОбъектов | `ТипКомандыВызовСерверногоМетода()` | ## Шаблон: СведенияОВнешнейОбработке Базовый шаблон - одинаковый для всех видов, отличаются только вызовы API-методов и условные секции. ```bsl Функция СведенияОВнешнейОбработке() Экспорт МетаданныеОбработки = Метаданные(); ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1"); ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.{{ВидОбработки}}; ПараметрыРегистрации.Версия = "1.0"; {{СЕКЦИЯ_НАЗНАЧЕНИЕ}} НоваяКоманда = ПараметрыРегистрации.Команды.Добавить(); НоваяКоманда.Представление = МетаданныеОбработки.Представление(); НоваяКоманда.Идентификатор = МетаданныеОбработки.Имя; НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.{{ТипКоманды}}; НоваяКоманда.ПоказыватьОповещение = Ложь; {{СЕКЦИЯ_МОДИФИКАТОР}} Возврат ПараметрыРегистрации; КонецФункции ``` ### Подстановки - `{{ВидОбработки}}` - API-метод из таблицы маппинга вида - `{{ТипКоманды}}` - API-метод из таблицы типа команды по умолчанию ### Условные секции **`{{СЕКЦИЯ_НАЗНАЧЕНИЕ}}`** - только для назначаемых видов (ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов). Одна строка на каждый объект: ```bsl ПараметрыРегистрации.Назначение.Добавить("Документ.СчетНаОплату"); ``` Формат имени объекта: `ИмяКлассаОбъектаМетаданного.ИмяОбъекта` (например `Документ.СчетНаОплату`, `Справочник.Контрагенты`). Для глобальных видов (ДополнительнаяОбработка, ДополнительныйОтчет) - секция не нужна, удалить вместе с пустой строкой. **`{{СЕКЦИЯ_МОДИФИКАТОР}}`** - только для ПечатнаяФорма: ```bsl НоваяКоманда.Модификатор = "ПечатьMXL"; ``` Для остальных видов - удалить вместе с пустой строкой. ## Шаблоны серверных обработчиков Для видов с типом команды `ВызовСерверногоМетода` добавь соответствующую процедуру-обработчик в ту же область `ПрограммныйИнтерфейс`, после `СведенияОВнешнейОбработке`. ### Для ЗаполнениеОбъекта / СозданиеСвязанныхОбъектов ```bsl Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполненияКоманды) Экспорт // TODO: Реализация КонецПроцедуры ``` ### Для ПечатнаяФорма ```bsl Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт // TODO: Реализация КонецПроцедуры ``` ### Для ДополнительнаяОбработка / ДополнительныйОтчет (с ВызовСерверногоМетода) Если пользователь явно выбрал серверный метод вместо открытия формы: ```bsl Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт // TODO: Реализация КонецПроцедуры ``` Обрати внимание: у глобальных обработок нет параметра `ОбъектыНазначения`. ## Инструкции 1. Найди `ObjectModule.bsl` через Glob: `src/{{ProcessorName}}/Ext/ObjectModule.bsl` 2. Прочитай файл 3. Если `СведенияОВнешнейОбработке` уже есть - сообщи пользователю и не дублируй 4. Если файл не найден - предложи сначала вызвать `/epf-init` 5. Найди область `#Область ПрограммныйИнтерфейс` ... `#КонецОбласти` 6. Вставь функцию `СведенияОВнешнейОбработке()` внутрь этой области 7. Если вид требует серверный обработчик - вставь его тоже в эту область, после функции 8. Используй табы для отступов (как в исходном файле) ## Пример Пользователь: `/epf-bsp-init МояОбработка печатная форма для Документ.СчетНаОплату` Результат в `ObjectModule.bsl`: ```bsl #Область ОписаниеПеременных #КонецОбласти #Область ПрограммныйИнтерфейс Функция СведенияОВнешнейОбработке() Экспорт МетаданныеОбработки = Метаданные(); ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1"); ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма(); ПараметрыРегистрации.Версия = "1.0"; ПараметрыРегистрации.Назначение.Добавить("Документ.СчетНаОплату"); НоваяКоманда = ПараметрыРегистрации.Команды.Добавить(); НоваяКоманда.Представление = МетаданныеОбработки.Представление(); НоваяКоманда.Идентификатор = МетаданныеОбработки.Имя; НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода(); НоваяКоманда.ПоказыватьОповещение = Ложь; НоваяКоманда.Модификатор = "ПечатьMXL"; Возврат ПараметрыРегистрации; КонецФункции Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт // TODO: Реализация КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции #КонецОбласти ``` ## Дальнейшие шаги - Добавить еще команду: `/epf-bsp-add-command` - Добавить форму: `/epf-add-form` - Добавить макет: `/template-add` - Собрать EPF: `/epf-build`
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.