mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-03 08:40:52 +03:00
fix(meta-info): иерархия не только у справочника
Строка «Иерархический: …» печаталась в ветке Catalog, хотя свойство Hierarchical есть и у планов видов характеристик — в корпусе acc/erp/ut/unf таких 13. У них иерархия не выводилась ни в overview, ни в full. Хуже того, вывод противоречил сам себе: блок стандартных реквизитов в full показывал Родитель (он определяется по тому же Hierarchical), а строки про иерархию рядом не было — родитель появлялся ниоткуда. Иерархия вынесена из ветки Catalog и печатается по наличию свойства; подчинение осталось специфичным для справочника. Отсутствие иерархии по-прежнему не печатается: сообщаем о наличии, молчим об отсутствии — тихую ошибку в коде даёт только необнаруженное наличие. Свойство Hierarchical проверено по корпусу: оно есть только у Catalog и ChartOfCharacteristicTypes (у плана счетов иерархия по природе, свойства нет). Прогон по корпусу: ровно 13 изменённых строк, побочных эффектов нет. Находка из отклонённого PR #59 — там иерархия тоже была вынесена из ветки Catalog. Реализация не заимствована: PR печатал «Иерархический: нет» для неиерархических объектов, то есть строку-шум примерно у 4000 объектов. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
66807e02c7
commit
5141cf546d
@@ -1,4 +1,4 @@
|
||||
# meta-info v1.7 — Compact summary of 1C metadata object
|
||||
# meta-info v1.8 — Compact summary of 1C metadata object
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
param(
|
||||
[Parameter(Mandatory=$true)][Alias('Path')][string]$ObjectPath,
|
||||
@@ -1097,24 +1097,26 @@ if (-not $drillDone) {
|
||||
if ($parts.Count -gt 0) { Out ($parts -join " | ") }
|
||||
}
|
||||
|
||||
# Catalog-specific header properties
|
||||
if ($mdType -eq "Catalog") {
|
||||
$parts = @()
|
||||
$hier = $props.SelectSingleNode("md:Hierarchical", $ns)
|
||||
if ($hier -and $hier.InnerText -eq "true") {
|
||||
$ht = $props.SelectSingleNode("md:HierarchyType", $ns)
|
||||
$htText = if ($ht -and $ht.InnerText -eq "HierarchyFoldersAndItems") { "группы и элементы" } else { "элементы" }
|
||||
$limitNode = $props.SelectSingleNode("md:LimitLevelCount", $ns)
|
||||
$levelNode = $props.SelectSingleNode("md:LevelCount", $ns)
|
||||
if ($limitNode -and $limitNode.InnerText -eq "true" -and $levelNode) {
|
||||
$htText += ", уровней: $($levelNode.InnerText)"
|
||||
} else {
|
||||
$htText += ", без ограничения уровней"
|
||||
}
|
||||
$parts += "Иерархический: $htText"
|
||||
# Свойства иерархии и подчинения. Иерархия — не только у справочников: свойство
|
||||
# Hierarchical есть и у ПВХ (в корпусе acc/erp/ut/unf их 13), а без этой строки
|
||||
# в full появлялся Родитель, происхождение которого было ниоткуда не видно.
|
||||
$parts = @()
|
||||
$hier = $props.SelectSingleNode("md:Hierarchical", $ns)
|
||||
if ($hier -and $hier.InnerText -eq "true") {
|
||||
$ht = $props.SelectSingleNode("md:HierarchyType", $ns)
|
||||
$htText = if ($ht -and $ht.InnerText -eq "HierarchyFoldersAndItems") { "группы и элементы" } else { "элементы" }
|
||||
$limitNode = $props.SelectSingleNode("md:LimitLevelCount", $ns)
|
||||
$levelNode = $props.SelectSingleNode("md:LevelCount", $ns)
|
||||
if ($limitNode -and $limitNode.InnerText -eq "true" -and $levelNode) {
|
||||
$htText += ", уровней: $($levelNode.InnerText)"
|
||||
} else {
|
||||
$htText += ", без ограничения уровней"
|
||||
}
|
||||
# Код и Наименование уехали в блок стандартных реквизитов — здесь только свойства объекта.
|
||||
# Подчинение печатаем лишь когда оно отличается от дефолта ToItems.
|
||||
$parts += "Иерархический: $htText"
|
||||
}
|
||||
# Код и Наименование уехали в блок стандартных реквизитов — здесь только свойства объекта.
|
||||
# Подчинение печатаем лишь когда оно отличается от дефолта ToItems.
|
||||
if ($mdType -eq "Catalog") {
|
||||
$sub = $props.SelectSingleNode("md:SubordinationUse", $ns)
|
||||
if ($sub -and $sub.InnerText -ne "ToItems") {
|
||||
$subRu = switch ($sub.InnerText) {
|
||||
@@ -1124,8 +1126,8 @@ if (-not $drillDone) {
|
||||
}
|
||||
$parts += "Подчинение: $subRu"
|
||||
}
|
||||
if ($parts.Count -gt 0) { Out ($parts -join " | ") }
|
||||
}
|
||||
if ($parts.Count -gt 0) { Out ($parts -join " | ") }
|
||||
|
||||
# Register-specific header properties
|
||||
if ($mdType -match "Register$") {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# meta-info v1.7 — Compact summary of 1C metadata object (Python port)
|
||||
# meta-info v1.8 — Compact summary of 1C metadata object (Python port)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
import argparse
|
||||
import os
|
||||
@@ -1125,29 +1125,31 @@ if not drill_done:
|
||||
if parts:
|
||||
out(" | ".join(parts))
|
||||
|
||||
# Catalog-specific header
|
||||
# Свойства иерархии и подчинения. Иерархия — не только у справочников: свойство
|
||||
# Hierarchical есть и у ПВХ (в корпусе acc/erp/ut/unf их 13), а без этой строки
|
||||
# в full появлялся Родитель, происхождение которого было ниоткуда не видно.
|
||||
parts = []
|
||||
hier = find(props, "md:Hierarchical")
|
||||
if hier is not None and inner_text(hier) == "true":
|
||||
ht = find(props, "md:HierarchyType")
|
||||
ht_text = "группы и элементы" if ht is not None and inner_text(ht) == "HierarchyFoldersAndItems" else "элементы"
|
||||
limit_node = find(props, "md:LimitLevelCount")
|
||||
level_node = find(props, "md:LevelCount")
|
||||
if limit_node is not None and inner_text(limit_node) == "true" and level_node is not None:
|
||||
ht_text += f", уровней: {inner_text(level_node)}"
|
||||
else:
|
||||
ht_text += ", без ограничения уровней"
|
||||
parts.append(f"Иерархический: {ht_text}")
|
||||
# Код и Наименование уехали в блок стандартных реквизитов — здесь только свойства объекта.
|
||||
# Подчинение печатаем лишь когда оно отличается от дефолта ToItems.
|
||||
if md_type == "Catalog":
|
||||
parts = []
|
||||
hier = find(props, "md:Hierarchical")
|
||||
if hier is not None and inner_text(hier) == "true":
|
||||
ht = find(props, "md:HierarchyType")
|
||||
ht_text = "группы и элементы" if ht is not None and inner_text(ht) == "HierarchyFoldersAndItems" else "элементы"
|
||||
limit_node = find(props, "md:LimitLevelCount")
|
||||
level_node = find(props, "md:LevelCount")
|
||||
if limit_node is not None and inner_text(limit_node) == "true" and level_node is not None:
|
||||
ht_text += f", уровней: {inner_text(level_node)}"
|
||||
else:
|
||||
ht_text += ", без ограничения уровней"
|
||||
parts.append(f"Иерархический: {ht_text}")
|
||||
# Код и Наименование уехали в блок стандартных реквизитов — здесь только свойства объекта.
|
||||
# Подчинение печатаем лишь когда оно отличается от дефолта ToItems.
|
||||
sub = find(props, "md:SubordinationUse")
|
||||
if sub is not None and inner_text(sub) != "ToItems":
|
||||
sub_ru = {"ToFolders": "группам", "ToFoldersAndItems": "группам и элементам"}.get(
|
||||
inner_text(sub), inner_text(sub))
|
||||
parts.append(f"Подчинение: {sub_ru}")
|
||||
if parts:
|
||||
out(" | ".join(parts))
|
||||
if parts:
|
||||
out(" | ".join(parts))
|
||||
|
||||
# Register-specific header
|
||||
if md_type.endswith("Register"):
|
||||
|
||||
Reference in New Issue
Block a user