mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-25 19:45:53 +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: Реализация {{Идентификатор}}
|
// TODO: Реализация {{Идентификатор}}
|
||||||
```
|
```
|
||||||
|
|
||||||
### ВызовСерверногоМетода — если обработчика нет
|
### ВызовСерверногоМетода, ЗаполнениеФормы — если обработчика нет
|
||||||
|
|
||||||
Для глобальных обработок (без `ОбъектыНазначения`):
|
Процедура добавляется в модуль объекта. Сигнатура зависит от вида обработки.
|
||||||
|
|
||||||
|
ДополнительнаяОбработка, ДополнительныйОтчет (без `ОбъектыНазначения`):
|
||||||
|
|
||||||
```bsl
|
```bsl
|
||||||
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
|
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
|
||||||
@@ -97,7 +107,7 @@ allowed-tools:
|
|||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
```
|
```
|
||||||
|
|
||||||
Для назначаемых обработок (с `ОбъектыНазначения`):
|
ЗаполнениеОбъекта, Отчет:
|
||||||
|
|
||||||
```bsl
|
```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
|
```bsl
|
||||||
&НаКлиенте
|
&НаКлиенте
|
||||||
@@ -152,7 +176,7 @@ allowed-tools:
|
|||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
```
|
```
|
||||||
|
|
||||||
Для назначаемых обработок:
|
ЗаполнениеОбъекта, Отчет:
|
||||||
|
|
||||||
```bsl
|
```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`
|
1. Найди и прочитай `ObjectModule.bsl` через Glob: `src/{{ProcessorName}}/Ext/ObjectModule.bsl`
|
||||||
2. Убедись что `СведенияОВнешнейОбработке()` существует. Если нет — предложи вызвать `/epf-bsp-init`
|
2. Убедись что `СведенияОВнешнейОбработке()` существует. Если нет — предложи вызвать `/epf-bsp-init`
|
||||||
3. Определи вид обработки из существующего кода (найди строку с `ВидОбработки...()`)
|
3. Определи вид обработки из существующего кода (найди строку с `ВидОбработки...()`)
|
||||||
4. Вставь блок команды **перед** `Возврат ПараметрыРегистрации`
|
4. Вставь блок команды **перед** `Возврат ПараметрыРегистрации`
|
||||||
5. Добавь обработчик:
|
5. Добавь обработчик по шаблону для типа команды и вида обработки из шага 3:
|
||||||
- Для серверных обработчиков — в `ObjectModule.bsl`, область `ПрограммныйИнтерфейс`
|
- Для серверных обработчиков и ЗагрузкаДанныхИзФайла — в `ObjectModule.bsl`, область `ПрограммныйИнтерфейс`
|
||||||
- Для клиентских обработчиков — в модуль формы (найти через Glob: `src/{{ProcessorName}}/Forms/*/Ext/Form/Module.bsl`)
|
- Для клиентских обработчиков — в модуль основной формы (найти через Glob: `src/{{ProcessorName}}/Forms/*/Ext/Form/Module.bsl`)
|
||||||
6. Если обработчик (`ВыполнитьКоманду` / `Печать`) уже есть — добавь ветку, не создавай дубль процедуры
|
6. Если обработчик (`ВыполнитьКоманду` / `Печать` / процедуры загрузки) уже есть — добавь ветку, не создавай дубль процедуры
|
||||||
7. Используй табы для отступов
|
7. Используй табы для отступов
|
||||||
|
|
||||||
## Пример
|
## Пример
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ allowed-tools:
|
|||||||
|
|
||||||
Для видов с типом команды `ВызовСерверногоМетода` добавь соответствующую процедуру-обработчик в ту же область `ПрограммныйИнтерфейс`, после `СведенияОВнешнейОбработке`.
|
Для видов с типом команды `ВызовСерверногоМетода` добавь соответствующую процедуру-обработчик в ту же область `ПрограммныйИнтерфейс`, после `СведенияОВнешнейОбработке`.
|
||||||
|
|
||||||
### Для ЗаполнениеОбъекта / СозданиеСвязанныхОбъектов
|
### Для ЗаполнениеОбъекта
|
||||||
|
|
||||||
```bsl
|
```bsl
|
||||||
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполненияКоманды) Экспорт
|
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполненияКоманды) Экспорт
|
||||||
@@ -118,6 +118,18 @@ allowed-tools:
|
|||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Для СозданиеСвязанныхОбъектов
|
||||||
|
|
||||||
|
Ссылки созданных объектов добавляются в массив `СозданныеОбъекты`:
|
||||||
|
|
||||||
|
```bsl
|
||||||
|
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты, ПараметрыВыполненияКоманды) Экспорт
|
||||||
|
|
||||||
|
// TODO: Реализация
|
||||||
|
|
||||||
|
КонецПроцедуры
|
||||||
|
```
|
||||||
|
|
||||||
### Для ПечатнаяФорма
|
### Для ПечатнаяФорма
|
||||||
|
|
||||||
```bsl
|
```bsl
|
||||||
|
|||||||
Reference in New Issue
Block a user