mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-01 17:27:45 +03:00
feat(meta-compile,meta-decompile): ChoiceParameterLinks + ChoiceParameters реквизита (v1.22/v0.15)
Ограничение выбора реквизита (связи/параметры) — порт из form-compile
(структура реквизита ⟷ элемента формы совпадает для Links). DSL-ключи:
• choiceParameterLinks — [{name, dataPath, valueChange?}] ИЛИ строки
"name=dataPath[:DontChange]"; valueChange дефолт Clear.
• choiceParameters — [{name, value?}] ИЛИ строки "name=value"; значение
bool/число/строка/DTR ИЛИ массив (→ FixedArray); без value → nil.
ВАЖНО: в метаданных значение ChoiceParameters ПРЯМОЕ на app:value
(xsi:type=тип), БЕЗ обёртки FormChoiceListDesTimeValue/Presentation (в отличие
от формы) — подтверждено survey (0 wrapper на 591 значений). Массив → app:value
xsi:type=v8:FixedArray с детьми v8:Value. Декомпилятор захватывает оба блока
(namespace app; valueChange=Clear → компактная строка).
remaining ChoiceParameterLinks/ChoiceParameters/value=0 на выборке (rt-cp),
регресс 43/43 ps1+py, ps1↔py идентичны. spec §4.2, кейс catalog-attr-choice-params.
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
9fec03bfb6
commit
65de4e5c97
@@ -1,4 +1,4 @@
|
|||||||
# meta-compile v1.21 — Compile 1C metadata object from JSON
|
# meta-compile v1.22 — Compile 1C metadata object from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
param(
|
param(
|
||||||
[Parameter(Mandatory)]
|
[Parameter(Mandatory)]
|
||||||
@@ -826,6 +826,8 @@ function Parse-AttributeShorthand {
|
|||||||
hasFillValue = ($val.PSObject -and $val.PSObject.Properties -and ($val.PSObject.Properties.Name -contains 'fillValue'))
|
hasFillValue = ($val.PSObject -and $val.PSObject.Properties -and ($val.PSObject.Properties.Name -contains 'fillValue'))
|
||||||
fillValue = $val.fillValue
|
fillValue = $val.fillValue
|
||||||
linkByType = $val.linkByType
|
linkByType = $val.linkByType
|
||||||
|
choiceParameterLinks = $val.choiceParameterLinks
|
||||||
|
choiceParameters = $val.choiceParameters
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1154,6 +1156,133 @@ function Emit-LinkByType {
|
|||||||
X "$indent</LinkByType>"
|
X "$indent</LinkByType>"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# --- Параметры/связи выбора (порт из form-compile; структура реквизита ⟷ элемента формы совпадает) ---
|
||||||
|
|
||||||
|
# Свойство из dict/PSCustomObject по списку синонимов (первый найденный, иначе $null).
|
||||||
|
function Get-ChElProp {
|
||||||
|
param($obj, [string[]]$names)
|
||||||
|
if ($null -eq $obj) { return $null }
|
||||||
|
foreach ($n in $names) {
|
||||||
|
if ($obj -is [System.Collections.IDictionary]) { if ($obj.Contains($n)) { return $obj[$n] } }
|
||||||
|
elseif ($obj.PSObject -and $obj.PSObject.Properties[$n]) { return $obj.PSObject.Properties[$n].Value }
|
||||||
|
}
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Строковый литерал shorthand → скаляр: true/false→bool, целое/дробное→число, иначе строка.
|
||||||
|
function ConvertTo-ChScalar {
|
||||||
|
param([string]$s)
|
||||||
|
$t = "$s".Trim()
|
||||||
|
if ($t -match '^(?i:true|истина)$') { return $true }
|
||||||
|
if ($t -match '^(?i:false|ложь)$') { return $false }
|
||||||
|
if ($t -match '^-?\d+$') { return [int]$t }
|
||||||
|
if ($t -match '^-?\d+\.\d+$') { return [double]::Parse($t, [System.Globalization.CultureInfo]::InvariantCulture) }
|
||||||
|
return $t
|
||||||
|
}
|
||||||
|
|
||||||
|
# Значение параметра выбора → @{XsiType; Text}. Авто-детект по значению (без типа реквизита).
|
||||||
|
function Normalize-ChoiceValue {
|
||||||
|
param($value)
|
||||||
|
if ($value -is [bool]) { return @{ XsiType='xs:boolean'; Text=$(if ($value) { 'true' } else { 'false' }) } }
|
||||||
|
if ($value -is [int] -or $value -is [long] -or $value -is [double] -or $value -is [decimal]) {
|
||||||
|
return @{ XsiType='xs:decimal'; Text=(Format-FillNum $value) }
|
||||||
|
}
|
||||||
|
$s = "$value"
|
||||||
|
if ($s -eq '') { return @{ XsiType='xs:string'; Text='' } }
|
||||||
|
if ($s -match '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$') { return @{ XsiType='xs:dateTime'; Text=$s } }
|
||||||
|
$ref = Normalize-FillRef $s
|
||||||
|
if ($ref) { return @{ XsiType='xr:DesignTimeRef'; Text=$ref } }
|
||||||
|
return @{ XsiType='xs:string'; Text=$s }
|
||||||
|
}
|
||||||
|
|
||||||
|
# Shorthand "name=value" | "name=v1, v2" → {name, value}. "name=path" для links.
|
||||||
|
function ConvertFrom-ChParamShorthand {
|
||||||
|
param([string]$s)
|
||||||
|
$eq = $s.IndexOf('=')
|
||||||
|
if ($eq -lt 0) { return @{ name = $s.Trim() } }
|
||||||
|
$name = $s.Substring(0, $eq).Trim(); $rest = $s.Substring($eq + 1)
|
||||||
|
if ($rest -match ',') {
|
||||||
|
$vals = @(); foreach ($p in ($rest -split ',')) { $vals += ,(ConvertTo-ChScalar $p) }
|
||||||
|
return @{ name = $name; value = $vals }
|
||||||
|
}
|
||||||
|
return @{ name = $name; value = (ConvertTo-ChScalar $rest) }
|
||||||
|
}
|
||||||
|
function ConvertFrom-ChLinkShorthand {
|
||||||
|
param([string]$s)
|
||||||
|
$eq = $s.IndexOf('=')
|
||||||
|
if ($eq -lt 0) { return @{ name = $s.Trim() } }
|
||||||
|
$o = @{ name = $s.Substring(0, $eq).Trim() }; $rest = $s.Substring($eq + 1).Trim()
|
||||||
|
if ($rest -match '^(.*):(?i:(Clear|DontChange|очистить|неизменять))$') { $o['dataPath'] = $matches[1].Trim(); $o['valueChange'] = $matches[2] }
|
||||||
|
else { $o['dataPath'] = $rest }
|
||||||
|
return $o
|
||||||
|
}
|
||||||
|
|
||||||
|
# <ChoiceParameters> — [{name, value?}]. Значение ПРЯМО на app:value (xsi:type=тип); массив → v8:FixedArray
|
||||||
|
# с детьми v8:Value; без value → app:value nil.
|
||||||
|
function Emit-ChoiceParameters {
|
||||||
|
param([string]$indent, $cp)
|
||||||
|
if (-not $cp -or @($cp).Count -eq 0) { X "$indent<ChoiceParameters/>"; return }
|
||||||
|
X "$indent<ChoiceParameters>"
|
||||||
|
foreach ($item in @($cp)) {
|
||||||
|
if ($item -is [string]) { $item = ConvertFrom-ChParamShorthand $item }
|
||||||
|
$name = Get-ChElProp $item @('name','имя')
|
||||||
|
$hasVal = $false; $val = $null
|
||||||
|
if ($item -is [System.Collections.IDictionary]) {
|
||||||
|
if ($item.Contains('value')) { $hasVal = $true; $val = $item['value'] }
|
||||||
|
elseif ($item.Contains('значение')) { $hasVal = $true; $val = $item['значение'] }
|
||||||
|
} elseif ($item.PSObject) {
|
||||||
|
if ($item.PSObject.Properties['value']) { $hasVal = $true; $val = $item.PSObject.Properties['value'].Value }
|
||||||
|
elseif ($item.PSObject.Properties['значение']) { $hasVal = $true; $val = $item.PSObject.Properties['значение'].Value }
|
||||||
|
}
|
||||||
|
$valIsArray = ($val -is [System.Array]) -or ($val -is [System.Collections.IList] -and $val -isnot [string])
|
||||||
|
X "$indent`t<app:item name=`"$(Esc-Xml "$name")`">"
|
||||||
|
if (-not $hasVal) {
|
||||||
|
X "$indent`t`t<app:value xsi:nil=`"true`"/>"
|
||||||
|
} elseif ($valIsArray) {
|
||||||
|
X "$indent`t`t<app:value xsi:type=`"v8:FixedArray`">"
|
||||||
|
foreach ($v in $val) {
|
||||||
|
$norm = Normalize-ChoiceValue -value $v
|
||||||
|
if ([string]::IsNullOrEmpty($norm.Text)) { X "$indent`t`t`t<v8:Value xsi:type=`"$($norm.XsiType)`"/>" }
|
||||||
|
else { X "$indent`t`t`t<v8:Value xsi:type=`"$($norm.XsiType)`">$(Esc-Xml $norm.Text)</v8:Value>" }
|
||||||
|
}
|
||||||
|
X "$indent`t`t</app:value>"
|
||||||
|
} else {
|
||||||
|
$norm = Normalize-ChoiceValue -value $val
|
||||||
|
if ([string]::IsNullOrEmpty($norm.Text)) { X "$indent`t`t<app:value xsi:type=`"$($norm.XsiType)`"/>" }
|
||||||
|
else { X "$indent`t`t<app:value xsi:type=`"$($norm.XsiType)`">$(Esc-Xml $norm.Text)</app:value>" }
|
||||||
|
}
|
||||||
|
X "$indent`t</app:item>"
|
||||||
|
}
|
||||||
|
X "$indent</ChoiceParameters>"
|
||||||
|
}
|
||||||
|
|
||||||
|
# <ChoiceParameterLinks> — [{name, dataPath, valueChange?}]. valueChange дефолт Clear.
|
||||||
|
function Emit-ChoiceParameterLinks {
|
||||||
|
param([string]$indent, $cpl)
|
||||||
|
if (-not $cpl -or @($cpl).Count -eq 0) { X "$indent<ChoiceParameterLinks/>"; return }
|
||||||
|
X "$indent<ChoiceParameterLinks>"
|
||||||
|
foreach ($lk in @($cpl)) {
|
||||||
|
if ($lk -is [string]) { $lk = ConvertFrom-ChLinkShorthand $lk }
|
||||||
|
$name = Get-ChElProp $lk @('name','имя')
|
||||||
|
$dp = Get-ChElProp $lk @('dataPath','path','путь')
|
||||||
|
$vcRaw = Get-ChElProp $lk @('valueChange','режимИзменения')
|
||||||
|
$vc = 'Clear'
|
||||||
|
if ($vcRaw) {
|
||||||
|
$vc = switch -Regex ("$vcRaw".ToLower()) {
|
||||||
|
'^(clear|очистить|очистка)$' { 'Clear'; break }
|
||||||
|
'^(dontchange|неизменять|неменять|нет)$' { 'DontChange'; break }
|
||||||
|
default { "$vcRaw" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
X "$indent`t<xr:Link>"
|
||||||
|
X "$indent`t`t<xr:Name>$(Esc-Xml "$name")</xr:Name>"
|
||||||
|
X "$indent`t`t<xr:DataPath xsi:type=`"xs:string`">$(Esc-Xml "$dp")</xr:DataPath>"
|
||||||
|
X "$indent`t`t<xr:ValueChange>$vc</xr:ValueChange>"
|
||||||
|
X "$indent`t</xr:Link>"
|
||||||
|
}
|
||||||
|
X "$indent</ChoiceParameterLinks>"
|
||||||
|
}
|
||||||
|
|
||||||
function Emit-Attribute {
|
function Emit-Attribute {
|
||||||
param([string]$indent, $parsed, [string]$context)
|
param([string]$indent, $parsed, [string]$context)
|
||||||
# $context: "catalog", "document", "object", "processor", "tabular", "processor-tabular", "register"
|
# $context: "catalog", "document", "object", "processor", "tabular", "processor-tabular", "register"
|
||||||
@@ -1221,8 +1350,8 @@ function Emit-Attribute {
|
|||||||
X "$indent`t`t<FillChecking>$fillChecking</FillChecking>"
|
X "$indent`t`t<FillChecking>$fillChecking</FillChecking>"
|
||||||
|
|
||||||
X "$indent`t`t<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>"
|
X "$indent`t`t<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>"
|
||||||
X "$indent`t`t<ChoiceParameterLinks/>"
|
Emit-ChoiceParameterLinks "$indent`t`t" $parsed.choiceParameterLinks
|
||||||
X "$indent`t`t<ChoiceParameters/>"
|
Emit-ChoiceParameters "$indent`t`t" $parsed.choiceParameters
|
||||||
$qc = if ($parsed.quickChoice) { $parsed.quickChoice } else { "Auto" }
|
$qc = if ($parsed.quickChoice) { $parsed.quickChoice } else { "Auto" }
|
||||||
X "$indent`t`t<QuickChoice>$qc</QuickChoice>"
|
X "$indent`t`t<QuickChoice>$qc</QuickChoice>"
|
||||||
$coi = if ($parsed.createOnInput) { $parsed.createOnInput } else { "Auto" }
|
$coi = if ($parsed.createOnInput) { $parsed.createOnInput } else { "Auto" }
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# meta-compile v1.21 — Compile 1C metadata object from JSON
|
# meta-compile v1.22 — Compile 1C metadata object from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
@@ -850,6 +850,8 @@ def parse_attribute_shorthand(val):
|
|||||||
'hasFillValue': ('fillValue' in val),
|
'hasFillValue': ('fillValue' in val),
|
||||||
'fillValue': val.get('fillValue'),
|
'fillValue': val.get('fillValue'),
|
||||||
'linkByType': val.get('linkByType'),
|
'linkByType': val.get('linkByType'),
|
||||||
|
'choiceParameterLinks': val.get('choiceParameterLinks'),
|
||||||
|
'choiceParameters': val.get('choiceParameters'),
|
||||||
}
|
}
|
||||||
|
|
||||||
def parse_enum_value_shorthand(val):
|
def parse_enum_value_shorthand(val):
|
||||||
@@ -1200,6 +1202,133 @@ def emit_link_by_type(indent, spec):
|
|||||||
X(f'{indent}\t<xr:LinkItem>{li}</xr:LinkItem>')
|
X(f'{indent}\t<xr:LinkItem>{li}</xr:LinkItem>')
|
||||||
X(f'{indent}</LinkByType>')
|
X(f'{indent}</LinkByType>')
|
||||||
|
|
||||||
|
# --- Параметры/связи выбора (порт из form-compile) ---
|
||||||
|
|
||||||
|
def ch_el_prop(obj, names):
|
||||||
|
if obj is None:
|
||||||
|
return None
|
||||||
|
if isinstance(obj, dict):
|
||||||
|
for n in names:
|
||||||
|
if n in obj:
|
||||||
|
return obj[n]
|
||||||
|
return None
|
||||||
|
|
||||||
|
def convert_to_ch_scalar(s):
|
||||||
|
t = str(s).strip()
|
||||||
|
if re.match(r'^(?i:true|истина)$', t):
|
||||||
|
return True
|
||||||
|
if re.match(r'^(?i:false|ложь)$', t):
|
||||||
|
return False
|
||||||
|
if re.match(r'^-?\d+$', t):
|
||||||
|
return int(t)
|
||||||
|
if re.match(r'^-?\d+\.\d+$', t):
|
||||||
|
return float(t)
|
||||||
|
return t
|
||||||
|
|
||||||
|
def normalize_choice_value(value):
|
||||||
|
"""Значение параметра выбора → (xsi_type, text). Авто-детект по значению."""
|
||||||
|
if isinstance(value, bool):
|
||||||
|
return ('xs:boolean', 'true' if value else 'false')
|
||||||
|
if isinstance(value, (int, float)):
|
||||||
|
return ('xs:decimal', format_fill_num(value))
|
||||||
|
s = str(value)
|
||||||
|
if s == '':
|
||||||
|
return ('xs:string', '')
|
||||||
|
if re.match(r'^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$', s):
|
||||||
|
return ('xs:dateTime', s)
|
||||||
|
ref = normalize_fill_ref(s)
|
||||||
|
if ref:
|
||||||
|
return ('xr:DesignTimeRef', ref)
|
||||||
|
return ('xs:string', s)
|
||||||
|
|
||||||
|
def convert_from_ch_param_shorthand(s):
|
||||||
|
eq = s.find('=')
|
||||||
|
if eq < 0:
|
||||||
|
return {'name': s.strip()}
|
||||||
|
name = s[:eq].strip()
|
||||||
|
rest = s[eq + 1:]
|
||||||
|
if ',' in rest:
|
||||||
|
return {'name': name, 'value': [convert_to_ch_scalar(p) for p in rest.split(',')]}
|
||||||
|
return {'name': name, 'value': convert_to_ch_scalar(rest)}
|
||||||
|
|
||||||
|
def convert_from_ch_link_shorthand(s):
|
||||||
|
eq = s.find('=')
|
||||||
|
if eq < 0:
|
||||||
|
return {'name': s.strip()}
|
||||||
|
o = {'name': s[:eq].strip()}
|
||||||
|
rest = s[eq + 1:].strip()
|
||||||
|
m = re.match(r'^(.*):(?i:(Clear|DontChange|очистить|неизменять))$', rest)
|
||||||
|
if m:
|
||||||
|
o['dataPath'] = m.group(1).strip()
|
||||||
|
o['valueChange'] = m.group(2)
|
||||||
|
else:
|
||||||
|
o['dataPath'] = rest
|
||||||
|
return o
|
||||||
|
|
||||||
|
def emit_choice_parameters(indent, cp):
|
||||||
|
if not cp:
|
||||||
|
X(f'{indent}<ChoiceParameters/>')
|
||||||
|
return
|
||||||
|
if isinstance(cp, (str, dict)):
|
||||||
|
cp = [cp]
|
||||||
|
X(f'{indent}<ChoiceParameters>')
|
||||||
|
for item in cp:
|
||||||
|
if isinstance(item, str):
|
||||||
|
item = convert_from_ch_param_shorthand(item)
|
||||||
|
name = ch_el_prop(item, ['name', 'имя'])
|
||||||
|
has_val = isinstance(item, dict) and ('value' in item or 'значение' in item)
|
||||||
|
val = item.get('value', item.get('значение')) if has_val else None
|
||||||
|
val_is_array = isinstance(val, (list, tuple))
|
||||||
|
X(f'{indent}\t<app:item name="{esc_xml(str(name))}">')
|
||||||
|
if not has_val:
|
||||||
|
X(f'{indent}\t\t<app:value xsi:nil="true"/>')
|
||||||
|
elif val_is_array:
|
||||||
|
X(f'{indent}\t\t<app:value xsi:type="v8:FixedArray">')
|
||||||
|
for v in val:
|
||||||
|
xt, tx = normalize_choice_value(v)
|
||||||
|
if tx == '' or tx is None:
|
||||||
|
X(f'{indent}\t\t\t<v8:Value xsi:type="{xt}"/>')
|
||||||
|
else:
|
||||||
|
X(f'{indent}\t\t\t<v8:Value xsi:type="{xt}">{esc_xml(tx)}</v8:Value>')
|
||||||
|
X(f'{indent}\t\t</app:value>')
|
||||||
|
else:
|
||||||
|
xt, tx = normalize_choice_value(val)
|
||||||
|
if tx == '' or tx is None:
|
||||||
|
X(f'{indent}\t\t<app:value xsi:type="{xt}"/>')
|
||||||
|
else:
|
||||||
|
X(f'{indent}\t\t<app:value xsi:type="{xt}">{esc_xml(tx)}</app:value>')
|
||||||
|
X(f'{indent}\t</app:item>')
|
||||||
|
X(f'{indent}</ChoiceParameters>')
|
||||||
|
|
||||||
|
def emit_choice_parameter_links(indent, cpl):
|
||||||
|
if not cpl:
|
||||||
|
X(f'{indent}<ChoiceParameterLinks/>')
|
||||||
|
return
|
||||||
|
if isinstance(cpl, (str, dict)):
|
||||||
|
cpl = [cpl]
|
||||||
|
X(f'{indent}<ChoiceParameterLinks>')
|
||||||
|
for lk in cpl:
|
||||||
|
if isinstance(lk, str):
|
||||||
|
lk = convert_from_ch_link_shorthand(lk)
|
||||||
|
name = ch_el_prop(lk, ['name', 'имя'])
|
||||||
|
dp = ch_el_prop(lk, ['dataPath', 'path', 'путь'])
|
||||||
|
vc_raw = ch_el_prop(lk, ['valueChange', 'режимИзменения'])
|
||||||
|
vc = 'Clear'
|
||||||
|
if vc_raw:
|
||||||
|
low = str(vc_raw).lower()
|
||||||
|
if re.match(r'^(clear|очистить|очистка)$', low):
|
||||||
|
vc = 'Clear'
|
||||||
|
elif re.match(r'^(dontchange|неизменять|неменять|нет)$', low):
|
||||||
|
vc = 'DontChange'
|
||||||
|
else:
|
||||||
|
vc = str(vc_raw)
|
||||||
|
X(f'{indent}\t<xr:Link>')
|
||||||
|
X(f'{indent}\t\t<xr:Name>{esc_xml(str(name))}</xr:Name>')
|
||||||
|
X(f'{indent}\t\t<xr:DataPath xsi:type="xs:string">{esc_xml(str(dp))}</xr:DataPath>')
|
||||||
|
X(f'{indent}\t\t<xr:ValueChange>{vc}</xr:ValueChange>')
|
||||||
|
X(f'{indent}\t</xr:Link>')
|
||||||
|
X(f'{indent}</ChoiceParameterLinks>')
|
||||||
|
|
||||||
def emit_attribute(indent, parsed, context):
|
def emit_attribute(indent, parsed, context):
|
||||||
attr_name = parsed['name']
|
attr_name = parsed['name']
|
||||||
ctx_reserved = RESERVED_BY_CONTEXT.get(context)
|
ctx_reserved = RESERVED_BY_CONTEXT.get(context)
|
||||||
@@ -1254,8 +1383,8 @@ def emit_attribute(indent, parsed, context):
|
|||||||
fill_checking = parsed['fillChecking']
|
fill_checking = parsed['fillChecking']
|
||||||
X(f'{indent}\t\t<FillChecking>{fill_checking}</FillChecking>')
|
X(f'{indent}\t\t<FillChecking>{fill_checking}</FillChecking>')
|
||||||
X(f'{indent}\t\t<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>')
|
X(f'{indent}\t\t<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>')
|
||||||
X(f'{indent}\t\t<ChoiceParameterLinks/>')
|
emit_choice_parameter_links(f'{indent}\t\t', parsed.get('choiceParameterLinks'))
|
||||||
X(f'{indent}\t\t<ChoiceParameters/>')
|
emit_choice_parameters(f'{indent}\t\t', parsed.get('choiceParameters'))
|
||||||
X(f'{indent}\t\t<QuickChoice>{parsed.get("quickChoice") or "Auto"}</QuickChoice>')
|
X(f'{indent}\t\t<QuickChoice>{parsed.get("quickChoice") or "Auto"}</QuickChoice>')
|
||||||
X(f'{indent}\t\t<CreateOnInput>{parsed.get("createOnInput") or "Auto"}</CreateOnInput>')
|
X(f'{indent}\t\t<CreateOnInput>{parsed.get("createOnInput") or "Auto"}</CreateOnInput>')
|
||||||
X(f'{indent}\t\t<ChoiceForm/>')
|
X(f'{indent}\t\t<ChoiceForm/>')
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# meta-decompile v0.14 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
# meta-decompile v0.15 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
#
|
#
|
||||||
# Пилот: только Catalog. Инверс meta-compile (omit-on-default: ключ эмитим только
|
# Пилот: только Catalog. Инверс meta-compile (omit-on-default: ключ эмитим только
|
||||||
@@ -79,6 +79,7 @@ $nsm.AddNamespace('md', 'http://v8.1c.ru/8.3/MDClasses')
|
|||||||
$nsm.AddNamespace('v8', 'http://v8.1c.ru/8.1/data/core')
|
$nsm.AddNamespace('v8', 'http://v8.1c.ru/8.1/data/core')
|
||||||
$nsm.AddNamespace('xr', 'http://v8.1c.ru/8.3/xcf/readable')
|
$nsm.AddNamespace('xr', 'http://v8.1c.ru/8.3/xcf/readable')
|
||||||
$nsm.AddNamespace('xsi', 'http://www.w3.org/2001/XMLSchema-instance')
|
$nsm.AddNamespace('xsi', 'http://www.w3.org/2001/XMLSchema-instance')
|
||||||
|
$nsm.AddNamespace('app', 'http://v8.1c.ru/8.2/managed-application/core')
|
||||||
|
|
||||||
$rootEl = $doc.DocumentElement
|
$rootEl = $doc.DocumentElement
|
||||||
if ($rootEl.LocalName -ne 'MetaDataObject') {
|
if ($rootEl.LocalName -ne 'MetaDataObject') {
|
||||||
@@ -183,6 +184,31 @@ function Get-TypeShorthand {
|
|||||||
return ($parts -join ' + ')
|
return ($parts -join ' + ')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Скалярное значение параметра выбора (<Value xsi:type=...>) → JSON-значение (bool/число/строка).
|
||||||
|
# string/dateTime/DesignTimeRef → строка (компилятор auto-детектит обратно).
|
||||||
|
function Convert-ChScalarNode {
|
||||||
|
param($vN)
|
||||||
|
$xt = $vN.GetAttribute('type', 'http://www.w3.org/2001/XMLSchema-instance')
|
||||||
|
$txt = $vN.InnerText
|
||||||
|
if ($xt -match 'boolean$') { return ($txt -eq 'true') }
|
||||||
|
if ($xt -match 'decimal$') {
|
||||||
|
if ($txt -match '^-?\d+$') { return [int]$txt }
|
||||||
|
return [double]::Parse($txt, [System.Globalization.CultureInfo]::InvariantCulture)
|
||||||
|
}
|
||||||
|
return $txt
|
||||||
|
}
|
||||||
|
# app:value (тип прямо на узле) → значение ЛИБО массив (v8:FixedArray с детьми v8:Value).
|
||||||
|
function Get-ChoiceParamValue {
|
||||||
|
param($valNode)
|
||||||
|
$xt = $valNode.GetAttribute('type', 'http://www.w3.org/2001/XMLSchema-instance')
|
||||||
|
if ($xt -match 'FixedArray$') {
|
||||||
|
$arr = [System.Collections.ArrayList]@()
|
||||||
|
foreach ($sub in @($valNode.SelectNodes('v8:Value', $nsm))) { [void]$arr.Add((Convert-ChScalarNode $sub)) }
|
||||||
|
return $arr
|
||||||
|
}
|
||||||
|
return Convert-ChScalarNode $valNode
|
||||||
|
}
|
||||||
|
|
||||||
# --- Реквизит → DSL: shorthand-строка "Имя: Тип | флаги" ЛИБО object-форма при кастомном синониме.
|
# --- Реквизит → DSL: shorthand-строка "Имя: Тип | флаги" ЛИБО object-форма при кастомном синониме.
|
||||||
# (Синоним ≠ авто → object {name, type, synonym, [flags]}; иначе компактный shorthand.) ---
|
# (Синоним ≠ авто → object {name, type, synonym, [flags]}; иначе компактный shorthand.) ---
|
||||||
function Attr-ToDsl {
|
function Attr-ToDsl {
|
||||||
@@ -263,6 +289,46 @@ function Attr-ToDsl {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ChoiceParameterLinks — [{name, dataPath, valueChange?}]. valueChange=Clear → компактно строкой "name=dataPath".
|
||||||
|
$cplNode = $ap.SelectSingleNode('md:ChoiceParameterLinks', $nsm)
|
||||||
|
if ($cplNode) {
|
||||||
|
$links = @($cplNode.SelectNodes('xr:Link', $nsm))
|
||||||
|
if ($links.Count -gt 0) {
|
||||||
|
$arr = [System.Collections.ArrayList]@()
|
||||||
|
foreach ($lk in $links) {
|
||||||
|
$lName = $lk.SelectSingleNode('xr:Name', $nsm).InnerText
|
||||||
|
$lDp = $lk.SelectSingleNode('xr:DataPath', $nsm).InnerText
|
||||||
|
$vcN = $lk.SelectSingleNode('xr:ValueChange', $nsm)
|
||||||
|
$vcv = if ($vcN) { $vcN.InnerText } else { 'Clear' }
|
||||||
|
if ($vcv -eq 'Clear') { [void]$arr.Add("$lName=$lDp") }
|
||||||
|
else { [void]$arr.Add([ordered]@{ name = $lName; dataPath = $lDp; valueChange = $vcv }) }
|
||||||
|
}
|
||||||
|
$extra['choiceParameterLinks'] = $arr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# ChoiceParameters — [{name, value?}]. app:value nil → без value; иначе типизированное значение.
|
||||||
|
$cpNode = $ap.SelectSingleNode('md:ChoiceParameters', $nsm)
|
||||||
|
if ($cpNode) {
|
||||||
|
$items = @($cpNode.SelectNodes('app:item', $nsm))
|
||||||
|
if ($items.Count -gt 0) {
|
||||||
|
$arr = [System.Collections.ArrayList]@()
|
||||||
|
foreach ($it in $items) {
|
||||||
|
$pName = $it.GetAttribute('name')
|
||||||
|
$valN = $it.SelectSingleNode('app:value', $nsm)
|
||||||
|
$nilAttr = if ($valN) { $valN.GetAttribute('nil', 'http://www.w3.org/2001/XMLSchema-instance') } else { '' }
|
||||||
|
if (-not $valN -or $nilAttr -eq 'true') {
|
||||||
|
[void]$arr.Add([ordered]@{ name = $pName })
|
||||||
|
} else {
|
||||||
|
$o = [ordered]@{ name = $pName }
|
||||||
|
$o['value'] = Get-ChoiceParamValue $valN
|
||||||
|
[void]$arr.Add($o)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$extra['choiceParameters'] = $arr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($synCustom -or ($null -ne $ttVal) -or $extra.Count -gt 0) {
|
if ($synCustom -or ($null -ne $ttVal) -or $extra.Count -gt 0) {
|
||||||
$o = [ordered]@{ name = $nm }
|
$o = [ordered]@{ name = $nm }
|
||||||
if ($ts) { $o['type'] = $ts }
|
if ($ts) { $o['type'] = $ts }
|
||||||
|
|||||||
@@ -151,6 +151,8 @@ JSON DSL для описания объектов метаданных конф
|
|||||||
| `fillFromFillingValue` | FillFromFillingValue | false | bool |
|
| `fillFromFillingValue` | FillFromFillingValue | false | bool |
|
||||||
| `fillValue` | FillValue | по типу (см. ниже) | значение заполнения — bool/число/строка/дата/DTR-путь; `null` → nil |
|
| `fillValue` | FillValue | по типу (см. ниже) | значение заполнения — bool/число/строка/дата/DTR-путь; `null` → nil |
|
||||||
| `linkByType` | LinkByType | пусто | связь по типу: `{dataPath, linkItem?}` ИЛИ строка-путь (linkItem=0). Тип значения реквизита-Характеристики берётся из реквизита по `dataPath` |
|
| `linkByType` | LinkByType | пусто | связь по типу: `{dataPath, linkItem?}` ИЛИ строка-путь (linkItem=0). Тип значения реквизита-Характеристики берётся из реквизита по `dataPath` |
|
||||||
|
| `choiceParameterLinks` | ChoiceParameterLinks | пусто | связи параметров выбора: массив `{name, dataPath, valueChange?}` ИЛИ строк `"name=dataPath[:DontChange]"`. valueChange по умолч. `Clear` |
|
||||||
|
| `choiceParameters` | ChoiceParameters | пусто | параметры выбора: массив `{name, value?}` ИЛИ строк `"name=value"`. value — bool/число/строка/DTR-путь ИЛИ массив (→ FixedArray); без value → nil |
|
||||||
| `createOnInput` | CreateOnInput | Auto | Auto/Use/DontUse |
|
| `createOnInput` | CreateOnInput | Auto | Auto/Use/DontUse |
|
||||||
| `quickChoice` | QuickChoice | Auto | Auto/Use/DontUse. Прощаем bool (форм-стиль): `true`→Use, `false`→DontUse |
|
| `quickChoice` | QuickChoice | Auto | Auto/Use/DontUse. Прощаем bool (форм-стиль): `true`→Use, `false`→DontUse |
|
||||||
| `dataHistory` | DataHistory | Use | Use/DontUse |
|
| `dataHistory` | DataHistory | Use | Use/DontUse |
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"name": "Реквизит: ChoiceParameterLinks + ChoiceParameters (ограничение выбора)",
|
||||||
|
"input": {
|
||||||
|
"type": "Catalog",
|
||||||
|
"name": "ТестВыбора",
|
||||||
|
"attributes": [
|
||||||
|
{ "name": "Счет", "type": "CatalogRef.БанковскиеСчета",
|
||||||
|
"choiceParameterLinks": [ { "name": "Отбор.Владелец", "dataPath": "Catalog.ТестВыбора.StandardAttribute.Ref", "valueChange": "Clear" } ] },
|
||||||
|
{ "name": "Партнер", "type": "CatalogRef.Партнеры",
|
||||||
|
"choiceParameters": [ { "name": "Отбор.ЭтоГруппа", "value": false } ] },
|
||||||
|
{ "name": "ТипТТН", "type": "CatalogRef.ВидыТранспорта",
|
||||||
|
"choiceParameters": [ { "name": "Отбор.Тип", "value": ["Enum.ТипыВЕТИС.EmptyRef", "Enum.ТипыВЕТИС.EnumValue.ТТН"] } ] },
|
||||||
|
{ "name": "Валюта", "type": "CatalogRef.Валюты",
|
||||||
|
"choiceParameterLinks": "Отбор.Владелец=Catalog.ТестВыбора.StandardAttribute.Ref" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"validatePath": "Catalogs/ТестВыбора",
|
||||||
|
"expect": {
|
||||||
|
"files": ["Catalogs/ТестВыбора.xml"]
|
||||||
|
}
|
||||||
|
}
|
||||||
+275
@@ -0,0 +1,275 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||||
|
<Catalog uuid="UUID-001">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:GeneratedType name="CatalogObject.ТестВыбора" category="Object">
|
||||||
|
<xr:TypeId>UUID-002</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-003</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="CatalogRef.ТестВыбора" category="Ref">
|
||||||
|
<xr:TypeId>UUID-004</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-005</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="CatalogSelection.ТестВыбора" category="Selection">
|
||||||
|
<xr:TypeId>UUID-006</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-007</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="CatalogList.ТестВыбора" category="List">
|
||||||
|
<xr:TypeId>UUID-008</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-009</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="CatalogManager.ТестВыбора" category="Manager">
|
||||||
|
<xr:TypeId>UUID-010</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-011</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>ТестВыбора</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Тест выбора</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Hierarchical>false</Hierarchical>
|
||||||
|
<HierarchyType>HierarchyFoldersAndItems</HierarchyType>
|
||||||
|
<LimitLevelCount>false</LimitLevelCount>
|
||||||
|
<LevelCount>2</LevelCount>
|
||||||
|
<FoldersOnTop>true</FoldersOnTop>
|
||||||
|
<UseStandardCommands>true</UseStandardCommands>
|
||||||
|
<Owners/>
|
||||||
|
<SubordinationUse>ToItems</SubordinationUse>
|
||||||
|
<CodeLength>9</CodeLength>
|
||||||
|
<DescriptionLength>25</DescriptionLength>
|
||||||
|
<CodeType>String</CodeType>
|
||||||
|
<CodeAllowedLength>Variable</CodeAllowedLength>
|
||||||
|
<CodeSeries>WholeCatalog</CodeSeries>
|
||||||
|
<CheckUnique>false</CheckUnique>
|
||||||
|
<Autonumbering>true</Autonumbering>
|
||||||
|
<DefaultPresentation>AsDescription</DefaultPresentation>
|
||||||
|
<Characteristics/>
|
||||||
|
<PredefinedDataUpdate>Auto</PredefinedDataUpdate>
|
||||||
|
<EditType>InDialog</EditType>
|
||||||
|
<QuickChoice>false</QuickChoice>
|
||||||
|
<ChoiceMode>BothWays</ChoiceMode>
|
||||||
|
<InputByString>
|
||||||
|
<xr:Field>Catalog.ТестВыбора.StandardAttribute.Description</xr:Field>
|
||||||
|
<xr:Field>Catalog.ТестВыбора.StandardAttribute.Code</xr:Field>
|
||||||
|
</InputByString>
|
||||||
|
<SearchStringModeOnInputByString>Begin</SearchStringModeOnInputByString>
|
||||||
|
<FullTextSearchOnInputByString>DontUse</FullTextSearchOnInputByString>
|
||||||
|
<ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString>
|
||||||
|
<DefaultObjectForm/>
|
||||||
|
<DefaultFolderForm/>
|
||||||
|
<DefaultListForm/>
|
||||||
|
<DefaultChoiceForm/>
|
||||||
|
<DefaultFolderChoiceForm/>
|
||||||
|
<AuxiliaryObjectForm/>
|
||||||
|
<AuxiliaryFolderForm/>
|
||||||
|
<AuxiliaryListForm/>
|
||||||
|
<AuxiliaryChoiceForm/>
|
||||||
|
<AuxiliaryFolderChoiceForm/>
|
||||||
|
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||||
|
<BasedOn/>
|
||||||
|
<DataLockFields/>
|
||||||
|
<DataLockControlMode>Automatic</DataLockControlMode>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<ObjectPresentation/>
|
||||||
|
<ExtendedObjectPresentation/>
|
||||||
|
<ListPresentation/>
|
||||||
|
<ExtendedListPresentation/>
|
||||||
|
<Explanation/>
|
||||||
|
<CreateOnInput>Use</CreateOnInput>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<DataHistory>DontUse</DataHistory>
|
||||||
|
<UpdateDataHistoryImmediatelyAfterWrite>false</UpdateDataHistoryImmediatelyAfterWrite>
|
||||||
|
<ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<Attribute uuid="UUID-012">
|
||||||
|
<Properties>
|
||||||
|
<Name>Счет</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Счет</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.БанковскиеСчета</v8:Type>
|
||||||
|
</Type>
|
||||||
|
<PasswordMode>false</PasswordMode>
|
||||||
|
<Format/>
|
||||||
|
<EditFormat/>
|
||||||
|
<ToolTip/>
|
||||||
|
<MarkNegatives>false</MarkNegatives>
|
||||||
|
<Mask/>
|
||||||
|
<MultiLine>false</MultiLine>
|
||||||
|
<ExtendedEdit>false</ExtendedEdit>
|
||||||
|
<MinValue xsi:nil="true"/>
|
||||||
|
<MaxValue xsi:nil="true"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:nil="true"/>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||||
|
<ChoiceParameterLinks>
|
||||||
|
<xr:Link>
|
||||||
|
<xr:Name>Отбор.Владелец</xr:Name>
|
||||||
|
<xr:DataPath xsi:type="xs:string">Catalog.ТестВыбора.StandardAttribute.Ref</xr:DataPath>
|
||||||
|
<xr:ValueChange>Clear</xr:ValueChange>
|
||||||
|
</xr:Link>
|
||||||
|
</ChoiceParameterLinks>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<LinkByType/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<Use>ForItem</Use>
|
||||||
|
<Indexing>DontIndex</Indexing>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<DataHistory>Use</DataHistory>
|
||||||
|
</Properties>
|
||||||
|
</Attribute>
|
||||||
|
<Attribute uuid="UUID-013">
|
||||||
|
<Properties>
|
||||||
|
<Name>Партнер</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Партнер</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.Партнеры</v8:Type>
|
||||||
|
</Type>
|
||||||
|
<PasswordMode>false</PasswordMode>
|
||||||
|
<Format/>
|
||||||
|
<EditFormat/>
|
||||||
|
<ToolTip/>
|
||||||
|
<MarkNegatives>false</MarkNegatives>
|
||||||
|
<Mask/>
|
||||||
|
<MultiLine>false</MultiLine>
|
||||||
|
<ExtendedEdit>false</ExtendedEdit>
|
||||||
|
<MinValue xsi:nil="true"/>
|
||||||
|
<MaxValue xsi:nil="true"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:nil="true"/>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters>
|
||||||
|
<app:item name="Отбор.ЭтоГруппа">
|
||||||
|
<app:value xsi:type="xs:boolean">false</app:value>
|
||||||
|
</app:item>
|
||||||
|
</ChoiceParameters>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<LinkByType/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<Use>ForItem</Use>
|
||||||
|
<Indexing>DontIndex</Indexing>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<DataHistory>Use</DataHistory>
|
||||||
|
</Properties>
|
||||||
|
</Attribute>
|
||||||
|
<Attribute uuid="UUID-014">
|
||||||
|
<Properties>
|
||||||
|
<Name>ТипТТН</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Тип ттн</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.ВидыТранспорта</v8:Type>
|
||||||
|
</Type>
|
||||||
|
<PasswordMode>false</PasswordMode>
|
||||||
|
<Format/>
|
||||||
|
<EditFormat/>
|
||||||
|
<ToolTip/>
|
||||||
|
<MarkNegatives>false</MarkNegatives>
|
||||||
|
<Mask/>
|
||||||
|
<MultiLine>false</MultiLine>
|
||||||
|
<ExtendedEdit>false</ExtendedEdit>
|
||||||
|
<MinValue xsi:nil="true"/>
|
||||||
|
<MaxValue xsi:nil="true"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:nil="true"/>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters>
|
||||||
|
<app:item name="Отбор.Тип">
|
||||||
|
<app:value xsi:type="v8:FixedArray">
|
||||||
|
<v8:Value xsi:type="xr:DesignTimeRef">Enum.ТипыВЕТИС.EmptyRef</v8:Value>
|
||||||
|
<v8:Value xsi:type="xr:DesignTimeRef">Enum.ТипыВЕТИС.EnumValue.ТТН</v8:Value>
|
||||||
|
</app:value>
|
||||||
|
</app:item>
|
||||||
|
</ChoiceParameters>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<LinkByType/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<Use>ForItem</Use>
|
||||||
|
<Indexing>DontIndex</Indexing>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<DataHistory>Use</DataHistory>
|
||||||
|
</Properties>
|
||||||
|
</Attribute>
|
||||||
|
<Attribute uuid="UUID-015">
|
||||||
|
<Properties>
|
||||||
|
<Name>Валюта</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Валюта</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.Валюты</v8:Type>
|
||||||
|
</Type>
|
||||||
|
<PasswordMode>false</PasswordMode>
|
||||||
|
<Format/>
|
||||||
|
<EditFormat/>
|
||||||
|
<ToolTip/>
|
||||||
|
<MarkNegatives>false</MarkNegatives>
|
||||||
|
<Mask/>
|
||||||
|
<MultiLine>false</MultiLine>
|
||||||
|
<ExtendedEdit>false</ExtendedEdit>
|
||||||
|
<MinValue xsi:nil="true"/>
|
||||||
|
<MaxValue xsi:nil="true"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:nil="true"/>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||||
|
<ChoiceParameterLinks>
|
||||||
|
<xr:Link>
|
||||||
|
<xr:Name>Отбор.Владелец</xr:Name>
|
||||||
|
<xr:DataPath xsi:type="xs:string">Catalog.ТестВыбора.StandardAttribute.Ref</xr:DataPath>
|
||||||
|
<xr:ValueChange>Clear</xr:ValueChange>
|
||||||
|
</xr:Link>
|
||||||
|
</ChoiceParameterLinks>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<LinkByType/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<Use>ForItem</Use>
|
||||||
|
<Indexing>DontIndex</Indexing>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<DataHistory>Use</DataHistory>
|
||||||
|
</Properties>
|
||||||
|
</Attribute>
|
||||||
|
</ChildObjects>
|
||||||
|
</Catalog>
|
||||||
|
</MetaDataObject>
|
||||||
+252
@@ -0,0 +1,252 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||||
|
<Configuration uuid="UUID-001">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-002</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-003</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-004</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-005</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-006</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-007</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-008</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-009</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-010</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-011</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-012</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-013</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-014</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-015</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>TestConfig</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>TestConfig</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment />
|
||||||
|
<NamePrefix />
|
||||||
|
<ConfigurationExtensionCompatibilityMode>Version8_3_24</ConfigurationExtensionCompatibilityMode>
|
||||||
|
<DefaultRunMode>ManagedApplication</DefaultRunMode>
|
||||||
|
<UsePurposes>
|
||||||
|
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
|
||||||
|
</UsePurposes>
|
||||||
|
<ScriptVariant>Russian</ScriptVariant>
|
||||||
|
<DefaultRoles />
|
||||||
|
<Vendor></Vendor>
|
||||||
|
<Version></Version>
|
||||||
|
<UpdateCatalogAddress />
|
||||||
|
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||||
|
<UseManagedFormInOrdinaryApplication>false</UseManagedFormInOrdinaryApplication>
|
||||||
|
<UseOrdinaryFormInManagedApplication>false</UseOrdinaryFormInManagedApplication>
|
||||||
|
<AdditionalFullTextSearchDictionaries />
|
||||||
|
<CommonSettingsStorage />
|
||||||
|
<ReportsUserSettingsStorage />
|
||||||
|
<ReportsVariantsStorage />
|
||||||
|
<FormDataSettingsStorage />
|
||||||
|
<DynamicListsUserSettingsStorage />
|
||||||
|
<URLExternalDataStorage />
|
||||||
|
<Content />
|
||||||
|
<DefaultReportForm />
|
||||||
|
<DefaultReportVariantForm />
|
||||||
|
<DefaultReportSettingsForm />
|
||||||
|
<DefaultReportAppearanceTemplate />
|
||||||
|
<DefaultDynamicListSettingsForm />
|
||||||
|
<DefaultSearchForm />
|
||||||
|
<DefaultDataHistoryChangeHistoryForm />
|
||||||
|
<DefaultDataHistoryVersionDataForm />
|
||||||
|
<DefaultDataHistoryVersionDifferencesForm />
|
||||||
|
<DefaultCollaborationSystemUsersChoiceForm />
|
||||||
|
<RequiredMobileApplicationPermissions />
|
||||||
|
<UsedMobileApplicationFunctionalities>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Biometrics</app:functionality>
|
||||||
|
<app:use>true</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Location</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BackgroundLocation</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BluetoothPrinters</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>WiFiPrinters</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Contacts</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Calendars</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>PushNotifications</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>LocalNotifications</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>InAppPurchases</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>PersonalComputerFileExchange</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Ads</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>NumberDialing</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>CallProcessing</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>CallLog</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AutoSendSMS</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>ReceiveSMS</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>SMSLog</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Camera</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Microphone</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>MusicLibrary</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>PictureAndVideoLibraries</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AudioPlaybackAndVibration</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BackgroundAudioPlaybackAndVibration</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>InstallPackages</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>OSBackup</app:functionality>
|
||||||
|
<app:use>true</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>ApplicationUsageStatistics</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BarcodeScanning</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BackgroundAudioRecording</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AllFilesAccess</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Videoconferences</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>NFC</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>DocumentScanning</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>SpeechToText</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Geofences</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>IncomingShareRequests</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AllIncomingShareRequestsTypesProcessing</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
</UsedMobileApplicationFunctionalities>
|
||||||
|
<StandaloneConfigurationRestrictionRoles />
|
||||||
|
<MobileApplicationURLs />
|
||||||
|
<AllowedIncomingShareRequestTypes />
|
||||||
|
<MainClientApplicationWindowMode>Normal</MainClientApplicationWindowMode>
|
||||||
|
<DefaultInterface />
|
||||||
|
<DefaultStyle />
|
||||||
|
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||||
|
<BriefInformation />
|
||||||
|
<DetailedInformation />
|
||||||
|
<Copyright />
|
||||||
|
<VendorInformationAddress />
|
||||||
|
<ConfigurationInformationAddress />
|
||||||
|
<DataLockControlMode>Managed</DataLockControlMode>
|
||||||
|
<ObjectAutonumerationMode>NotAutoFree</ObjectAutonumerationMode>
|
||||||
|
<ModalityUseMode>DontUse</ModalityUseMode>
|
||||||
|
<SynchronousPlatformExtensionAndAddInCallUseMode>DontUse</SynchronousPlatformExtensionAndAddInCallUseMode>
|
||||||
|
<InterfaceCompatibilityMode>TaxiEnableVersion8_2</InterfaceCompatibilityMode>
|
||||||
|
<DatabaseTablespacesUseMode>DontUse</DatabaseTablespacesUseMode>
|
||||||
|
<CompatibilityMode>Version8_3_24</CompatibilityMode>
|
||||||
|
<DefaultConstantsForm />
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<Language>Русский</Language>
|
||||||
|
<Catalog>ТестВыбора</Catalog>
|
||||||
|
</ChildObjects>
|
||||||
|
</Configuration>
|
||||||
|
</MetaDataObject>
|
||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ClientApplicationInterface xmlns="http://v8.1c.ru/8.2/managed-application/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="InterfaceLayouter">
|
||||||
|
<top>
|
||||||
|
<panel id="UUID-001">
|
||||||
|
<uuid>UUID-002</uuid>
|
||||||
|
</panel>
|
||||||
|
</top>
|
||||||
|
<left>
|
||||||
|
<panel id="UUID-003">
|
||||||
|
<uuid>UUID-004</uuid>
|
||||||
|
</panel>
|
||||||
|
</left>
|
||||||
|
<panelDef id="UUID-004"/>
|
||||||
|
<panelDef id="UUID-005"/>
|
||||||
|
<panelDef id="UUID-006"/>
|
||||||
|
<panelDef id="UUID-002"/>
|
||||||
|
<panelDef id="UUID-007"/>
|
||||||
|
</ClientApplicationInterface>
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||||
|
<Language uuid="UUID-001">
|
||||||
|
<Properties>
|
||||||
|
<Name>Русский</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Русский</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<LanguageCode>ru</LanguageCode>
|
||||||
|
</Properties>
|
||||||
|
</Language>
|
||||||
|
</MetaDataObject>
|
||||||
Reference in New Issue
Block a user