/epf-bsp-add-command - Добавление команды БСП
Добавляет команду в существующую функцию СведенияОВнешнейОбработке() и генерирует соответствующий обработчик.
Предварительно обработка должна быть инициализирована через /epf-bsp-init.
Usage
/epf-bsp-add-command <ProcessorName> <Идентификатор> [ТипКоманды] [Представление]
| Параметр | Обязательный | По умолчанию | Описание |
|---|---|---|---|
| ProcessorName | да | - | Имя обработки |
| Идентификатор | да | - | Внутреннее имя команды (латиница) |
| ТипКоманды | нет | из вида обработки | Тип запуска команды (см. маппинг ниже) |
| Представление | нет | = Идентификатор | Отображаемое имя команды для пользователя |
| SrcDir | нет | src | Каталог исходников |
Маппинг типов команд
Пользователь может указать тип в свободной форме:
| Пользователь пишет | ТипКоманды |
|---|---|
| открыть форму, форма | ТипКомандыОткрытиеФормы() |
| клиентский метод, на клиенте | ТипКомандыВызовКлиентскогоМетода() |
| серверный метод, на сервере | ТипКомандыВызовСерверногоМетода() |
| заполнение формы, заполнить форму | ТипКомандыЗаполнениеФормы() |
| загрузка данных из файла, загрузка | ТипКомандыЗагрузкаДанныхИзФайла() |
Если пользователь не указал тип - определи по виду обработки из существующего кода СведенияОВнешнейОбработке():
| Вид обработки (из кода) | ТипКоманды по умолчанию |
|---|---|
| ДополнительнаяОбработка | ТипКомандыОткрытиеФормы() |
| ДополнительныйОтчет | ТипКомандыОткрытиеФормы() |
| ЗаполнениеОбъекта | ТипКомандыВызовСерверногоМетода() |
| Отчет | ТипКомандыОткрытиеФормы() |
| ПечатнаяФорма | ТипКомандыВызовСерверногоМетода() |
| СозданиеСвязанныхОбъектов | ТипКомандыВызовСерверногоМетода() |
Шаблон добавления команды
Вставляется в СведенияОВнешнейОбработке() перед строкой Возврат ПараметрыРегистрации:
bslНоваяКоманда = ПараметрыРегистрации.Команды.Добавить(); НоваяКоманда.Представление = НСтр("ru = '{{Представление}}'"); НоваяКоманда.Идентификатор = "{{Идентификатор}}"; НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.{{ТипКоманды}}; НоваяКоманда.ПоказыватьОповещение = Ложь;
Для печатных форм (ВидОбработкиПечатнаяФорма) добавь также:
bslНоваяКоманда.Модификатор = "ПечатьMXL";
Для команд загрузки данных из файла (ТипКомандыЗагрузкаДанныхИзФайла()) поле Модификатор обязательно и должно содержать полное имя объекта метаданных-приемника:
bslНоваяКоманда.Модификатор = "Справочник.Номенклатура";
Без модификатора команда не привязывается к справочнику в мастере загрузки данных из файла.
Примечание: в отличие от первой команды (из /epf-bsp-init), дополнительные команды используют строковые литералы НСтр("ru = '...'") для представления и строку для идентификатора, а не Метаданные().
Шаблоны обработчиков
ВызовСерверногоМетода - если обработчик уже есть
Если процедура ВыполнитьКоманду уже существует в модуле объекта, добавь ветку перед КонецЕсли:
bslИначеЕсли ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}}
ВызовСерверногоМетода - если обработчика нет
Для глобальных обработок (без ОбъектыНазначения):
bslПроцедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}} КонецЕсли; КонецПроцедуры
Для назначаемых обработок (с ОбъектыНазначения):
bslПроцедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполненияКоманды) Экспорт Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}} КонецЕсли; КонецПроцедуры
ПечатнаяФорма - если процедура Печать уже есть
Добавь блок перед КонецПроцедуры:
bslПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{Идентификатор}}"); Если ПечатнаяФорма <> Неопределено Тогда ПечатнаяФорма.ТабличныйДокумент = Сформировать{{Идентификатор}}(МассивОбъектов, ОбъектыПечати); ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{Представление}}'"); КонецЕсли;
ПечатнаяФорма - если процедуры Печать нет
bslПроцедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{Идентификатор}}"); Если ПечатнаяФорма <> Неопределено Тогда ПечатнаяФорма.ТабличныйДокумент = Сформировать{{Идентификатор}}(МассивОбъектов, ОбъектыПечати); ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{Представление}}'"); КонецЕсли; КонецПроцедуры
ВызовКлиентскогоМетода
Добавляется в модуль формы (Forms/<FormName>/Ext/Form/Module.bsl):
Для глобальных обработок:
bsl&НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}} КонецЕсли; КонецПроцедуры
Для назначаемых обработок:
bsl&НаКлиенте Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда // TODO: Реализация {{Идентификатор}} КонецЕсли; КонецПроцедуры
Если процедура уже есть - добавь ветку ИначеЕсли.
Инструкции
- Найди и прочитай
ObjectModule.bslчерез Glob:src/{{ProcessorName}}/Ext/ObjectModule.bsl - Убедись что
СведенияОВнешнейОбработке()существует. Если нет - предложи вызвать/epf-bsp-init - Определи вид обработки из существующего кода (найди строку с
ВидОбработки...()) - Вставь блок команды перед
Возврат ПараметрыРегистрации - Добавь обработчик:
- Для серверных обработчиков - в
ObjectModule.bsl, областьПрограммныйИнтерфейс - Для клиентских обработчиков - в модуль формы (найти через Glob:
src/{{ProcessorName}}/Forms/*/Ext/Form/Module.bsl)
- Для серверных обработчиков - в
- Если обработчик (
ВыполнитьКоманду/Печать) уже есть - добавь ветку, не создавай дубль процедуры - Используй табы для отступов
Пример
Пользователь: /epf-bsp-add-command МояОбработка ЗаказПокупателя серверный "Заказ покупателя"
В СведенияОВнешнейОбработке() перед Возврат добавится:
bslНоваяКоманда = ПараметрыРегистрации.Команды.Добавить(); НоваяКоманда.Представление = НСтр("ru = 'Заказ покупателя'"); НоваяКоманда.Идентификатор = "ЗаказПокупателя"; НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода(); НоваяКоманда.ПоказыватьОповещение = Ложь;
И в существующую процедуру ВыполнитьКоманду добавится блок обработки.


