Files
cc-1c-skills/.claude/skills/meta-compile/reference/code.md
T
Nick ShirokovandClaude Opus 5 e9d45984dc fix(meta-info,meta-compile,+5): правки по ревью — регистр, BOM, голый менеджер, порог
Семь находок ревью, все подтверждены воспроизведением:

1. Голый менеджер в источниках печатался по-английски: карта объектных видов
   применялась только к форме с точкой, а meta-compile пишет «cfg:DocumentManager»
   обычным v8:Type. Восемнадцать добавленных *Manager-записей были недостижимы.
   Суффикс «(все)» ему не ставится — это сам тип менеджера, а не класс объектов.
2. Новые регулярки прощающего ввода расходились между портами: -replace в
   PowerShell регистронезависим, re.sub — нет. «ДокументОбъект (Все)» проходил в
   ps1 и падал в py. Добавлен re.IGNORECASE — это задокументированная ловушка
   портирования, и она же снова сработала.
3. В шесть py-портов попал BOM (перекодировка при бампе версии), и перед
   «#!/usr/bin/env python3» он ломает shebang на POSIX. Снят там, где его не было
   в HEAD; в mxl-compile.py он был изначально и оставлен.
4. Правило со стрелкой из Resolve-TypeStr убрано. form-compile режет тип по [|+]
   ДО резолвера, поэтому строка глоссария «A -> B | C» молча превращалась в
   составной тип «A | C» вместо одного A. Половина строки, принятая за тип, —
   хуже громкого отказа. Остались суффикс «(все)» и счётчик «— типов: N».
5. py-порт meta-info не переиспользовал общий климб до корня конфигурации:
   правка тогда молча не применилась, и порты разошлись по структуре.
6. Found выставлялся до разбора состава определяемого типа: падение внутри
   давало «состав пуст» — ложь вместо «файл типа не разобран».
7. Порог сворачивания источников считался по сумме множеств и явных типов, а
   сворачивались только явные: пять множеств плюс один тип прятали этот тип, а
   шесть типов без множеств давали «и ещё» после пустоты. Порог теперь по числу
   явных типов, «и ещё» убрано как ложное.

Плюс формы источника подписки описаны в reference самого навыка: раньше они
были только в docs/meta-dsl-spec.md, а навык обязан быть самодостаточным.

Добавлен кейс на голого менеджера — без него находка 1 вернулась бы незамеченной.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-20 18:14:27 +03:00

76 lines
4.7 KiB
Markdown

# CommonModule, ScheduledJob, EventSubscription (объекты, привязанные к коду)
## CommonModule (Общий модуль)
Флаги контекста выполнения (все bool, по умолчанию `false`). Создаёт пустой `Ext/Module.bsl`.
| Ключ | Умолчание | Значения |
|------|-----------|----------|
| `context` | — | шорткат флагов (см. ниже) |
| `global` | `false` | bool |
| `server` | `false` | bool |
| `serverCall` | `false` | bool (вызов сервера) |
| `clientManagedApplication` | `false` | bool (клиент управляемого приложения) |
| `clientOrdinaryApplication` | `false` | bool (клиент обычного приложения) |
| `externalConnection` | `false` | bool |
| `privileged` | `false` | bool |
| `returnValuesReuse` | `DontUse` | `DontUse` / `DuringRequest` / `DuringSession` |
Шорткат `context`: `"server"` → Server+ServerCall; `"client"` → ClientManagedApplication;
`"serverClient"` → Server+ClientManagedApplication.
```json
{ "type": "CommonModule", "name": "ОбменДаннымиСервер", "context": "server", "returnValuesReuse": "DuringRequest" }
```
## ScheduledJob (Регламентное задание)
| Ключ | Умолчание | Значения |
|------|-----------|----------|
| `methodName` | пусто | метод-обработчик `"МодульСервер.Процедура"` (дополняется до `CommonModule.…`) |
| `description` | пусто | наименование задания |
| `key` | пусто | ключ |
| `use` | `false` | bool (использование) |
| `predefined` | `false` | bool (предопределённое) |
| `restartCountOnFailure` | `3` | число повторов при сбое |
| `restartIntervalOnFailure` | `10` | интервал повтора, сек |
```json
{ "type": "ScheduledJob", "name": "ОбменДанными", "methodName": "ОбменДаннымиСервер.Выполнить", "use": true }
```
## EventSubscription (Подписка на событие)
| Ключ | Умолчание | Значения |
|------|-----------|----------|
| `source` | `[]` | объекты-источники (формы ниже): `["CatalogObject.Контрагенты", "DocumentObject.Реализация"]` |
| `event` | `BeforeWrite` | `BeforeWrite` / `OnWrite` / `BeforeDelete` / `OnReadAtServer` / `FillCheckProcessing` … |
| `handler` | пусто | метод-обработчик `"МодульСервер.Процедура"` (дополняется до `CommonModule.…`) |
```json
{ "type": "EventSubscription", "name": "ПередЗаписьюКонтрагента",
"source": ["CatalogObject.Контрагенты"], "event": "BeforeWrite",
"handler": "ОбщегоНазначенияСервер.ПередЗаписьюКонтрагента" }
```
**Формы источника.** Кроме конкретного объекта (`DocumentObject.Реализация`) источник бывает:
| Форма | Смысл | Пример |
|-------|-------|--------|
| голый объектный вид | ВСЕ объекты класса | `"DocumentObject"`, `"CatalogObject"`, `"InformationRegisterRecordSet"`, `"ConstantValueManager"` |
| `DefinedType.<Имя>` | состав определяемого типа | `"DefinedType.ПрисоединенныйФайлОбъект"` |
| `Characteristic.<Имя>` | значение характеристики ПВХ | `"Characteristic.ДополнительныеРеквизитыИСведения"` |
| менеджер объекта | сам менеджер, не класс | `"DocumentManager.Реализация"`, `"CatalogManager.Контрагенты"` |
В типовых конфигурациях источник чаще задан классом или определяемым типом, чем перечислением:
в выгрузке ERP так задана треть подписок. Русские имена принимаются наравне с английскими
(`"ДокументОбъект"`, `"ОпределяемыйТип.Коллекция"`).
```json
{ "type": "EventSubscription", "name": "ПроверкаЗаполненияЛюбогоДокумента",
"source": ["DocumentObject", "DefinedType.ПрисоединенныйФайлОбъект"],
"event": "FillCheckProcessing", "handler": "ОбщегоНазначенияСервер.ПроверитьЗаполнение" }
```
> Процедура-обработчик (`methodName` / `handler`) должна существовать в указанном общем модуле (экспортная).