mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-21 01:35:53 +03:00
Семь находок ревью, все подтверждены воспроизведением: 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>
4.7 KiB
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) должна существовать в указанном общем модуле (экспортная).