diff --git a/.claude/skills/meta-compile/SKILL.md b/.claude/skills/meta-compile/SKILL.md index 3594e7f5..11d0e420 100644 --- a/.claude/skills/meta-compile/SKILL.md +++ b/.claude/skills/meta-compile/SKILL.md @@ -42,7 +42,11 @@ Constant (Константа), DefinedType (ОпределяемыйТип), Com ## JSON DSL — краткий справочник -Полная спецификация: `docs/meta-dsl-spec.md`. +Детали по типам — в справочных файлах (читай нужный при компиляции конкретного типа): +- `reference/types-basic.md` — Catalog, Document, Enum, Constant, DefinedType, Report, DataProcessor +- `reference/types-registers.md` — InformationRegister, AccumulationRegister, AccountingRegister, CalculationRegister, ChartOfAccounts, ChartOfCharacteristicTypes, ChartOfCalculationTypes +- `reference/types-process.md` — BusinessProcess, Task, ExchangePlan, CommonModule, ScheduledJob, EventSubscription, DocumentJournal +- `reference/types-web.md` — HTTPService, WebService ### Корневая структура diff --git a/.claude/skills/meta-compile/reference/types-basic.md b/.claude/skills/meta-compile/reference/types-basic.md new file mode 100644 index 00000000..2763635a --- /dev/null +++ b/.claude/skills/meta-compile/reference/types-basic.md @@ -0,0 +1,109 @@ +# Базовые типы: Catalog, Document, Enum, Constant, DefinedType, Report, DataProcessor + +## 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 | +| `owners` | `[]` | Owners | +| `attributes` | `[]` | → Attribute в ChildObjects | +| `tabularSections` | `{}` | → TabularSection в ChildObjects | + +```json +{ "type": "Catalog", "name": "Организации", "attributes": ["ИНН: String(12)", "КПП: String(9)"] } +``` + +## 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 | +| `registerRecords` | `[]` | RegisterRecords | +| `attributes` | `[]` | → Attribute в ChildObjects | +| `tabularSections` | `{}` | → TabularSection в ChildObjects | + +RegisterRecords — массив строк: `"AccumulationRegister.Продажи"`, `"InformationRegister.Цены"`. + +```json +{ + "type": "Document", "name": "ПриходнаяНакладная", + "registerRecords": ["AccumulationRegister.ОстаткиТоваров"], + "attributes": ["Организация: CatalogRef.Организации", "Контрагент: CatalogRef.Контрагенты"], + "tabularSections": { "Товары": ["Номенклатура: CatalogRef.Номенклатура", "Количество: Number(15,3)"] } +} +``` + +## Enum + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `values` | `[]` | → EnumValue в ChildObjects | + +```json +{ "type": "Enum", "name": "Статусы", "values": ["Новый", "ВРаботе", "Закрыт"] } +``` + +## Constant + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `valueType` | `String` | Type | + +`valueType` принимает shorthand типа: `"String(100)"`, `"Number(15,2)"`, `"Boolean"`, `"CatalogRef.Валюты"`. + +```json +{ "type": "Constant", "name": "ОсновнаяВалюта", "valueType": "CatalogRef.Валюты" } +``` + +## DefinedType + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `valueTypes` | `[]` | Type (составной тип) | +| `valueType` | — | Алиас для `valueTypes` (строка или массив) | + +```json +{ "type": "DefinedType", "name": "ДенежныеСредства", "valueTypes": ["CatalogRef.БанковскиеСчета", "CatalogRef.Кассы"] } +{ "type": "DefinedType", "name": "ФлагАктивности", "valueType": "Boolean" } +``` + +## Report + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `attributes` | `[]` | → Attribute в ChildObjects | +| `tabularSections` | `{}` | → TabularSection в ChildObjects | + +```json +{ "type": "Report", "name": "ОстаткиТоваров" } +``` + +## DataProcessor + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `attributes` | `[]` | → Attribute в ChildObjects | +| `tabularSections` | `{}` | → TabularSection в ChildObjects | + +```json +{ "type": "DataProcessor", "name": "ЗагрузкаДанных", "attributes": ["ПутьКФайлу: String(500)"] } +``` diff --git a/.claude/skills/meta-compile/reference/types-process.md b/.claude/skills/meta-compile/reference/types-process.md new file mode 100644 index 00000000..4ef4e9ae --- /dev/null +++ b/.claude/skills/meta-compile/reference/types-process.md @@ -0,0 +1,136 @@ +# Процессы и сервисные: BusinessProcess, Task, ExchangePlan, CommonModule, ScheduledJob, EventSubscription, DocumentJournal + +## BusinessProcess + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `task` | `""` | Task (ссылка `Task.XXX`) | +| `numberType` | `String` | NumberType | +| `numberLength` | `11` | NumberLength | +| `checkUnique` | `true` | CheckUnique | +| `autonumbering` | `true` | Autonumbering | +| `attributes` | `[]` | → Attribute | +| `tabularSections` | `{}` | → TabularSection | + +Модули: `Ext/ObjectModule.bsl`, `Ext/Flowchart.xml`. + +```json +{ "type": "BusinessProcess", "name": "Задание", "task": "Task.ЗадачаИсполнителя", "attributes": ["Описание: String(200)"] } +``` + +## Task + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `numberType` | `String` | NumberType | +| `numberLength` | `14` | NumberLength | +| `checkUnique` | `true` | CheckUnique | +| `autonumbering` | `true` | Autonumbering | +| `descriptionLength` | `150` | DescriptionLength | +| `addressing` | `""` | Addressing (ссылка на РС адресации) | +| `mainAddressingAttribute` | `""` | MainAddressingAttribute | +| `currentPerformer` | `""` | CurrentPerformer | +| `attributes` | `[]` | → Attribute | +| `tabularSections` | `{}` | → TabularSection | +| `addressingAttributes` | `[]` | → AddressingAttribute (shorthand или объект) | + +AddressingAttribute — shorthand `"Имя: Тип"` или объект `{ "name", "type", "addressingDimension" }`. + +```json +{ + "type": "Task", "name": "ЗадачаИсполнителя", + "addressingAttributes": ["Исполнитель: CatalogRef.Пользователи"] +} +``` + +## ExchangePlan + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `codeLength` | `9` | CodeLength | +| `descriptionLength` | `100` | DescriptionLength | +| `distributedInfoBase` | `false` | DistributedInfoBase | +| `attributes` | `[]` | → Attribute | +| `tabularSections` | `{}` | → TabularSection | + +Модули: `Ext/ObjectModule.bsl`, `Ext/Content.xml`. + +```json +{ "type": "ExchangePlan", "name": "ОбменССайтом", "attributes": ["АдресСервера: String(200)"] } +``` + +## CommonModule + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `context` | — | Шорткат (см. ниже) | +| `global` | `false` | Global | +| `server` | `false` | Server | +| `serverCall` | `false` | ServerCall | +| `clientManagedApplication` | `false` | ClientManagedApplication | +| `externalConnection` | `false` | ExternalConnection | +| `privileged` | `false` | Privileged | +| `returnValuesReuse` | `DontUse` | ReturnValuesReuse | + +Шорткаты `context`: `"server"` → Server+ServerCall, `"client"` → ClientManagedApplication, `"serverClient"` → Server+ClientManagedApplication. + +```json +{ "type": "CommonModule", "name": "ОбщиеФункции", "context": "serverClient" } +``` + +## ScheduledJob + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `methodName` | `""` | MethodName | +| `description` | = synonym | Description | +| `use` | `false` | Use | +| `predefined` | `false` | Predefined | +| `restartCountOnFailure` | `3` | RestartCountOnFailure | +| `restartIntervalOnFailure` | `10` | RestartIntervalOnFailure | + +Формат `methodName`: `"МодульСервер.Процедура"` — авто-дополняется до `CommonModule.МодульСервер.Процедура`. + +```json +{ "type": "ScheduledJob", "name": "ОбменДанными", "methodName": "ОбменДаннымиСервер.Выполнить" } +``` + +## EventSubscription + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `source` | `[]` | Source (массив, формат `XxxObject.Name`) | +| `event` | `BeforeWrite` | Event | +| `handler` | `""` | Handler | + +Формат `handler`: `"МодульСервер.Процедура"` — авто-дополняется до `CommonModule.МодульСервер.Процедура`. + +Значения `event`: `BeforeWrite`, `OnWrite`, `BeforeDelete`, `OnReadAtServer`, `FillCheckProcessing`. + +Формат `source`: `"CatalogObject.Xxx"`, `"DocumentObject.Xxx"`. + +```json +{ "type": "EventSubscription", "name": "ПередЗаписью", "source": ["CatalogObject.Контрагенты"], "event": "BeforeWrite", "handler": "ОбщиеФункции.ПередЗаписью" } +``` + +## DocumentJournal + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `registeredDocuments` | `[]` | RegisteredDocuments (массив `"Document.Xxx"`) | +| `columns` | `[]` | → Column | + +Колонки — строка `"Имя"` или объект `{ "name", "synonym", "indexing": "Index"/"DontIndex", "references": ["Document.Xxx.Attribute.Yyy"] }`. + +```json +{ + "type": "DocumentJournal", "name": "Взаимодействия", + "registeredDocuments": ["Document.Встреча", "Document.Звонок"], + "columns": [{ "name": "Организация", "indexing": "Index", "references": ["Document.Встреча.Attribute.Организация"] }] +} +``` + +## Зависимости + +- **ScheduledJob/EventSubscription** — процедура-обработчик должна существовать в модуле (экспортная) +- **BusinessProcess** → `Task` (задача должна существовать) diff --git a/.claude/skills/meta-compile/reference/types-registers.md b/.claude/skills/meta-compile/reference/types-registers.md new file mode 100644 index 00000000..4c87c46e --- /dev/null +++ b/.claude/skills/meta-compile/reference/types-registers.md @@ -0,0 +1,174 @@ +# Регистры и планы: InformationRegister, AccumulationRegister, AccountingRegister, CalculationRegister, ChartOfAccounts, ChartOfCharacteristicTypes, ChartOfCalculationTypes + +## Измерения и ресурсы (общее) + +Синтаксис аналогичен реквизитам (shorthand `"Имя: Тип | флаги"`). + +Флаги измерений: `master`, `mainFilter`, `denyIncomplete`, `useInTotals` (AccumulationRegister only, default `true`). + +```json +"dimensions": ["Организация: CatalogRef.Организации | master, mainFilter, denyIncomplete"], +"resources": ["Сумма: Number(15,2)"] +``` + +--- + +## InformationRegister + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `writeMode` | `Independent` | WriteMode | +| `periodicity` | `Nonperiodical` | InformationRegisterPeriodicity | +| `mainFilterOnPeriod` | авто* | MainFilterOnPeriod | +| `dimensions` | `[]` | → Dimension | +| `resources` | `[]` | → Resource | +| `attributes` | `[]` | → Attribute | + +\* `mainFilterOnPeriod` = `true` если `periodicity` != `Nonperiodical`. + +```json +{ + "type": "InformationRegister", "name": "КурсыВалют", "periodicity": "Day", + "dimensions": ["Валюта: CatalogRef.Валюты | master, mainFilter, denyIncomplete"], + "resources": ["Курс: Number(15,4)", "Кратность: Number(10,0)"] +} +``` + +## AccumulationRegister + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `registerType` | `Balance` | RegisterType (`Balance` / `Turnovers`) | +| `enableTotalsSplitting` | `true` | EnableTotalsSplitting | +| `dimensions` | `[]` | → Dimension | +| `resources` | `[]` | → Resource | +| `attributes` | `[]` | → Attribute | + +```json +{ + "type": "AccumulationRegister", "name": "ОстаткиТоваров", "registerType": "Balance", + "dimensions": ["Номенклатура: CatalogRef.Номенклатура"], + "resources": ["Количество: Number(15,3)"] +} +``` + +## AccountingRegister + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `chartOfAccounts` | `""` | ChartOfAccounts (**обязательная** ссылка на план счетов) | +| `correspondence` | `false` | Correspondence | +| `periodAdjustmentLength` | `0` | PeriodAdjustmentLength | +| `dimensions` | `[]` | → Dimension | +| `resources` | `[]` | → Resource | +| `attributes` | `[]` | → Attribute | + +```json +{ + "type": "AccountingRegister", "name": "Хозрасчетный", + "chartOfAccounts": "ChartOfAccounts.Хозрасчетный", + "dimensions": ["Организация: CatalogRef.Организации"], + "resources": ["Сумма: Number(15,2)"] +} +``` + +## CalculationRegister + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `chartOfCalculationTypes` | `""` | ChartOfCalculationTypes (**обязательная** ссылка на ПВР) | +| `periodicity` | `Month` | Periodicity | +| `actionPeriod` | `false` | ActionPeriod | +| `basePeriod` | `false` | BasePeriod | +| `schedule` | `""` | Schedule (ссылка на РС графиков) | +| `dimensions` | `[]` | → Dimension | +| `resources` | `[]` | → Resource | +| `attributes` | `[]` | → Attribute | + +```json +{ + "type": "CalculationRegister", "name": "Начисления", + "chartOfCalculationTypes": "ChartOfCalculationTypes.Начисления", + "periodicity": "Month", + "dimensions": ["Сотрудник: CatalogRef.Сотрудники"], + "resources": ["Сумма: Number(15,2)"] +} +``` + +--- + +## ChartOfCharacteristicTypes + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `codeLength` | `9` | CodeLength | +| `descriptionLength` | `25` | DescriptionLength | +| `autonumbering` | `true` | Autonumbering | +| `checkUnique` | `false` | CheckUnique | +| `characteristicExtValues` | `""` | CharacteristicExtValues | +| `valueTypes` | авто* | Type (составной тип значений характеристик) | +| `hierarchical` | `false` | Hierarchical | +| `attributes` | `[]` | → Attribute | +| `tabularSections` | `{}` | → TabularSection | + +\* По умолчанию: Boolean, String(100), Number(15,2), DateTime. + +```json +{ + "type": "ChartOfCharacteristicTypes", "name": "ВидыСубконто", + "valueTypes": ["CatalogRef.Номенклатура", "CatalogRef.Контрагенты", "Boolean", "String", "Number(15,2)"] +} +``` + +## ChartOfAccounts + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `extDimensionTypes` | `""` | ExtDimensionTypes (ссылка на ПВХ) | +| `maxExtDimensionCount` | `3` | MaxExtDimensionCount | +| `codeMask` | `""` | CodeMask | +| `codeLength` | `8` | CodeLength | +| `descriptionLength` | `120` | DescriptionLength | +| `codeSeries` | `WholeChartOfAccounts` | CodeSeries | +| `autoOrderByCode` | `true` | AutoOrderByCode | +| `orderLength` | `5` | OrderLength | +| `hierarchical` | `false` | Hierarchical | +| `accountingFlags` | `[]` | → AccountingFlag (Boolean-тип, массив имён) | +| `extDimensionAccountingFlags` | `[]` | → ExtDimensionAccountingFlag (Boolean-тип, массив имён) | +| `attributes` | `[]` | → Attribute | +| `tabularSections` | `{}` | → TabularSection | + +```json +{ + "type": "ChartOfAccounts", "name": "Хозрасчетный", + "extDimensionTypes": "ChartOfCharacteristicTypes.ВидыСубконто", "maxExtDimensionCount": 3, + "codeLength": 8, "codeMask": "@@@.@@.@", + "accountingFlags": ["Валютный", "Количественный"], + "extDimensionAccountingFlags": ["Суммовой", "Валютный"] +} +``` + +## ChartOfCalculationTypes + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `codeLength` | `9` | CodeLength | +| `descriptionLength` | `25` | DescriptionLength | +| `autonumbering` | `true` | Autonumbering | +| `checkUnique` | `false` | CheckUnique | +| `dependenceOnCalculationTypes` | `NotUsed` | DependenceOnCalculationTypes | +| `actionPeriodUse` | `false` | ActionPeriodUse | +| `attributes` | `[]` | → Attribute | +| `tabularSections` | `{}` | → TabularSection | + +`dependenceOnCalculationTypes`: `NotUsed`, `ExclusionAndDependence`, `ExclusionOnly`. + +```json +{ "type": "ChartOfCalculationTypes", "name": "Начисления", "dependenceOnCalculationTypes": "ExclusionAndDependence" } +``` + +## Зависимости + +- **AccountingRegister** требует `ChartOfAccounts` (и документ-регистратор) +- **CalculationRegister** требует `ChartOfCalculationTypes` (и документ-регистратор) +- **ChartOfAccounts** ссылается на `ChartOfCharacteristicTypes` через `extDimensionTypes` diff --git a/.claude/skills/meta-compile/reference/types-web.md b/.claude/skills/meta-compile/reference/types-web.md new file mode 100644 index 00000000..81c65890 --- /dev/null +++ b/.claude/skills/meta-compile/reference/types-web.md @@ -0,0 +1,103 @@ +# Веб-сервисы: HTTPService, WebService + +## HTTPService + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `rootURL` | `= name.toLower()` | RootURL | +| `reuseSessions` | `DontUse` | ReuseSessions | +| `sessionMaxAge` | `20` | SessionMaxAge | +| `urlTemplates` | `{}` | → URLTemplate | + +Модули: `Ext/Module.bsl`. + +### urlTemplates — вложенная структура + +`urlTemplates` — объект `{ "TemplateName": templateDef, ... }`. + +Каждый `templateDef`: +- Строка — URL-шаблон: `"/v1/users"` (без методов) +- Объект: + +| Поле | Умолчание | Описание | +|------|----------|----------| +| `template` | `"/templatename"` | URL-путь (с параметрами `{id}`) | +| `methods` | `{}` | Методы: `{ "MethodName": "HTTPMethod" }` | + +Допустимые HTTPMethod: `GET`, `POST`, `PUT`, `DELETE`, `PATCH`, `HEAD`, `OPTIONS`, `CONNECT`, `TRACE`, `MERGE`. + +Обработчик метода генерируется автоматически: `{TemplateName}{MethodName}` — должен быть реализован в `Ext/Module.bsl`. + +```json +{ + "type": "HTTPService", "name": "API", "rootURL": "api", + "urlTemplates": { + "Users": { + "template": "/v1/users/{id}", + "methods": { "Get": "GET", "Create": "POST", "Update": "PUT", "Delete": "DELETE" } + }, + "Health": "/health" + } +} +``` + +## WebService + +| Поле JSON | Умолчание | XML элемент | +|-----------|----------|-------------| +| `namespace` | `""` | Namespace (URI пространства имён WSDL) | +| `xdtoPackages` | `""` | XDTOPackages | +| `reuseSessions` | `DontUse` | ReuseSessions | +| `sessionMaxAge` | `20` | SessionMaxAge | +| `operations` | `{}` | → Operation | + +Модули: `Ext/Module.bsl`. + +### operations — вложенная структура + +`operations` — объект `{ "OperationName": operationDef, ... }`. + +Каждый `operationDef`: +- Строка — тип возврата: `"xs:boolean"` (параметров нет, обработчик = имя операции) +- Объект: + +| Поле | Умолчание | Описание | +|------|----------|----------| +| `returnType` | `xs:string` | XDTO-тип возврата | +| `nillable` | `false` | Может ли вернуть null | +| `transactioned` | `false` | Выполнять в транзакции | +| `handler` | `= operationName` | Имя процедуры в модуле | +| `parameters` | `{}` | Параметры операции | + +### parameters — параметры операции + +`parameters` — объект `{ "ParamName": paramDef, ... }`. + +Каждый `paramDef`: +- Строка — XDTO-тип: `"xs:string"` (direction = In, nillable = true) +- Объект: + +| Поле | Умолчание | Описание | +|------|----------|----------| +| `type` | `xs:string` | XDTO-тип параметра | +| `nillable` | `true` | Может ли быть null | +| `direction` | `In` | Направление: `In`, `Out`, `InOut` | + +Стандартные XDTO-типы: `xs:string`, `xs:boolean`, `xs:int`, `xs:long`, `xs:decimal`, `xs:dateTime`, `xs:base64Binary`. + +```json +{ + "type": "WebService", "name": "DataExchange", + "namespace": "http://www.1c.ru/DataExchange", + "operations": { + "TestConnection": { + "returnType": "xs:boolean", + "handler": "ПроверкаПодключения", + "parameters": { + "ErrorMessage": { "type": "xs:string", "direction": "Out" } + } + }, + "GetVersion": "xs:string" + } +} +```