mcpField
E
epf-bsp-add-command

epf-bsp-add-command

github.com/nikolay-shirokov開発74153 回インストール今日更新
リポジトリ

epf-bsp-add-command について

初期化済みの 1C:Enterprise 外部処理にコマンドを追加する開発スキルです。コマンドと処理の種類に応じて登録コードとハンドラーを選び、既存ハンドラーへの追記にも対応します。

主な機能

  1. 01БСП のコマンド登録コード追加
  2. 02種類に応じたハンドラー生成
  3. 03サーバーとクライアントのメソッド対応
  4. 04既存ハンドラーへの追記

活用シーン

  1. 01既存の外部処理へのコマンド追加
  2. 02サーバーまたはクライアント側ハンドラーの生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/nikolay-shirokov/cc-1c-skills --skill epf-bsp-add-command

インストール後、Claude Code で/epf-bsp-add-commandを入力して読み込まれたか確認します。

README(原文)English

プロジェクトの README より

この README の日本語訳はまだありません。以下は英語の原文です。日本語の紹介はページ上部をご覧ください。

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

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

Для команды типа ЗаполнениеФормы обработчик тот же: ОбъектыНазначения = Неопределено, заполняемая форма передаётся в ПараметрыВыполненияКоманды.ЭтаФорма.

СозданиеСвязанныхОбъектов (ссылки созданных объектов добавляются в массив СозданныеОбъекты):

Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты, ПараметрыВыполненияКоманды) Экспорт

	Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
		// TODO: Реализация {{Идентификатор}}
	КонецЕсли;

КонецПроцедуры
ПечатнаяФорма — если процедура Печать уже есть

Добавь блок перед КонецПроцедуры:

	ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{Идентификатор}}");
	Если ПечатнаяФорма <> Неопределено Тогда
		ПечатнаяФорма.ТабличныйДокумент = Сформировать{{Идентификатор}}(МассивОбъектов, ОбъектыПечати);
		ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{Представление}}'");
	КонецЕсли;
ПечатнаяФорма — если процедуры Печать нет
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

	ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{Идентификатор}}");
	Если ПечатнаяФорма <> Неопределено Тогда
		ПечатнаяФорма.ТабличныйДокумент = Сформировать{{Идентификатор}}(МассивОбъектов, ОбъектыПечати);
		ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{Представление}}'");
	КонецЕсли;

КонецПроцедуры
ВызовКлиентскогоМетода

Добавляется в модуль основной формы (Forms/<FormName>/Ext/Form/Module.bsl). Имя и сигнатура зависят от вида обработки.

ДополнительнаяОбработка, ДополнительныйОтчет:

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт

	Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
		// TODO: Реализация {{Идентификатор}}
	КонецЕсли;

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

ЗаполнениеОбъекта, Отчет:

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт

	Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
		// TODO: Реализация {{Идентификатор}}
	КонецЕсли;

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

СозданиеСвязанныхОбъектов:

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) Экспорт

	Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
		// TODO: Реализация {{Идентификатор}}
	КонецЕсли;

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

ПечатнаяФорма (процедура называется Печать, не ВыполнитьКоманду):

&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт

	Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
		// TODO: Реализация {{Идентификатор}}
	КонецЕсли;

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

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

ЗагрузкаДанныхИзФайла

В модуль объекта добавляются три экспортные процедуры. Если какая-то из них уже есть — добавь в неё ветку ИначеЕсли.

Процедура ОпределитьПараметрыЗагрузкиДанныхИзФайла(ИдентификаторКоманды, ПараметрыЗагрузки) Экспорт

	Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
		// ПараметрыЗагрузки.ИмяМакетаСШаблоном = "ЗагрузкаДанныхИзФайла";
		// ПараметрыЗагрузки.ОбязательныеКолонки.Добавить("<ИмяКолонки>");
	КонецЕсли;

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

Процедура СопоставитьЗагружаемыеДанныеИзФайла(ИдентификаторКоманды, ЗагружаемыеДанные) Экспорт

	Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
		// TODO: Заполнить колонку СопоставленныйОбъект по данным из файла
	КонецЕсли;

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

Процедура ЗагрузитьИзФайла(ИдентификаторКоманды, ЗагружаемыеДанные, ПараметрыЗагрузки, Отказ) Экспорт

	Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
		// TODO: Загрузка; для каждой строки заполнить РезультатСопоставленияСтроки
		// ("Создан", "Обновлен", "Пропущен") и при ошибке ОписаниеОшибки
	КонецЕсли;

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

Колонки загружаемых данных берутся из макета обработки ЗагрузкаДанныхИзФайла (имя макета можно переопределить через ПараметрыЗагрузки.ИмяМакетаСШаблоном). Если макета нет — предложи создать его через /template-add.

Инструкции

  1. Найди и прочитай ObjectModule.bsl через Glob: src/{{ProcessorName}}/Ext/ObjectModule.bsl
  2. Убедись что СведенияОВнешнейОбработке() существует. Если нет — предложи вызвать /epf-bsp-init
  3. Определи вид обработки из существующего кода (найди строку с ВидОбработки...())
  4. Вставь блок команды перед Возврат ПараметрыРегистрации
  5. Добавь обработчик по шаблону для типа команды и вида обработки из шага 3:
    • Для серверных обработчиков и ЗагрузкаДанныхИзФайла — в ObjectModule.bsl, область ПрограммныйИнтерфейс
    • Для клиентских обработчиков — в модуль основной формы (найти через Glob: src/{{ProcessorName}}/Forms/*/Ext/Form/Module.bsl)
  6. Если обработчик (ВыполнитьКоманду / Печать / процедуры загрузки) уже есть — добавь ветку, не создавай дубль процедуры
  7. Используй табы для отступов

Пример

Пользователь: /epf-bsp-add-command МояОбработка ЗаказПокупателя серверный "Заказ покупателя"

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

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

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

コメント