Cc-1c-skills epf-bsp-add-command

Добавить команду в дополнительную обработку БСП

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.md
source content

/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: Реализация {{Идентификатор}}
	КонецЕсли;

КонецПроцедуры

Если процедура уже есть — добавь ветку

ИначеЕсли
.

Инструкции

  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 МояОбработка ЗаказПокупателя серверный "Заказ покупателя"

В

СведенияОВнешнейОбработке()
перед
Возврат
добавится:

	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление        = НСтр("ru = 'Заказ покупателя'");
	НоваяКоманда.Идентификатор        = "ЗаказПокупателя";
	НоваяКоманда.Использование        = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	НоваяКоманда.ПоказыватьОповещение = Ложь;

И в существующую процедуру

ВыполнитьКоманду
добавится блок обработки.