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


