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