# 1c Skd Decompile

> Декомпиляция схемы компоновки данных 1С (СКД) из XML в JSON-черновик DSL. Используй когда нужно декомпилировать СКД, преобразовать схему компоновки в JSON, получить DSL из макета СКД

- Skill: `desko77/1c-skd-decompile` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add desko77/1c-skd-decompile`
- Raw SKILL.md: https://api.skillmd.com/api/skills/desko77/1c-skd-decompile/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Desko77 (https://skillmd.com/u/desko77)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/desko77/1c-skd-decompile

---


# /skd-decompile - Декомпилятор СКД в JSON DSL

Принимает XML схемы компоновки данных (корневой элемент `DataCompositionSchema`; в выгрузке EDT/Конфигуратора это обычно `Template.xml` макета) и генерирует JSON-черновик в формате DSL скила `/skd-compile`. Обратная операция к `/skd-compile`.

**ВАЖНО: результат - ЧЕРНОВИК**, не гарантированный lossless round-trip. Перед компиляцией через `/skd-compile` обязательно просмотреть JSON и разрешить все маркеры `_todo`.

## Использование

```
/skd-decompile <Template.xml> [output.json]
```

## Команда

```powershell
powershell.exe -NoProfile -File skills/1c-skd-decompile/scripts/skd-decompile.ps1 -InputFile "<путь>/Template.xml" [-OutputFile "<путь>.skd.json"]
```

## Параметры

| Параметр   | Обязательный | Описание                                                                                     |
|------------|:------------:|----------------------------------------------------------------------------------------------|
| InputFile  | да           | Путь к XML СКД. Имя файла любое - проверяется только корневой элемент `DataCompositionSchema` |
| OutputFile | нет          | Путь для JSON. По умолчанию рядом с входным: `<имя>.skd.json`                                  |

## Коды возврата

| Код | Условие                                                                  |
|-----|--------------------------------------------------------------------------|
| 0   | Успех (в том числе с предупреждениями `_todo`)                            |
| 1   | Ошибка: файл не найден, XML не парсится, корень не `DataCompositionSchema` |
| 2   | Неверные аргументы (python-версия, argparse) |

## Рабочий процесс

1. `/skd-decompile` - получить JSON-черновик из существующей СКД
2. Просмотреть черновик, разрешить каждый `_todo` (вручную или моделью)
3. Править JSON под задачу (новые поля, варианты, параметры)
4. `/skd-compile` - собрать новый Template.xml
5. `/skd-validate` и `/skd-info` - проверить результат

Легитимные сценарии: заготовка нового отчета на основе существующего как шаблона; структурный рефакторинг полей/вариантов. Для точечной правки одного отчета лучше `/skd-edit` - полный цикл переписывает весь макет.

## Ограничения - черновик и маркеры _todo

- Конструкции XML, которые наш DSL не выражает, помечаются ключом `"_todo"` (массив строк-пояснений) на уровне соответствующего элемента JSON или корня. Каждая помета дублируется предупреждением в stderr.
- Перед скармливанием `/skd-compile` разрешить каждый `_todo`: перенести смысл в поддерживаемую форму или сознательно удалить (компилятор упадет на объектах-заглушках, состоящих из одного `_todo`).
- В `_todo` уходят (не полный список): составные типы значений и `TypeSet`, папки полей (`DataSetFieldFolder`), вложенные схемы (`nestedSchema`), условия выбора макета (`templateCondition`), ячейки-картинки, привязки макета к полю (`fieldTemplate`), пользовательские поля вариантов (`userFields`), `scope` условного оформления, `GroupItemAuto` в группировках, неизвестные типы элементов структуры/отбора/выборки.
- Молчаливые упрощения (без `_todo` на каждом узле): `userSettingID` структурных элементов отбрасываются (одна сводная помета в корне), `userSettingID` отборов в shorthand-форме заменяются флагом `@user` (при компиляции сгенерируется новый GUID), стиль ячеек макета подбирается эвристикой по 4 встроенным пресетам (`header`/`data`/`subheader`/`total`), ширины и высота макета читаются только из первой строки.
- `dataParameters` всегда выводятся явным массивом (свертка в `"auto"` не выполняется).
- Схема без единого `dataSet` декомпилируется, но помечается в корне: `/skd-compile` требует минимум один набор данных.
- py-версия строит глобальную карту namespace-префиксов документа (первое объявление префикса побеждает). На XML, где один и тот же префикс переиспользован с разными URI на разных уровнях (встречается у .NET-сериализаторов), возможен неверный резолвинг типов - для таких файлов используй ps1-версию (контекстный резолвинг по месту).

## Примеры

```powershell
# Декомпиляция макета отчета, JSON рядом (Template.skd.json)
powershell.exe -NoProfile -File skills/1c-skd-decompile/scripts/skd-decompile.ps1 -InputFile "src/Reports/Продажи/Templates/ОсновнаяСхемаКомпоновкиДанных/Ext/Template.xml"

# Явный путь вывода
powershell.exe -NoProfile -File skills/1c-skd-decompile/scripts/skd-decompile.ps1 -InputFile "C:/tmp/Schema.xml" -OutputFile "C:/tmp/schema-draft.json"
```

Альтернатива (Python, тот же алгоритм):

```
python skills/1c-skd-decompile/scripts/skd-decompile.py -InputFile "<путь>/Template.xml" [-OutputFile "<путь>.skd.json"]
```

## JSON-схема DSL

Полная спецификация целевого формата: **`docs/skd-dsl-spec.md`** (прочитать через Read tool). Краткий справочник - в `skills/1c-skd-compile/SKILL.md`.

