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

4.7 KiB

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.

{ "type": "CommonModule", "name": "ОбменДаннымиСервер", "context": "server", "returnValuesReuse": "DuringRequest" }

ScheduledJob (Регламентное задание)

Ключ Умолчание Значения
methodName пусто метод-обработчик "МодульСервер.Процедура" (дополняется до CommonModule.…)
description пусто наименование задания
key пусто ключ
use false bool (использование)
predefined false bool (предопределённое)
restartCountOnFailure 3 число повторов при сбое
restartIntervalOnFailure 10 интервал повтора, сек
{ "type": "ScheduledJob", "name": "ОбменДанными", "methodName": "ОбменДаннымиСервер.Выполнить", "use": true }

EventSubscription (Подписка на событие)

Ключ Умолчание Значения
source [] объекты-источники (формы ниже): ["CatalogObject.Контрагенты", "DocumentObject.Реализация"]
event BeforeWrite BeforeWrite / OnWrite / BeforeDelete / OnReadAtServer / FillCheckProcessing
handler пусто метод-обработчик "МодульСервер.Процедура" (дополняется до CommonModule.…)
{ "type": "EventSubscription", "name": "ПередЗаписьюКонтрагента",
  "source": ["CatalogObject.Контрагенты"], "event": "BeforeWrite",
  "handler": "ОбщегоНазначенияСервер.ПередЗаписьюКонтрагента" }

Формы источника. Кроме конкретного объекта (DocumentObject.Реализация) источник бывает:

Форма Смысл Пример
голый объектный вид ВСЕ объекты класса "DocumentObject", "CatalogObject", "InformationRegisterRecordSet", "ConstantValueManager"
DefinedType.<Имя> состав определяемого типа "DefinedType.ПрисоединенныйФайлОбъект"
Characteristic.<Имя> значение характеристики ПВХ "Characteristic.ДополнительныеРеквизитыИСведения"
менеджер объекта сам менеджер, не класс "DocumentManager.Реализация", "CatalogManager.Контрагенты"

В типовых конфигурациях источник чаще задан классом или определяемым типом, чем перечислением: в выгрузке ERP так задана треть подписок. Русские имена принимаются наравне с английскими ("ДокументОбъект", "ОпределяемыйТип.Коллекция").

{ "type": "EventSubscription", "name": "ПроверкаЗаполненияЛюбогоДокумента",
  "source": ["DocumentObject", "DefinedType.ПрисоединенныйФайлОбъект"],
  "event": "FillCheckProcessing", "handler": "ОбщегоНазначенияСервер.ПроверитьЗаполнение" }

Процедура-обработчик (methodName / handler) должна существовать в указанном общем модуле (экспортная).