diff --git a/.claude/skills/epf-bsp-add-command/SKILL.md b/.claude/skills/epf-bsp-add-command/SKILL.md index 3d3f9674d..df3de0122 100644 --- a/.claude/skills/epf-bsp-add-command/SKILL.md +++ b/.claude/skills/epf-bsp-add-command/SKILL.md @@ -33,13 +33,15 @@ allowed-tools: Пользователь может указать тип в свободной форме: -| Пользователь пишет | ТипКоманды | -|---------------------------------------|-----------------------------------------------------| -| открыть форму, форма | `ТипКомандыОткрытиеФормы()` | -| клиентский метод, на клиенте | `ТипКомандыВызовКлиентскогоМетода()` | -| серверный метод, на сервере | `ТипКомандыВызовСерверногоМетода()` | -| заполнение формы, заполнить форму | `ТипКомандыЗаполнениеФормы()` | -| сценарий, безопасный режим | `ТипКомандыСценарийВБезопасномРежиме()` | +| Пользователь пишет | ТипКоманды | Доступен для вида обработки | +|---------------------------------------|-------------------------------------------|-----------------------------| +| открыть форму, форма | `ТипКомандыОткрытиеФормы()` | любого | +| клиентский метод, на клиенте | `ТипКомандыВызовКлиентскогоМетода()` | любого | +| серверный метод, на сервере | `ТипКомандыВызовСерверногоМетода()` | любого | +| заполнение формы, заполнить форму | `ТипКомандыЗаполнениеФормы()` | ЗаполнениеОбъекта | +| загрузка из файла, импорт из файла | `ТипКомандыЗагрузкаДанныхИзФайла()` | ДополнительнаяОбработка; в конфигурации должна быть подсистема «Загрузка данных из файла» | + +Других типов команд в БСП нет. Если запрошенный тип не подходит ни под одну строку — спроси пользователя, не придумывай метод. Если тип недоступен для вида обработки — сообщи об этом и не добавляй команду. Если пользователь не указал тип — определи по виду обработки из существующего кода `СведенияОВнешнейОбработке()`: @@ -74,7 +76,13 @@ allowed-tools: ## Шаблоны обработчиков -### ВызовСерверногоМетода — если обработчик уже есть +Шаблон выбирается по паре «тип команды × вид обработки». + +### ОткрытиеФормы + +Обработчик не нужен: открывается основная форма обработки, идентификатор команды приходит в `Параметры.ИдентификаторКоманды`. + +### ВызовСерверногоМетода, ЗаполнениеФормы — если обработчик уже есть Если процедура `ВыполнитьКоманду` уже существует в модуле объекта, добавь ветку перед `КонецЕсли`: @@ -83,9 +91,11 @@ allowed-tools: // TODO: Реализация {{Идентификатор}} ``` -### ВызовСерверногоМетода — если обработчика нет +### ВызовСерверногоМетода, ЗаполнениеФормы — если обработчика нет -Для глобальных обработок (без `ОбъектыНазначения`): +Процедура добавляется в модуль объекта. Сигнатура зависит от вида обработки. + +ДополнительнаяОбработка, ДополнительныйОтчет (без `ОбъектыНазначения`): ```bsl Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт @@ -97,7 +107,7 @@ allowed-tools: КонецПроцедуры ``` -Для назначаемых обработок (с `ОбъектыНазначения`): +ЗаполнениеОбъекта, Отчет: ```bsl Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполненияКоманды) Экспорт @@ -109,6 +119,20 @@ allowed-tools: КонецПроцедуры ``` +Для команды типа ЗаполнениеФормы обработчик тот же: `ОбъектыНазначения` = `Неопределено`, заполняемая форма передаётся в `ПараметрыВыполненияКоманды.ЭтаФорма`. + +СозданиеСвязанныхОбъектов (ссылки созданных объектов добавляются в массив `СозданныеОбъекты`): + +```bsl +Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты, ПараметрыВыполненияКоманды) Экспорт + + Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда + // TODO: Реализация {{Идентификатор}} + КонецЕсли; + +КонецПроцедуры +``` + ### ПечатнаяФорма — если процедура Печать уже есть Добавь блок перед `КонецПроцедуры`: @@ -137,9 +161,9 @@ allowed-tools: ### ВызовКлиентскогоМетода -Добавляется в **модуль формы** (`Forms//Ext/Form/Module.bsl`): +Добавляется в **модуль основной формы** (`Forms//Ext/Form/Module.bsl`). Имя и сигнатура зависят от вида обработки. -Для глобальных обработок: +ДополнительнаяОбработка, ДополнительныйОтчет: ```bsl &НаКлиенте @@ -152,7 +176,7 @@ allowed-tools: КонецПроцедуры ``` -Для назначаемых обработок: +ЗаполнениеОбъекта, Отчет: ```bsl &НаКлиенте @@ -165,18 +189,78 @@ allowed-tools: КонецПроцедуры ``` +СозданиеСвязанныхОбъектов: + +```bsl +&НаКлиенте +Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) Экспорт + + Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда + // TODO: Реализация {{Идентификатор}} + КонецЕсли; + +КонецПроцедуры +``` + +ПечатнаяФорма (процедура называется `Печать`, не `ВыполнитьКоманду`): + +```bsl +&НаКлиенте +Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт + + Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда + // TODO: Реализация {{Идентификатор}} + КонецЕсли; + +КонецПроцедуры +``` + Если процедура уже есть — добавь ветку `ИначеЕсли`. +### ЗагрузкаДанныхИзФайла + +В модуль объекта добавляются три экспортные процедуры. Если какая-то из них уже есть — добавь в неё ветку `ИначеЕсли`. + +```bsl +Процедура ОпределитьПараметрыЗагрузкиДанныхИзФайла(ИдентификаторКоманды, ПараметрыЗагрузки) Экспорт + + Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда + // ПараметрыЗагрузки.ИмяМакетаСШаблоном = "ЗагрузкаДанныхИзФайла"; + // ПараметрыЗагрузки.ОбязательныеКолонки.Добавить("<ИмяКолонки>"); + КонецЕсли; + +КонецПроцедуры + +Процедура СопоставитьЗагружаемыеДанныеИзФайла(ИдентификаторКоманды, ЗагружаемыеДанные) Экспорт + + Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда + // TODO: Заполнить колонку СопоставленныйОбъект по данным из файла + КонецЕсли; + +КонецПроцедуры + +Процедура ЗагрузитьИзФайла(ИдентификаторКоманды, ЗагружаемыеДанные, ПараметрыЗагрузки, Отказ) Экспорт + + Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда + // TODO: Загрузка; для каждой строки заполнить РезультатСопоставленияСтроки + // ("Создан", "Обновлен", "Пропущен") и при ошибке ОписаниеОшибки + КонецЕсли; + +КонецПроцедуры +``` + +Колонки загружаемых данных берутся из макета обработки `ЗагрузкаДанныхИзФайла` (имя макета можно переопределить через `ПараметрыЗагрузки.ИмяМакетаСШаблоном`). Если макета нет — предложи создать его через `/template-add`. + ## Инструкции 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. Если обработчик (`ВыполнитьКоманду` / `Печать`) уже есть — добавь ветку, не создавай дубль процедуры +5. Добавь обработчик по шаблону для типа команды и вида обработки из шага 3: + - Для серверных обработчиков и ЗагрузкаДанныхИзФайла — в `ObjectModule.bsl`, область `ПрограммныйИнтерфейс` + - Для клиентских обработчиков — в модуль основной формы (найти через Glob: `src/{{ProcessorName}}/Forms/*/Ext/Form/Module.bsl`) +6. Если обработчик (`ВыполнитьКоманду` / `Печать` / процедуры загрузки) уже есть — добавь ветку, не создавай дубль процедуры 7. Используй табы для отступов ## Пример diff --git a/.claude/skills/epf-bsp-init/SKILL.md b/.claude/skills/epf-bsp-init/SKILL.md index 49be36f6c..d38519fad 100644 --- a/.claude/skills/epf-bsp-init/SKILL.md +++ b/.claude/skills/epf-bsp-init/SKILL.md @@ -108,7 +108,7 @@ allowed-tools: Для видов с типом команды `ВызовСерверногоМетода` добавь соответствующую процедуру-обработчик в ту же область `ПрограммныйИнтерфейс`, после `СведенияОВнешнейОбработке`. -### Для ЗаполнениеОбъекта / СозданиеСвязанныхОбъектов +### Для ЗаполнениеОбъекта ```bsl Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполненияКоманды) Экспорт @@ -118,6 +118,18 @@ allowed-tools: КонецПроцедуры ``` +### Для СозданиеСвязанныхОбъектов + +Ссылки созданных объектов добавляются в массив `СозданныеОбъекты`: + +```bsl +Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты, ПараметрыВыполненияКоманды) Экспорт + + // TODO: Реализация + +КонецПроцедуры +``` + ### Для ПечатнаяФорма ```bsl