mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-03 00:30:52 +03:00
fix(xdto-compile,xdto-validate): признак фиксированного значения без самого значения
В модели XDTO fixed — булев признак, а значение лежит в default; в XML-схеме fixed="V" совмещает и признак, и значение. Компилятор оба идиома принимал, но не проверял принятое: зеркало xdto:fixed="true" без default собиралось молча в пакет, который платформа отвергает («Отсутствует фиксированное значение свойства»). Прощающий ввод был сделан наполовину. xdto-validate v1.1 — два ERROR: значение попало в признак (fixed не булев) и признак без значения. Формулировка второго повторяет платформенную дословно, чтобы отказ загрузки и наш вывод читались как одно и то же. xdto-compile v1.1 — то же условие предупреждением на сборке, то есть на шаг раньше db-update, где починить дешевле. Кейсы: оба идиома плюс только default и атрибут (загружается в базу); зеркало без значения — проверка диагностики, из платформенной верификации исключено штатным skipPlatformVerify, пакет невалиден by design. Правило откалибровано корпусом (760 пакетов, оба рантайма): 0 ложных срабатываний, состав предупреждений не изменился. Round-trip остался 760/760 байт-в-байт. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
20d86ae10f
commit
79beba2d1f
@@ -1,4 +1,4 @@
|
||||
# xdto-validate v1.0 — Validate a 1C XDTO package
|
||||
# xdto-validate v1.1 — Validate a 1C XDTO package
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[Parameter(Mandatory)]
|
||||
@@ -363,9 +363,20 @@ foreach ($p in $pkg.SelectNodes("//*[local-name()='property']")) {
|
||||
if (-not $p.HasAttribute("name") -and -not $p.HasAttribute("ref")) {
|
||||
Report-Error "Свойство без name и без ref"
|
||||
}
|
||||
# В модели XDTO fixed — булев признак, само значение лежит в default.
|
||||
# В XML-схеме наоборот: fixed="V" совмещает признак и значение.
|
||||
if ($p.HasAttribute("fixed")) {
|
||||
$fx = $p.GetAttribute("fixed")
|
||||
$pName = if ($p.HasAttribute("name")) { $p.GetAttribute("name") } else { $p.GetAttribute("ref") }
|
||||
if (@("true", "false") -cnotcontains $fx) {
|
||||
Report-Error "Свойство `"$pName`": fixed=`"$fx`" — в модели это булев признак, значение задаётся в default (в XML-схеме признак и значение совмещены в fixed)"
|
||||
} elseif ($fx -ceq "true" -and -not $p.HasAttribute("default")) {
|
||||
Report-Error "Отсутствует фиксированное значение свойства '$pName': есть fixed=`"true`", нет default"
|
||||
}
|
||||
}
|
||||
if ($script:stopped) { break }
|
||||
}
|
||||
if (-not $script:stopped) { Report-OK "Свойства: form и кратности корректны" }
|
||||
if (-not $script:stopped) { Report-OK "Свойства: form, кратности и фиксированные значения корректны" }
|
||||
|
||||
# --- 10b. Structural consistency ---
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# xdto-validate v1.0 — Validate a 1C XDTO package (Python port)
|
||||
# xdto-validate v1.1 — Validate a 1C XDTO package (Python port)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import os
|
||||
@@ -385,10 +385,25 @@ for p in pkg.iter():
|
||||
report_error(f'Свойство "{p.get("name")}": lowerBound ({lb}) больше upperBound ({ub})')
|
||||
if p.get("name") is None and p.get("ref") is None:
|
||||
report_error("Свойство без name и без ref")
|
||||
# В модели XDTO fixed — булев признак, само значение лежит в default.
|
||||
# В XML-схеме наоборот: fixed="V" совмещает признак и значение.
|
||||
fx = p.get("fixed")
|
||||
if fx is not None:
|
||||
p_name = p.get("name") if p.get("name") is not None else p.get("ref")
|
||||
if fx not in ("true", "false"):
|
||||
report_error(
|
||||
f'Свойство "{p_name}": fixed="{fx}" — в модели это булев признак, '
|
||||
"значение задаётся в default (в XML-схеме признак и значение совмещены в fixed)"
|
||||
)
|
||||
elif fx == "true" and p.get("default") is None:
|
||||
report_error(
|
||||
f"Отсутствует фиксированное значение свойства '{p_name}': "
|
||||
'есть fixed="true", нет default'
|
||||
)
|
||||
if state["stopped"]:
|
||||
break
|
||||
if not state["stopped"]:
|
||||
report_ok("Свойства: form и кратности корректны")
|
||||
report_ok("Свойства: form, кратности и фиксированные значения корректны")
|
||||
|
||||
# ── 10b. structural consistency ──────────────────────────────
|
||||
|
||||
|
||||
Reference in New Issue
Block a user