mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-11 05:23:42 +03:00
197 lines
12 KiB
Markdown
197 lines
12 KiB
Markdown
---
|
||
name: epf-bsp-add-command
|
||
description: Определить команду в БСП‑описании обработки (`СведенияОВнешнейОбработке`) — открытие формы, вызов клиентского/серверного метода, заполнение объекта и т.п. Используй когда нужно зарегистрировать команду в дополнительной обработке БСП
|
||
argument-hint: <ProcessorName> <Идентификатор> [ТипКоманды] [Представление]
|
||
allowed-tools:
|
||
- Read
|
||
- Edit
|
||
- Glob
|
||
- Grep
|
||
---
|
||
|
||
# /epf-bsp-add-command — Добавление команды БСП
|
||
|
||
Добавляет команду в существующую функцию `СведенияОВнешнейОбработке()` и генерирует соответствующий обработчик.
|
||
|
||
Предварительно обработка должна быть инициализирована через `/epf-bsp-init`.
|
||
|
||
## Usage
|
||
|
||
```
|
||
/epf-bsp-add-command <ProcessorName> <Идентификатор> [ТипКоманды] [Представление]
|
||
```
|
||
|
||
| Параметр | Обязательный | По умолчанию | Описание |
|
||
|---------------|:------------:|-----------------------|--------------------------------------------|
|
||
| ProcessorName | да | — | Имя обработки |
|
||
| Идентификатор | да | — | Внутреннее имя команды (латиница) |
|
||
| ТипКоманды | нет | из вида обработки | Тип запуска команды (см. маппинг ниже) |
|
||
| Представление | нет | = Идентификатор | Отображаемое имя команды для пользователя |
|
||
| SrcDir | нет | `src` | Каталог исходников |
|
||
|
||
## Маппинг типов команд
|
||
|
||
Пользователь может указать тип в свободной форме:
|
||
|
||
| Пользователь пишет | ТипКоманды |
|
||
|---------------------------------------|-----------------------------------------------------|
|
||
| открыть форму, форма | `ТипКомандыОткрытиеФормы()` |
|
||
| клиентский метод, на клиенте | `ТипКомандыВызовКлиентскогоМетода()` |
|
||
| серверный метод, на сервере | `ТипКомандыВызовСерверногоМетода()` |
|
||
| заполнение формы, заполнить форму | `ТипКомандыЗаполнениеФормы()` |
|
||
| сценарий, безопасный режим | `ТипКомандыСценарийВБезопасномРежиме()` |
|
||
|
||
Если пользователь не указал тип — определи по виду обработки из существующего кода `СведенияОВнешнейОбработке()`:
|
||
|
||
| Вид обработки (из кода) | ТипКоманды по умолчанию |
|
||
|----------------------------|-------------------------------------------|
|
||
| ДополнительнаяОбработка | `ТипКомандыОткрытиеФормы()` |
|
||
| ДополнительныйОтчет | `ТипКомандыОткрытиеФормы()` |
|
||
| ЗаполнениеОбъекта | `ТипКомандыВызовСерверногоМетода()` |
|
||
| Отчет | `ТипКомандыОткрытиеФормы()` |
|
||
| ПечатнаяФорма | `ТипКомандыВызовСерверногоМетода()` |
|
||
| СозданиеСвязанныхОбъектов | `ТипКомандыВызовСерверногоМетода()` |
|
||
|
||
## Шаблон добавления команды
|
||
|
||
Вставляется в `СведенияОВнешнейОбработке()` **перед** строкой `Возврат ПараметрыРегистрации`:
|
||
|
||
```bsl
|
||
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
|
||
НоваяКоманда.Представление = НСтр("ru = '{{Представление}}'");
|
||
НоваяКоманда.Идентификатор = "{{Идентификатор}}";
|
||
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.{{ТипКоманды}};
|
||
НоваяКоманда.ПоказыватьОповещение = Ложь;
|
||
```
|
||
|
||
Для печатных форм (ВидОбработкиПечатнаяФорма) добавь также:
|
||
|
||
```bsl
|
||
НоваяКоманда.Модификатор = "ПечатьMXL";
|
||
```
|
||
|
||
Примечание: в отличие от первой команды (из `/epf-bsp-init`), дополнительные команды используют строковые литералы `НСтр("ru = '...'")` для представления и строку для идентификатора, а не `Метаданные()`.
|
||
|
||
## Шаблоны обработчиков
|
||
|
||
### ВызовСерверногоМетода — если обработчик уже есть
|
||
|
||
Если процедура `ВыполнитьКоманду` уже существует в модуле объекта, добавь ветку перед `КонецЕсли`:
|
||
|
||
```bsl
|
||
ИначеЕсли ИдентификаторКоманды = "{{Идентификатор}}" Тогда
|
||
// TODO: Реализация {{Идентификатор}}
|
||
```
|
||
|
||
### ВызовСерверногоМетода — если обработчика нет
|
||
|
||
Для глобальных обработок (без `ОбъектыНазначения`):
|
||
|
||
```bsl
|
||
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
|
||
|
||
Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
|
||
// TODO: Реализация {{Идентификатор}}
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
```
|
||
|
||
Для назначаемых обработок (с `ОбъектыНазначения`):
|
||
|
||
```bsl
|
||
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполненияКоманды) Экспорт
|
||
|
||
Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
|
||
// TODO: Реализация {{Идентификатор}}
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
```
|
||
|
||
### ПечатнаяФорма — если процедура Печать уже есть
|
||
|
||
Добавь блок перед `КонецПроцедуры`:
|
||
|
||
```bsl
|
||
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{Идентификатор}}");
|
||
Если ПечатнаяФорма <> Неопределено Тогда
|
||
ПечатнаяФорма.ТабличныйДокумент = Сформировать{{Идентификатор}}(МассивОбъектов, ОбъектыПечати);
|
||
ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{Представление}}'");
|
||
КонецЕсли;
|
||
```
|
||
|
||
### ПечатнаяФорма — если процедуры Печать нет
|
||
|
||
```bsl
|
||
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
|
||
|
||
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{Идентификатор}}");
|
||
Если ПечатнаяФорма <> Неопределено Тогда
|
||
ПечатнаяФорма.ТабличныйДокумент = Сформировать{{Идентификатор}}(МассивОбъектов, ОбъектыПечати);
|
||
ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{Представление}}'");
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
```
|
||
|
||
### ВызовКлиентскогоМетода
|
||
|
||
Добавляется в **модуль формы** (`Forms/<FormName>/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 = 'Заказ покупателя'");
|
||
НоваяКоманда.Идентификатор = "ЗаказПокупателя";
|
||
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
|
||
НоваяКоманда.ПоказыватьОповещение = Ложь;
|
||
```
|
||
|
||
И в существующую процедуру `ВыполнитьКоманду` добавится блок обработки.
|