| name | 1c-metadata |
| description | Программное редактирование метаданных/форм/СКД 1С (оба формата — Конфигуратор-XML и EDT .mdo/.form/.rights/.mxlx/.dcs) с гарантией round-trip. ОБЯЗАТЕЛЬНО используй, когда нужно программно добавить колонку в печатную форму (макет), поле/запрос в СКД отчёта, реквизит справочника/документа — вместо ручной правки XML или отказа «только человек в IDE». Активируйся на «добавь колонку в печатную форму», «добавь поле в СКД/прайс», «добавь реквизит», «поправь макет». НЕ для BSL-кода (1c-dev) и НЕ для операций вне каталога покрытия. |
1c-metadata — структурные правки метаданных 1С
Локализация (сначала, если есть)
Если в скилле есть каталог references/local/ — прочитай его ПЕРЕД работой: version-stack.md
(версии платформы/библиотек, режим совместимости, префиксы ТВОЕЙ компании) и остальные карты.
При противоречии локальное побеждает generic. Контракт — docs/SKILL_LOCALIZATION.md toolkit.
Ядро: onec_metadata/ (Python, lxml). CLI: bin/1c-meta. Каталог покрытия:
onec_metadata/catalog.py — операции вне каталога делает человек в IDE.
Железные правила
- Только тест-база. Загрузка изменений — исключительно в тестовую ИБ
(напр.
localhost\<testbase>). В прод — человек, после приёмки.
- Round-trip обязателен. После загрузки: повторная выгрузка → diff
с эталоном == строго целевые файлы (
apply.dumpload.roundtrip_verify).
Без чистого round-trip правка не считается выполненной.
- Минимальный дифф. Формат-слой (
formats/configurator.py) даёт
byte-perfect round-trip (BOM/CRLF/табы); операции меняют только целевые
узлы. Никогда не переформатируй XML вручную/другими инструментами.
- BSL после правки кода — если задет
*.bsl, прогони BSL Language Server.
- Смок-валидатор СКД (ENFORCED, офлайн) — после любой правки схемы компоновки:
1c-meta scd validate <Schema.xml> (exit 1 = поломка: пропал набор, поле без
dataPath, дубль поля, битая связь наборов, невалидный XML). До загрузки в 1С.
- Scope-guard «не тронул незатронутое» (ENFORCED, офлайн) — property-level
diff
onec_metadata/apply/scope_guard.assert_in_scope(before, after, scope)
БЕЗ тест-базы блокирует дрейф свойств у объектов, которые правка менять не
должна была (дополняет файловый roundtrip_verify до уровня свойств).
Форматы
Оба формата исходников: Конфигуратор (Объект.xml, Rights.xml, Template.xml,
Form.xml) и EDT (Объект.mdo, Rights.rights, Template.mxlx, Form.form,
.dcs) — диспетчеризация по расширению, стиль файла (BOM/EOL/табы) сохраняется.
EDT-нюансы: .mdo опускает свойства со значением по умолчанию EMF-модели EDT
(проверено эмпирически на выгрузке ERP: свойство отсутствует ⇔ дефолт; дефолт EDT
≠ дефолт UI Конфигуратора — пример fullTextSearch) — поэтому set-property на
отсутствующем свойстве отказывает предусловием; тип реквизита формы в EDT-нотации
(String, CatalogRef.Имя), а не xs:/cfg:. Бинарный Template.bin вне scope.
Порядок операции
1c-meta detect <root> # формат дерева: CONFIGURATOR | EDT
cp -r <src> <src>_before # эталон для verify
1c-meta template add-column <Макет.xml> --after "<ЗаголовокЯкоря>" \
--header "<НовыйЗаголовок>" --parameter <ИмяПараметра>
1c-meta scd add-field <Schema.xml> --dataset <ИмяНабора> \
--field X --data-path X --title "..."
1c-meta scd get-query|set-query ... --from-file q.sql
1c-meta attr add <Объект.xml> --name X --type xs:string --synonym "..."
# затем python: onec_metadata.apply — upload_tree → load_extension →
# dump_extension → fetch_tree → roundtrip_verify(before, after, {целевые файлы})
Exit 2 = ошибка предусловия (якорь не найден / дубль) — файлы не изменены.
Транспорт и доступ (боевые уроки)
- Кириллические имена Windows→Mac: только
chcp 65001 + tar (не zip).
- SSH-алиас с пробелом в имени пользователя:
User "<Имя С Пробелом>" в кавычках.
- Пароль ИБ не хранить в коде/логах (
runner.mask_password).
Ссылки
Документация модуля: onec_metadata/README.md (архитектура, CLI, настройки,
дорожная карта Фаз 2–5, известные ограничения). Кейсы конкретных организаций и
их настройки — в приватных репозиториях настроек, не в этом (публичном) toolkit.