Claude Skill

1c-bsp-command

Добавить команду в дополнительную обработку БСП

LLM Mart · 0 points · 13 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download Desko77-claude-code-skills-1c-skills_1c-bsp-command-ac33656.zip · 3 KB
Part of desko77/claude-code-skills-1c — 48 skills

Install

skills CLI npx skills add https://github.com/Desko77/claude-code-skills-1c/tree/main/skills/1c-bsp-command
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install desko77-claude-code-skills-1c@llmmart
Git git clone https://github.com/Desko77/claude-code-skills-1c.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole desko77/claude-code-skills-1c collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

/epf-bsp-add-command - Добавление команды БСП

Добавляет команду в существующую функцию СведенияОВнешнейОбработке() и генерирует соответствующий обработчик.

Предварительно обработка должна быть инициализирована через /epf-bsp-init.

Usage

/epf-bsp-add-command <ProcessorName> <Идентификатор> [ТипКоманды] [Представление]
Параметр Обязательный По умолчанию Описание
ProcessorName да - Имя обработки
Идентификатор да - Внутреннее имя команды (латиница)
ТипКоманды нет из вида обработки Тип запуска команды (см. маппинг ниже)
Представление нет = Идентификатор Отображаемое имя команды для пользователя
SrcDir нет src Каталог исходников

Маппинг типов команд

Пользователь может указать тип в свободной форме:

Пользователь пишет ТипКоманды
открыть форму, форма ТипКомандыОткрытиеФормы()
клиентский метод, на клиенте ТипКомандыВызовКлиентскогоМетода()
серверный метод, на сервере ТипКомандыВызовСерверногоМетода()
заполнение формы, заполнить форму ТипКомандыЗаполнениеФормы()
сценарий, безопасный режим ТипКомандыСценарийВБезопасномРежиме()

Если пользователь не указал тип - определи по виду обработки из существующего кода СведенияОВнешнейОбработке():

Вид обработки (из кода) ТипКоманды по умолчанию
ДополнительнаяОбработка ТипКомандыОткрытиеФормы()
ДополнительныйОтчет ТипКомандыОткрытиеФормы()
ЗаполнениеОбъекта ТипКомандыВызовСерверногоМетода()
Отчет ТипКомандыОткрытиеФормы()
ПечатнаяФорма ТипКомандыВызовСерверногоМетода()
СозданиеСвязанныхОбъектов ТипКомандыВызовСерверногоМетода()

Шаблон добавления команды

Вставляется в СведенияОВнешнейОбработке() перед строкой Возврат ПараметрыРегистрации:

	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление        = НСтр("ru = '{{Представление}}'");
	НоваяКоманда.Идентификатор        = "{{Идентификатор}}";
	НоваяКоманда.Использование        = ДополнительныеОтчетыИОбработкиКлиентСервер.{{ТипКоманды}};
	НоваяКоманда.ПоказыватьОповещение = Ложь;

Для печатных форм (ВидОбработкиПечатнаяФорма) добавь также:

	НоваяКоманда.Модификатор = "ПечатьMXL";

Примечание: в отличие от первой команды (из /epf-bsp-init), дополнительные команды используют строковые литералы НСтр("ru = '...'") для представления и строку для идентификатора, а не Метаданные().

Шаблоны обработчиков

ВызовСерверногоМетода - если обработчик уже есть

Если процедура ВыполнитьКоманду уже существует в модуле объекта, добавь ветку перед КонецЕсли:

	ИначеЕсли ИдентификаторКоманды = "{{Идентификатор}}" Тогда
		// TODO: Реализация {{Идентификатор}}

ВызовСерверногоМетода - если обработчика нет

Для глобальных обработок (без ОбъектыНазначения):

Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт

	Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
		// TODO: Реализация {{Идентификатор}}
	КонецЕсли;

КонецПроцедуры

Для назначаемых обработок (с ОбъектыНазначения):

Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполненияКоманды) Экспорт

	Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
		// TODO: Реализация {{Идентификатор}}
	КонецЕсли;

КонецПроцедуры

ПечатнаяФорма - если процедура Печать уже есть

Добавь блок перед КонецПроцедуры:

	ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{Идентификатор}}");
	Если ПечатнаяФорма <> Неопределено Тогда
		ПечатнаяФорма.ТабличныйДокумент = Сформировать{{Идентификатор}}(МассивОбъектов, ОбъектыПечати);
		ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{Представление}}'");
	КонецЕсли;

ПечатнаяФорма - если процедуры Печать нет

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

	ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "{{Идентификатор}}");
	Если ПечатнаяФорма <> Неопределено Тогда
		ПечатнаяФорма.ТабличныйДокумент = Сформировать{{Идентификатор}}(МассивОбъектов, ОбъектыПечати);
		ПечатнаяФорма.СинонимМакета = НСтр("ru = '{{Представление}}'");
	КонецЕсли;

КонецПроцедуры

ВызовКлиентскогоМетода

