1c-bsp-command · git:20260428.c3dfb0e · 2026-04-28 · sha256 e72f6b0476477b82

1c-bsp-command git:20260428.c3dfb0eA

Immutable. This exact content is served forever at /api/v1/blob/e72f6b0476477b82.

---
name: 1c-bsp-command
description: "Добавить команду в дополнительную обработку БСП"
---

# /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 = 'Заказ покупателя'");
	НоваяКоманда.Идентификатор = "ЗаказПокупателя";
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода;
	НоваяКоманда.ПоказыватьОповещение = Ложь;
```

И в существующую процедуру `ВыполнитьКоманду` добавится блок обработки.