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

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

评论

支持 Markdown