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>
13 KiB
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)"
]
}