mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-16 10:43:18 +03:00
Auto-build: copilot (python) from 7fa279c
This commit is contained in:
@@ -0,0 +1,196 @@
|
||||
---
|
||||
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 = 'Заказ покупателя'");
|
||||
НоваяКоманда.Идентификатор = "ЗаказПокупателя";
|
||||
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
|
||||
НоваяКоманда.ПоказыватьОповещение = Ложь;
|
||||
```
|
||||
|
||||
И в существующую процедуру `ВыполнитьКоманду` добавится блок обработки.
|
||||
Reference in New Issue
Block a user