mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-10 16:14:54 +03:00
feat(skd-edit): add-selection @group= targets named StructureItemGroup
- add-selection supports @group=Name to add selection items to a named grouping instead of variant level - Finds StructureItemGroup by dcsset:name, falls back to variant level if not found - Document @group= in SKILL.md Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -129,6 +129,12 @@ Shorthand: `"Поле [desc]"`. По умолчанию asc. `Auto` — авто
|
||||
|
||||
`Folder(Название: поле1, поле2)` — группа полей (SelectedItemFolder) с заголовком и `placement=Auto`.
|
||||
|
||||
`@group=ИмяГруппировки` — добавить в selection именованной группировки (вместо уровня варианта):
|
||||
|
||||
```
|
||||
"Folder(Поступление: ПолеА, ПолеБ) @group=ДанныеОтчета"
|
||||
```
|
||||
|
||||
### add-dataSetLink — добавить связь наборов данных
|
||||
|
||||
Shorthand: `"Источник > Приёмник on ВырИсточника = ВырПриёмника [param Имя]"`.
|
||||
|
||||
@@ -1882,8 +1882,31 @@ switch ($Operation) {
|
||||
|
||||
foreach ($val in $values) {
|
||||
$fieldName = $val.Trim()
|
||||
$groupName = $null
|
||||
|
||||
$selection = Ensure-SettingsChild $settings "selection" @()
|
||||
# Extract @group=Name
|
||||
if ($fieldName -match '\s*@group=(\S+)') {
|
||||
$groupName = $Matches[1]
|
||||
$fieldName = ($fieldName -replace '\s*@group=\S+', '').Trim()
|
||||
}
|
||||
|
||||
if ($groupName) {
|
||||
# Find named StructureItemGroup
|
||||
$dcssetNs = "http://v8.1c.ru/8.1/data-composition-system/settings"
|
||||
$nsMgr = New-Object System.Xml.XmlNamespaceManager($xmlDoc.NameTable)
|
||||
$nsMgr.AddNamespace("dcsset", $dcssetNs)
|
||||
$groupEl = $settings.SelectSingleNode(".//dcsset:item[@xsi:type='dcsset:StructureItemGroup'][dcsset:name='$groupName']", $nsMgr)
|
||||
if (-not $groupEl) {
|
||||
Write-Host "[WARN] StructureItemGroup `"$groupName`" not found — adding to variant level"
|
||||
$targetEl = $settings
|
||||
} else {
|
||||
$targetEl = $groupEl
|
||||
}
|
||||
} else {
|
||||
$targetEl = $settings
|
||||
}
|
||||
|
||||
$selection = Ensure-SettingsChild $targetEl "selection" @()
|
||||
$selIndent = Get-ContainerChildIndent $selection
|
||||
|
||||
$selXml = Build-SelectionItemFragment -fieldName $fieldName -indent $selIndent
|
||||
@@ -1892,7 +1915,8 @@ switch ($Operation) {
|
||||
Insert-BeforeElement $selection $node $null $selIndent
|
||||
}
|
||||
|
||||
Write-Host "[OK] Selection `"$fieldName`" added to variant `"$varName`""
|
||||
$target = if ($groupName) { "group `"$groupName`"" } else { "variant `"$varName`"" }
|
||||
Write-Host "[OK] Selection `"$fieldName`" added to $target"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1594,13 +1594,38 @@ elif operation == "add-selection":
|
||||
var_name = get_variant_name()
|
||||
for val in values:
|
||||
field_name = val.strip()
|
||||
selection = ensure_settings_child(settings, "selection", [])
|
||||
group_name = None
|
||||
|
||||
# Extract @group=Name
|
||||
gm = re.search(r'\s*@group=(\S+)', field_name)
|
||||
if gm:
|
||||
group_name = gm.group(1)
|
||||
field_name = re.sub(r'\s*@group=\S+', '', field_name).strip()
|
||||
|
||||
if group_name:
|
||||
# Find named StructureItemGroup
|
||||
target_el = None
|
||||
for item in settings.iter(f"{{{SET_NS}}}item"):
|
||||
xsi_type = item.get(f"{{{XSI_NS}}}type", "")
|
||||
if "StructureItemGroup" in xsi_type:
|
||||
name_el = item.find(f"{{{SET_NS}}}name")
|
||||
if name_el is not None and name_el.text == group_name:
|
||||
target_el = item
|
||||
break
|
||||
if target_el is None:
|
||||
print(f'[WARN] StructureItemGroup "{group_name}" not found -- adding to variant level')
|
||||
target_el = settings
|
||||
else:
|
||||
target_el = settings
|
||||
|
||||
selection = ensure_settings_child(target_el, "selection", [])
|
||||
sel_indent = get_container_child_indent(selection)
|
||||
sel_xml = build_selection_item_fragment(field_name, sel_indent)
|
||||
sel_nodes = import_fragment(xml_doc, sel_xml)
|
||||
for node in sel_nodes:
|
||||
insert_before_element(selection, node, None, sel_indent)
|
||||
print(f'[OK] Selection "{field_name}" added to variant "{var_name}"')
|
||||
target = f'group "{group_name}"' if group_name else f'variant "{var_name}"'
|
||||
print(f'[OK] Selection "{field_name}" added to {target}')
|
||||
|
||||
elif operation == "set-query":
|
||||
ds_node = resolve_data_set()
|
||||
|
||||
Reference in New Issue
Block a user