---
name: xbsl-image-add
description: >
  Добавление фото и изображений (аватар, фото товара, иконка) к объекту конфигурации 1С:Элемент.
  Поддерживает 2 паттерна: P5 — простое фото без обработки (ВыборФайлов + Картинка);
  P6 — фото с серверной обработкой (ресайз, обрезка по кругу через ОбрабатываемоеИзображение).
  Вызывай когда пользователь хочет добавить аватар сотрудника, фото товара, логотип компании,
  изображение профиля или любое одиночное изображение к справочнику или документу.
  НЕ для файловых вложений (используй xbsl-file-add).
compatibility:
  runtime:
    - python3
---

## Ключевое отличие от xbsl-file-add

`ВыборФайлов` **не хранит файл автоматически** — он вызывает обработчик `ПриИзменении`, который должен загрузить файл через `ЗагрузкаФайлов` и сохранить в реквизит. Это требует `.xbsl` файла обработчика — его нет в `xbsl-file-add`.

Прочитай `references/patterns.md` перед выполнением — там YAML и XBSL шаблоны для обоих паттернов.

---

## Алгоритм

### Шаг 1 — Определить паттерн и placeholder

| Паттерн | Когда выбирать |
|---------|----------------|
| **P5** — Простое фото | загрузка без обработки, хранится как есть |
| **P6** — Фото с обработкой | нужен ресайз и/или обрезка по кругу (аватар профиля) |

**Placeholder-изображение** (заглушка когда фото не загружено):

| Контекст | Placeholder |
|----------|-------------|
| Фото/аватар аккаунта, пользователя, сотрудника, контакта | `Ресурс{Аккаунт.svg}.Ссылка` |
| Любое другое изображение (товар, документ, объект) | `Ресурс{Файл.svg}.Ссылка` |

> Если пользователь просит «фото аккаунта», «аватар», «фото профиля» — используй `Аккаунт.svg`.
> Во всех остальных случаях — `Файл.svg`.

### Шаг 2 — Анализ объекта (параллельно с шагом 1)

```bash
python3 .claude/skills/xbsl-form-info/scripts/form_info.py --name <ИмяОбъекта> --root .
```

Из результата взять:
- `object_path` + `object_file` — путь к YAML объекта
- `fields` — проверить наличие реквизита `Фото`
- `existing_forms` — найти YAML формы объекта

Если скрипт вернул `error` — сообщи пользователю и остановись.

Если реквизит `Фото` уже есть в `fields` — спроси пользователя:
- **Использовать существующий** → пропустить шаги 3 и 4, имя реквизита `Фото`, имя метода `ПриВыбореФото`
- **Создать новый** → спроси имя нового реквизита, продолжить со шага 3; имя метода — `ПриВыборе<ИмяРеквизита>`

### Шаг 3 — UUID

Вызвать скилл `xbsl-uuid` → 1 UUID для реквизита изображения.

### Шаг 4 — Обновить YAML объекта

Добавить в конец `Реквизиты` (шаблон из `references/patterns.md`, раздел «Реквизит»):

```yaml
-
    Ид: <UUID>
    Имя: <ИмяРеквизита>
    Тип: ДвоичныйОбъект.Ссылка?
```

### Шаг 5 — Обновить форму объекта

Найти файл формы из `existing_forms["ФормаОбъекта"]`.

**Если форма не найдена**: вызови скилл `xbsl-form-add` для создания формы объекта (и формы списка если нужна), затем **продолжи выполнение этого скилла** — не останавливайся, добавь изображение в только что созданную форму.

**Если форма найдена**: добавить группу с `Картинка` + `ВыборФайлов` по шаблону из `references/patterns.md`.

**Место вставки группы фото:**
- Объект-человек (сотрудник, пользователь, контакт, аккаунт) → **в начало** формы, перед полями
- Любой другой объект (документ, товар, задача и т.д.) → **в конец** формы, после полей

### Шаг 6 — Добавить `.xbsl` обработчик

Файл называется по имени **формы**: `<НазваниеФормы>.xbsl`, рядом с YAML формы.

- Если файл уже существует — дописать метод(ы) в конец
- Если не существует — создать новый

Шаблоны из `references/patterns.md`:
- **P5**: метод `ПриВыбореФото`
- **P6**: метод `ПриВыбореФото` + статический серверный метод `ОбработатьФото`

Имя реквизита — `Фото` (по умолчанию). Имя метода — `ПриВыборе<ИмяРеквизита>` (например `ПриВыбореФото`, `ПриВыбореАватара`).

### Шаг 7 — Итог

Перечислить изменённые/созданные файлы:
- `<ОбъектYAML>` — добавлен реквизит `ДвоичныйОбъект.Ссылка?`
- `<ФормаYAML>` — добавлены компоненты `Картинка` + `ВыборФайлов`
- `<ФормаXBSL>` — создан/обновлён обработчик
