SuperAPI AI Directory

epf-bsp-add-command

General & other

View repository

Updated 10-15 21:33

About this skill

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

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

The processing must first 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:

User writes CommandType Available for processing type
open form, form ТипКомандыОткрытиеФормы() any
client method, on the client ТипКомандыВызовКлиентскогоМетода() any
server method, on the server ТипКомандыВызовСерверногоМетода() any
form filling, fill form ТипКомандыЗаполнениеФормы() ObjectFilling
loading from file, import from file ТипКомандыЗагрузкаДанныхИзФайла() AdditionalProcessing; the configuration must have the subsystem “Loading data from file”

There are no other command types in BSP. If the requested type does not match any row — ask the user, do not invent a method. If the type is unavailable for the processing type — report this and do not add the command.

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

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

Command addition template

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

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

For print forms (ProcessingKindPrintForm) also add:

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

For the command LoadDataFromFile Модификатор required: the full name of the catalog into which data is loaded. If the user has not named it — ask.

	НоваяКоманда.Модификатор = "Справочник.Номенклатура";

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

The template is selected by the pair “command type × processing kind”.

OpenForm

No handler is needed: the main processing form opens, the command identifier comes in Параметры.ИдентификаторКоманды.

CallServerMethod, FormFill — if the handler already exists

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

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

CallServerMethod, FormFill — if there is no handler

The procedure is added to the object module. The signature depends on the processing kind.

AdditionalProcessing, AdditionalReport (without ОбъектыНазначения):

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

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

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

ObjectFill, Report:

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

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

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

For a command of type FormFill the handler is the same: ОбъектыНазначения = Неопределено, the form being filled is passed in ПараметрыВыполненияКоманды.ЭтаФорма.

CreateRelatedObjects (references of the created objects are added to the array СозданныеОбъекты):

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

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

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

PrintForm — if the procedure Print already exists

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

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

PrintForm — if there is no procedure Print

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

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

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

CallClientMethod

Added to main form module (Forms/<FormName>/Ext/Form/Module.bsl). The name and signature depend on the processing kind.

AdditionalProcessing, AdditionalReport:

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

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

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

ObjectFill, Report:

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

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

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

CreateRelatedObjects:

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

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

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

PrintForm (the procedure is called Печать, not ВыполнитьКоманду):

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

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

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

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

DataLoadingFromFile

Three export procedures are added to the object module. If any of them already exists — add a branch to it ИначеЕсли.

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

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

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

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

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

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

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

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

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

The columns of the loaded data are taken from the processing template ЗагрузкаДанныхИзФайла (the template name can be overridden via ПараметрыЗагрузки.ИмяМакетаСШаблоном). If there is no template — suggest creating one via /template-add.

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 a handler according to the template for the command type and processing type from step 3:
    • For server handlers and DataLoadingFromFile — in ObjectModule.bsl, region ПрограммныйИнтерфейс
    • For client handlers — in the main form module (find via Glob: src/{{ProcessorName}}/Forms/*/Ext/Form/Module.bsl)
  6. If the handler (ВыполнитьКоманду / Печать / loading procedures) 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 = 'Заказ покупателя'");
	НоваяКоманда.Идентификатор        = "ЗаказПокупателя";
	НоваяКоманда.Использование        = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	НоваяКоманда.ПоказыватьОповещение = Ложь;

And to the existing procedure ВыполнитьКоманду a processing block will be added.