/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.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) |
Рабочий процесс
/skd-decompile- получить JSON-черновик из существующей СКД- Просмотреть черновик, разрешить каждый
_todo(вручную или моделью) - Править JSON под задачу (новые поля, варианты, параметры)
/skd-compile- собрать новый Template.xml/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-версию (контекстный резолвинг по месту).
Примеры
# Декомпиляция макета отчета, 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.