1c-bsp-command
Добавить команду в дополнительную обработку БСП
Install
npx skills add https://github.com/Desko77/claude-code-skills-1c/tree/main/skills/1c-bsp-command
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-add-command - Добавление команды БСП
Добавляет команду в существующую функцию СведенияОВнешнейОбработке() и генерирует соответствующий обработчик.
Предварительно обработка должна быть инициализирована через /epf-bsp-init.
Usage
/epf-bsp-add-command <ProcessorName> <Идентификатор> [ТипКоманды] [Представление]
| Параметр | Обязательный | По умолчанию | Описание |
|---|---|---|---|
| ProcessorName | да | - | Имя обработки |
| Идентификатор | да | - | Внутреннее имя команды (латиница) |
| ТипКоманды | нет | из вида обработки | Тип запуска команды (см. маппинг ниже) |
| Представление | нет | = Идентификатор | Отображаемое имя команды для пользователя |
| SrcDir | нет | src |
Каталог исходников |
Маппинг типов команд
Пользователь может указать тип в свободной форме:
| Пользователь пишет | ТипКоманды |
|---|---|
| открыть форму, форма | ТипКомандыОткрытиеФормы() |
| клиентский метод, на клиенте | ТипКомандыВызовКлиентскогоМетода() |
| серверный метод, на сервере | ТипКомандыВызовСерверногоМетода() |
| заполнение формы, заполнить форму | ТипКомандыЗаполнениеФормы() |
| сценарий, безопасный режим | ТипКомандыСценарийВБезопасномРежиме() |
Если пользователь не указал тип - определи по виду обработки из существующего кода СведенияОВнешнейОбработке():
| Вид обработки (из кода) | ТипКоманды по умолчанию |
|---|---|
| ДополнительнаяОбработка | ТипКомандыОткрытиеФормы() |
| ДополнительныйОтчет | ТипКомандыОткрытиеФормы() |
| ЗаполнениеОбъекта | ТипКомандыВызовСерверногоМетода() |
| Отчет | ТипКомандыОткрытиеФормы() |
| ПечатнаяФорма | ТипКомандыВызовСерверногоМетода() |
| СозданиеСвязанныхОбъектов | ТипКомандыВызовСерверногоМетода() |
Шаблон добавления команды
Вставляется в СведенияОВнешнейОбработке() перед строкой Возврат ПараметрыРегистрации:
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = '{{Представление}}'");
НоваяКоманда.Идентификатор = "{{Идентификатор}}";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.{{ТипКоманды}};
НоваяКоманда.ПоказыватьОповещение = Ложь;
Для печатных форм (ВидОбработкиПечатнаяФорма) добавь также:
НоваяКоманда.Модификатор = "ПечатьMXL";
Примечание: в отличие от первой команды (из /epf-bsp-init), дополнительные команды используют строковые литералы НСтр("ru = '...'") для представления и строку для идентификатора, а не Метаданные().
Шаблоны обработчиков
ВызовСерверногоМетода - если обработчик уже есть
Если процедура ВыполнитьКоманду уже существует в модуле объекта, добавь ветку перед КонецЕсли:
ИначеЕсли ИдентификаторКоманды = "{{Идентификатор}}" Тогда
// TODO: Реализация {{Идентификатор}}
ВызовСерверногоМетода - если обработчика нет
Для глобальных обработок (без ОбъектыНазначения):
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
// TODO: Реализация {{Идентификатор}}
КонецЕсли;
КонецПроцедуры
Для назначаемых обработок (с ОбъектыНазначения):
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполненияКоманды) Экспорт
Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
// TODO: Реализация {{Идентификатор}}
КонецЕсли;
КонецПроцедуры
ПечатнаяФорма - если процедура Печать уже есть
Добавь блок перед КонецПроцедуры:
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{Идентификатор}}");
Если ПечатнаяФорма <> Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = Сформировать{{Идентификатор}}(МассивОбъектов, ОбъектыПечати);
ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{Представление}}'");
КонецЕсли;
ПечатнаяФорма - если процедуры Печать нет
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{Идентификатор}}");
Если ПечатнаяФорма <> Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = Сформировать{{Идентификатор}}(МассивОбъектов, ОбъектыПечати);
ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{Представление}}'");
КонецЕсли;
КонецПроцедуры
ВызовКлиентскогоМетода
Добавляется в модуль формы (Forms/<FormName>/Ext/Form/Module.bsl):
Для глобальных обработок:
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт
Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
// TODO: Реализация {{Идентификатор}}
КонецЕсли;
КонецПроцедуры
Для назначаемых обработок:
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
// TODO: Реализация {{Идентификатор}}
КонецЕсли;
КонецПроцедуры
Если процедура уже есть - добавь ветку ИначеЕсли.
Инструкции
- Найди и прочитай
ObjectModule.bslчерез Glob:src/{{ProcessorName}}/Ext/ObjectModule.bsl - Убедись что
СведенияОВнешнейОбработке()существует. Если нет - предложи вызвать/epf-bsp-init - Определи вид обработки из существующего кода (найди строку с
ВидОбработки...()) - Вставь блок команды перед
Возврат ПараметрыРегистрации - Добавь обработчик:
- Для серверных обработчиков - в
ObjectModule.bsl, областьПрограммныйИнтерфейс - Для клиентских обработчиков - в модуль формы (найти через Glob:
src/{{ProcessorName}}/Forms/*/Ext/Form/Module.bsl)
- Для серверных обработчиков - в
- Если обработчик (
ВыполнитьКоманду/Печать) уже есть - добавь ветку, не создавай дубль процедуры - Используй табы для отступов
Пример
Пользователь: /epf-bsp-add-command МояОбработка ЗаказПокупателя серверный "Заказ покупателя"
В СведенияОВнешнейОбработке() перед Возврат добавится:
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Заказ покупателя'");
НоваяКоманда.Идентификатор = "ЗаказПокупателя";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Ложь;
И в существующую процедуру ВыполнитьКоманду добавится блок обработки.
Files (claude-code-skills-1c)
-
evals
-
evals.json 3.9 KB
{ "skill_name": "1c-bsp-command", "evals": [ { "id": "command-open-form", "prompt": "Добавь команду ОткрытьОтчёт в обработку АнализПродаж. Команда должна открывать форму. Исходники в src/.", "expected_output": "В ObjectModule.bsl обработки АнализПродаж добавлен блок NewCommand в функцию ExternalDataProcessorInfo() перед Return RegistrationParameters, тип команды CommandTypeOpenForm().", "expectations": [ "В файле src/АнализПродаж/Ext/ObjectModule.bsl найдена функция ExternalDataProcessorInfo()", "Добавлен блок NewCommand с ID = \"ОткрытьОтчёт\" перед строкой Return RegistrationParameters", "Поле NewCommand.Use содержит AdditionalReportsAndDataProcessorsClientServer.CommandTypeOpenForm()", "Поле NewCommand.Presentation содержит NStr с текстом ОткрытьОтчёт или пользовательским именем", "Флаг NewCommand.ShowNotification установлен в False" ], "expect": [ "ExternalDataProcessorInfo", "NewCommand|Commands\\.Add" ], "forbid": [ "ВнешняяОбработкаИнформация\\s*\\(" ], "should_activate": true }, { "id": "command-server-method", "prompt": "Добавь команду ВыполнитьОбработку в обработку ОбработкаДокументов. Тип команды — серверный метод. Обработчик ExecuteCommand уже существует.", "expected_output": "В ExternalDataProcessorInfo() добавлена команда с CommandTypeServerMethodCall(), в существующую процедуру ExecuteCommand добавлена ветка ElsIf для нового идентификатора.", "expectations": [ "В блоке команды NewCommand.Use содержит CommandTypeServerMethodCall()", "В существующую процедуру ExecuteCommand добавлена ветка ElsIf CommandID = \"ВыполнитьОбработку\"", "Новая процедура ExecuteCommand не создана (она уже существовала)", "Блок NewCommand вставлен перед Return RegistrationParameters" ], "expect": [ "ExternalDataProcessorInfo", "CommandTypeServerMethodCall", "ExecuteCommand" ], "forbid": [ "CommandTypeForm\\s*\\(\\s*\\)\\s*;?\\s*$" ], "should_activate": true }, { "id": "command-print-form", "prompt": "Добавь команду ПечатьСчёта в обработку ПечатьДокументов с типом PrintForm. Исходники в D:/Projects/src/.", "expected_output": "Добавлена команда с типом CommandTypeServerMethodCall() и Modifier = \"PrintMXL\". В процедуре Print добавлен блок для нового макета ПечатьСчёта.", "expectations": [ "Блок NewCommand содержит NewCommand.Modifier = \"PrintMXL\"", "NewCommand.Use содержит CommandTypeServerMethodCall()", "В процедуре Print добавлен вызов PrintManagement.PrintFormInfo с идентификатором \"ПечатьСчёта\"", "Блок Generate<Identifier> используется для формирования табличного документа" ], "expect": [ "ExternalDataProcessorInfo", "CommandTypeServerMethodCall", "PrintMXL|Modifier" ], "forbid": [ "CommandTypeOpenForm" ], "should_activate": true } ] }
-
-
SKILL.md 11.6 KB
--- name: 1c-bsp-command description: Добавить команду в дополнительную обработку БСП argument-hint: <ProcessorName> <Идентификатор> [ТипКоманды] [Представление] allowed-tools: - Read - Edit - Glob - Grep --- # /epf-bsp-add-command - Добавление команды БСП Добавляет команду в существующую функцию `СведенияОВнешнейОбработке()` и генерирует соответствующий обработчик. Предварительно обработка должна быть инициализирована через `/epf-bsp-init`. ## Usage ``` /epf-bsp-add-command <ProcessorName> <Идентификатор> [ТипКоманды] [Представление] ``` | Параметр | Обязательный | По умолчанию | Описание | |---------------|:------------:|-----------------------|--------------------------------------------| | ProcessorName | да | - | Имя обработки | | Идентификатор | да | - | Внутреннее имя команды (латиница) | | ТипКоманды | нет | из вида обработки | Тип запуска команды (см. маппинг ниже) | | Представление | нет | = Идентификатор | Отображаемое имя команды для пользователя | | SrcDir | нет | `src` | Каталог исходников | ## Маппинг типов команд Пользователь может указать тип в свободной форме: | Пользователь пишет | ТипКоманды | |---------------------------------------|-----------------------------------------------------| | открыть форму, форма | `ТипКомандыОткрытиеФормы()` | | клиентский метод, на клиенте | `ТипКомандыВызовКлиентскогоМетода()` | | серверный метод, на сервере | `ТипКомандыВызовСерверногоМетода()` | | заполнение формы, заполнить форму | `ТипКомандыЗаполнениеФормы()` | | сценарий, безопасный режим | `ТипКомандыСценарийВБезопасномРежиме()` | Если пользователь не указал тип - определи по виду обработки из существующего кода `СведенияОВнешнейОбработке()`: | Вид обработки (из кода) | ТипКоманды по умолчанию | |----------------------------|-------------------------------------------| | ДополнительнаяОбработка | `ТипКомандыОткрытиеФормы()` | | ДополнительныйОтчет | `ТипКомандыОткрытиеФормы()` | | ЗаполнениеОбъекта | `ТипКомандыВызовСерверногоМетода()` | | Отчет | `ТипКомандыОткрытиеФормы()` | | ПечатнаяФорма | `ТипКомандыВызовСерверногоМетода()` | | СозданиеСвязанныхОбъектов | `ТипКомандыВызовСерверногоМетода()` | ## Шаблон добавления команды Вставляется в `СведенияОВнешнейОбработке()` **перед** строкой `Возврат ПараметрыРегистрации`: ```bsl НоваяКоманда = ПараметрыРегистрации.Команды.Добавить(); НоваяКоманда.Представление = НСтр("ru = '{{Представление}}'"); НоваяКоманда.Идентификатор = "{{Идентификатор}}"; НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.{{ТипКоманды}}; НоваяКоманда.ПоказыватьОповещение = Ложь; ``` Для печатных форм (ВидОбработкиПечатнаяФорма) добавь также: ```bsl НоваяКоманда.Модификатор = "ПечатьMXL"; ``` Примечание: в отличие от первой команды (из `/epf-bsp-init`), дополнительные команды используют строковые литералы `НСтр("ru = '...'")` для представления и строку для идентификатора, а не `Метаданные()`. ## Шаблоны обработчиков ### ВызовСерверногоМетода - если обработчик уже есть Если процедура `ВыполнитьКоманду` уже существует в модуле объекта, добавь ветку перед `КонецЕсли`: ```bsl ИначеЕсли ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}} ``` ### ВызовСерверногоМетода - если обработчика нет Для глобальных обработок (без `ОбъектыНазначения`): ```bsl Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}} КонецЕсли; КонецПроцедуры ``` Для назначаемых обработок (с `ОбъектыНазначения`): ```bsl Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполненияКоманды) Экспорт Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}} КонецЕсли; КонецПроцедуры ``` ### ПечатнаяФорма - если процедура Печать уже есть Добавь блок перед `КонецПроцедуры`: ```bsl ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{Идентификатор}}"); Если ПечатнаяФорма <> Неопределено Тогда ПечатнаяФорма.ТабличныйДокумент = Сформировать{{Идентификатор}}(МассивОбъектов, ОбъектыПечати); ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{Представление}}'"); КонецЕсли; ``` ### ПечатнаяФорма - если процедуры Печать нет ```bsl Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{Идентификатор}}"); Если ПечатнаяФорма <> Неопределено Тогда ПечатнаяФорма.ТабличныйДокумент = Сформировать{{Идентификатор}}(МассивОбъектов, ОбъектыПечати); ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{Представление}}'"); КонецЕсли; КонецПроцедуры ``` ### ВызовКлиентскогоМетода Добавляется в **модуль формы** (`Forms/<FormName>/Ext/Form/Module.bsl`): Для глобальных обработок: ```bsl &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}} КонецЕсли; КонецПроцедуры ``` Для назначаемых обработок: ```bsl &НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}} КонецЕсли; КонецПроцедуры ``` Если процедура уже есть - добавь ветку `ИначеЕсли`. ## Инструкции 1. Найди и прочитай `ObjectModule.bsl` через Glob: `src/{{ProcessorName}}/Ext/ObjectModule.bsl` 2. Убедись что `СведенияОВнешнейОбработке()` существует. Если нет - предложи вызвать `/epf-bsp-init` 3. Определи вид обработки из существующего кода (найди строку с `ВидОбработки...()`) 4. Вставь блок команды **перед** `Возврат ПараметрыРегистрации` 5. Добавь обработчик: - Для серверных обработчиков - в `ObjectModule.bsl`, область `ПрограммныйИнтерфейс` - Для клиентских обработчиков - в модуль формы (найти через Glob: `src/{{ProcessorName}}/Forms/*/Ext/Form/Module.bsl`) 6. Если обработчик (`ВыполнитьКоманду` / `Печать`) уже есть - добавь ветку, не создавай дубль процедуры 7. Используй табы для отступов ## Пример Пользователь: `/epf-bsp-add-command МояОбработка ЗаказПокупателя серверный "Заказ покупателя"` В `СведенияОВнешнейОбработке()` перед `Возврат` добавится: ```bsl НоваяКоманда = ПараметрыРегистрации.Команды.Добавить(); НоваяКоманда.Представление = НСтр("ru = 'Заказ покупателя'"); НоваяКоманда.Идентификатор = "ЗаказПокупателя"; НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода(); НоваяКоманда.ПоказыватьОповещение = Ложь; ``` И в существующую процедуру `ВыполнитьКоманду` добавится блок обработки.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.