Files
cc-1c-skills/docs/meta-dsl-spec.md
T
Nick Shirokov acee4bd188 Add /meta-compile skill: JSON DSL → 1C metadata XML
Supports 6 types: Catalog, Document, Enum, Constant,
InformationRegister, AccumulationRegister. Includes DSL spec,
SKILL.md, and PowerShell compiler with CamelCase auto-synonyms,
shorthand attribute syntax, Russian type aliases, Configuration.xml
auto-registration, and module scaffolding.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 21:16:33 +03:00

13 KiB
Raw Blame History

Meta DSL — спецификация JSON-формата для объектов метаданных 1С

Версия: 1.0

Обзор

JSON DSL для описания объектов метаданных конфигурации 1С. Компактный формат компилируется в полноценный XML, совместимый с выгрузкой конфигурации 1С:Предприятие 8.3.

Поддерживаемые типы (Фаза 1): Catalog, Document, Enum, Constant, InformationRegister, AccumulationRegister.


1. Корневая структура

{
  "type": "Catalog",
  "name": "Номенклатура",
  "synonym": "авто из name",
  "comment": "",
  ...type-specific properties...,
  "attributes": [...],
  "tabularSections": {...}
}
Поле Тип Обязательное Описание
type string да Тип объекта (см. §8)
name string да Имя объекта (идентификатор 1С)
synonym string нет Синоним; если не указан — авто из CamelCase (§2)
comment string нет Комментарий

Дополнительные поля зависят от типа (§7).


2. Автогенерация синонима (CamelCase → слова)

Если synonym не указан, имя автоматически разбивается на слова:

Вход Результат
АвансовыйОтчет Авансовый отчет
ОсновнаяВалюта Основная валюта
НДС20 НДС20
IncomingDocument Incoming document

Правила:

  • Граница на переходе [а-яё][А-ЯЁ] и [a-z][A-Z]
  • Первое слово сохраняет заглавную, остальные — строчные
  • Явный synonym перекрывает автогенерацию

3. Система типов

Совместима с skd-compile.

3.1 Примитивные типы

DSL XML
String или String(100) xs:string + StringQualifiers
Number(15,2) xs:decimal + NumberQualifiers
Number(10,0,nonneg) xs:decimal + AllowedSign=Nonnegative
Boolean xs:boolean
Date xs:dateTime + DateFractions=Date
DateTime xs:dateTime + DateFractions=DateTime

3.2 Ссылочные типы

DSL XML
CatalogRef.Xxx cfg:CatalogRef.Xxx
DocumentRef.Xxx cfg:DocumentRef.Xxx
EnumRef.Xxx cfg:EnumRef.Xxx
ChartOfAccountsRef.Xxx cfg:ChartOfAccountsRef.Xxx
DefinedType.Xxx cfg:DefinedType.Xxx (через v8:TypeSet)

3.3 Русские синонимы типов

Русский Канонический
Строка(100) String(100)
Число(15,2) Number(15,2)
Булево Boolean
Дата Date
ДатаВремя DateTime
СправочникСсылка.Xxx CatalogRef.Xxx
ДокументСсылка.Xxx DocumentRef.Xxx
ПеречислениеСсылка.Xxx EnumRef.Xxx
ПланСчетовСсылка.Xxx ChartOfAccountsRef.Xxx
ОпределяемыйТип.Xxx DefinedType.Xxx

Регистронезависимые.


4. Сокращённая запись реквизитов

4.1 Строковая форма

"ИмяРеквизита"                              → String (без квалификаторов)
"ИмяРеквизита: Тип"                         → с типом
"ИмяРеквизита: Тип | req, index"           → с флагами

4.2 Объектная форма

{
  "name": "Имя",
  "type": "String(100)",
  "synonym": "Мой синоним",
  "comment": "Комментарий",
  "fillChecking": "ShowError",
  "indexing": "Index"
}

4.3 Флаги

Флаг Действие Применимость
req FillChecking = ShowError attributes, dimensions, resources
index Indexing = Index attributes, dimensions
indexAdditional Indexing = IndexWithAdditionalOrder attributes
nonneg MinValue = 0 (+ nonneg для Number) attributes, resources
master Master = true dimensions (РС)
mainFilter MainFilter = true dimensions (РС)
denyIncomplete DenyIncompleteValues = true dimensions
useInTotals UseInTotals = true dimensions (РН)

Флаги разделяются запятой после |.


5. Табличные части

Только для Catalog и Document.

"tabularSections": {
  "Товары": [
    "Номенклатура: CatalogRef.Номенклатура | req",
    "Количество: Number(10,3)",
    "Цена: Number(15,2)",
    "Сумма: Number(15,2)"
  ],
  "Услуги": [
    "Описание: String(200)"
  ]
}

Ключ — имя табличной части, значение — массив реквизитов (в строковой или объектной форме).


6. Значения перечислений

Только для Enum.

"values": [
  "Приход",
  "Расход",
  { "name": "НДС20", "synonym": "НДС 20%" }
]

Строка — имя (синоним авто из CamelCase). Объект — полная форма.


7. Свойства по типам

7.1 Catalog

Поле JSON Умолчание XML элемент
hierarchical false Hierarchical
hierarchyType HierarchyFoldersAndItems HierarchyType
codeLength 9 CodeLength
codeType String CodeType
codeAllowedLength Variable CodeAllowedLength
descriptionLength 25 DescriptionLength
autonumbering true Autonumbering
checkUnique false CheckUnique
defaultPresentation AsDescription DefaultPresentation
dataLockControlMode Automatic DataLockControlMode
fullTextSearch Use FullTextSearch
owners [] Owners
attributes [] → Attribute в ChildObjects
tabularSections {} → TabularSection в ChildObjects

