mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-25 03:35:52 +03:00
fix(epf-bsp-add-command): типы команд и сигнатуры обработчиков по контракту БСП
- убран несуществующий ТипКомандыСценарийВБезопасномРежиме(), добавлен ТипКомандыЗагрузкаДанныхИзФайла() с шаблонами трёх процедур загрузки; список типов помечен исчерпывающим, указана применимость к видам - СозданиеСвязанныхОбъектов: серверный ВыполнитьКоманду с СозданныеОбъекты (4 параметра) — также в epf-bsp-init - клиентские обработчики: Печать для печатных форм, вариант для создания связанных объектов Refs #82 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ANXwbMUhuRFSCsq2RgmTTm
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
43c8f50592
commit
16345eb83d
@@ -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/<FormName>/Ext/Form/Module.bsl`):
|
||||
Добавляется в **модуль основной формы** (`Forms/<FormName>/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. Используй табы для отступов
|
||||
|
||||
## Пример
|
||||
|
||||
@@ -108,7 +108,7 @@ allowed-tools:
|
||||
|
||||
Для видов с типом команды `ВызовСерверногоМетода` добавь соответствующую процедуру-обработчик в ту же область `ПрограммныйИнтерфейс`, после `СведенияОВнешнейОбработке`.
|
||||
|
||||
### Для ЗаполнениеОбъекта / СозданиеСвязанныхОбъектов
|
||||
### Для ЗаполнениеОбъекта
|
||||
|
||||
```bsl
|
||||
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполненияКоманды) Экспорт
|
||||
@@ -118,6 +118,18 @@ allowed-tools:
|
||||
КонецПроцедуры
|
||||
```
|
||||
|
||||
### Для СозданиеСвязанныхОбъектов
|
||||
|
||||
Ссылки созданных объектов добавляются в массив `СозданныеОбъекты`:
|
||||
|
||||
```bsl
|
||||
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты, ПараметрыВыполненияКоманды) Экспорт
|
||||
|
||||
// TODO: Реализация
|
||||
|
||||
КонецПроцедуры
|
||||
```
|
||||
|
||||
### Для ПечатнаяФорма
|
||||
|
||||
```bsl
|
||||
|
||||
Reference in New Issue
Block a user