diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1
index 021bfa9d..9be0259c 100644
--- a/.claude/skills/meta-compile/scripts/meta-compile.ps1
+++ b/.claude/skills/meta-compile/scripts/meta-compile.ps1
@@ -1,4 +1,4 @@
-# meta-compile v1.26 — Compile 1C metadata object from JSON
+# meta-compile v1.27 — Compile 1C metadata object from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory)]
@@ -1045,6 +1045,9 @@ function Emit-StandardAttribute {
$fts = OvOr 'FullTextSearch' 'Use'
$syn = OvOr 'Synonym' ''
$tt = OvOr 'ToolTip' ''
+ $cf = OvOr 'ChoiceForm' ''
+ $cmt = OvOr 'Comment' ''
+ $msk = OvOr 'Mask' ''
X "$indent"
X "$indent`t"
X "$indent`t$fc"
@@ -1055,7 +1058,7 @@ function Emit-StandardAttribute {
Emit-MLText "$indent`t" "xr:ToolTip" $tt
X "$indent`tfalse"
X "$indent`t"
- X "$indent`t"
+ if ($cf) { X "$indent`t$(Esc-Xml "$cf")" } else { X "$indent`t" }
X "$indent`tAuto"
X "$indent`tAuto"
X "$indent`t"
@@ -1064,12 +1067,19 @@ function Emit-StandardAttribute {
X "$indent`tfalse"
X "$indent`t"
Emit-MLText "$indent`t" "xr:Synonym" $syn
- X "$indent`t"
+ if ($cmt) { X "$indent`t$(Esc-XmlText "$cmt")" } else { X "$indent`t" }
X "$indent`t$fts"
- X "$indent`t"
- X "$indent`t"
- X "$indent`t"
- X "$indent`t"
+ Emit-ChoiceParameterLinks "$indent`t" (OvOr 'ChoiceParameterLinks' $null) 'xr:ChoiceParameterLinks'
+ # FillValue: дефолт nil; override-значение → типизированное (Normalize-ChoiceValue: DTR-путь/строка/bool).
+ $fvRaw = OvOr 'FillValue' $null
+ if ($null -eq $fvRaw) { X "$indent`t" }
+ else {
+ $fvN = Normalize-ChoiceValue $fvRaw
+ if ([string]::IsNullOrEmpty($fvN.Text)) { X "$indent`t" }
+ else { X "$indent`t$(Esc-Xml $fvN.Text)" }
+ }
+ if ($msk) { X "$indent`t$(Esc-XmlText "$msk")" } else { X "$indent`t" }
+ Emit-ChoiceParameters "$indent`t" (OvOr 'ChoiceParameters' $null) 'xr:ChoiceParameters'
X "$indent"
}
@@ -1101,6 +1111,12 @@ function Emit-StandardAttributes {
if ($null -ne $d.fillFromFillingValue) { $ov['FillFromFillingValue'] = if ($d.fillFromFillingValue) { 'true' } else { 'false' } }
if ($d.fullTextSearch) { $ov['FullTextSearch'] = "$($d.fullTextSearch)" }
if ($d.dataHistory) { $ov['DataHistory'] = "$($d.dataHistory)" }
+ if ($null -ne $d.fillValue) { $ov['FillValue'] = $d.fillValue } # DTR-путь/строка/bool
+ if ($null -ne $d.choiceParameterLinks) { $ov['ChoiceParameterLinks'] = $d.choiceParameterLinks }
+ if ($null -ne $d.choiceParameters) { $ov['ChoiceParameters'] = $d.choiceParameters }
+ if ($d.comment) { $ov['Comment'] = "$($d.comment)" }
+ if ($d.mask) { $ov['Mask'] = "$($d.mask)" }
+ if ($d.choiceForm) { $ov['ChoiceForm'] = "$($d.choiceForm)" }
}
}
Emit-StandardAttribute "$indent`t" $a $ov
@@ -1274,9 +1290,9 @@ function ConvertFrom-ChLinkShorthand {
# — [{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"; return }
- X "$indent"
+ param([string]$indent, $cp, [string]$tag = 'ChoiceParameters')
+ if (-not $cp -or @($cp).Count -eq 0) { X "$indent<$tag/>"; return }
+ X "$indent<$tag>"
foreach ($item in @($cp)) {
if ($item -is [string]) { $item = ConvertFrom-ChParamShorthand $item }
$name = Get-ChElProp $item @('name','имя')
@@ -1308,14 +1324,14 @@ function Emit-ChoiceParameters {
}
X "$indent`t"
}
- X "$indent"
+ X "$indent$tag>"
}
# — [{name, dataPath, valueChange?}]. valueChange дефолт Clear.
function Emit-ChoiceParameterLinks {
- param([string]$indent, $cpl)
- if (-not $cpl -or @($cpl).Count -eq 0) { X "$indent"; return }
- X "$indent"
+ param([string]$indent, $cpl, [string]$tag = 'ChoiceParameterLinks')
+ if (-not $cpl -or @($cpl).Count -eq 0) { X "$indent<$tag/>"; return }
+ X "$indent<$tag>"
foreach ($lk in @($cpl)) {
if ($lk -is [string]) { $lk = ConvertFrom-ChLinkShorthand $lk }
$name = Get-ChElProp $lk @('name','имя')
@@ -1335,7 +1351,7 @@ function Emit-ChoiceParameterLinks {
X "$indent`t`t$vc"
X "$indent`t"
}
- X "$indent"
+ X "$indent$tag>"
}
# --- Characteristics (привязка ПВХ «Дополнительные реквизиты и сведения») ---
diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py
index 2dd773ef..5d34320a 100644
--- a/.claude/skills/meta-compile/scripts/meta-compile.py
+++ b/.claude/skills/meta-compile/scripts/meta-compile.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# meta-compile v1.26 — Compile 1C metadata object from JSON
+# meta-compile v1.27 — Compile 1C metadata object from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
@@ -1057,6 +1057,9 @@ def emit_standard_attribute(indent, attr_name, ov=None):
fts = ov.get('FullTextSearch', 'Use')
syn = ov.get('Synonym', '')
tt = ov.get('ToolTip', '')
+ cf = ov.get('ChoiceForm', '')
+ cmt = ov.get('Comment', '')
+ msk = ov.get('Mask', '')
X(f'{indent}')
X(f'{indent}\t')
X(f'{indent}\t{fc}')
@@ -1067,7 +1070,10 @@ def emit_standard_attribute(indent, attr_name, ov=None):
emit_mltext(f'{indent}\t', 'xr:ToolTip', tt)
X(f'{indent}\tfalse')
X(f'{indent}\t')
- X(f'{indent}\t')
+ if cf:
+ X(f'{indent}\t{esc_xml(str(cf))}')
+ else:
+ X(f'{indent}\t')
X(f'{indent}\tAuto')
X(f'{indent}\tAuto')
X(f'{indent}\t')
@@ -1076,12 +1082,26 @@ def emit_standard_attribute(indent, attr_name, ov=None):
X(f'{indent}\tfalse')
X(f'{indent}\t')
emit_mltext(f'{indent}\t', 'xr:Synonym', syn)
- X(f'{indent}\t')
+ if cmt:
+ X(f'{indent}\t{esc_xml_text(str(cmt))}')
+ else:
+ X(f'{indent}\t')
X(f'{indent}\t{fts}')
- X(f'{indent}\t')
- X(f'{indent}\t')
- X(f'{indent}\t')
- X(f'{indent}\t')
+ emit_choice_parameter_links(f'{indent}\t', ov.get('ChoiceParameterLinks'), 'xr:ChoiceParameterLinks')
+ fv_raw = ov.get('FillValue', None)
+ if fv_raw is None:
+ X(f'{indent}\t')
+ else:
+ fv_xt, fv_tx = normalize_choice_value(fv_raw)
+ if fv_tx == '' or fv_tx is None:
+ X(f'{indent}\t')
+ else:
+ X(f'{indent}\t{esc_xml(fv_tx)}')
+ if msk:
+ X(f'{indent}\t{esc_xml_text(str(msk))}')
+ else:
+ X(f'{indent}\t')
+ emit_choice_parameters(f'{indent}\t', ov.get('ChoiceParameters'), 'xr:ChoiceParameters')
X(f'{indent}')
# Единый эмиттер блока StandardAttributes — поведение правят ДАННЫЕ, не форк кода (см. коммент в .ps1).
@@ -1115,6 +1135,18 @@ def emit_standard_attributes(indent, object_type):
ov['FullTextSearch'] = str(d['fullTextSearch'])
if d.get('dataHistory'):
ov['DataHistory'] = str(d['dataHistory'])
+ if d.get('fillValue') is not None:
+ ov['FillValue'] = d['fillValue']
+ if d.get('choiceParameterLinks') is not None:
+ ov['ChoiceParameterLinks'] = d['choiceParameterLinks']
+ if d.get('choiceParameters') is not None:
+ ov['ChoiceParameters'] = d['choiceParameters']
+ if d.get('comment'):
+ ov['Comment'] = str(d['comment'])
+ if d.get('mask'):
+ ov['Mask'] = str(d['mask'])
+ if d.get('choiceForm'):
+ ov['ChoiceForm'] = str(d['choiceForm'])
emit_standard_attribute(f'{indent}\t', a, ov)
X(f'{indent}')
@@ -1331,13 +1363,13 @@ def convert_from_ch_link_shorthand(s):
o['dataPath'] = rest
return o
-def emit_choice_parameters(indent, cp):
+def emit_choice_parameters(indent, cp, tag='ChoiceParameters'):
if not cp:
- X(f'{indent}')
+ X(f'{indent}<{tag}/>')
return
if isinstance(cp, (str, dict)):
cp = [cp]
- X(f'{indent}')
+ X(f'{indent}<{tag}>')
for item in cp:
if isinstance(item, str):
item = convert_from_ch_param_shorthand(item)
@@ -1365,15 +1397,15 @@ def emit_choice_parameters(indent, cp):
else:
X(f'{indent}\t\t{esc_xml(tx)}')
X(f'{indent}\t')
- X(f'{indent}')
+ X(f'{indent}{tag}>')
-def emit_choice_parameter_links(indent, cpl):
+def emit_choice_parameter_links(indent, cpl, tag='ChoiceParameterLinks'):
if not cpl:
- X(f'{indent}')
+ X(f'{indent}<{tag}/>')
return
if isinstance(cpl, (str, dict)):
cpl = [cpl]
- X(f'{indent}')
+ X(f'{indent}<{tag}>')
for lk in cpl:
if isinstance(lk, str):
lk = convert_from_ch_link_shorthand(lk)
@@ -1394,7 +1426,7 @@ def emit_choice_parameter_links(indent, cpl):
X(f'{indent}\t\t{esc_xml(str(dp))}')
X(f'{indent}\t\t{vc}')
X(f'{indent}\t')
- X(f'{indent}')
+ X(f'{indent}{tag}>')
# --- Characteristics (привязка ПВХ «Дополнительные реквизиты и сведения») ---
diff --git a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1 b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1
index dcfceaf7..92ae391a 100644
--- a/.claude/skills/meta-decompile/scripts/meta-decompile.ps1
+++ b/.claude/skills/meta-decompile/scripts/meta-decompile.ps1
@@ -1,4 +1,4 @@
-# meta-decompile v0.17 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
+# meta-decompile v0.18 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
#
# Пилот: только Catalog. Инверс meta-compile (omit-on-default: ключ эмитим только
@@ -209,6 +209,41 @@ function Get-ChoiceParamValue {
return Convert-ChScalarNode $valNode
}
+# → [{name,dataPath,valueChange?}] | строки "name=dataPath". $tag: 'md:...' (реквизит) | 'xr:...' (станд.).
+function Parse-ChoiceParameterLinks {
+ param($parent, [string]$tag)
+ $node = $parent.SelectSingleNode($tag, $nsm)
+ if (-not $node) { return $null }
+ $links = @($node.SelectNodes('xr:Link', $nsm))
+ if ($links.Count -eq 0) { return $null }
+ $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 }) }
+ }
+ return $arr
+}
+# → [{name,value?}]. $tag: 'md:...' | 'xr:...'.
+function Parse-ChoiceParameters {
+ param($parent, [string]$tag)
+ $node = $parent.SelectSingleNode($tag, $nsm)
+ if (-not $node) { return $null }
+ $items = @($node.SelectNodes('app:item', $nsm))
+ if ($items.Count -eq 0) { return $null }
+ $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) }
+ }
+ return $arr
+}
+
# --- Реквизит → DSL: shorthand-строка "Имя: Тип | флаги" ЛИБО object-форма при кастомном синониме.
# (Синоним ≠ авто → object {name, type, synonym, [flags]}; иначе компактный shorthand.) ---
function Attr-ToDsl {
@@ -289,45 +324,8 @@ 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
- }
- }
+ $cplArr = Parse-ChoiceParameterLinks $ap 'md:ChoiceParameterLinks'; if ($null -ne $cplArr) { $extra['choiceParameterLinks'] = $cplArr }
+ $cpArr = Parse-ChoiceParameters $ap 'md:ChoiceParameters'; if ($null -ne $cpArr) { $extra['choiceParameters'] = $cpArr }
if ($synCustom -or ($null -ne $ttVal) -or $extra.Count -gt 0) {
$o = [ordered]@{ name = $nm }
@@ -487,6 +485,14 @@ if ($saNode) {
# FullTextSearch / DataHistory (профиль = Use)
$ftsN = $sa.SelectSingleNode('xr:FullTextSearch', $nsm); if ($ftsN -and $ftsN.InnerText -ne 'Use') { $ov['fullTextSearch'] = $ftsN.InnerText }
$dhN = $sa.SelectSingleNode('xr:DataHistory', $nsm); if ($dhN -and $dhN.InnerText -ne 'Use') { $ov['dataHistory'] = $dhN.InnerText }
+ # FillValue (дефолт nil) — DTR-путь/строка/bool. Comment/Mask/ChoiceForm (дефолт пусто).
+ $fvN = $sa.SelectSingleNode('xr:FillValue', $nsm)
+ if ($fvN -and $fvN.GetAttribute('nil', 'http://www.w3.org/2001/XMLSchema-instance') -ne 'true') { $ov['fillValue'] = Convert-ChScalarNode $fvN }
+ $saCmt = $sa.SelectSingleNode('xr:Comment', $nsm); if ($saCmt -and $saCmt.InnerText) { $ov['comment'] = $saCmt.InnerText }
+ $saMsk = $sa.SelectSingleNode('xr:Mask', $nsm); if ($saMsk -and $saMsk.InnerText) { $ov['mask'] = $saMsk.InnerText }
+ $saCf = $sa.SelectSingleNode('xr:ChoiceForm', $nsm); if ($saCf -and $saCf.InnerText) { $ov['choiceForm'] = $saCf.InnerText }
+ $saCpl = Parse-ChoiceParameterLinks $sa 'xr:ChoiceParameterLinks'; if ($null -ne $saCpl) { $ov['choiceParameterLinks'] = $saCpl }
+ $saCp = Parse-ChoiceParameters $sa 'xr:ChoiceParameters'; if ($null -ne $saCp) { $ov['choiceParameters'] = $saCp }
if ($ov.Count -gt 0) { $saMap[$an] = $ov }
}
$dsl['standardAttributes'] = $saMap # даже пустой = блок есть (чистый профиль)
diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md
index df65e940..2721d896 100644
--- a/docs/meta-dsl-spec.md
+++ b/docs/meta-dsl-spec.md
@@ -360,7 +360,9 @@ JSON DSL для описания объектов метаданных конф
Формат: `standardAttributes` — объект `{ ИмяРеквизита: { переопределения } }`. Имена реквизитов — как в XML: `PredefinedDataName`, `Predefined`, `Ref`, `DeletionMark`, `IsFolder`, `Owner`, `Parent`, `Description`, `Code`.
-Переопределяемые поля реквизита: `synonym` (ML — строка/`{ru,en}`), `tooltip` (ML), `fillChecking` (`DontCheck`|`ShowError`|`ShowWarning`), `fillFromFillingValue` (bool), `fullTextSearch` (`Use`|`DontUse`), `dataHistory` (`Use`|`DontUse`).
+Переопределяемые поля реквизита: `synonym` (ML — строка/`{ru,en}`), `tooltip` (ML), `fillChecking` (`DontCheck`|`ShowError`|`ShowWarning`), `fillFromFillingValue` (bool), `fullTextSearch` (`Use`|`DontUse`), `dataHistory` (`Use`|`DontUse`), `fillValue` (значение — DTR-путь/строка/bool; см. §4.2), `choiceParameterLinks` / `choiceParameters` (как у реквизита, §4.2), `comment`, `mask`, `choiceForm`.
+
+> Не покрыты (редкие вырожденные формы `fillValue` стандартного реквизита): «пустое» значение с не-nil типом — `xs:string` из одних пробелов и пустой `xr:DesignTimeRef`.
**Профиль материализованного блока** (значения, которые платформа заполняет автоматически — задавать их в DSL не нужно):
diff --git a/tests/skills/cases/meta-compile/catalog-stdattr-custom.json b/tests/skills/cases/meta-compile/catalog-stdattr-custom.json
new file mode 100644
index 00000000..ae33f0cc
--- /dev/null
+++ b/tests/skills/cases/meta-compile/catalog-stdattr-custom.json
@@ -0,0 +1,20 @@
+{
+ "name": "Кастомизация стандартных реквизитов (FillValue/ChoiceParameterLinks/Comment/Mask)",
+ "input": {
+ "type": "Catalog",
+ "name": "Договоры",
+ "owners": ["Catalog.Контрагенты"],
+ "standardAttributes": {
+ "Owner": {
+ "choiceParameterLinks": [ { "name": "Отбор.Владелец", "dataPath": "Ссылка", "valueChange": "Clear" } ],
+ "choiceParameters": [ { "name": "Отбор.ЭтоГруппа", "value": false } ]
+ },
+ "Code": { "fillValue": "0000000000", "comment": "префикс кода", "mask": "!9999999999" },
+ "Description": { "fillValue": "Catalog.Контрагенты.EmptyRef" }
+ }
+ },
+ "validatePath": "Catalogs/Договоры",
+ "expect": {
+ "files": ["Catalogs/Договоры.xml"]
+ }
+}
diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Catalogs/Договоры.xml b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Catalogs/Договоры.xml
new file mode 100644
index 00000000..10c1728e
--- /dev/null
+++ b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Catalogs/Договоры.xml
@@ -0,0 +1,339 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+
+ Договоры
+
+
+ ru
+ Договоры
+
+
+
+ false
+ HierarchyFoldersAndItems
+ false
+ 2
+ true
+ true
+
+ Catalog.Контрагенты
+
+ ToItems
+ 9
+ 25
+ String
+ Variable
+ WholeCatalog
+ false
+ true
+ AsDescription
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ ShowError
+ false
+ true
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+ Отбор.Владелец
+ Catalog.Договоры.StandardAttribute.Ref
+ Clear
+
+
+
+
+
+
+ false
+
+
+
+
+
+ DontCheck
+ false
+ true
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+
+
+
+
+
+
+ ShowError
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+
+ Use
+
+ Catalog.Контрагенты.EmptyRef
+
+
+
+
+
+ DontCheck
+ false
+ false
+ Auto
+
+
+ false
+
+
+ Auto
+ Auto
+
+ false
+ Use
+ false
+
+
+ префикс кода
+ Use
+
+ 0000000000
+ !9999999999
+
+
+
+
+ Auto
+ InDialog
+ false
+ BothWays
+
+ Catalog.Договоры.StandardAttribute.Description
+ Catalog.Договоры.StandardAttribute.Code
+
+ Begin
+ DontUse
+ Directly
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+ Automatic
+ Use
+
+
+
+
+
+ Use
+ Auto
+ DontUse
+ false
+ false
+
+
+
+
diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Catalogs/Договоры/Ext/ObjectModule.bsl b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Catalogs/Договоры/Ext/ObjectModule.bsl
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Configuration.xml b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Configuration.xml
new file mode 100644
index 00000000..b3258ed1
--- /dev/null
+++ b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Configuration.xml
@@ -0,0 +1,252 @@
+
+
+
+
+
+ UUID-002
+ UUID-003
+
+
+ UUID-004
+ UUID-005
+
+
+ UUID-006
+ UUID-007
+
+
+ UUID-008
+ UUID-009
+
+
+ UUID-010
+ UUID-011
+
+
+ UUID-012
+ UUID-013
+
+
+ UUID-014
+ UUID-015
+
+
+
+ TestConfig
+
+
+ ru
+ TestConfig
+
+
+
+
+ Version8_3_24
+ ManagedApplication
+
+ PlatformApplication
+
+ Russian
+
+
+
+
+ false
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Biometrics
+ true
+
+
+ Location
+ false
+
+
+ BackgroundLocation
+ false
+
+
+ BluetoothPrinters
+ false
+
+
+ WiFiPrinters
+ false
+
+
+ Contacts
+ false
+
+
+ Calendars
+ false
+
+
+ PushNotifications
+ false
+
+
+ LocalNotifications
+ false
+
+
+ InAppPurchases
+ false
+
+
+ PersonalComputerFileExchange
+ false
+
+
+ Ads
+ false
+
+
+ NumberDialing
+ false
+
+
+ CallProcessing
+ false
+
+
+ CallLog
+ false
+
+
+ AutoSendSMS
+ false
+
+
+ ReceiveSMS
+ false
+
+
+ SMSLog
+ false
+
+
+ Camera
+ false
+
+
+ Microphone
+ false
+
+
+ MusicLibrary
+ false
+
+
+ PictureAndVideoLibraries
+ false
+
+
+ AudioPlaybackAndVibration
+ false
+
+
+ BackgroundAudioPlaybackAndVibration
+ false
+
+
+ InstallPackages
+ false
+
+
+ OSBackup
+ true
+
+
+ ApplicationUsageStatistics
+ false
+
+
+ BarcodeScanning
+ false
+
+
+ BackgroundAudioRecording
+ false
+
+
+ AllFilesAccess
+ false
+
+
+ Videoconferences
+ false
+
+
+ NFC
+ false
+
+
+ DocumentScanning
+ false
+
+
+ SpeechToText
+ false
+
+
+ Geofences
+ false
+
+
+ IncomingShareRequests
+ false
+
+
+ AllIncomingShareRequestsTypesProcessing
+ false
+
+
+
+
+
+ Normal
+
+
+ Language.Русский
+
+
+
+
+
+ Managed
+ NotAutoFree
+ DontUse
+ DontUse
+ TaxiEnableVersion8_2
+ DontUse
+ Version8_3_24
+
+
+
+ Русский
+ Договоры
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Ext/ClientApplicationInterface.xml b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Ext/ClientApplicationInterface.xml
new file mode 100644
index 00000000..3c1161b2
--- /dev/null
+++ b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Ext/ClientApplicationInterface.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ UUID-002
+
+
+
+
+ UUID-004
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Languages/Русский.xml b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Languages/Русский.xml
new file mode 100644
index 00000000..37c60d78
--- /dev/null
+++ b/tests/skills/cases/meta-compile/snapshots/catalog-stdattr-custom/Languages/Русский.xml
@@ -0,0 +1,16 @@
+
+
+
+
+ Русский
+
+
+ ru
+ Русский
+
+
+
+ ru
+
+
+
\ No newline at end of file