mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-15 23:35:17 +03:00
feat(meta-compile,meta-decompile): кастомизация LineNumber табличной части (v1.32/v0.22)
У каждой ТЧ ровно один стандартный реквизит — НомерСтроки (LineNumber), и его свойства (синоним/подсказка/полнотекстовый поиск/…) тоже переопределяемы. Раньше компилятор эмитил only-default блок, декомпилятор кастомизацию не ловил. DSL `lineNumber` на объектной форме ТЧ (omit-on-default по каждому свойству): synonym/comment/fullTextSearch/tooltip/format/editFormat/choiceHistoryOnInput. Emit-StandardAttribute расширен (Format/EditFormat через Emit-MLText, ChoiceHistoryOnInput из ov — были захардкожены); Emit-TabularStandardAttributes принимает spec и строит ov. Декомпилятор захватывает из xr:StandardAttribute[@name='LineNumber'] → ключ lineNumber. Покрыта КАСТОМИЗАЦИЯ (в корпусе 2/1728, только synonym — но задокументирован полный набор из 7 свойств). 44/1728 ТЧ блок вовсе ОПУСКАЮТ — правило опущения не выводится (FillChecking/Use не различают опускающие/имеющие), компилятор эмитит блок всегда → not-covered хвост (решение совместное). Аддитивно: all-default блок (1684/1728) эмитится идентично, регрессий нет (TOTAL 78 без изменений). Регресс 47/47 ps1+py, ps1↔py identical. spec §5.1, кейс catalog-ts-linenumber. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
# meta-compile v1.31 — Compile 1C metadata object from JSON
|
# meta-compile v1.32 — 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)]
|
||||||
@@ -1058,6 +1058,9 @@ function Emit-StandardAttribute {
|
|||||||
$cf = OvOr 'ChoiceForm' ''
|
$cf = OvOr 'ChoiceForm' ''
|
||||||
$cmt = OvOr 'Comment' ''
|
$cmt = OvOr 'Comment' ''
|
||||||
$msk = OvOr 'Mask' ''
|
$msk = OvOr 'Mask' ''
|
||||||
|
$fmt = OvOr 'Format' $null
|
||||||
|
$efmt = OvOr 'EditFormat' $null
|
||||||
|
$chi = OvOr 'ChoiceHistoryOnInput' 'Auto'
|
||||||
X "$indent<xr:StandardAttribute name=`"$attrName`">"
|
X "$indent<xr:StandardAttribute name=`"$attrName`">"
|
||||||
X "$indent`t<xr:LinkByType/>"
|
X "$indent`t<xr:LinkByType/>"
|
||||||
X "$indent`t<xr:FillChecking>$fc</xr:FillChecking>"
|
X "$indent`t<xr:FillChecking>$fc</xr:FillChecking>"
|
||||||
@@ -1067,11 +1070,11 @@ function Emit-StandardAttribute {
|
|||||||
X "$indent`t<xr:MaxValue xsi:nil=`"true`"/>"
|
X "$indent`t<xr:MaxValue xsi:nil=`"true`"/>"
|
||||||
Emit-MLText "$indent`t" "xr:ToolTip" $tt
|
Emit-MLText "$indent`t" "xr:ToolTip" $tt
|
||||||
X "$indent`t<xr:ExtendedEdit>false</xr:ExtendedEdit>"
|
X "$indent`t<xr:ExtendedEdit>false</xr:ExtendedEdit>"
|
||||||
X "$indent`t<xr:Format/>"
|
Emit-MLText "$indent`t" "xr:Format" $fmt
|
||||||
if ($cf) { X "$indent`t<xr:ChoiceForm>$(Esc-Xml "$cf")</xr:ChoiceForm>" } else { X "$indent`t<xr:ChoiceForm/>" }
|
if ($cf) { X "$indent`t<xr:ChoiceForm>$(Esc-Xml "$cf")</xr:ChoiceForm>" } else { X "$indent`t<xr:ChoiceForm/>" }
|
||||||
X "$indent`t<xr:QuickChoice>Auto</xr:QuickChoice>"
|
X "$indent`t<xr:QuickChoice>Auto</xr:QuickChoice>"
|
||||||
X "$indent`t<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>"
|
X "$indent`t<xr:ChoiceHistoryOnInput>$chi</xr:ChoiceHistoryOnInput>"
|
||||||
X "$indent`t<xr:EditFormat/>"
|
Emit-MLText "$indent`t" "xr:EditFormat" $efmt
|
||||||
X "$indent`t<xr:PasswordMode>false</xr:PasswordMode>"
|
X "$indent`t<xr:PasswordMode>false</xr:PasswordMode>"
|
||||||
X "$indent`t<xr:DataHistory>$dh</xr:DataHistory>"
|
X "$indent`t<xr:DataHistory>$dh</xr:DataHistory>"
|
||||||
X "$indent`t<xr:MarkNegatives>false</xr:MarkNegatives>"
|
X "$indent`t<xr:MarkNegatives>false</xr:MarkNegatives>"
|
||||||
@@ -1134,11 +1137,24 @@ function Emit-StandardAttributes {
|
|||||||
X "$indent</StandardAttributes>"
|
X "$indent</StandardAttributes>"
|
||||||
}
|
}
|
||||||
|
|
||||||
# TabularSection standard attributes (just LineNumber)
|
# TabularSection standard attributes (единственный — LineNumber/НомерСтроки). Блок эмитится всегда (платформа
|
||||||
|
# опускает его лишь у редкого хвоста ТЧ — правило не выведено, см. WORKFLOW). DSL `lineNumber` на объектной форме ТЧ
|
||||||
|
# переопределяет свойства (synonym/comment/fullTextSearch/tooltip/format/editFormat/choiceHistoryOnInput).
|
||||||
function Emit-TabularStandardAttributes {
|
function Emit-TabularStandardAttributes {
|
||||||
param([string]$indent)
|
param([string]$indent, $lineNumber = $null)
|
||||||
|
$ov = $null
|
||||||
|
if ($lineNumber) {
|
||||||
|
$ov = @{}
|
||||||
|
if ($null -ne $lineNumber.synonym) { $ov['Synonym'] = $lineNumber.synonym }
|
||||||
|
if ($lineNumber.comment) { $ov['Comment'] = "$($lineNumber.comment)" }
|
||||||
|
if ($lineNumber.fullTextSearch) { $ov['FullTextSearch'] = "$($lineNumber.fullTextSearch)" }
|
||||||
|
if ($null -ne $lineNumber.tooltip) { $ov['ToolTip'] = $lineNumber.tooltip }
|
||||||
|
if ($null -ne $lineNumber.format) { $ov['Format'] = $lineNumber.format }
|
||||||
|
if ($null -ne $lineNumber.editFormat) { $ov['EditFormat'] = $lineNumber.editFormat }
|
||||||
|
if ($lineNumber.choiceHistoryOnInput) { $ov['ChoiceHistoryOnInput'] = "$($lineNumber.choiceHistoryOnInput)" }
|
||||||
|
}
|
||||||
X "$indent<StandardAttributes>"
|
X "$indent<StandardAttributes>"
|
||||||
Emit-StandardAttribute "$indent`t" "LineNumber"
|
Emit-StandardAttribute "$indent`t" "LineNumber" $ov
|
||||||
X "$indent</StandardAttributes>"
|
X "$indent</StandardAttributes>"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1662,7 +1678,7 @@ function Emit-Command {
|
|||||||
# --- 9. TabularSection emitter ---
|
# --- 9. TabularSection emitter ---
|
||||||
|
|
||||||
function Emit-TabularSection {
|
function Emit-TabularSection {
|
||||||
param([string]$indent, [string]$tsName, $columns, [string]$objectType, [string]$objectName, $tsSynonymArg = $null, $tsTooltip = $null, $tsComment = $null)
|
param([string]$indent, [string]$tsName, $columns, [string]$objectType, [string]$objectName, $tsSynonymArg = $null, $tsTooltip = $null, $tsComment = $null, $tsLineNumber = $null)
|
||||||
$uuid = New-Guid-String
|
$uuid = New-Guid-String
|
||||||
X "$indent<TabularSection uuid=`"$uuid`">"
|
X "$indent<TabularSection uuid=`"$uuid`">"
|
||||||
|
|
||||||
@@ -1689,7 +1705,7 @@ function Emit-TabularSection {
|
|||||||
if ($tsComment) { X "$indent`t`t<Comment>$(Esc-XmlText $tsComment)</Comment>" } else { X "$indent`t`t<Comment/>" }
|
if ($tsComment) { X "$indent`t`t<Comment>$(Esc-XmlText $tsComment)</Comment>" } else { X "$indent`t`t<Comment/>" }
|
||||||
Emit-MLText "$indent`t`t" "ToolTip" $tsTooltip
|
Emit-MLText "$indent`t`t" "ToolTip" $tsTooltip
|
||||||
X "$indent`t`t<FillChecking>DontCheck</FillChecking>"
|
X "$indent`t`t<FillChecking>DontCheck</FillChecking>"
|
||||||
Emit-TabularStandardAttributes "$indent`t`t"
|
Emit-TabularStandardAttributes "$indent`t`t" $tsLineNumber
|
||||||
# Use=ForItem only for Catalog tabular sections (Document does not have Use)
|
# Use=ForItem only for Catalog tabular sections (Document does not have Use)
|
||||||
if ($objectType -eq "Catalog") {
|
if ($objectType -eq "Catalog") {
|
||||||
X "$indent`t`t<Use>ForItem</Use>"
|
X "$indent`t`t<Use>ForItem</Use>"
|
||||||
@@ -3478,10 +3494,10 @@ if ($objType -in $typesWithAttrTS) {
|
|||||||
# Нормализуем в $tsSections[name] = @{ columns; synonym; tooltip; comment }.
|
# Нормализуем в $tsSections[name] = @{ columns; synonym; tooltip; comment }.
|
||||||
function New-TsEntry { param($val)
|
function New-TsEntry { param($val)
|
||||||
if ($val -is [array] -or $val.GetType().Name -eq 'Object[]') {
|
if ($val -is [array] -or $val.GetType().Name -eq 'Object[]') {
|
||||||
return @{ columns = @($val); synonym = $null; tooltip = $null; comment = $null }
|
return @{ columns = @($val); synonym = $null; tooltip = $null; comment = $null; lineNumber = $null }
|
||||||
}
|
}
|
||||||
$cols = if ($val.attributes) { @($val.attributes) } elseif ($val.columns) { @($val.columns) } else { @() }
|
$cols = if ($val.attributes) { @($val.attributes) } elseif ($val.columns) { @($val.columns) } else { @() }
|
||||||
return @{ columns = $cols; synonym = $val.synonym; tooltip = $val.tooltip; comment = if ($val.comment) { "$($val.comment)" } else { $null } }
|
return @{ columns = $cols; synonym = $val.synonym; tooltip = $val.tooltip; comment = if ($val.comment) { "$($val.comment)" } else { $null }; lineNumber = $val.lineNumber }
|
||||||
}
|
}
|
||||||
if ($def.tabularSections -is [array] -or $def.tabularSections.GetType().Name -eq "Object[]") {
|
if ($def.tabularSections -is [array] -or $def.tabularSections.GetType().Name -eq "Object[]") {
|
||||||
foreach ($ts in $def.tabularSections) { $tsSections[$ts.name] = New-TsEntry $ts }
|
foreach ($ts in $def.tabularSections) { $tsSections[$ts.name] = New-TsEntry $ts }
|
||||||
@@ -3529,7 +3545,7 @@ if ($objType -in $typesWithAttrTS) {
|
|||||||
}
|
}
|
||||||
foreach ($tsName in $tsSections.Keys) {
|
foreach ($tsName in $tsSections.Keys) {
|
||||||
$tsE = $tsSections[$tsName]
|
$tsE = $tsSections[$tsName]
|
||||||
Emit-TabularSection "`t`t`t" $tsName $tsE.columns $objType $objName $tsE.synonym $tsE.tooltip $tsE.comment
|
Emit-TabularSection "`t`t`t" $tsName $tsE.columns $objType $objName $tsE.synonym $tsE.tooltip $tsE.comment $tsE.lineNumber
|
||||||
}
|
}
|
||||||
foreach ($af in $acctFlags) {
|
foreach ($af in $acctFlags) {
|
||||||
$afName = if ($af.name) { $af.name } else { "$af" }
|
$afName = if ($af.name) { $af.name } else { "$af" }
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# meta-compile v1.31 — Compile 1C metadata object from JSON
|
# meta-compile v1.32 — 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
|
||||||
@@ -1070,6 +1070,9 @@ def emit_standard_attribute(indent, attr_name, ov=None):
|
|||||||
cf = ov.get('ChoiceForm', '')
|
cf = ov.get('ChoiceForm', '')
|
||||||
cmt = ov.get('Comment', '')
|
cmt = ov.get('Comment', '')
|
||||||
msk = ov.get('Mask', '')
|
msk = ov.get('Mask', '')
|
||||||
|
fmt = ov.get('Format')
|
||||||
|
efmt = ov.get('EditFormat')
|
||||||
|
chi = ov.get('ChoiceHistoryOnInput', 'Auto')
|
||||||
X(f'{indent}<xr:StandardAttribute name="{attr_name}">')
|
X(f'{indent}<xr:StandardAttribute name="{attr_name}">')
|
||||||
X(f'{indent}\t<xr:LinkByType/>')
|
X(f'{indent}\t<xr:LinkByType/>')
|
||||||
X(f'{indent}\t<xr:FillChecking>{fc}</xr:FillChecking>')
|
X(f'{indent}\t<xr:FillChecking>{fc}</xr:FillChecking>')
|
||||||
@@ -1079,14 +1082,14 @@ def emit_standard_attribute(indent, attr_name, ov=None):
|
|||||||
X(f'{indent}\t<xr:MaxValue xsi:nil="true"/>')
|
X(f'{indent}\t<xr:MaxValue xsi:nil="true"/>')
|
||||||
emit_mltext(f'{indent}\t', 'xr:ToolTip', tt)
|
emit_mltext(f'{indent}\t', 'xr:ToolTip', tt)
|
||||||
X(f'{indent}\t<xr:ExtendedEdit>false</xr:ExtendedEdit>')
|
X(f'{indent}\t<xr:ExtendedEdit>false</xr:ExtendedEdit>')
|
||||||
X(f'{indent}\t<xr:Format/>')
|
emit_mltext(f'{indent}\t', 'xr:Format', fmt)
|
||||||
if cf:
|
if cf:
|
||||||
X(f'{indent}\t<xr:ChoiceForm>{esc_xml(str(cf))}</xr:ChoiceForm>')
|
X(f'{indent}\t<xr:ChoiceForm>{esc_xml(str(cf))}</xr:ChoiceForm>')
|
||||||
else:
|
else:
|
||||||
X(f'{indent}\t<xr:ChoiceForm/>')
|
X(f'{indent}\t<xr:ChoiceForm/>')
|
||||||
X(f'{indent}\t<xr:QuickChoice>Auto</xr:QuickChoice>')
|
X(f'{indent}\t<xr:QuickChoice>Auto</xr:QuickChoice>')
|
||||||
X(f'{indent}\t<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>')
|
X(f'{indent}\t<xr:ChoiceHistoryOnInput>{chi}</xr:ChoiceHistoryOnInput>')
|
||||||
X(f'{indent}\t<xr:EditFormat/>')
|
emit_mltext(f'{indent}\t', 'xr:EditFormat', efmt)
|
||||||
X(f'{indent}\t<xr:PasswordMode>false</xr:PasswordMode>')
|
X(f'{indent}\t<xr:PasswordMode>false</xr:PasswordMode>')
|
||||||
X(f'{indent}\t<xr:DataHistory>{dh}</xr:DataHistory>')
|
X(f'{indent}\t<xr:DataHistory>{dh}</xr:DataHistory>')
|
||||||
X(f'{indent}\t<xr:MarkNegatives>false</xr:MarkNegatives>')
|
X(f'{indent}\t<xr:MarkNegatives>false</xr:MarkNegatives>')
|
||||||
@@ -1160,9 +1163,28 @@ def emit_standard_attributes(indent, object_type):
|
|||||||
emit_standard_attribute(f'{indent}\t', a, ov)
|
emit_standard_attribute(f'{indent}\t', a, ov)
|
||||||
X(f'{indent}</StandardAttributes>')
|
X(f'{indent}</StandardAttributes>')
|
||||||
|
|
||||||
def emit_tabular_standard_attributes(indent):
|
def emit_tabular_standard_attributes(indent, line_number=None):
|
||||||
|
"""LineNumber/НомерСтроки ТЧ. Блок эмитится всегда. DSL `lineNumber` переопределяет
|
||||||
|
synonym/comment/fullTextSearch/tooltip/format/editFormat/choiceHistoryOnInput."""
|
||||||
|
ov = None
|
||||||
|
if line_number:
|
||||||
|
ov = {}
|
||||||
|
if line_number.get('synonym') is not None:
|
||||||
|
ov['Synonym'] = line_number['synonym']
|
||||||
|
if line_number.get('comment'):
|
||||||
|
ov['Comment'] = str(line_number['comment'])
|
||||||
|
if line_number.get('fullTextSearch'):
|
||||||
|
ov['FullTextSearch'] = str(line_number['fullTextSearch'])
|
||||||
|
if line_number.get('tooltip') is not None:
|
||||||
|
ov['ToolTip'] = line_number['tooltip']
|
||||||
|
if line_number.get('format') is not None:
|
||||||
|
ov['Format'] = line_number['format']
|
||||||
|
if line_number.get('editFormat') is not None:
|
||||||
|
ov['EditFormat'] = line_number['editFormat']
|
||||||
|
if line_number.get('choiceHistoryOnInput'):
|
||||||
|
ov['ChoiceHistoryOnInput'] = str(line_number['choiceHistoryOnInput'])
|
||||||
X(f'{indent}<StandardAttributes>')
|
X(f'{indent}<StandardAttributes>')
|
||||||
emit_standard_attribute(f'{indent}\t', 'LineNumber')
|
emit_standard_attribute(f'{indent}\t', 'LineNumber', ov)
|
||||||
X(f'{indent}</StandardAttributes>')
|
X(f'{indent}</StandardAttributes>')
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
@@ -1712,7 +1734,7 @@ def emit_command(indent, cmd_name, cmd):
|
|||||||
X(f'{indent}\t</Properties>')
|
X(f'{indent}\t</Properties>')
|
||||||
X(f'{indent}</Command>')
|
X(f'{indent}</Command>')
|
||||||
|
|
||||||
def emit_tabular_section(indent, ts_name, columns, object_type, object_name, ts_synonym_arg=None, ts_tooltip=None, ts_comment=None):
|
def emit_tabular_section(indent, ts_name, columns, object_type, object_name, ts_synonym_arg=None, ts_tooltip=None, ts_comment=None, ts_line_number=None):
|
||||||
uid = new_uuid()
|
uid = new_uuid()
|
||||||
X(f'{indent}<TabularSection uuid="{uid}">')
|
X(f'{indent}<TabularSection uuid="{uid}">')
|
||||||
type_prefix = f'{object_type}TabularSection'
|
type_prefix = f'{object_type}TabularSection'
|
||||||
@@ -1737,7 +1759,7 @@ def emit_tabular_section(indent, ts_name, columns, object_type, object_name, ts_
|
|||||||
X(f'{indent}\t\t<Comment/>')
|
X(f'{indent}\t\t<Comment/>')
|
||||||
emit_mltext(f'{indent}\t\t', 'ToolTip', ts_tooltip)
|
emit_mltext(f'{indent}\t\t', 'ToolTip', ts_tooltip)
|
||||||
X(f'{indent}\t\t<FillChecking>DontCheck</FillChecking>')
|
X(f'{indent}\t\t<FillChecking>DontCheck</FillChecking>')
|
||||||
emit_tabular_standard_attributes(f'{indent}\t\t')
|
emit_tabular_standard_attributes(f'{indent}\t\t', ts_line_number)
|
||||||
if object_type == 'Catalog':
|
if object_type == 'Catalog':
|
||||||
X(f'{indent}\t\t<Use>ForItem</Use>')
|
X(f'{indent}\t\t<Use>ForItem</Use>')
|
||||||
X(f'{indent}\t</Properties>')
|
X(f'{indent}\t</Properties>')
|
||||||
@@ -3265,10 +3287,10 @@ if obj_type in types_with_attr_ts:
|
|||||||
# Значение ТЧ: массив колонок (синоним авто) ЛИБО объект {attributes/columns, synonym, tooltip, comment}.
|
# Значение ТЧ: массив колонок (синоним авто) ЛИБО объект {attributes/columns, synonym, tooltip, comment}.
|
||||||
def new_ts_entry(val):
|
def new_ts_entry(val):
|
||||||
if isinstance(val, list):
|
if isinstance(val, list):
|
||||||
return {'columns': val, 'synonym': None, 'tooltip': None, 'comment': None}
|
return {'columns': val, 'synonym': None, 'tooltip': None, 'comment': None, 'lineNumber': None}
|
||||||
cols = _as_list(val.get('attributes') or val.get('columns') or [])
|
cols = _as_list(val.get('attributes') or val.get('columns') or [])
|
||||||
return {'columns': cols, 'synonym': val.get('synonym'), 'tooltip': val.get('tooltip'),
|
return {'columns': cols, 'synonym': val.get('synonym'), 'tooltip': val.get('tooltip'),
|
||||||
'comment': str(val['comment']) if val.get('comment') else None}
|
'comment': str(val['comment']) if val.get('comment') else None, 'lineNumber': val.get('lineNumber')}
|
||||||
if isinstance(ts_data, list):
|
if isinstance(ts_data, list):
|
||||||
for ts in ts_data:
|
for ts in ts_data:
|
||||||
ts_sections[ts['name']] = new_ts_entry(ts)
|
ts_sections[ts['name']] = new_ts_entry(ts)
|
||||||
@@ -3317,7 +3339,7 @@ if obj_type in types_with_attr_ts:
|
|||||||
emit_attribute('\t\t\t', a, context)
|
emit_attribute('\t\t\t', a, context)
|
||||||
for ts_name in ts_order:
|
for ts_name in ts_order:
|
||||||
e = ts_sections[ts_name]
|
e = ts_sections[ts_name]
|
||||||
emit_tabular_section('\t\t\t', ts_name, e['columns'], obj_type, obj_name, e['synonym'], e['tooltip'], e['comment'])
|
emit_tabular_section('\t\t\t', ts_name, e['columns'], obj_type, obj_name, e['synonym'], e['tooltip'], e['comment'], e.get('lineNumber'))
|
||||||
for af in acct_flags:
|
for af in acct_flags:
|
||||||
af_name = af['name'] if isinstance(af, dict) else str(af)
|
af_name = af['name'] if isinstance(af, dict) else str(af)
|
||||||
emit_accounting_flag('\t\t\t', af_name)
|
emit_accounting_flag('\t\t\t', af_name)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# meta-decompile v0.21 — XML объекта метаданных 1С → JSON-черновик формата meta-compile
|
# meta-decompile v0.22 — 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: ключ эмитим только
|
||||||
@@ -573,11 +573,24 @@ if ($childObjs) {
|
|||||||
elseif ($null -ne $tsSyn) { $tsSynCustom = $true }
|
elseif ($null -ne $tsSyn) { $tsSynCustom = $true }
|
||||||
$tsTt = Get-MLValue ($tsp.SelectSingleNode('md:ToolTip', $nsm))
|
$tsTt = Get-MLValue ($tsp.SelectSingleNode('md:ToolTip', $nsm))
|
||||||
$tsCmtN = $tsp.SelectSingleNode('md:Comment', $nsm); $tsCmt = if ($tsCmtN) { $tsCmtN.InnerText } else { '' }
|
$tsCmtN = $tsp.SelectSingleNode('md:Comment', $nsm); $tsCmt = if ($tsCmtN) { $tsCmtN.InnerText } else { '' }
|
||||||
if ($tsSynCustom -or ($null -ne $tsTt) -or $tsCmt) {
|
# Кастомизация стандартного реквизита LineNumber (НомерСтроки) — omit-on-default по каждому свойству.
|
||||||
|
$lnObj = [ordered]@{}
|
||||||
|
$lnNode = $tsp.SelectSingleNode("md:StandardAttributes/xr:StandardAttribute[@name='LineNumber']", $nsm)
|
||||||
|
if ($lnNode) {
|
||||||
|
$lnSyn = Get-MLValue ($lnNode.SelectSingleNode('xr:Synonym', $nsm)); if ($null -ne $lnSyn) { $lnObj['synonym'] = $lnSyn }
|
||||||
|
$lnCmtN = $lnNode.SelectSingleNode('xr:Comment', $nsm); if ($lnCmtN -and $lnCmtN.InnerText) { $lnObj['comment'] = $lnCmtN.InnerText }
|
||||||
|
$lnFtsN = $lnNode.SelectSingleNode('xr:FullTextSearch', $nsm); if ($lnFtsN -and $lnFtsN.InnerText -ne 'Use') { $lnObj['fullTextSearch'] = $lnFtsN.InnerText }
|
||||||
|
$lnTt = Get-MLValue ($lnNode.SelectSingleNode('xr:ToolTip', $nsm)); if ($null -ne $lnTt) { $lnObj['tooltip'] = $lnTt }
|
||||||
|
$lnFmt = Get-MLValue ($lnNode.SelectSingleNode('xr:Format', $nsm)); if ($null -ne $lnFmt) { $lnObj['format'] = $lnFmt }
|
||||||
|
$lnEfmt = Get-MLValue ($lnNode.SelectSingleNode('xr:EditFormat', $nsm)); if ($null -ne $lnEfmt) { $lnObj['editFormat'] = $lnEfmt }
|
||||||
|
$lnChiN = $lnNode.SelectSingleNode('xr:ChoiceHistoryOnInput', $nsm); if ($lnChiN -and $lnChiN.InnerText -ne 'Auto') { $lnObj['choiceHistoryOnInput'] = $lnChiN.InnerText }
|
||||||
|
}
|
||||||
|
if ($tsSynCustom -or ($null -ne $tsTt) -or $tsCmt -or $lnObj.Count -gt 0) {
|
||||||
$to = [ordered]@{}
|
$to = [ordered]@{}
|
||||||
if ($tsSynCustom) { $to['synonym'] = $tsSyn }
|
if ($tsSynCustom) { $to['synonym'] = $tsSyn }
|
||||||
if ($null -ne $tsTt) { $to['tooltip'] = $tsTt }
|
if ($null -ne $tsTt) { $to['tooltip'] = $tsTt }
|
||||||
if ($tsCmt) { $to['comment'] = $tsCmt }
|
if ($tsCmt) { $to['comment'] = $tsCmt }
|
||||||
|
if ($lnObj.Count -gt 0) { $to['lineNumber'] = $lnObj }
|
||||||
$to['attributes'] = $cols
|
$to['attributes'] = $cols
|
||||||
$tsMap[$tsName] = $to
|
$tsMap[$tsName] = $to
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
+30
-1
@@ -296,10 +296,39 @@ JSON-**строка** → `xsi:type="xs:string"` (напр. год `"2000"`, к
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Свойства объектной формы ТЧ: `synonym` (ML; нет ключа → авто из имени), `tooltip` (ML), `comment` (строка), `attributes` (колонки; синоним `columns`).
|
Свойства объектной формы ТЧ: `synonym` (ML; нет ключа → авто из имени), `tooltip` (ML), `comment` (строка), `attributes` (колонки; синоним `columns`), `lineNumber` (кастомизация стандартного реквизита НомерСтроки, см. ниже).
|
||||||
|
|
||||||
Для Catalog добавляется `<Use>ForItem</Use>` в Properties табличной части. Для Document Use не применяется.
|
Для Catalog добавляется `<Use>ForItem</Use>` в Properties табличной части. Для Document Use не применяется.
|
||||||
|
|
||||||
|
### 5.1 `lineNumber` — кастомизация стандартного реквизита НомерСтроки
|
||||||
|
|
||||||
|
У каждой ТЧ ровно один стандартный реквизит — **LineNumber** (НомерСтроки). Платформа материализует блок
|
||||||
|
`<StandardAttributes>` с ним практически всегда (компилятор эмитит его безусловно), но по умолчанию все свойства
|
||||||
|
LineNumber дефолтные. Ключ `lineNumber` на объектной форме ТЧ переопределяет их (omit-on-default по каждому свойству):
|
||||||
|
|
||||||
|
| Ключ | XML | Умолчание | Тип |
|
||||||
|
|------|-----|-----------|-----|
|
||||||
|
| `synonym` | Synonym | пусто | ML (строка/`{ru,en}`) |
|
||||||
|
| `comment` | Comment | пусто | строка |
|
||||||
|
| `fullTextSearch` | FullTextSearch | Use | Use/DontUse |
|
||||||
|
| `tooltip` | ToolTip | пусто | ML |
|
||||||
|
| `format` | Format | пусто | ML (форматная строка) |
|
||||||
|
| `editFormat` | EditFormat | пусто | ML |
|
||||||
|
| `choiceHistoryOnInput` | ChoiceHistoryOnInput | Auto | Auto/DontUse |
|
||||||
|
|
||||||
|
```json
|
||||||
|
"tabularSections": {
|
||||||
|
"Строки": {
|
||||||
|
"lineNumber": { "synonym": "Номер п/п", "fullTextSearch": "DontUse" },
|
||||||
|
"attributes": ["Товар: CatalogRef.Номенклатура"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Прочие свойства LineNumber (FillChecking, CreateOnInput и т.п.) платформа не даёт переопределять — они всегда дефолтные.
|
||||||
|
Декомпилятор эмитит `lineNumber` только при отклонении ≥1 свойства от дефолта. NB: редкий хвост ТЧ (~2.5% корпуса)
|
||||||
|
блок `<StandardAttributes>` вовсе опускает — правило не выведено; компилятор такие не воспроизводит (эмитит блок всегда).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 6. Значения перечислений
|
## 6. Значения перечислений
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"name": "Кастомизация LineNumber табличной части",
|
||||||
|
"input": {
|
||||||
|
"type": "Catalog",
|
||||||
|
"name": "Заказы",
|
||||||
|
"tabularSections": {
|
||||||
|
"Строки": {
|
||||||
|
"synonym": "Строки заказа",
|
||||||
|
"lineNumber": {
|
||||||
|
"synonym": "Номер п/п",
|
||||||
|
"comment": "порядковый номер строки",
|
||||||
|
"fullTextSearch": "DontUse",
|
||||||
|
"tooltip": { "ru": "Порядковый номер", "en": "Sequence number" },
|
||||||
|
"choiceHistoryOnInput": "DontUse"
|
||||||
|
},
|
||||||
|
"attributes": [
|
||||||
|
"Товар: CatalogRef.Номенклатура",
|
||||||
|
"Количество: Number(15,3)"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"validatePath": "Catalogs/Заказы",
|
||||||
|
"expect": { "files": ["Catalogs/Заказы.xml"] }
|
||||||
|
}
|
||||||
@@ -0,0 +1,240 @@
|
|||||||
|
<?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>
|
||||||
|
<TabularSection uuid="UUID-012">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:GeneratedType name="CatalogTabularSection.Заказы.Строки" category="TabularSection">
|
||||||
|
<xr:TypeId>UUID-013</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-014</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="CatalogTabularSectionRow.Заказы.Строки" category="TabularSectionRow">
|
||||||
|
<xr:TypeId>UUID-015</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-016</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>Строки</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Строки заказа</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<ToolTip/>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<StandardAttributes>
|
||||||
|
<xr:StandardAttribute name="LineNumber">
|
||||||
|
<xr:LinkByType/>
|
||||||
|
<xr:FillChecking>DontCheck</xr:FillChecking>
|
||||||
|
<xr:MultiLine>false</xr:MultiLine>
|
||||||
|
<xr:FillFromFillingValue>false</xr:FillFromFillingValue>
|
||||||
|
<xr:CreateOnInput>Auto</xr:CreateOnInput>
|
||||||
|
<xr:MaxValue xsi:nil="true"/>
|
||||||
|
<xr:ToolTip>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Порядковый номер</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>en</v8:lang>
|
||||||
|
<v8:content>Sequence number</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</xr:ToolTip>
|
||||||
|
<xr:ExtendedEdit>false</xr:ExtendedEdit>
|
||||||
|
<xr:Format/>
|
||||||
|
<xr:ChoiceForm/>
|
||||||
|
<xr:QuickChoice>Auto</xr:QuickChoice>
|
||||||
|
<xr:ChoiceHistoryOnInput>DontUse</xr:ChoiceHistoryOnInput>
|
||||||
|
<xr:EditFormat/>
|
||||||
|
<xr:PasswordMode>false</xr:PasswordMode>
|
||||||
|
<xr:DataHistory>Use</xr:DataHistory>
|
||||||
|
<xr:MarkNegatives>false</xr:MarkNegatives>
|
||||||
|
<xr:MinValue xsi:nil="true"/>
|
||||||
|
<xr:Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Номер п/п</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</xr:Synonym>
|
||||||
|
<xr:Comment>порядковый номер строки</xr:Comment>
|
||||||
|
<xr:FullTextSearch>DontUse</xr:FullTextSearch>
|
||||||
|
<xr:ChoiceParameterLinks/>
|
||||||
|
<xr:FillValue xsi:nil="true"/>
|
||||||
|
<xr:Mask/>
|
||||||
|
<xr:ChoiceParameters/>
|
||||||
|
</xr:StandardAttribute>
|
||||||
|
</StandardAttributes>
|
||||||
|
<Use>ForItem</Use>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<Attribute uuid="UUID-017">
|
||||||
|
<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"/>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<LinkByType/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<Indexing>DontIndex</Indexing>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<DataHistory>Use</DataHistory>
|
||||||
|
</Properties>
|
||||||
|
</Attribute>
|
||||||
|
<Attribute uuid="UUID-018">
|
||||||
|
<Properties>
|
||||||
|
<Name>Количество</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Количество</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type>xs:decimal</v8:Type>
|
||||||
|
<v8:NumberQualifiers>
|
||||||
|
<v8:Digits>15</v8:Digits>
|
||||||
|
<v8:FractionDigits>3</v8:FractionDigits>
|
||||||
|
<v8:AllowedSign>Any</v8:AllowedSign>
|
||||||
|
</v8:NumberQualifiers>
|
||||||
|
</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"/>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<LinkByType/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<Indexing>DontIndex</Indexing>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<DataHistory>Use</DataHistory>
|
||||||
|
</Properties>
|
||||||
|
</Attribute>
|
||||||
|
</ChildObjects>
|
||||||
|
</TabularSection>
|
||||||
|
</ChildObjects>
|
||||||
|
</Catalog>
|
||||||
|
</MetaDataObject>
|
||||||
@@ -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>
|
||||||
@@ -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