mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-03 02:00:22 +03:00
feat(meta-compile): отклонять имена реквизитов, совпадающие со стандартными (v1.20)
Раньше совпадение имени собственного реквизита со стандартным (Код, Наименование, Владелец, Родитель, Ссылка, Предопределённый, …) давало лишь предупреждение — теперь жёсткий отказ (платформа такое имя не примет). Проверка типозависима (reservedByContext): у справочника один набор стандартных имён, у документа — другой. Напр. «Номер» — легальный реквизит справочника, отклоняется только у документа. Прочие контексты сохраняют мягкое предупреждение по плоскому списку; реквизиты ТЧ не проверяются. Кейс catalog-object-props: «Код»→«КодНастройки» (было ложное имя). Новый негативный кейс catalog-attr-reserved-name. spec §4. Регресс 41/41 ps1+py. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
1565ae23ab
commit
b4d48ca656
@@ -1,4 +1,4 @@
|
||||
# meta-compile v1.19 — Compile 1C metadata object from JSON
|
||||
# meta-compile v1.20 — Compile 1C metadata object from JSON
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
@@ -1129,11 +1129,27 @@ $script:reservedAttrNames = @{
|
||||
"Account"="Счет"; "ValueType"="ТипЗначения"; "ActionPeriodIsBasic"="ПериодДействияБазовый"
|
||||
}
|
||||
|
||||
# Стандартные реквизиты по типу объекта (ключи из reservedAttrNames). Имя реквизита, совпадающее
|
||||
# с ними (англ. ИЛИ рус.), платформа не позволит — жёсткий отказ. Контексты вне карты → мягкое предупреждение.
|
||||
$script:reservedByContext = @{
|
||||
"catalog" = @("Ref","DeletionMark","Predefined","PredefinedDataName","Code","Description","Owner","Parent","IsFolder")
|
||||
"document" = @("Ref","DeletionMark","Date","Number","Posted")
|
||||
}
|
||||
|
||||
function Emit-Attribute {
|
||||
param([string]$indent, $parsed, [string]$context)
|
||||
# $context: "catalog", "document", "object", "processor", "tabular", "processor-tabular", "register"
|
||||
$attrName = $parsed.name
|
||||
if ($context -notin @("tabular", "processor-tabular") -and
|
||||
$ctxReserved = $script:reservedByContext[$context]
|
||||
if ($ctxReserved) {
|
||||
foreach ($en in $ctxReserved) {
|
||||
$ru = $script:reservedAttrNames[$en]
|
||||
if (($attrName -ieq $en) -or ($ru -and $attrName -ieq $ru)) {
|
||||
Write-Error "Имя реквизита '$attrName' зарезервировано стандартным реквизитом ($en/$ru) объекта '$context'. Выберите другое имя."
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
} elseif ($context -notin @("tabular", "processor-tabular") -and
|
||||
($script:reservedAttrNames.ContainsKey($attrName) -or $script:reservedAttrNames.ContainsValue($attrName))) {
|
||||
Write-Warning "Attribute '$attrName' conflicts with a standard attribute name. This may cause errors when loading into 1C."
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user