name: epf-bsp-add-command description: 在BSP额外处理中添加命令 argument-hint: <处理器名称> <标识符> [命令类型] [表示] allowed-tools:
- 读取
- 编辑
- 全局搜索
- 文本搜索
/epf-bsp-add-command — BSP命令添加
将命令添加到现有函数 СведенияОВнешнейОбработке() 中,并生成相应的处理程序。
预先处理必须通过 /epf-bsp-init 初始化。
用法
/epf-bsp-add-command <处理器名称> <标识符> [命令类型] [表示]
| 参数 | 必选 | 默认值 | 描述 |
|---|---|---|---|
| ProcessorName | 是 | — | 处理名称 |
| 标识符 | 是 | — | 命令内部名称(拉丁字母) |
| 命令类型 | 否 | 来自处理类型 | 命令启动类型(见下方映射) |
| 表示 | 否 | = 标识符 | 用户显示的命令名称 |
| SrcDir | 否 | src |
源代码目录 |
命令类型映射
用户可以自由形式指定类型:
| 用户输入 | 命令类型 |
|---|---|
| 打开表单, 表单 | ТипКомандыОткрытиеФормы() |
| 客户端方法, 在客户端 | ТипКомандыВызовКлиентскогоМетода() |
| 服务器方法, 在服务器上 | ТипКомандыВызовСерверногоМетода() |
| 填充表单, 填充表单 | ТипКомандыЗаполнениеФормы() |
| 脚本, 安全模式 | ТипКомандыСценарийВБезопасномРежиме() |
如果用户未指定类型,则从现有代码 СведенияОВнешнейОбработке() 中的处理类型确定:
| 处理类型(来自代码) | 默认命令类型 |
|---|---|
| ДополнительнаяОбработка | ТипКомандыОткрытиеФормы() |
| ДополнительныйОтчет | ТипКомандыОткрытиеФормы() |
| ЗаполнениеОбъекта | ТипКомандыВызовСерверногоМетода() |
| Отчет | ТипКомандыОткрытиеФормы() |
| ПечатнаяФорма | ТипКомандыВызовСерверногоМетода() |
| СозданиеСвязанныхОбъектов | ТипКомандыВызовСерверногоМетода() |
命令添加模板
插入到 СведенияОВнешнейОбработке() 之前 行 Возврат ПараметрыРегистрации:
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = '{{表示}}'");
НоваяКоманда.Идентификатор = "{{标识符}}";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.{{命令类型}};
НоваяКоманда.ПоказыватьОповещение = Ложь;
对于打印表单(ВидОбработкиПечатнаяФорма)还需添加:
НоваяКоманда.Модификатор = "ПечатьMXL";
注意:与第一个命令(来自 /epf-bsp-init)不同,附加命令使用字符串字面量 НСтр("ru = '...'") 表示表示,字符串表示标识符,而不是 Метаданные()。
处理程序模板
ВызовСерверногоМетода — 如果处理程序已存在
如果过程 ВыполнитьКоманду 已在对象模块中存在,在 КонецЕсли 前添加分支:
ИначеЕсли ИдентификаторКоманды = "{{标识符}}" Тогда
// TODO: 实现 {{标识符}}
ВызовСерверногоМетода — 如果处理程序不存在
对于全局处理(无 ОбъектыНазначения):
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
Если ИдентификаторКоманды = "{{标识符}}" Тогда
// TODO: 实现 {{标识符}}
КонецЕсли;
КонецПроцедуры
对于可分配处理(有 ОбъектыНазначения):
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполненияКоманды) Экспорт
Если ИдентификаторКоманды = "{{标识符}}" Тогда
// TODO: 实现 {{标识符}}
КонецЕсли;
КонецПроцедуры
ПечатнаяФорма — 如果过程 Печать 已存在
在 КонецПроцедуры 前添加块:
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{标识符}}");
Если ПечатнаяФорма <> Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = Сформировать{{标识符}}(МассивОбъектов, ОбъектыПечати);
ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{表示}}'");
КонецЕсли;
ПечатнаяФорма — 如果过程 Печать 不存在
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{标识符}}");
Если ПечатнаяФорма <> Неопределено Тогда
ПечатнаяФорма.ТабличныйДокумент = Сформировать{{标识符}}(МассивОбъектов, ОбъектыПечати);
ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{表示}}'");
КонецЕсли;
КонецПроцедуры
ВызовКлиентскогоМетода
添加到 表单模块 (Forms/<表单名称>/Ext/Form/Module.bsl):
对于全局处理:
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт
Если ИдентификаторКоманды = "{{标识符}}" Тогда
// TODO: 实现 {{标识符}}
КонецЕсли;
КонецПроцедуры
对于可分配处理:
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
Если ИдентификаторКоманды = "{{标识符}}" Тогда
// TODO: 实现 {{标识符}}
КонецЕсли;
КонецПроцедуры
如果过程已存在,添加分支 ИначеЕсли。
指令
- 通过 Glob 查找并读取
ObjectModule.bsl:src/{{处理器名称}}/Ext/ObjectModule.bsl - 确保
СведенияОВнешнейОбработке()存在。如果不存在,建议调用/epf-bsp-init - 从现有代码中确定处理类型(查找包含
ВидОбработки...()的行) - 在
Возврат ПараметрыРегистрации之前 插入命令块 - 添加处理程序:
- 对于服务器处理程序,在
ObjectModule.bsl的ПрограммныйИнтерфейс区域 - 对于客户端处理程序,在表单模块中(通过 Glob 查找:
src/{{处理器名称}}/Forms/*/Ext/Form/Module.bsl)
- 对于服务器处理程序,在
- 如果处理程序(
ВыполнитьКоманду/Печать)已存在,添加分支,不要重复创建过程 - 使用制表符进行缩进
示例
用户:/epf-bsp-add-command 我的处理 订单买家 服务器 "订单买家"
在 СведенияОВнешнейОбработке() 中 Возврат 前添加:
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = '订单买家'");
НоваяКоманда.Идентификатор = "订单买家";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Ложь;
НоваяКоманда.Модификатор = "ПечатьMXL";
并在现有过程 Печать 中添加处理块。