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
- Find and read
ObjectModule.bslvia Glob:src/{{ProcessorName}}/Ext/ObjectModule.bsl - Make sure that
СведенияОВнешнейОбработке()exists. If not — suggest calling/epf-bsp-init - Determine the processing type from the existing code (find the line with
ВидОбработки...()) - Insert the command block before
Возврат ПараметрыРегистрации - 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)
- For server handlers and DataLoadingFromFile — in
- If the handler (
ВыполнитьКоманду/Печать/ loading procedures) already exists — add a branch, do not create a duplicate procedure - 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.