---
name: xbsl-scheduled-task
description: >
  Use when пользователь просит создать или изменить запланированное задание
  1С:Предприятие.Элемент (XBSL): ЗапланированноеЗадание, scheduled task,
  расписание, ежедневный запуск, Обработчик().
---

# Создание запланированного задания XBSL

Всегда создавай пару артефактов одного имени: `<Имя>.yaml` и `<Имя>.xbsl`.
Перед генерацией прочитай `references/ЗапланированноеЗадание.md`.

## Шаг 1: Собери параметры

Определи из запроса:

| Параметр | Обязательный | Дефолт |
|---|---|---|
| `Имя` | Да | Нет |
| `ЗапуститьВ` | Да | Нет |
| `ОбластьВидимости` | Нет | `ВПодсистеме` |
| `ПредопределенноеЗадание` | Нет | `ЗапланироватьПриОбновленииПроекта` |
| `Описание` | Нет | Не добавлять |

Если имени или времени запуска нет, уточни их у пользователя. Для времени
используй строку формата `HH:MM`, например `"08:00"`.

## Шаг 2: Найди проект

Используй `xbsl-explore` для выбора проекта и папки назначения. Если проектов
нет, предложи сначала создать проект через `xbsl-init`. Если найдено несколько
подходящих проектов, уточни целевой.

Целевые файлы:

```text
{project_path}/{Имя}.yaml
{project_path}/{Имя}.xbsl
```

## Шаг 3: Сгенерируй UUID

Используй `xbsl-uuid` и запроси один UUID с дефисами для поля `Ид` объекта.
Не используй счетчики, повторяющиеся паттерны или заранее выбранные значения.

## Шаг 4: Сформируй YAML

Минимальный ежедневный вариант:

```yaml
ВидЭлемента: ЗапланированноеЗадание
Ид: <UUID>
Имя: <Имя>
ОбластьВидимости: ВПодсистеме
ПредопределенноеЗадание: ЗапланироватьПриОбновленииПроекта
Расписание:
    -
        Вид: Ежедневно
        ЗапуститьВ: "08:00"
        ПериодПовтораДней: 1
```

Не добавляй поле обработчика в YAML. Связь с обработчиком задается companion
модулем того же имени.

## Шаг 5: Сформируй module companion

Создай `<Имя>.xbsl`:

```bsl
@Обработчик
метод Обработчик()
;
```

Добавляй бизнес-логику внутрь `Обработчик()` только если пользователь описал
конкретное действие задания. Сигнатуру не меняй: метод без параметров.

## Шаг 6: Безопасно запиши файлы

Сначала собери полный ожидаемый текст обоих файлов.

- Если файла нет, создай его.
- Если файл уже существует и его содержимое совпадает, оставь без изменений.
- Если файл уже существует и отличается, остановись, покажи путь и кратко
  объясни конфликт; не перезаписывай без явного решения пользователя.

## Шаг 7: Проверь результат

Запусти доступный валидатор проекта для созданного YAML. Минимальная проверка
перед ответом пользователю:

- `ВидЭлемента` равен `ЗапланированноеЗадание`.
- YAML и `.xbsl` лежат рядом и имеют одно имя.
- В `.xbsl` есть `@Обработчик` и `метод Обработчик()` без параметров.
- В YAML нет поля, которое задает обработчик.
