SuperAPI AI Directory

epf-bsp-add-command

General & other

View repository

Updated 10-15 17:18

About this skill

/epf-bsp-add-command — Adding a BSP command

Adds a command to an existing function СведенияОВнешнейОбработке() and generates the corresponding handler.

First, the processing must be initialized via /epf-bsp-init.

Usage

/epf-bsp-add-command <ProcessorName> <Идентификатор> [ТипКоманды] [Представление]
Parameter Required Default Description
ProcessorName yes — Processing name
Identifier yes — Internal command name (Latin characters)
CommandType no from the processing type Command launch type (see the mapping below)
Presentation no = Identifier Displayed command name for the user
SrcDir no src Source directory

Command type mapping

The user can specify the type in free form:

The user writes CommandType
open form, form ТипКомандыОткрытиеФормы()
client method, on the client ТипКомандыВызовКлиентскогоМетода()
server method, on the server ТипКомандыВызовСерверногоМетода()
form filling, fill form ТипКомандыЗаполнениеФормы()
script, safe mode ТипКомандыСценарийВБезопасномРежиме()

If the user has not specified the type — determine it by the processing type from the existing code СведенияОВнешнейОбработке():

Processing type (from the code) Default CommandType
AdditionalProcessing ТипКомандыОткрытиеФормы()
AdditionalReport ТипКомандыОткрытиеФормы()
ObjectFilling ТипКомандыВызовСерверногоМетода()
Report ТипКомандыОткрытиеФормы()
PrintedForm ТипКомандыВызовСерверногоМетода()
CreatingRelatedObjects ТипКомандыВызовСерверногоМетода()

Command addition template

Inserted into СведенияОВнешнейОбработке() before the line Возврат ПараметрыРегистрации:

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

For printed forms (ProcessingTypePrintedForm) also add:

	НоваяКоманда.Модификатор = "ПечатьMXL";

Note: unlike the first command (from /epf-bsp-init), additional commands use string literals НСтр("ru = '...'") for the presentation and a string for the identifier, rather than Метаданные().

Handler templates

CallServerMethod — if the handler already exists

If the procedure ВыполнитьКоманду already exists in the object module, add a branch before КонецЕсли:

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

CallServerMethod — if there is no handler

For global処理 (without ОбъектыНазначения):

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

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

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

For assigned処理 (with ОбъектыНазначения):

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

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

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

PrintForm — if the procedure Print already exists

Add a block before КонецПроцедуры:

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

PrintForm — if there is no procedure Print

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

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

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

CallClientMethod

Added to form module (Forms/<FormName>/Ext/Form/Module.bsl):

For global処理:

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

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

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

For assigned処理:

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

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

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

If the procedure already exists — add a branch ИначеЕсли.

Instructions

  1. Find and read ObjectModule.bsl via Glob: src/{{ProcessorName}}/Ext/ObjectModule.bsl
  2. Make sure that СведенияОВнешнейОбработке() exists. If not — suggest calling /epf-bsp-init
  3. Determine the processing type from the existing code (find the line with ВидОбработки...())
  4. Insert the command block before Возврат ПараметрыРегистрации
  5. Add the handler:
    • For server handlers — in ObjectModule.bsl, region ПрограммныйИнтерфейс
    • For client handlers — in the form module (find via Glob: src/{{ProcessorName}}/Forms/*/Ext/Form/Module.bsl)
  6. If the handler (ВыполнитьКоманду / Печать) already exists — add a branch, do not create a duplicate procedure
  7. Use tabs for indentation

Example

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

В СведенияОВнешнейОбработке() before Возврат will be added:

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

And to the existing procedure Печать a processing block will be added.