install
source · Clone the upstream repo
git clone https://github.com/Nikolay-Shirokov/cc-1c-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/Nikolay-Shirokov/cc-1c-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/epf-bsp-add-command" ~/.claude/skills/nikolay-shirokov-cc-1c-skills-epf-bsp-add-command && rm -rf "$T"
manifest:
.claude/skills/epf-bsp-add-command/SKILL.mdsource content
/epf-bsp-add-command — Добавление команды БСП
Добавляет команду в существующую функцию
СведенияОВнешнейОбработке() и генерирует соответствующий обработчик.
Предварительно обработка должна быть инициализирована через
/epf-bsp-init.
Usage
/epf-bsp-add-command <ProcessorName> <Идентификатор> [ТипКоманды] [Представление]
| Параметр | Обязательный | По умолчанию | Описание |
|---|---|---|---|
| ProcessorName | да | — | Имя обработки |
| Идентификатор | да | — | Внутреннее имя команды (латиница) |
| ТипКоманды | нет | из вида обработки | Тип запуска команды (см. маппинг ниже) |
| Представление | нет | = Идентификатор | Отображаемое имя команды для пользователя |
| SrcDir | нет | | Каталог исходников |
Маппинг типов команд
Пользователь может указать тип в свободной форме:
| Пользователь пишет | ТипКоманды |
|---|---|
| открыть форму, форма | |
| клиентский метод, на клиенте | |
| серверный метод, на сервере | |
| заполнение формы, заполнить форму | |
| сценарий, безопасный режим | |
Если пользователь не указал тип — определи по виду обработки из существующего кода
СведенияОВнешнейОбработке():
| Вид обработки (из кода) | ТипКоманды по умолчанию |
|---|---|
| ДополнительнаяОбработка | |
| ДополнительныйОтчет | |
| ЗаполнениеОбъекта | |
| Отчет | |
| ПечатнаяФорма | |
| СозданиеСвязанныхОбъектов | |
Шаблон добавления команды
Вставляется в
СведенияОВнешнейОбработке() перед строкой Возврат ПараметрыРегистрации:
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить(); НоваяКоманда.Представление = НСтр("ru = '{{Представление}}'"); НоваяКоманда.Идентификатор = "{{Идентификатор}}"; НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.{{ТипКоманды}}; НоваяКоманда.ПоказыватьОповещение = Ложь;
Для печатных форм (ВидОбработкиПечатнаяФорма) добавь также:
НоваяКоманда.Модификатор = "ПечатьMXL";
Примечание: в отличие от первой команды (из
/epf-bsp-init), дополнительные команды используют строковые литералы НСтр("ru = '...'") для представления и строку для идентификатора, а не Метаданные().
Шаблоны обработчиков
ВызовСерверногоМетода — если обработчик уже есть
Если процедура
ВыполнитьКоманду уже существует в модуле объекта, добавь ветку перед КонецЕсли:
ИначеЕсли ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}}
ВызовСерверногоМетода — если обработчика нет
Для глобальных обработок (без
ОбъектыНазначения):
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}} КонецЕсли; КонецПроцедуры
Для назначаемых обработок (с
ОбъектыНазначения):
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполненияКоманды) Экспорт Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}} КонецЕсли; КонецПроцедуры
ПечатнаяФорма — если процедура Печать уже есть
Добавь блок перед
КонецПроцедуры:
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{Идентификатор}}"); Если ПечатнаяФорма <> Неопределено Тогда ПечатнаяФорма.ТабличныйДокумент = Сформировать{{Идентификатор}}(МассивОбъектов, ОбъектыПечати); ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{Представление}}'"); КонецЕсли;
ПечатнаяФорма — если процедуры Печать нет
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{Идентификатор}}"); Если ПечатнаяФорма <> Неопределено Тогда ПечатнаяФорма.ТабличныйДокумент = Сформировать{{Идентификатор}}(МассивОбъектов, ОбъектыПечати); ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{Представление}}'"); КонецЕсли; КонецПроцедуры
ВызовКлиентскогоМетода
Добавляется в модуль формы (
Forms/<FormName>/Ext/Form/Module.bsl):
Для глобальных обработок:
&НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}} КонецЕсли; КонецПроцедуры
Для назначаемых обработок:
&НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}} КонецЕсли; КонецПроцедуры
Если процедура уже есть — добавь ветку
ИначеЕсли.
Инструкции
- Найди и прочитай
через Glob:ObjectModule.bslsrc/{{ProcessorName}}/Ext/ObjectModule.bsl - Убедись что
существует. Если нет — предложи вызватьСведенияОВнешнейОбработке()/epf-bsp-init - Определи вид обработки из существующего кода (найди строку с
)ВидОбработки...() - Вставь блок команды перед
Возврат ПараметрыРегистрации - Добавь обработчик:
- Для серверных обработчиков — в
, областьObjectModule.bslПрограммныйИнтерфейс - Для клиентских обработчиков — в модуль формы (найти через Glob:
)src/{{ProcessorName}}/Forms/*/Ext/Form/Module.bsl
- Для серверных обработчиков — в
- Если обработчик (
/ВыполнитьКоманду
) уже есть — добавь ветку, не создавай дубль процедурыПечать - Используй табы для отступов
Пример
Пользователь:
/epf-bsp-add-command МояОбработка ЗаказПокупателя серверный "Заказ покупателя"
В
СведенияОВнешнейОбработке() перед Возврат добавится:
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить(); НоваяКоманда.Представление = НСтр("ru = 'Заказ покупателя'"); НоваяКоманда.Идентификатор = "ЗаказПокупателя"; НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода(); НоваяКоманда.ПоказыватьОповещение = Ложь;
И в существующую процедуру
ВыполнитьКоманду добавится блок обработки.