Добавляется в модуль формы (Forms/<FormName>/Ext/Form/Module.bsl):

Для глобальных обработок:

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт

	Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
		// TODO: Реализация {{Идентификатор}}
	КонецЕсли;

КонецПроцедуры

Для назначаемых обработок:

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт

	Если ИдентификаторКоманды = "{{Идентификатор}}" Тогда
		// 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 МояОбработка ЗаказПокупателя серверный "Заказ покупателя"

В СведенияОВнешнейОбработке() перед Возврат добавится:

	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление        = НСтр("ru = 'Заказ покупателя'");
	НоваяКоманда.Идентификатор        = "ЗаказПокупателя";
	НоваяКоманда.Использование        = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	НоваяКоманда.ПоказыватьОповещение = Ложь;

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

Files (claude-code-skills-1c)
  • evals
    • evals.json 3.9 KB
      {
        "skill_name": "1c-bsp-command",
        "evals": [
          {
            "id": "command-open-form",
            "prompt": "Добавь команду ОткрытьОтчёт в обработку АнализПродаж. Команда должна открывать форму. Исходники в src/.",
            "expected_output": "В ObjectModule.bsl обработки АнализПродаж добавлен блок NewCommand в функцию ExternalDataProcessorInfo() перед Return RegistrationParameters, тип команды CommandTypeOpenForm().",
            "expectations": [
              "В файле src/АнализПродаж/Ext/ObjectModule.bsl найдена функция ExternalDataProcessorInfo()",
              "Добавлен блок NewCommand с ID = \"ОткрытьОтчёт\" перед строкой Return RegistrationParameters",
              "Поле NewCommand.Use содержит AdditionalReportsAndDataProcessorsClientServer.CommandTypeOpenForm()",
              "Поле NewCommand.Presentation содержит NStr с текстом ОткрытьОтчёт или пользовательским именем",
              "Флаг NewCommand.ShowNotification установлен в False"
            ],
            "expect": [
              "ExternalDataProcessorInfo",
              "NewCommand|Commands\\.Add"
            ],
            "forbid": [
              "ВнешняяОбработкаИнформация\\s*\\("
            ],
            "should_activate": true
          },
          {
            "id": "command-server-method",
            "prompt": "Добавь команду ВыполнитьОбработку в обработку ОбработкаДокументов. Тип команды — серверный метод. Обработчик ExecuteCommand уже существует.",
            "expected_output": "В ExternalDataProcessorInfo() добавлена команда с CommandTypeServerMethodCall(), в существующую процедуру ExecuteCommand добавлена ветка ElsIf для нового идентификатора.",
            "expectations": [
              "В блоке команды NewCommand.Use содержит CommandTypeServerMethodCall()",
              "В существующую процедуру ExecuteCommand добавлена ветка ElsIf CommandID = \"ВыполнитьОбработку\"",
              "Новая процедура ExecuteCommand не создана (она уже существовала)",
              "Блок NewCommand вставлен перед Return RegistrationParameters"
            ],
            "expect": [
              "ExternalDataProcessorInfo",
              "CommandTypeServerMethodCall",
              "ExecuteCommand"
            ],
            "forbid": [
              "CommandTypeForm\\s*\\(\\s*\\)\\s*;?\\s*$"
            ],
            "should_activate": true
          },
          {
            "id": "command-print-form",
            "prompt": "Добавь команду ПечатьСчёта в обработку ПечатьДокументов с типом PrintForm. Исходники в D:/Projects/src/.",
            "expected_output": "Добавлена команда с типом CommandTypeServerMethodCall() и Modifier = \"PrintMXL\". В процедуре Print добавлен блок для нового макета ПечатьСчёта.",
            "expectations": [
              "Блок NewCommand содержит NewCommand.Modifier = \"PrintMXL\"",
              "NewCommand.Use содержит CommandTypeServerMethodCall()",
              "В процедуре Print добавлен вызов PrintManagement.PrintFormInfo с идентификатором \"ПечатьСчёта\"",
              "Блок Generate<Identifier> используется для формирования табличного документа"
            ],
            "expect": [
              "ExternalDataProcessorInfo",
              "CommandTypeServerMethodCall",
              "PrintMXL|Modifier"
            ],
            "forbid": [
              "CommandTypeOpenForm"
            ],
            "should_activate": true
          }
        ]
      }
      
  • SKILL.md 11.6 KB
    ---
    name: 1c-bsp-command
    description: Добавить команду в дополнительную обработку БСП
    argument-hint: <ProcessorName> <Идентификатор> [ТипКоманды] [Представление]
    allowed-tools:
      - Read
      - Edit
      - Glob
      - Grep
    ---
    
    # /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 = 'Заказ покупателя'");
    	НоваяКоманда.Идентификатор        = "ЗаказПокупателя";
    	НоваяКоманда.Использование        = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    	НоваяКоманда.ПоказыватьОповещение = Ложь;
    ```
    
    И в существующую процедуру `ВыполнитьКоманду` добавится блок обработки.
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related