7.2 Document

Поле JSON Умолчание XML элемент
numberType String NumberType
numberLength 11 NumberLength
numberAllowedLength Variable NumberAllowedLength
numberPeriodicity Year NumberPeriodicity
checkUnique true CheckUnique
autonumbering true Autonumbering
posting Allow Posting
realTimePosting Deny RealTimePosting
registerRecordsDeletion AutoDelete RegisterRecordsDeletion
registerRecordsWritingOnPost WriteModified RegisterRecordsWritingOnPost
postInPrivilegedMode true PostInPrivilegedMode
unpostInPrivilegedMode true UnpostInPrivilegedMode
dataLockControlMode Automatic DataLockControlMode
fullTextSearch Use FullTextSearch
registerRecords [] RegisterRecords
attributes [] → Attribute в ChildObjects
tabularSections {} → TabularSection в ChildObjects

7.3 Enum

Поле JSON Умолчание XML элемент
values [] → EnumValue в ChildObjects

Других настраиваемых свойств нет — все дефолтные.

7.4 Constant

Поле JSON Умолчание XML элемент
valueType String Type
dataLockControlMode Automatic DataLockControlMode

7.5 InformationRegister

Поле JSON Умолчание XML элемент
writeMode Independent WriteMode
periodicity Nonperiodical InformationRegisterPeriodicity
mainFilterOnPeriod авто* MainFilterOnPeriod
dataLockControlMode Automatic DataLockControlMode
fullTextSearch Use FullTextSearch
dimensions [] → Dimension в ChildObjects
resources [] → Resource в ChildObjects
attributes [] → Attribute в ChildObjects

* mainFilterOnPeriod = true если periodicity != Nonperiodical, иначе false.

7.6 AccumulationRegister

Поле JSON Умолчание XML элемент
registerType Balance RegisterType
enableTotalsSplitting true EnableTotalsSplitting
dataLockControlMode Automatic DataLockControlMode
fullTextSearch Use FullTextSearch
dimensions [] → Dimension в ChildObjects
resources [] → Resource в ChildObjects
attributes [] → Attribute в ChildObjects

8. Русские синонимы типов объектов

Русский Канонический
Справочник Catalog
Документ Document
Перечисление Enum
Константа Constant
РегистрСведений InformationRegister
РегистрНакопления AccumulationRegister

9. RegisterRecords для документов

"registerRecords": [
  "AccumulationRegister.Продажи",
  "InformationRegister.Цены"
]

Или с русскими синонимами: "РегистрНакопления.Продажи".


10. Измерения и ресурсы регистров

Синтаксис аналогичен реквизитам (§4), но с дополнительными флагами:

Измерения (dimensions)

"dimensions": [
  "Организация: CatalogRef.Организации | master, mainFilter, denyIncomplete",
  "Номенклатура: CatalogRef.Номенклатура"
]

Ресурсы (resources)

"resources": [
  "Количество: Number(15,3)",
  "Сумма: Number(15,2)"
]

Флаг useInTotals — только для измерений AccumulationRegister (по умолчанию true).


11. Примеры

Минимальные

{ "type": "Catalog", "name": "Валюты" }
{ "type": "Enum", "name": "Статусы", "values": ["Новый", "Закрыт"] }
{ "type": "Constant", "name": "ОсновнаяВалюта", "valueType": "CatalogRef.Валюты" }

Справочник с реквизитами и табличной частью

{
  "type": "Catalog",
  "name": "Номенклатура",
  "codeLength": 11,
  "descriptionLength": 100,
  "hierarchical": true,
  "attributes": [
    "Артикул: String(25)",
    "ЕдиницаИзмерения: CatalogRef.ЕдиницыИзмерения | req",
    "ВидНоменклатуры: EnumRef.ВидыНоменклатуры",
    "Цена: Number(15,2)"
  ],
  "tabularSections": {
    "Штрихкоды": [
      "Штрихкод: String(200) | req, index"
    ]
  }
}

Документ с движениями

{
  "type": "Document",
  "name": "РеализацияТоваров",
  "posting": "Allow",
  "registerRecords": ["AccumulationRegister.Продажи"],
  "attributes": [
    "Организация: CatalogRef.Организации | req",
    "Контрагент: CatalogRef.Контрагенты | req",
    "Склад: CatalogRef.Склады"
  ],
  "tabularSections": {
    "Товары": [
      "Номенклатура: CatalogRef.Номенклатура | req",
      "Количество: Number(15,3)",
      "Цена: Number(15,2)",
      "Сумма: Number(15,2)"
    ]
  }
}

Регистр сведений с периодичностью

{
  "type": "InformationRegister",
  "name": "КурсыВалют",
  "periodicity": "Day",
  "dimensions": [
    "Валюта: CatalogRef.Валюты | master, mainFilter, denyIncomplete"
  ],
  "resources": [
    "Курс: Number(15,4)",
    "Кратность: Number(10,0)"
  ]
}

Регистр накопления

{
  "type": "AccumulationRegister",
  "name": "ОстаткиТоваров",
  "registerType": "Balance",
  "dimensions": [
    "Номенклатура: CatalogRef.Номенклатура",
    "Склад: CatalogRef.Склады"
  ],
  "resources": [
    "Количество: Number(15,3)"
  ]
}