feat(meta-compile): группы команд — прощающий ввод, allowlist, валидация (v1.64)

Emit-Command: резолв группы (Resolve-CommandGroup) — русские подписи групп
(«Панель навигации.Важное» → NavigationPanelImportant и т.д.), `ГруппаКоманд.X`
→ `CommandGroup.X`. Закрыты два пробела валидации (найдены при 1С-cert):
- пустая/опущенная group → ошибка с подсказкой (список валидных групп), а не
  молчаливый незагружаемый <Group/>;
- секционная группа (NavigationPanel*/ActionsPanel*) + commandParameterType →
  ошибка (тип параметра доступен только для групп формы/CommandGroup — подтверждено
  выгрузкой ЕРП: команды с параметром только в Form*/CommandGroup).
Списки групп из реального erp_8.3.24. Зеркало ps1+py (идентично).

reference/blocks.md: каноничный список групп + правило параметра (без прощающего
ввода — usage-голос). Тесты: catalog-command-groups (рус-синонимы/секц/форма/кастом
через preRun CommandGroup, 1С-cert ✓) + 2 expectError (пустая group; секц+параметр).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-11 19:11:53 +03:00
parent 63591ef132
commit 9ad9c12c9b
16 changed files with 653 additions and 7 deletions
@@ -31,8 +31,8 @@ BusinessProcess, Task и др.).
| `synonym` | из имени | ML |
| `tooltip` | пусто | ML |
| `comment` | пусто | строка |
| `group` | пусто | группа команд (`FormCommandBarImportant`, `FormNavigationPanelGoTo`, …) |
| `commandParameterType` | пусто | тип параметра (напр. `CatalogRef.Номенклатура`) |
| `group` | **обязательно** | группа размещения (см. ниже) |
| `commandParameterType` | пусто | тип параметра (напр. `CatalogRef.Номенклатура`)**только для групп формы** |
| `parameterUseMode` | `Single` | `Single` / `Multiple` |
| `modifiesData` | `false` | bool |
| `representation` | `Auto` | вид отображения |
@@ -46,6 +46,16 @@ BusinessProcess, Task и др.).
}
```
**Группа (`group`) обязательна** — каждая команда размещается в группе командного интерфейса:
- **Секционные** (панель раздела; `commandParameterType` **недоступен**): `NavigationPanelImportant` /
`NavigationPanelOrdinary` / `NavigationPanelSeeAlso`, `ActionsPanelCreate` / `ActionsPanelReports` / `ActionsPanelTools`.
- **Формы** (`commandParameterType` допустим): `FormCommandBarImportant` / `FormCommandBarCreateBasedOn`,
`FormNavigationPanelImportant` / `FormNavigationPanelGoTo` / `FormNavigationPanelSeeAlso`.
- **Кастомная группа:** `CommandGroup.<Имя>` (параметр допустим).
Секционная группа вместе с `commandParameterType` → ошибка.
## `inputByString` / `dataLockFields` / `basedOn`
Списки полей/объектов уровня объекта. Поля — по имени реквизита объекта (обычного или стандартного).
@@ -1,4 +1,4 @@
# meta-compile v1.63 — Compile 1C metadata object from JSON
# meta-compile v1.64 — Compile 1C metadata object from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[Parameter(Mandatory)]
@@ -267,6 +267,46 @@ $script:validEnumValues = @{
"FullTextSearchOnInputByString" = @("Use","DontUse")
}
# --- Группы команд объекта (командный интерфейс) ---
# Секционные группы (панель раздела): команда БЕЗ параметра. Групповые формы: параметр доступен.
$script:sectionCommandGroups = @(
"NavigationPanelImportant","NavigationPanelOrdinary","NavigationPanelSeeAlso",
"ActionsPanelCreate","ActionsPanelReports","ActionsPanelTools"
)
$script:formCommandGroups = @(
"FormCommandBarImportant","FormCommandBarCreateBasedOn",
"FormNavigationPanelImportant","FormNavigationPanelGoTo","FormNavigationPanelSeeAlso"
)
$script:validCommandGroups = $script:sectionCommandGroups + $script:formCommandGroups
# Прощающий ввод: русские подписи групп → канон
$script:commandGroupAliases = @{
"Панель навигации.Важное" = "NavigationPanelImportant"
"Панель навигации.Обычное" = "NavigationPanelOrdinary"
"Панель навигации.См. также" = "NavigationPanelSeeAlso"
"Панель действий.Создать" = "ActionsPanelCreate"
"Панель действий.Отчеты" = "ActionsPanelReports"
"Панель действий.Отчёты" = "ActionsPanelReports"
"Панель действий.Сервис" = "ActionsPanelTools"
"Командная панель формы.Важное" = "FormCommandBarImportant"
"Командная панель формы.Создать на основании" = "FormCommandBarCreateBasedOn"
"Панель навигации формы.Важное" = "FormNavigationPanelImportant"
"Панель навигации формы.Перейти" = "FormNavigationPanelGoTo"
"Панель навигации формы.См. также" = "FormNavigationPanelSeeAlso"
}
# Резолв группы команды: рус-синоним → канон; ГруппаКоманд.X → CommandGroup.X; пусто → ошибка с подсказкой.
function Resolve-CommandGroup {
param([string]$raw, [string]$cmdName)
$g = "$raw".Trim()
if (-not $g) {
Write-Error "Команде '$cmdName' не задана группа (group). 1С требует группу. Валидные: $($script:validCommandGroups -join ', '); либо CommandGroup.<Имя> — кастомная группа."
exit 1
}
if ($script:commandGroupAliases.ContainsKey($g)) { return $script:commandGroupAliases[$g] }
if ($g -match '^(?:CommandGroup|ГруппаКоманд)\.(.+)$') { return "CommandGroup.$($Matches[1])" }
return $g
}
function Normalize-EnumValue {
param([string]$propName, [string]$value)
# 1. Check alias dictionary — silent auto-correct
@@ -1918,8 +1958,12 @@ function Emit-Command {
$syn = if ($null -ne $cmd.synonym) { $cmd.synonym } else { Split-CamelCase $cmdName }
Emit-MLText "$indent`t`t" "Synonym" $syn
if ($cmd.comment) { X "$indent`t`t<Comment>$(Esc-XmlText "$($cmd.comment)")</Comment>" } else { X "$indent`t`t<Comment/>" }
$group = if ($cmd.group) { "$($cmd.group)" } else { "" }
X "$indent`t`t<Group>$group</Group>"
$group = Resolve-CommandGroup $cmd.group $cmdName
if ($cmd.commandParameterType -and ($script:sectionCommandGroups -contains $group)) {
Write-Error "Команда '$cmdName': тип параметра (commandParameterType) недоступен для команд секционной панели ('$group'). Тип параметра — только для групп формы (FormCommandBar*/FormNavigationPanel*) или CommandGroup.<Имя>."
exit 1
}
X "$indent`t`t<Group>$(Esc-Xml $group)</Group>"
if ($cmd.commandParameterType) {
X "$indent`t`t<CommandParameterType>"
Emit-TypeContent "$indent`t`t`t" "$($cmd.commandParameterType)"
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# meta-compile v1.63 — Compile 1C metadata object from JSON
# meta-compile v1.64 — Compile 1C metadata object from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
@@ -412,6 +412,46 @@ valid_enum_values = {
'FullTextSearchOnInputByString': ['Use', 'DontUse'],
}
# --- Группы команд объекта (командный интерфейс) ---
# Секционные группы (панель раздела): команда БЕЗ параметра. Групповые формы: параметр доступен.
SECTION_COMMAND_GROUPS = [
'NavigationPanelImportant', 'NavigationPanelOrdinary', 'NavigationPanelSeeAlso',
'ActionsPanelCreate', 'ActionsPanelReports', 'ActionsPanelTools',
]
FORM_COMMAND_GROUPS = [
'FormCommandBarImportant', 'FormCommandBarCreateBasedOn',
'FormNavigationPanelImportant', 'FormNavigationPanelGoTo', 'FormNavigationPanelSeeAlso',
]
VALID_COMMAND_GROUPS = SECTION_COMMAND_GROUPS + FORM_COMMAND_GROUPS
COMMAND_GROUP_ALIASES = {
'Панель навигации.Важное': 'NavigationPanelImportant',
'Панель навигации.Обычное': 'NavigationPanelOrdinary',
'Панель навигации.См. также': 'NavigationPanelSeeAlso',
'Панель действий.Создать': 'ActionsPanelCreate',
'Панель действий.Отчеты': 'ActionsPanelReports',
'Панель действий.Отчёты': 'ActionsPanelReports',
'Панель действий.Сервис': 'ActionsPanelTools',
'Командная панель формы.Важное': 'FormCommandBarImportant',
'Командная панель формы.Создать на основании': 'FormCommandBarCreateBasedOn',
'Панель навигации формы.Важное': 'FormNavigationPanelImportant',
'Панель навигации формы.Перейти': 'FormNavigationPanelGoTo',
'Панель навигации формы.См. также': 'FormNavigationPanelSeeAlso',
}
def resolve_command_group(raw, cmd_name):
g = (str(raw) if raw is not None else '').strip()
if not g:
sys.stderr.write(f"Команде '{cmd_name}' не задана группа (group). 1С требует группу. "
f"Валидные: {', '.join(VALID_COMMAND_GROUPS)}; либо CommandGroup.<Имя> — кастомная группа.\n")
sys.exit(1)
if g in COMMAND_GROUP_ALIASES:
return COMMAND_GROUP_ALIASES[g]
m = re.match(r'^(?:CommandGroup|ГруппаКоманд)\.(.+)$', g)
if m:
return f'CommandGroup.{m.group(1)}'
return g
def normalize_enum_value(prop_name, value):
# 1. Check alias dictionary — silent auto-correct
if value in enum_value_aliases:
@@ -1989,7 +2029,13 @@ def emit_command(indent, cmd_name, cmd):
X(f'{indent}\t\t<Comment>{esc_xml_text(str(cmd["comment"]))}</Comment>')
else:
X(f'{indent}\t\t<Comment/>')
X(f'{indent}\t\t<Group>{cmd.get("group") or ""}</Group>')
group = resolve_command_group(cmd.get('group'), cmd_name)
if cmd.get('commandParameterType') and group in SECTION_COMMAND_GROUPS:
sys.stderr.write(f"Команда '{cmd_name}': тип параметра (commandParameterType) недоступен для команд "
f"секционной панели ('{group}'). Тип параметра — только для групп формы "
f"(FormCommandBar*/FormNavigationPanel*) или CommandGroup.<Имя>.\n")
sys.exit(1)
X(f'{indent}\t\t<Group>{esc_xml(group)}</Group>')
if cmd.get('commandParameterType'):
X(f'{indent}\t\t<CommandParameterType>')
emit_type_content(f'{indent}\t\t\t', str(cmd['commandParameterType']))
@@ -0,0 +1,22 @@
{
"name": "Команды: группы (рус-синонимы, секционные, форма, кастомная)",
"preRun": [
{
"script": "meta-compile/scripts/meta-compile",
"input": { "type": "CommandGroup", "name": "МояГруппа" },
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
}
],
"input": {
"type": "Catalog", "name": "ТестГруппКоманд", "useStandardCommands": true,
"commands": {
"НавВажное": { "synonym": "Навигация важное", "group": "Панель навигации.Важное" },
"ДействияСервис": { "synonym": "Сервис", "group": "ActionsPanelTools" },
"ФормаВажное": { "synonym": "Форма важное", "group": "Командная панель формы.Важное",
"commandParameterType": "CatalogRef.ТестГруппКоманд" },
"Кастом": { "synonym": "Кастомная", "group": "ГруппаКоманд.МояГруппа" }
}
},
"validatePath": "Catalogs/ТестГруппКоманд",
"expect": { "files": ["Catalogs/ТестГруппКоманд.xml"] }
}
@@ -0,0 +1,8 @@
{
"name": "Ошибка: секционная группа + commandParameterType (несовместимо)",
"input": {
"type": "Catalog", "name": "ТестНавПараметр",
"commands": { "Команда": { "group": "NavigationPanelOrdinary", "commandParameterType": "CatalogRef.ТестНавПараметр" } }
},
"expectError": "недоступен"
}
@@ -0,0 +1,8 @@
{
"name": "Ошибка: команда без группы",
"input": {
"type": "Catalog", "name": "ТестБезГруппы",
"commands": { "Команда": { "synonym": "Команда" } }
},
"expectError": "не задана группа"
}
@@ -0,0 +1,178 @@
<?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>Managed</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>
<Command uuid="UUID-012">
<Properties>
<Name>НавВажное</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Навигация важное</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Group>NavigationPanelImportant</Group>
<CommandParameterType/>
<ParameterUseMode>Single</ParameterUseMode>
<ModifiesData>false</ModifiesData>
<Representation>Auto</Representation>
<ToolTip/>
<Picture/>
<Shortcut/>
<OnMainServerUnavalableBehavior>Auto</OnMainServerUnavalableBehavior>
</Properties>
</Command>
<Command uuid="UUID-013">
<Properties>
<Name>ДействияСервис</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Сервис</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Group>ActionsPanelTools</Group>
<CommandParameterType/>
<ParameterUseMode>Single</ParameterUseMode>
<ModifiesData>false</ModifiesData>
<Representation>Auto</Representation>
<ToolTip/>
<Picture/>
<Shortcut/>
<OnMainServerUnavalableBehavior>Auto</OnMainServerUnavalableBehavior>
</Properties>
</Command>
<Command uuid="UUID-014">
<Properties>
<Name>ФормаВажное</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Форма важное</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Group>FormCommandBarImportant</Group>
<CommandParameterType>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.ТестГруппКоманд</v8:Type>
</CommandParameterType>
<ParameterUseMode>Single</ParameterUseMode>
<ModifiesData>false</ModifiesData>
<Representation>Auto</Representation>
<ToolTip/>
<Picture/>
<Shortcut/>
<OnMainServerUnavalableBehavior>Auto</OnMainServerUnavalableBehavior>
</Properties>
</Command>
<Command uuid="UUID-015">
<Properties>
<Name>Кастом</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Кастомная</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Group>CommandGroup.МояГруппа</Group>
<CommandParameterType/>
<ParameterUseMode>Single</ParameterUseMode>
<ModifiesData>false</ModifiesData>
<Representation>Auto</Representation>
<ToolTip/>
<Picture/>
<Shortcut/>
<OnMainServerUnavalableBehavior>Auto</OnMainServerUnavalableBehavior>
</Properties>
</Command>
</ChildObjects>
</Catalog>
</MetaDataObject>
@@ -0,0 +1,6 @@
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
// Вставьте обработчик команды.
КонецПроцедуры
@@ -0,0 +1,6 @@
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
// Вставьте обработчик команды.
КонецПроцедуры
@@ -0,0 +1,6 @@
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
// Вставьте обработчик команды.
КонецПроцедуры
@@ -0,0 +1,6 @@
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
// Вставьте обработчик команды.
КонецПроцедуры
@@ -0,0 +1,19 @@
<?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">
<CommandGroup uuid="UUID-001">
<Properties>
<Name>МояГруппа</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Моя группа</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Representation>Auto</Representation>
<ToolTip/>
<Picture/>
<Category>NavigationPanel</Category>
</Properties>
</CommandGroup>
</MetaDataObject>
@@ -0,0 +1,253 @@
<?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>
<CommandGroup>МояГруппа</CommandGroup>
<Catalog>ТестГруппКоманд</Catalog>
</ChildObjects>
</Configuration>
</MetaDataObject>
@@ -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>