mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-20 00:45:54 +03:00
fix(role-compile,role-edit): замыкание прав и фильтр значений по умолчанию
Замер на платформе (debug/role-edit/FINDINGS.md): роль хранит только то,
что отличается от её умолчаний. При setForNewObjects=false на верхнем
уровне живут разрешения, а любой запрет выбрасывается (проверены Update,
Edit, Delete; узел из одних запретов удаляется целиком); при true —
наоборот. У реквизитных вложенных ту же роль играет
setForAttributesByDefault. Конфликт решается в пользу разрешения.
Отсюда три правки, общие для обоих навыков:
1. Прямое замыкание идёт только от РАЗРЕШЁННЫХ прав. Раньше запрет тянул
зависимости как разрешения: "Catalog.X: {Edit: false}" выдавал
Read, Update и View — навык раздавал права на основании запрета.
2. Появилось обратное замыкание: запрет уносит права, которым
запрещённое нужно. Сверено с платформой — при setForNewObjects=true
она к Update=false дописывает те же десять запретов.
3. Записи, совпавшие с умолчанием роли, не пишутся: платформа их всё
равно выбросит, а файл разошёлся бы с базой. Отброшенное
перечисляется в stderr, сообщение операции объясняет причину.
Правило применяется только там, где замерено: внешние источники данных
под него не попадают. Обе функции заведены семьями в check-inline-drift.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGkXwoXTuafcu1SXMsauFq
This commit is contained in:
co-authored by
Claude Opus 5
parent
b28c044e06
commit
9d21ad3429
@@ -129,10 +129,16 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/role-compile.ps1" -
|
|||||||
|
|
||||||
Права на части объекта задаются точечным путём: `Catalog.Контрагенты.Attribute.ИНН: View, Edit`, `WebService.Обмен.Operation.Загрузить: Use`, `HTTPService.ЭДО.URLTemplate.ЕстьНовыеДокументы.Method.POST: Use`.
|
Права на части объекта задаются точечным путём: `Catalog.Контрагенты.Attribute.ИНН: View, Edit`, `WebService.Обмен.Operation.Загрузить: Use`, `HTTPService.ЭДО.URLTemplate.ЕстьНовыеДокументы.Method.POST: Use`.
|
||||||
|
|
||||||
Реквизиты, табличные части, измерения и ресурсы по умолчанию наследуют права своего объекта:
|
Роль хранит только то, что отличается от её умолчаний, — всё совпавшее навык не пишет и говорит
|
||||||
выдавать их отдельно бессмысленно, платформа такую запись не сохранит. Поштучные права на них
|
об этом. При умолчаниях (`setForNewObjects: false`, `setForAttributesByDefault: true`) это значит:
|
||||||
имеют смысл только при `"setForAttributesByDefault": false`; ограничить реквизит в обычной роли
|
объектам верхнего уровня права выдают, а реквизитам, ТЧ, измерениям и ресурсам — только
|
||||||
можно запретом — `{"name": "Catalog.Товары.Attribute.Цена", "rights": {"View": false}}`.
|
запрещают, потому что те наследуют права своего объекта:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"name": "Catalog.Товары.Attribute.Цена", "rights": {"View": false}}
|
||||||
|
```
|
||||||
|
|
||||||
|
Запрет тянет за собой права, которым запрещённое нужно: `View: false` у реквизита уносит `Edit`.
|
||||||
|
|
||||||
Роль расширения, включённая в основные (`DefaultRoles`), прав на заимствованные объекты давать не может — платформа это запрещает. Такие права выноси в отдельную роль вне основных.
|
Роль расширения, включённая в основные (`DefaultRoles`), прав на заимствованные объекты давать не может — платформа это запрещает. Такие права выноси в отдельную роль вне основных.
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# role-compile v1.41 — Compile 1C role from JSON
|
# role-compile v1.42 — Compile 1C role from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
[CmdletBinding(PositionalBinding=$false)]
|
[CmdletBinding(PositionalBinding=$false)]
|
||||||
param(
|
param(
|
||||||
@@ -901,32 +901,73 @@ $script:configurationLegacyDeps = @("AnalyticsSystemClient","MainWindowModeEmbed
|
|||||||
$script:configurationLegacyRank = 218
|
$script:configurationLegacyRank = 218
|
||||||
|
|
||||||
# Замыкание набора прав объекта. Возвращает @{ Rights = <итог>; Added = <что дописано> }.
|
# Замыкание набора прав объекта. Возвращает @{ Rights = <итог>; Added = <что дописано> }.
|
||||||
|
# Платформа хранит только то, что ОТЛИЧАЕТСЯ от значения по умолчанию для роли: при
|
||||||
|
# setForNewObjects=false на верхнем уровне живут разрешения, при true — запреты; у реквизитных
|
||||||
|
# вложенных объектов ту же роль играет setForAttributesByDefault. Совпавшее с умолчанием
|
||||||
|
# платформа выбрасывает при первой же загрузке, поэтому не пишем его и сами.
|
||||||
|
$script:attributeKinds = @(
|
||||||
|
"Attribute","StandardAttribute","TabularSection","StandardTabularSection",
|
||||||
|
"Dimension","Resource","AccountingFlag","ExtDimensionAccountingFlag","AddressingAttribute"
|
||||||
|
)
|
||||||
|
|
||||||
|
function Get-DefaultRightValue {
|
||||||
|
param([string]$objName, [string]$setForNewObjects, [string]$setForAttributesByDefault)
|
||||||
|
$parts = $objName -split '\.'
|
||||||
|
if ($parts.Count -lt 3) { return $setForNewObjects }
|
||||||
|
# Внешние источники данных под это правило не проверялись — трогаем только то, что замерено.
|
||||||
|
if ($parts[0] -eq 'ExternalDataSource') { return "false" }
|
||||||
|
$kind = $parts[$parts.Count-2]
|
||||||
|
if ($script:attributeKinds -contains $kind) { return $setForAttributesByDefault }
|
||||||
|
# Команды, подсистемы, операции сервисов флагами роли не управляются — там живут разрешения.
|
||||||
|
return "false"
|
||||||
|
}
|
||||||
|
|
||||||
function Close-RightsDependencies {
|
function Close-RightsDependencies {
|
||||||
param([string]$objName, $rights, [int]$formatRank)
|
param([string]$objName, $rights, [int]$formatRank)
|
||||||
$parts = $objName -split '\.'
|
$parts = $objName -split '\.'
|
||||||
# У вложенных объектов (реквизит, ТЧ, измерение) зависимостей нет — платформа их не трогает.
|
$nested = $parts.Count -ge 3
|
||||||
if ($parts.Count -ge 3) { return @{ Rights = $rights; Added = @() } }
|
|
||||||
$objectType = $parts[0]
|
$objectType = $parts[0]
|
||||||
$allowed = $script:knownRights[$objectType]
|
$allowed = if ($nested) { Get-NestedRights -objectType $objectType -kind (Get-NestedKind $objName) }
|
||||||
|
else { $script:knownRights[$objectType] }
|
||||||
if (-not $allowed) { return @{ Rights = $rights; Added = @() } }
|
if (-not $allowed) { return @{ Rights = $rights; Added = @() } }
|
||||||
$have = [ordered]@{}
|
$have = [ordered]@{}
|
||||||
foreach ($r in $rights) { if (-not $have.Contains($r.Name)) { $have[$r.Name] = $r } }
|
foreach ($r in $rights) { if (-not $have.Contains($r.Name)) { $have[$r.Name] = $r } }
|
||||||
$byType = $script:rightDepsByType[$objectType]
|
$byType = $script:rightDepsByType[$objectType]
|
||||||
$added = @()
|
$added = @()
|
||||||
$queue = @($have.Keys)
|
# Вперёд — только от РАЗРЕШЁННЫХ прав: платформа замыкает выданное, а не запрещённое.
|
||||||
|
$queue = @($have.Keys | Where-Object { $have[$_].Value -eq "true" })
|
||||||
while ($queue.Count -gt 0) {
|
while ($queue.Count -gt 0) {
|
||||||
$name = $queue[0]
|
$name = $queue[0]
|
||||||
$queue = @($queue | Select-Object -Skip 1)
|
$queue = @($queue | Select-Object -Skip 1)
|
||||||
$need = if ($byType -and $byType.Contains($name)) { $byType[$name] } else { $script:rightDeps[$name] }
|
$need = if ($byType -and $byType.Contains($name)) { $byType[$name] } else { $script:rightDeps[$name] }
|
||||||
if (-not $need) { continue }
|
if (-not $need) { continue }
|
||||||
foreach ($dep in $need) {
|
foreach ($dep in $need) {
|
||||||
if ($have.Contains($dep)) { continue }
|
|
||||||
if ($allowed -notcontains $dep) { continue }
|
if ($allowed -notcontains $dep) { continue }
|
||||||
|
if ($have.Contains($dep)) {
|
||||||
|
# Разрешение перебивает запрет — так поступает и платформа при загрузке.
|
||||||
|
if ($have[$dep].Value -ne "true") { $have[$dep].Value = "true"; $added += $dep; $queue += $dep }
|
||||||
|
continue
|
||||||
|
}
|
||||||
$have[$dep] = @{ Name = $dep; Value = "true"; Condition = $null }
|
$have[$dep] = @{ Name = $dep; Value = "true"; Condition = $null }
|
||||||
$added += $dep
|
$added += $dep
|
||||||
$queue += $dep
|
$queue += $dep
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
# Назад — от ЗАПРЕТОВ: право, которому запрещённое нужно, платформа запрещает следом.
|
||||||
|
$denyQueue = @($have.Keys | Where-Object { $have[$_].Value -ne "true" })
|
||||||
|
while ($denyQueue.Count -gt 0) {
|
||||||
|
$name = $denyQueue[0]
|
||||||
|
$denyQueue = @($denyQueue | Select-Object -Skip 1)
|
||||||
|
foreach ($candidate in $allowed) {
|
||||||
|
if ($candidate -eq $name) { continue }
|
||||||
|
$need = if ($byType -and $byType.Contains($candidate)) { $byType[$candidate] } else { $script:rightDeps[$candidate] }
|
||||||
|
if (-not $need -or $need -notcontains $name) { continue }
|
||||||
|
if ($have.Contains($candidate)) { continue }
|
||||||
|
$have[$candidate] = @{ Name = $candidate; Value = "false"; Condition = $null }
|
||||||
|
$added += $candidate
|
||||||
|
$denyQueue += $candidate
|
||||||
|
}
|
||||||
|
}
|
||||||
if ($objectType -eq 'Configuration' -and $formatRank -le $script:configurationLegacyRank -and $have.Count -gt 0) {
|
if ($objectType -eq 'Configuration' -and $formatRank -le $script:configurationLegacyRank -and $have.Count -gt 0) {
|
||||||
foreach ($dep in $script:configurationLegacyDeps) {
|
foreach ($dep in $script:configurationLegacyDeps) {
|
||||||
if ($have.Contains($dep)) { continue }
|
if ($have.Contains($dep)) { continue }
|
||||||
@@ -1479,6 +1520,19 @@ foreach ($o in $parsedObjects) {
|
|||||||
$parsedObjects = @(Sort-ObjectsByUuid -objects $parsedObjects -configRoot $resolvedOutputDir)
|
$parsedObjects = @(Sort-ObjectsByUuid -objects $parsedObjects -configRoot $resolvedOutputDir)
|
||||||
foreach ($o in $parsedObjects) { $o.Rights = @(Sort-RightsCanonical -objName $o.Name -rights $o.Rights) }
|
foreach ($o in $parsedObjects) { $o.Rights = @(Sort-RightsCanonical -objName $o.Name -rights $o.Rights) }
|
||||||
|
|
||||||
|
# Записи, равные умолчанию роли, платформа не хранит — отбрасываем их сами и говорим об этом.
|
||||||
|
$droppedByDefault = @()
|
||||||
|
foreach ($obj in $parsedObjects) {
|
||||||
|
$defaultValue = Get-DefaultRightValue $obj.Name $sfno $sfab
|
||||||
|
$kept = @()
|
||||||
|
foreach ($right in $obj.Rights) {
|
||||||
|
if ($right.Value -eq $defaultValue) { $droppedByDefault += "$($obj.Name).$($right.Name)"; continue }
|
||||||
|
$kept += ,$right
|
||||||
|
}
|
||||||
|
$obj.Rights = $kept
|
||||||
|
}
|
||||||
|
$parsedObjects = @($parsedObjects | Where-Object { $_.Rights.Count -gt 0 })
|
||||||
|
|
||||||
# Object blocks
|
# Object blocks
|
||||||
$totalRights = 0
|
$totalRights = 0
|
||||||
foreach ($obj in $parsedObjects) {
|
foreach ($obj in $parsedObjects) {
|
||||||
@@ -1748,6 +1802,9 @@ Write-Host " UUID: $uuid"
|
|||||||
Write-Host " Metadata: $metadataPath"
|
Write-Host " Metadata: $metadataPath"
|
||||||
Write-Host " Rights: $rightsPath"
|
Write-Host " Rights: $rightsPath"
|
||||||
Write-Host " Objects: $($parsedObjects.Count), Rights: $totalRights, Templates: $templateCount"
|
Write-Host " Objects: $($parsedObjects.Count), Rights: $totalRights, Templates: $templateCount"
|
||||||
|
if ($droppedByDefault.Count -gt 0) {
|
||||||
|
[Console]::Error.WriteLine("[role-compile] Не записаны права, совпадающие с умолчанием роли (платформа их не хранит): $($droppedByDefault -join ', ')")
|
||||||
|
}
|
||||||
foreach ($note in $closureNotes) { Write-Host $note }
|
foreach ($note in $closureNotes) { Write-Host $note }
|
||||||
switch ($regResult) {
|
switch ($regResult) {
|
||||||
"added" { Write-Host " Configuration.xml: <Role>$roleName</Role> added to ChildObjects" }
|
"added" { Write-Host " Configuration.xml: <Role>$roleName</Role> added to ChildObjects" }
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# role-compile v1.41 — Compile 1C role from JSON
|
# role-compile v1.42 — Compile 1C role from JSON
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
@@ -839,14 +839,37 @@ CONFIGURATION_LEGACY_DEPS = ["AnalyticsSystemClient", "MainWindowModeEmbeddedWor
|
|||||||
CONFIGURATION_LEGACY_RANK = 218
|
CONFIGURATION_LEGACY_RANK = 218
|
||||||
|
|
||||||
|
|
||||||
|
# Платформа хранит только то, что ОТЛИЧАЕТСЯ от значения по умолчанию для роли: при
|
||||||
|
# setForNewObjects=false на верхнем уровне живут разрешения, при true — запреты; у реквизитных
|
||||||
|
# вложенных объектов ту же роль играет setForAttributesByDefault. Совпавшее с умолчанием
|
||||||
|
# платформа выбрасывает при первой же загрузке, поэтому не пишем его и сами.
|
||||||
|
ATTRIBUTE_KINDS = [
|
||||||
|
"Attribute", "StandardAttribute", "TabularSection", "StandardTabularSection",
|
||||||
|
"Dimension", "Resource", "AccountingFlag", "ExtDimensionAccountingFlag", "AddressingAttribute",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def get_default_right_value(object_name, set_for_new_objects, set_for_attributes_by_default):
|
||||||
|
parts = object_name.split('.')
|
||||||
|
if len(parts) < 3:
|
||||||
|
return set_for_new_objects
|
||||||
|
# Внешние источники данных под это правило не проверялись — трогаем только то, что замерено.
|
||||||
|
if parts[0] == 'ExternalDataSource':
|
||||||
|
return "false"
|
||||||
|
kind = parts[-2]
|
||||||
|
if kind in ATTRIBUTE_KINDS:
|
||||||
|
return set_for_attributes_by_default
|
||||||
|
# Команды, подсистемы, операции сервисов флагами роли не управляются — там живут разрешения.
|
||||||
|
return "false"
|
||||||
|
|
||||||
|
|
||||||
def close_rights_dependencies(object_name, rights, format_rank):
|
def close_rights_dependencies(object_name, rights, format_rank):
|
||||||
"""Замыкание набора прав объекта. Возвращает (итоговые права, что дописано)."""
|
"""Замыкание набора прав объекта. Возвращает (итоговые права, что дописано)."""
|
||||||
parts = object_name.split('.')
|
parts = object_name.split('.')
|
||||||
# У вложенных объектов (реквизит, ТЧ, измерение) зависимостей нет — платформа их не трогает.
|
nested = len(parts) >= 3
|
||||||
if len(parts) >= 3:
|
|
||||||
return rights, []
|
|
||||||
object_type = parts[0]
|
object_type = parts[0]
|
||||||
allowed = KNOWN_RIGHTS.get(object_type)
|
allowed = (get_nested_rights(object_type, get_nested_kind(object_name)) if nested
|
||||||
|
else KNOWN_RIGHTS.get(object_type))
|
||||||
if not allowed:
|
if not allowed:
|
||||||
return rights, []
|
return rights, []
|
||||||
have = {}
|
have = {}
|
||||||
@@ -854,18 +877,39 @@ def close_rights_dependencies(object_name, rights, format_rank):
|
|||||||
have.setdefault(r['Name'], r)
|
have.setdefault(r['Name'], r)
|
||||||
by_type = RIGHT_DEPS_BY_TYPE.get(object_type, {})
|
by_type = RIGHT_DEPS_BY_TYPE.get(object_type, {})
|
||||||
added = []
|
added = []
|
||||||
queue = list(have.keys())
|
# Вперёд — только от РАЗРЕШЁННЫХ прав: платформа замыкает выданное, а не запрещённое.
|
||||||
|
queue = [n for n in have if have[n]['Value'] == 'true']
|
||||||
while queue:
|
while queue:
|
||||||
name = queue.pop(0)
|
name = queue.pop(0)
|
||||||
need = by_type[name] if name in by_type else RIGHT_DEPS.get(name)
|
need = by_type[name] if name in by_type else RIGHT_DEPS.get(name)
|
||||||
if not need:
|
if not need:
|
||||||
continue
|
continue
|
||||||
for dep in need:
|
for dep in need:
|
||||||
if dep in have or dep not in allowed:
|
if dep not in allowed:
|
||||||
|
continue
|
||||||
|
if dep in have:
|
||||||
|
# Разрешение перебивает запрет — так поступает и платформа при загрузке.
|
||||||
|
if have[dep]['Value'] != 'true':
|
||||||
|
have[dep]['Value'] = 'true'
|
||||||
|
added.append(dep)
|
||||||
|
queue.append(dep)
|
||||||
continue
|
continue
|
||||||
have[dep] = {'Name': dep, 'Value': 'true', 'Condition': None}
|
have[dep] = {'Name': dep, 'Value': 'true', 'Condition': None}
|
||||||
added.append(dep)
|
added.append(dep)
|
||||||
queue.append(dep)
|
queue.append(dep)
|
||||||
|
# Назад — от ЗАПРЕТОВ: право, которому запрещённое нужно, платформа запрещает следом.
|
||||||
|
deny_queue = [n for n in have if have[n]['Value'] != 'true']
|
||||||
|
while deny_queue:
|
||||||
|
name = deny_queue.pop(0)
|
||||||
|
for candidate in allowed:
|
||||||
|
if candidate == name or candidate in have:
|
||||||
|
continue
|
||||||
|
need = by_type[candidate] if candidate in by_type else RIGHT_DEPS.get(candidate)
|
||||||
|
if not need or name not in need:
|
||||||
|
continue
|
||||||
|
have[candidate] = {'Name': candidate, 'Value': 'false', 'Condition': None}
|
||||||
|
added.append(candidate)
|
||||||
|
deny_queue.append(candidate)
|
||||||
if object_type == 'Configuration' and format_rank <= CONFIGURATION_LEGACY_RANK and have:
|
if object_type == 'Configuration' and format_rank <= CONFIGURATION_LEGACY_RANK and have:
|
||||||
for dep in CONFIGURATION_LEGACY_DEPS:
|
for dep in CONFIGURATION_LEGACY_DEPS:
|
||||||
if dep in have:
|
if dep in have:
|
||||||
@@ -1730,6 +1774,19 @@ def main():
|
|||||||
for o in parsed_objects:
|
for o in parsed_objects:
|
||||||
o['Rights'] = sort_rights_canonical(o['Name'], o['Rights'])
|
o['Rights'] = sort_rights_canonical(o['Name'], o['Rights'])
|
||||||
|
|
||||||
|
# Записи, равные умолчанию роли, платформа не хранит — отбрасываем их сами и говорим об этом.
|
||||||
|
dropped_by_default = []
|
||||||
|
for obj in parsed_objects:
|
||||||
|
default_value = get_default_right_value(obj['Name'], sfno, sfab)
|
||||||
|
kept = []
|
||||||
|
for right in obj['Rights']:
|
||||||
|
if right['Value'] == default_value:
|
||||||
|
dropped_by_default.append(f"{obj['Name']}.{right['Name']}")
|
||||||
|
continue
|
||||||
|
kept.append(right)
|
||||||
|
obj['Rights'] = kept
|
||||||
|
parsed_objects = [o for o in parsed_objects if o['Rights']]
|
||||||
|
|
||||||
# Object blocks
|
# Object blocks
|
||||||
total_rights = 0
|
total_rights = 0
|
||||||
for obj in parsed_objects:
|
for obj in parsed_objects:
|
||||||
@@ -1799,6 +1856,9 @@ def main():
|
|||||||
print(f" Metadata: {metadata_path}")
|
print(f" Metadata: {metadata_path}")
|
||||||
print(f" Rights: {rights_path}")
|
print(f" Rights: {rights_path}")
|
||||||
print(f" Objects: {len(parsed_objects)}, Rights: {total_rights}, Templates: {template_count}")
|
print(f" Objects: {len(parsed_objects)}, Rights: {total_rights}, Templates: {template_count}")
|
||||||
|
if dropped_by_default:
|
||||||
|
print("[role-compile] Не записаны права, совпадающие с умолчанием роли "
|
||||||
|
f"(платформа их не хранит): {', '.join(dropped_by_default)}", file=sys.stderr)
|
||||||
for note in closure_notes:
|
for note in closure_notes:
|
||||||
print(note)
|
print(note)
|
||||||
if reg_result == 'added':
|
if reg_result == 'added':
|
||||||
|
|||||||
@@ -87,10 +87,17 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/role-edit.ps1" -Rol
|
|||||||
отчёта — `Use`. Снятие работает в обратную сторону: снимаешь `Read` — уходят и права, которые его
|
отчёта — `Use`. Снятие работает в обратную сторону: снимаешь `Read` — уходят и права, которые его
|
||||||
требуют. Дописанное и снятое каскадом перечисляется в выводе.
|
требуют. Дописанное и снятое каскадом перечисляется в выводе.
|
||||||
|
|
||||||
Реквизиты, табличные части, измерения и ресурсы по умолчанию наследуют права своего объекта, и
|
Роль хранит только то, что отличается от её умолчаний, — всё совпавшее навык не пишет и говорит
|
||||||
выдавать их отдельно бессмысленно — платформа такую запись не сохранит. Ограничивают их через
|
об этом:
|
||||||
`deny-rights`. Выдавать права реквизитам поштучно имеет смысл только в роли с
|
|
||||||
`setForAttributesByDefault=false`.
|
| Где | Что имеет смысл |
|
||||||
|
|-----|-----------------|
|
||||||
|
| объект верхнего уровня, `setForNewObjects=false` (умолчание) | выдача прав; запрет бессмыслен |
|
||||||
|
| объект верхнего уровня, `setForNewObjects=true` | запрет; выдача бессмысленна |
|
||||||
|
| реквизит, ТЧ, измерение, ресурс, `setForAttributesByDefault=true` (умолчание) | запрет: права наследуются от объекта |
|
||||||
|
| они же при `setForAttributesByDefault=false` | и выдача, и запрет |
|
||||||
|
|
||||||
|
Запрет тянет за собой права, которым запрещённое нужно: `View=false` у реквизита уносит `Edit`.
|
||||||
|
|
||||||
Тип или имя права вне допустимого списка — отказ: файл не меняется, ошибки печатаются все разом.
|
Тип или имя права вне допустимого списка — отказ: файл не меняется, ошибки печатаются все разом.
|
||||||
Полные таблицы «тип → права» и виды вложенности — в справке `/role-compile`.
|
Полные таблицы «тип → права» и виды вложенности — в справке `/role-compile`.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# role-edit v1.2 — Edit existing 1C role rights in place
|
# role-edit v1.3 — Edit existing 1C role rights in place
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
[CmdletBinding(PositionalBinding=$false)]
|
[CmdletBinding(PositionalBinding=$false)]
|
||||||
param(
|
param(
|
||||||
@@ -854,32 +854,73 @@ $script:configurationLegacyDeps = @("AnalyticsSystemClient","MainWindowModeEmbed
|
|||||||
$script:configurationLegacyRank = 218
|
$script:configurationLegacyRank = 218
|
||||||
|
|
||||||
# Замыкание набора прав объекта. Возвращает @{ Rights = <итог>; Added = <что дописано> }.
|
# Замыкание набора прав объекта. Возвращает @{ Rights = <итог>; Added = <что дописано> }.
|
||||||
|
# Платформа хранит только то, что ОТЛИЧАЕТСЯ от значения по умолчанию для роли: при
|
||||||
|
# setForNewObjects=false на верхнем уровне живут разрешения, при true — запреты; у реквизитных
|
||||||
|
# вложенных объектов ту же роль играет setForAttributesByDefault. Совпавшее с умолчанием
|
||||||
|
# платформа выбрасывает при первой же загрузке, поэтому не пишем его и сами.
|
||||||
|
$script:attributeKinds = @(
|
||||||
|
"Attribute","StandardAttribute","TabularSection","StandardTabularSection",
|
||||||
|
"Dimension","Resource","AccountingFlag","ExtDimensionAccountingFlag","AddressingAttribute"
|
||||||
|
)
|
||||||
|
|
||||||
|
function Get-DefaultRightValue {
|
||||||
|
param([string]$objName, [string]$setForNewObjects, [string]$setForAttributesByDefault)
|
||||||
|
$parts = $objName -split '\.'
|
||||||
|
if ($parts.Count -lt 3) { return $setForNewObjects }
|
||||||
|
# Внешние источники данных под это правило не проверялись — трогаем только то, что замерено.
|
||||||
|
if ($parts[0] -eq 'ExternalDataSource') { return "false" }
|
||||||
|
$kind = $parts[$parts.Count-2]
|
||||||
|
if ($script:attributeKinds -contains $kind) { return $setForAttributesByDefault }
|
||||||
|
# Команды, подсистемы, операции сервисов флагами роли не управляются — там живут разрешения.
|
||||||
|
return "false"
|
||||||
|
}
|
||||||
|
|
||||||
function Close-RightsDependencies {
|
function Close-RightsDependencies {
|
||||||
param([string]$objName, $rights, [int]$formatRank)
|
param([string]$objName, $rights, [int]$formatRank)
|
||||||
$parts = $objName -split '\.'
|
$parts = $objName -split '\.'
|
||||||
# У вложенных объектов (реквизит, ТЧ, измерение) зависимостей нет — платформа их не трогает.
|
$nested = $parts.Count -ge 3
|
||||||
if ($parts.Count -ge 3) { return @{ Rights = $rights; Added = @() } }
|
|
||||||
$objectType = $parts[0]
|
$objectType = $parts[0]
|
||||||
$allowed = $script:knownRights[$objectType]
|
$allowed = if ($nested) { Get-NestedRights -objectType $objectType -kind (Get-NestedKind $objName) }
|
||||||
|
else { $script:knownRights[$objectType] }
|
||||||
if (-not $allowed) { return @{ Rights = $rights; Added = @() } }
|
if (-not $allowed) { return @{ Rights = $rights; Added = @() } }
|
||||||
$have = [ordered]@{}
|
$have = [ordered]@{}
|
||||||
foreach ($r in $rights) { if (-not $have.Contains($r.Name)) { $have[$r.Name] = $r } }
|
foreach ($r in $rights) { if (-not $have.Contains($r.Name)) { $have[$r.Name] = $r } }
|
||||||
$byType = $script:rightDepsByType[$objectType]
|
$byType = $script:rightDepsByType[$objectType]
|
||||||
$added = @()
|
$added = @()
|
||||||
$queue = @($have.Keys)
|
# Вперёд — только от РАЗРЕШЁННЫХ прав: платформа замыкает выданное, а не запрещённое.
|
||||||
|
$queue = @($have.Keys | Where-Object { $have[$_].Value -eq "true" })
|
||||||
while ($queue.Count -gt 0) {
|
while ($queue.Count -gt 0) {
|
||||||
$name = $queue[0]
|
$name = $queue[0]
|
||||||
$queue = @($queue | Select-Object -Skip 1)
|
$queue = @($queue | Select-Object -Skip 1)
|
||||||
$need = if ($byType -and $byType.Contains($name)) { $byType[$name] } else { $script:rightDeps[$name] }
|
$need = if ($byType -and $byType.Contains($name)) { $byType[$name] } else { $script:rightDeps[$name] }
|
||||||
if (-not $need) { continue }
|
if (-not $need) { continue }
|
||||||
foreach ($dep in $need) {
|
foreach ($dep in $need) {
|
||||||
if ($have.Contains($dep)) { continue }
|
|
||||||
if ($allowed -notcontains $dep) { continue }
|
if ($allowed -notcontains $dep) { continue }
|
||||||
|
if ($have.Contains($dep)) {
|
||||||
|
# Разрешение перебивает запрет — так поступает и платформа при загрузке.
|
||||||
|
if ($have[$dep].Value -ne "true") { $have[$dep].Value = "true"; $added += $dep; $queue += $dep }
|
||||||
|
continue
|
||||||
|
}
|
||||||
$have[$dep] = @{ Name = $dep; Value = "true"; Condition = $null }
|
$have[$dep] = @{ Name = $dep; Value = "true"; Condition = $null }
|
||||||
$added += $dep
|
$added += $dep
|
||||||
$queue += $dep
|
$queue += $dep
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
# Назад — от ЗАПРЕТОВ: право, которому запрещённое нужно, платформа запрещает следом.
|
||||||
|
$denyQueue = @($have.Keys | Where-Object { $have[$_].Value -ne "true" })
|
||||||
|
while ($denyQueue.Count -gt 0) {
|
||||||
|
$name = $denyQueue[0]
|
||||||
|
$denyQueue = @($denyQueue | Select-Object -Skip 1)
|
||||||
|
foreach ($candidate in $allowed) {
|
||||||
|
if ($candidate -eq $name) { continue }
|
||||||
|
$need = if ($byType -and $byType.Contains($candidate)) { $byType[$candidate] } else { $script:rightDeps[$candidate] }
|
||||||
|
if (-not $need -or $need -notcontains $name) { continue }
|
||||||
|
if ($have.Contains($candidate)) { continue }
|
||||||
|
$have[$candidate] = @{ Name = $candidate; Value = "false"; Condition = $null }
|
||||||
|
$added += $candidate
|
||||||
|
$denyQueue += $candidate
|
||||||
|
}
|
||||||
|
}
|
||||||
if ($objectType -eq 'Configuration' -and $formatRank -le $script:configurationLegacyRank -and $have.Count -gt 0) {
|
if ($objectType -eq 'Configuration' -and $formatRank -le $script:configurationLegacyRank -and $have.Count -gt 0) {
|
||||||
foreach ($dep in $script:configurationLegacyDeps) {
|
foreach ($dep in $script:configurationLegacyDeps) {
|
||||||
if ($have.Contains($dep)) { continue }
|
if ($have.Contains($dep)) { continue }
|
||||||
@@ -1452,6 +1493,18 @@ $script:ns = New-Object System.Xml.XmlNamespaceManager($script:xmlDoc.NameTable)
|
|||||||
$script:ns.AddNamespace("rt", $script:mdNs)
|
$script:ns.AddNamespace("rt", $script:mdNs)
|
||||||
$script:formatVersion = if ($script:root.HasAttribute("version")) { $script:root.GetAttribute("version") } else { "2.17" }
|
$script:formatVersion = if ($script:root.HasAttribute("version")) { $script:root.GetAttribute("version") } else { "2.17" }
|
||||||
$script:formatRank = Get-FormatRank $script:formatVersion
|
$script:formatRank = Get-FormatRank $script:formatVersion
|
||||||
|
# Умолчания роли решают, какие записи платформа хранит: совпавшее с умолчанием она выбрасывает.
|
||||||
|
$script:roleSfno = $script:root.SelectSingleNode("rt:setForNewObjects", $script:ns).InnerText
|
||||||
|
$script:roleSfab = $script:root.SelectSingleNode("rt:setForAttributesByDefault", $script:ns).InnerText
|
||||||
|
$script:droppedByDefault = @()
|
||||||
|
|
||||||
|
function Test-RightStored {
|
||||||
|
param([string]$objName, [string]$rightName, [string]$value)
|
||||||
|
$default = Get-DefaultRightValue $objName $script:roleSfno $script:roleSfab
|
||||||
|
if ($value -ne $default) { return $true }
|
||||||
|
$script:droppedByDefault += "$objName.$rightName"
|
||||||
|
return $false
|
||||||
|
}
|
||||||
|
|
||||||
$script:addCount = 0
|
$script:addCount = 0
|
||||||
$script:removeCount = 0
|
$script:removeCount = 0
|
||||||
@@ -1737,6 +1790,7 @@ function Apply-AddRights($spec) {
|
|||||||
$added = @()
|
$added = @()
|
||||||
$indent = Get-ChildIndent $objNode
|
$indent = Get-ChildIndent $objNode
|
||||||
foreach ($rightName in $final) {
|
foreach ($rightName in $final) {
|
||||||
|
if (-not (Test-RightStored $spec.Name $rightName 'true')) { continue }
|
||||||
$node = Find-RightNode $objNode $rightName
|
$node = Find-RightNode $objNode $rightName
|
||||||
if ($node) {
|
if ($node) {
|
||||||
if ((Get-RightNodeValue $node) -ne 'true') {
|
if ((Get-RightNodeValue $node) -ne 'true') {
|
||||||
@@ -1790,6 +1844,7 @@ function Apply-SetRights($spec) {
|
|||||||
$closure = Close-RightsDependencies -objName $spec.Name -rights @($spec.Rights | ForEach-Object { @{ Name = $_; Value = "true"; Condition = $null } }) -formatRank $script:formatRank
|
$closure = Close-RightsDependencies -objName $spec.Name -rights @($spec.Rights | ForEach-Object { @{ Name = $_; Value = "true"; Condition = $null } }) -formatRank $script:formatRank
|
||||||
$indent = Get-ChildIndent $objNode
|
$indent = Get-ChildIndent $objNode
|
||||||
foreach ($rightName in @($closure.Rights | ForEach-Object { $_.Name })) {
|
foreach ($rightName in @($closure.Rights | ForEach-Object { $_.Name })) {
|
||||||
|
if (-not (Test-RightStored $spec.Name $rightName 'true')) { continue }
|
||||||
$new = New-RightNode $rightName 'true' $indent
|
$new = New-RightNode $rightName 'true' $indent
|
||||||
Insert-RightCanonical $objNode $new $spec.Name
|
Insert-RightCanonical $objNode $new $spec.Name
|
||||||
$script:addCount++
|
$script:addCount++
|
||||||
@@ -1873,6 +1928,7 @@ function Apply-DenyRights($spec) {
|
|||||||
$denied = @()
|
$denied = @()
|
||||||
$indent = Get-ChildIndent $objNode
|
$indent = Get-ChildIndent $objNode
|
||||||
foreach ($rightName in $toDeny) {
|
foreach ($rightName in $toDeny) {
|
||||||
|
if (-not (Test-RightStored $spec.Name $rightName 'false')) { continue }
|
||||||
$node = Find-RightNode $objNode $rightName
|
$node = Find-RightNode $objNode $rightName
|
||||||
if ($node) {
|
if ($node) {
|
||||||
if ((Get-RightNodeValue $node) -eq 'false') { continue }
|
if ((Get-RightNodeValue $node) -eq 'false') { continue }
|
||||||
@@ -1887,7 +1943,8 @@ function Apply-DenyRights($spec) {
|
|||||||
$script:rightsDirty = $true
|
$script:rightsDirty = $true
|
||||||
}
|
}
|
||||||
if ($denied.Count -eq 0) {
|
if ($denied.Count -eq 0) {
|
||||||
Add-Note " $($spec.Name): права уже запрещены, изменений нет"
|
$reason = if ($script:droppedByDefault -match [regex]::Escape($spec.Name)) { "запрет совпадает с умолчанием роли и платформой не хранится" } else { "права уже запрещены" }
|
||||||
|
Add-Note " $($spec.Name): $reason, изменений нет"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
$cascade = @($denied | Where-Object { $spec.Rights -notcontains $_ })
|
$cascade = @($denied | Where-Object { $spec.Rights -notcontains $_ })
|
||||||
@@ -2301,6 +2358,9 @@ Write-Host "[OK] Роль '$($script:paths.RoleName)' обновлена"
|
|||||||
Write-Host " Rights: $($script:rightsPath)"
|
Write-Host " Rights: $($script:rightsPath)"
|
||||||
foreach ($note in $script:notes) { Write-Host $note }
|
foreach ($note in $script:notes) { Write-Host $note }
|
||||||
Write-Host " Added: $($script:addCount), Removed: $($script:removeCount), Modified: $($script:modifyCount)"
|
Write-Host " Added: $($script:addCount), Removed: $($script:removeCount), Modified: $($script:modifyCount)"
|
||||||
|
if ($script:droppedByDefault.Count -gt 0) {
|
||||||
|
[Console]::Error.WriteLine("[role-edit] Не записаны права, совпадающие с умолчанием роли (платформа их не хранит): $($script:droppedByDefault -join ', ')")
|
||||||
|
}
|
||||||
|
|
||||||
if (-not $NoValidate) {
|
if (-not $NoValidate) {
|
||||||
$validateScript = Join-Path (Join-Path $PSScriptRoot "..\..\role-validate") "scripts\role-validate.ps1"
|
$validateScript = Join-Path (Join-Path $PSScriptRoot "..\..\role-validate") "scripts\role-validate.ps1"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# role-edit v1.2 — Edit existing 1C role rights in place
|
# role-edit v1.3 — Edit existing 1C role rights in place
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
@@ -794,14 +794,37 @@ CONFIGURATION_LEGACY_DEPS = ["AnalyticsSystemClient", "MainWindowModeEmbeddedWor
|
|||||||
CONFIGURATION_LEGACY_RANK = 218
|
CONFIGURATION_LEGACY_RANK = 218
|
||||||
|
|
||||||
|
|
||||||
|
# Платформа хранит только то, что ОТЛИЧАЕТСЯ от значения по умолчанию для роли: при
|
||||||
|
# setForNewObjects=false на верхнем уровне живут разрешения, при true — запреты; у реквизитных
|
||||||
|
# вложенных объектов ту же роль играет setForAttributesByDefault. Совпавшее с умолчанием
|
||||||
|
# платформа выбрасывает при первой же загрузке, поэтому не пишем его и сами.
|
||||||
|
ATTRIBUTE_KINDS = [
|
||||||
|
"Attribute", "StandardAttribute", "TabularSection", "StandardTabularSection",
|
||||||
|
"Dimension", "Resource", "AccountingFlag", "ExtDimensionAccountingFlag", "AddressingAttribute",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def get_default_right_value(object_name, set_for_new_objects, set_for_attributes_by_default):
|
||||||
|
parts = object_name.split('.')
|
||||||
|
if len(parts) < 3:
|
||||||
|
return set_for_new_objects
|
||||||
|
# Внешние источники данных под это правило не проверялись — трогаем только то, что замерено.
|
||||||
|
if parts[0] == 'ExternalDataSource':
|
||||||
|
return "false"
|
||||||
|
kind = parts[-2]
|
||||||
|
if kind in ATTRIBUTE_KINDS:
|
||||||
|
return set_for_attributes_by_default
|
||||||
|
# Команды, подсистемы, операции сервисов флагами роли не управляются — там живут разрешения.
|
||||||
|
return "false"
|
||||||
|
|
||||||
|
|
||||||
def close_rights_dependencies(object_name, rights, format_rank):
|
def close_rights_dependencies(object_name, rights, format_rank):
|
||||||
"""Замыкание набора прав объекта. Возвращает (итоговые права, что дописано)."""
|
"""Замыкание набора прав объекта. Возвращает (итоговые права, что дописано)."""
|
||||||
parts = object_name.split('.')
|
parts = object_name.split('.')
|
||||||
# У вложенных объектов (реквизит, ТЧ, измерение) зависимостей нет — платформа их не трогает.
|
nested = len(parts) >= 3
|
||||||
if len(parts) >= 3:
|
|
||||||
return rights, []
|
|
||||||
object_type = parts[0]
|
object_type = parts[0]
|
||||||
allowed = KNOWN_RIGHTS.get(object_type)
|
allowed = (get_nested_rights(object_type, get_nested_kind(object_name)) if nested
|
||||||
|
else KNOWN_RIGHTS.get(object_type))
|
||||||
if not allowed:
|
if not allowed:
|
||||||
return rights, []
|
return rights, []
|
||||||
have = {}
|
have = {}
|
||||||
@@ -809,18 +832,39 @@ def close_rights_dependencies(object_name, rights, format_rank):
|
|||||||
have.setdefault(r['Name'], r)
|
have.setdefault(r['Name'], r)
|
||||||
by_type = RIGHT_DEPS_BY_TYPE.get(object_type, {})
|
by_type = RIGHT_DEPS_BY_TYPE.get(object_type, {})
|
||||||
added = []
|
added = []
|
||||||
queue = list(have.keys())
|
# Вперёд — только от РАЗРЕШЁННЫХ прав: платформа замыкает выданное, а не запрещённое.
|
||||||
|
queue = [n for n in have if have[n]['Value'] == 'true']
|
||||||
while queue:
|
while queue:
|
||||||
name = queue.pop(0)
|
name = queue.pop(0)
|
||||||
need = by_type[name] if name in by_type else RIGHT_DEPS.get(name)
|
need = by_type[name] if name in by_type else RIGHT_DEPS.get(name)
|
||||||
if not need:
|
if not need:
|
||||||
continue
|
continue
|
||||||
for dep in need:
|
for dep in need:
|
||||||
if dep in have or dep not in allowed:
|
if dep not in allowed:
|
||||||
|
continue
|
||||||
|
if dep in have:
|
||||||
|
# Разрешение перебивает запрет — так поступает и платформа при загрузке.
|
||||||
|
if have[dep]['Value'] != 'true':
|
||||||
|
have[dep]['Value'] = 'true'
|
||||||
|
added.append(dep)
|
||||||
|
queue.append(dep)
|
||||||
continue
|
continue
|
||||||
have[dep] = {'Name': dep, 'Value': 'true', 'Condition': None}
|
have[dep] = {'Name': dep, 'Value': 'true', 'Condition': None}
|
||||||
added.append(dep)
|
added.append(dep)
|
||||||
queue.append(dep)
|
queue.append(dep)
|
||||||
|
# Назад — от ЗАПРЕТОВ: право, которому запрещённое нужно, платформа запрещает следом.
|
||||||
|
deny_queue = [n for n in have if have[n]['Value'] != 'true']
|
||||||
|
while deny_queue:
|
||||||
|
name = deny_queue.pop(0)
|
||||||
|
for candidate in allowed:
|
||||||
|
if candidate == name or candidate in have:
|
||||||
|
continue
|
||||||
|
need = by_type[candidate] if candidate in by_type else RIGHT_DEPS.get(candidate)
|
||||||
|
if not need or name not in need:
|
||||||
|
continue
|
||||||
|
have[candidate] = {'Name': candidate, 'Value': 'false', 'Condition': None}
|
||||||
|
added.append(candidate)
|
||||||
|
deny_queue.append(candidate)
|
||||||
if object_type == 'Configuration' and format_rank <= CONFIGURATION_LEGACY_RANK and have:
|
if object_type == 'Configuration' and format_rank <= CONFIGURATION_LEGACY_RANK and have:
|
||||||
for dep in CONFIGURATION_LEGACY_DEPS:
|
for dep in CONFIGURATION_LEGACY_DEPS:
|
||||||
if dep in have:
|
if dep in have:
|
||||||
@@ -1501,10 +1545,20 @@ class Editor:
|
|||||||
self.modify_count = 0
|
self.modify_count = 0
|
||||||
self.notes = []
|
self.notes = []
|
||||||
self.pending = []
|
self.pending = []
|
||||||
|
# Умолчания роли решают, какие записи платформа хранит: совпавшее с умолчанием она выбрасывает.
|
||||||
|
self.role_sfno = node_text(self.root, "setForNewObjects")
|
||||||
|
self.role_sfab = node_text(self.root, "setForAttributesByDefault")
|
||||||
|
self.dropped_by_default = []
|
||||||
|
|
||||||
def note(self, text):
|
def note(self, text):
|
||||||
self.notes.append(text)
|
self.notes.append(text)
|
||||||
|
|
||||||
|
def right_stored(self, obj_name, right_name, value):
|
||||||
|
if value != get_default_right_value(obj_name, self.role_sfno, self.role_sfab):
|
||||||
|
return True
|
||||||
|
self.dropped_by_default.append(f"{obj_name}.{right_name}")
|
||||||
|
return False
|
||||||
|
|
||||||
# --- Разбор значений операций ---
|
# --- Разбор значений операций ---
|
||||||
|
|
||||||
def parse_batch(self, value):
|
def parse_batch(self, value):
|
||||||
@@ -1751,6 +1805,8 @@ class Editor:
|
|||||||
indent = self.child_indent(obj_node)
|
indent = self.child_indent(obj_node)
|
||||||
for right in closed:
|
for right in closed:
|
||||||
name = right["Name"]
|
name = right["Name"]
|
||||||
|
if not self.right_stored(spec["Name"], name, "true"):
|
||||||
|
continue
|
||||||
node = self.find_right(obj_node, name)
|
node = self.find_right(obj_node, name)
|
||||||
if node is not None:
|
if node is not None:
|
||||||
if node_text(node, "value") != "true":
|
if node_text(node, "value") != "true":
|
||||||
@@ -1792,6 +1848,8 @@ class Editor:
|
|||||||
self.format_rank)
|
self.format_rank)
|
||||||
indent = self.child_indent(obj_node)
|
indent = self.child_indent(obj_node)
|
||||||
for right in closed:
|
for right in closed:
|
||||||
|
if not self.right_stored(spec["Name"], right["Name"], "true"):
|
||||||
|
continue
|
||||||
new_el = self.make_right(right["Name"], "true", indent)
|
new_el = self.make_right(right["Name"], "true", indent)
|
||||||
self.insert_right_canonical(obj_node, new_el, spec["Name"])
|
self.insert_right_canonical(obj_node, new_el, spec["Name"])
|
||||||
self.add_count += 1
|
self.add_count += 1
|
||||||
@@ -1852,6 +1910,8 @@ class Editor:
|
|||||||
denied = []
|
denied = []
|
||||||
indent = self.child_indent(obj_node)
|
indent = self.child_indent(obj_node)
|
||||||
for right_name in to_deny:
|
for right_name in to_deny:
|
||||||
|
if not self.right_stored(spec["Name"], right_name, "false"):
|
||||||
|
continue
|
||||||
node = self.find_right(obj_node, right_name)
|
node = self.find_right(obj_node, right_name)
|
||||||
if node is not None:
|
if node is not None:
|
||||||
if node_text(node, "value") == "false":
|
if node_text(node, "value") == "false":
|
||||||
@@ -1865,7 +1925,10 @@ class Editor:
|
|||||||
denied.append(right_name)
|
denied.append(right_name)
|
||||||
self.rights_dirty = True
|
self.rights_dirty = True
|
||||||
if not denied:
|
if not denied:
|
||||||
self.note(f" {spec['Name']}: права уже запрещены, изменений нет")
|
reason = ("запрет совпадает с умолчанием роли и платформой не хранится"
|
||||||
|
if any(d.startswith(spec['Name'] + '.') for d in self.dropped_by_default)
|
||||||
|
else "права уже запрещены")
|
||||||
|
self.note(f" {spec['Name']}: {reason}, изменений нет")
|
||||||
return
|
return
|
||||||
cascade = [r for r in denied if r not in spec["Rights"]]
|
cascade = [r for r in denied if r not in spec["Rights"]]
|
||||||
note = f" {spec['Name']}: запрещено — {', '.join(denied)}"
|
note = f" {spec['Name']}: запрещено — {', '.join(denied)}"
|
||||||
@@ -2218,6 +2281,9 @@ def main():
|
|||||||
for note in ed.notes:
|
for note in ed.notes:
|
||||||
print(note)
|
print(note)
|
||||||
print(f" Added: {ed.add_count}, Removed: {ed.remove_count}, Modified: {ed.modify_count}")
|
print(f" Added: {ed.add_count}, Removed: {ed.remove_count}, Modified: {ed.modify_count}")
|
||||||
|
if ed.dropped_by_default:
|
||||||
|
print("[role-edit] Не записаны права, совпадающие с умолчанием роли "
|
||||||
|
f"(платформа их не хранит): {', '.join(ed.dropped_by_default)}", file=sys.stderr)
|
||||||
|
|
||||||
if not args.NoValidate:
|
if not args.NoValidate:
|
||||||
validate_script = os.path.normpath(os.path.join(
|
validate_script = os.path.normpath(os.path.join(
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"name": "Права, совпадающие с умолчанием роли, не пишутся — платформа их не хранит",
|
||||||
|
"setup": "fixture:view-preset-fx",
|
||||||
|
"input": {
|
||||||
|
"name": "УмолчанияРоли",
|
||||||
|
"synonym": "Умолчания роли",
|
||||||
|
"objects": [
|
||||||
|
{
|
||||||
|
"name": "Catalog.Номенклатура",
|
||||||
|
"preset": "view",
|
||||||
|
"rights": {
|
||||||
|
"Delete": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"validatePath": "Roles/УмолчанияРоли",
|
||||||
|
"expect": {
|
||||||
|
"stderrContains": [
|
||||||
|
"Не записаны права, совпадающие с умолчанием роли"
|
||||||
|
],
|
||||||
|
"fileNotContains": {
|
||||||
|
"file": "Roles/УмолчанияРоли/Ext/Rights.xml",
|
||||||
|
"text": "<value>false</value>"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,7 +14,8 @@
|
|||||||
"ExternalDataSource.Источник.Table.Заказы: Read, View",
|
"ExternalDataSource.Источник.Table.Заказы: Read, View",
|
||||||
"ExternalDataSource.Источник.Table.Заказы.Field.Сумма: View, Edit",
|
"ExternalDataSource.Источник.Table.Заказы.Field.Сумма: View, Edit",
|
||||||
"ExternalDataSource.Источник.Cube.Продажи.Dimension.Период: View"
|
"ExternalDataSource.Источник.Cube.Продажи.Dimension.Период: View"
|
||||||
]
|
],
|
||||||
|
"setForAttributesByDefault": false
|
||||||
},
|
},
|
||||||
"expect": {
|
"expect": {
|
||||||
"files": [
|
"files": [
|
||||||
|
|||||||
+91
@@ -0,0 +1,91 @@
|
|||||||
|
<?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/>
|
||||||
|
</Catalog>
|
||||||
|
</MetaDataObject>
|
||||||
@@ -0,0 +1,254 @@
|
|||||||
|
<?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/>
|
||||||
|
<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>
|
||||||
|
<Role>УмолчанияРоли</Role>
|
||||||
|
<Catalog>Номенклатура</Catalog>
|
||||||
|
<DataProcessor>Загрузка</DataProcessor>
|
||||||
|
</ChildObjects>
|
||||||
|
</Configuration>
|
||||||
|
</MetaDataObject>
|
||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
<?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">
|
||||||
|
<DataProcessor uuid="UUID-001">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:GeneratedType name="DataProcessorObject.Загрузка" category="Object">
|
||||||
|
<xr:TypeId>UUID-002</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-003</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="DataProcessorManager.Загрузка" category="Manager">
|
||||||
|
<xr:TypeId>UUID-004</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-005</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>Загрузка</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Загрузка</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<UseStandardCommands>true</UseStandardCommands>
|
||||||
|
<DefaultForm/>
|
||||||
|
<AuxiliaryForm/>
|
||||||
|
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||||
|
<ExtendedPresentation/>
|
||||||
|
<Explanation/>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects/>
|
||||||
|
</DataProcessor>
|
||||||
|
</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>
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
<?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">
|
||||||
|
<Role uuid="UUID-001">
|
||||||
|
<Properties>
|
||||||
|
<Name>УмолчанияРоли</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Умолчания роли</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
</Properties>
|
||||||
|
</Role>
|
||||||
|
</MetaDataObject>
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Rights xmlns="http://v8.1c.ru/8.2/roles" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Rights" version="2.17">
|
||||||
|
<setForNewObjects>false</setForNewObjects>
|
||||||
|
<setForAttributesByDefault>true</setForAttributesByDefault>
|
||||||
|
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
|
||||||
|
<object>
|
||||||
|
<name>Catalog.Номенклатура</name>
|
||||||
|
<right>
|
||||||
|
<name>Read</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>View</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>InputByString</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
</object>
|
||||||
|
</Rights>
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Rights xmlns="http://v8.1c.ru/8.2/roles" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Rights" version="2.17">
|
<Rights xmlns="http://v8.1c.ru/8.2/roles" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Rights" version="2.17">
|
||||||
<setForNewObjects>false</setForNewObjects>
|
<setForNewObjects>false</setForNewObjects>
|
||||||
<setForAttributesByDefault>true</setForAttributesByDefault>
|
<setForAttributesByDefault>false</setForAttributesByDefault>
|
||||||
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
|
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
|
||||||
<object>
|
<object>
|
||||||
<name>WebService.Обмен.Operation.Загрузить</name>
|
<name>WebService.Обмен.Operation.Загрузить</name>
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"name": "Запрет на объекте верхнего уровня не пишется: платформа его не хранит",
|
||||||
|
"setup": "fixture:role-base",
|
||||||
|
"params": {
|
||||||
|
"rolePath": "Roles/Менеджер"
|
||||||
|
},
|
||||||
|
"input": [
|
||||||
|
{
|
||||||
|
"operation": "deny-rights",
|
||||||
|
"value": "Catalog.Товары: Delete"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"expect": {
|
||||||
|
"stdoutContains": [
|
||||||
|
"запрет совпадает с умолчанием роли"
|
||||||
|
],
|
||||||
|
"stderrContains": [
|
||||||
|
"Не записаны права, совпадающие с умолчанием роли"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
+137
@@ -0,0 +1,137 @@
|
|||||||
|
<?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>
|
||||||
|
<Attribute uuid="UUID-012">
|
||||||
|
<Properties>
|
||||||
|
<Name>Цена</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Цена</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Type>
|
||||||
|
<v8:Type>xs:decimal</v8:Type>
|
||||||
|
<v8:NumberQualifiers>
|
||||||
|
<v8:Digits>15</v8:Digits>
|
||||||
|
<v8:FractionDigits>2</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"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:type="xs:decimal">0</FillValue>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<LinkByType/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<Use>ForItem</Use>
|
||||||
|
<Indexing>DontIndex</Indexing>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<DataHistory>Use</DataHistory>
|
||||||
|
</Properties>
|
||||||
|
</Attribute>
|
||||||
|
</ChildObjects>
|
||||||
|
</Catalog>
|
||||||
|
</MetaDataObject>
|
||||||
@@ -0,0 +1,256 @@
|
|||||||
|
<?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/>
|
||||||
|
<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>
|
||||||
|
<Role>Менеджер</Role>
|
||||||
|
<Catalog>Товары</Catalog>
|
||||||
|
<Document>Заказ</Document>
|
||||||
|
<DataProcessor>Загрузка</DataProcessor>
|
||||||
|
<InformationRegister>Цены</InformationRegister>
|
||||||
|
</ChildObjects>
|
||||||
|
</Configuration>
|
||||||
|
</MetaDataObject>
|
||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
<?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">
|
||||||
|
<DataProcessor uuid="UUID-001">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:GeneratedType name="DataProcessorObject.Загрузка" category="Object">
|
||||||
|
<xr:TypeId>UUID-002</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-003</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="DataProcessorManager.Загрузка" category="Manager">
|
||||||
|
<xr:TypeId>UUID-004</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-005</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>Загрузка</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Загрузка</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<UseStandardCommands>true</UseStandardCommands>
|
||||||
|
<DefaultForm/>
|
||||||
|
<AuxiliaryForm/>
|
||||||
|
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||||
|
<ExtendedPresentation/>
|
||||||
|
<Explanation/>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects/>
|
||||||
|
</DataProcessor>
|
||||||
|
</MetaDataObject>
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
<?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">
|
||||||
|
<Document uuid="UUID-001">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:GeneratedType name="DocumentObject.Заказ" category="Object">
|
||||||
|
<xr:TypeId>UUID-002</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-003</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="DocumentRef.Заказ" category="Ref">
|
||||||
|
<xr:TypeId>UUID-004</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-005</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="DocumentSelection.Заказ" category="Selection">
|
||||||
|
<xr:TypeId>UUID-006</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-007</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="DocumentList.Заказ" category="List">
|
||||||
|
<xr:TypeId>UUID-008</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-009</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="DocumentManager.Заказ" 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/>
|
||||||
|
<UseStandardCommands>true</UseStandardCommands>
|
||||||
|
<Numerator/>
|
||||||
|
<NumberType>String</NumberType>
|
||||||
|
<NumberLength>11</NumberLength>
|
||||||
|
<NumberAllowedLength>Variable</NumberAllowedLength>
|
||||||
|
<NumberPeriodicity>Year</NumberPeriodicity>
|
||||||
|
<CheckUnique>true</CheckUnique>
|
||||||
|
<Autonumbering>true</Autonumbering>
|
||||||
|
<Characteristics/>
|
||||||
|
<BasedOn/>
|
||||||
|
<InputByString>
|
||||||
|
<xr:Field>Document.Заказ.StandardAttribute.Number</xr:Field>
|
||||||
|
</InputByString>
|
||||||
|
<CreateOnInput>Use</CreateOnInput>
|
||||||
|
<SearchStringModeOnInputByString>Begin</SearchStringModeOnInputByString>
|
||||||
|
<FullTextSearchOnInputByString>DontUse</FullTextSearchOnInputByString>
|
||||||
|
<ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString>
|
||||||
|
<DefaultObjectForm/>
|
||||||
|
<DefaultListForm/>
|
||||||
|
<DefaultChoiceForm/>
|
||||||
|
<AuxiliaryObjectForm/>
|
||||||
|
<AuxiliaryListForm/>
|
||||||
|
<AuxiliaryChoiceForm/>
|
||||||
|
<Posting>Allow</Posting>
|
||||||
|
<RealTimePosting>Deny</RealTimePosting>
|
||||||
|
<RegisterRecordsDeletion>AutoDelete</RegisterRecordsDeletion>
|
||||||
|
<RegisterRecordsWritingOnPost>WriteSelected</RegisterRecordsWritingOnPost>
|
||||||
|
<SequenceFilling>AutoFill</SequenceFilling>
|
||||||
|
<RegisterRecords/>
|
||||||
|
<PostInPrivilegedMode>true</PostInPrivilegedMode>
|
||||||
|
<UnpostInPrivilegedMode>true</UnpostInPrivilegedMode>
|
||||||
|
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||||
|
<DataLockFields/>
|
||||||
|
<DataLockControlMode>Managed</DataLockControlMode>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<ObjectPresentation/>
|
||||||
|
<ExtendedObjectPresentation/>
|
||||||
|
<ListPresentation/>
|
||||||
|
<ExtendedListPresentation/>
|
||||||
|
<Explanation/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<DataHistory>DontUse</DataHistory>
|
||||||
|
<UpdateDataHistoryImmediatelyAfterWrite>false</UpdateDataHistoryImmediatelyAfterWrite>
|
||||||
|
<ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects/>
|
||||||
|
</Document>
|
||||||
|
</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>
|
||||||
+261
@@ -0,0 +1,261 @@
|
|||||||
|
<?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">
|
||||||
|
<InformationRegister uuid="UUID-001">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:GeneratedType name="InformationRegisterRecord.Цены" category="Record">
|
||||||
|
<xr:TypeId>UUID-002</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-003</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="InformationRegisterManager.Цены" category="Manager">
|
||||||
|
<xr:TypeId>UUID-004</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-005</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="InformationRegisterSelection.Цены" category="Selection">
|
||||||
|
<xr:TypeId>UUID-006</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-007</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="InformationRegisterList.Цены" category="List">
|
||||||
|
<xr:TypeId>UUID-008</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-009</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="InformationRegisterRecordSet.Цены" category="RecordSet">
|
||||||
|
<xr:TypeId>UUID-010</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-011</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="InformationRegisterRecordKey.Цены" category="RecordKey">
|
||||||
|
<xr:TypeId>UUID-012</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-013</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
<xr:GeneratedType name="InformationRegisterRecordManager.Цены" category="RecordManager">
|
||||||
|
<xr:TypeId>UUID-014</xr:TypeId>
|
||||||
|
<xr:ValueId>UUID-015</xr:ValueId>
|
||||||
|
</xr:GeneratedType>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>Цены</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Цены</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<UseStandardCommands>true</UseStandardCommands>
|
||||||
|
<EditType>InDialog</EditType>
|
||||||
|
<DefaultRecordForm/>
|
||||||
|
<DefaultListForm/>
|
||||||
|
<AuxiliaryRecordForm/>
|
||||||
|
<AuxiliaryListForm/>
|
||||||
|
<StandardAttributes>
|
||||||
|
<xr:StandardAttribute name="Active">
|
||||||
|
<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/>
|
||||||
|
<xr:ExtendedEdit>false</xr:ExtendedEdit>
|
||||||
|
<xr:Format/>
|
||||||
|
<xr:ChoiceForm/>
|
||||||
|
<xr:QuickChoice>Auto</xr:QuickChoice>
|
||||||
|
<xr:ChoiceHistoryOnInput>Auto</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/>
|
||||||
|
<xr:Comment/>
|
||||||
|
<xr:FullTextSearch>Use</xr:FullTextSearch>
|
||||||
|
<xr:ChoiceParameterLinks/>
|
||||||
|
<xr:FillValue xsi:nil="true"/>
|
||||||
|
<xr:Mask/>
|
||||||
|
<xr:ChoiceParameters/>
|
||||||
|
</xr:StandardAttribute>
|
||||||
|
<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/>
|
||||||
|
<xr:ExtendedEdit>false</xr:ExtendedEdit>
|
||||||
|
<xr:Format/>
|
||||||
|
<xr:ChoiceForm/>
|
||||||
|
<xr:QuickChoice>Auto</xr:QuickChoice>
|
||||||
|
<xr:ChoiceHistoryOnInput>Auto</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/>
|
||||||
|
<xr:Comment/>
|
||||||
|
<xr:FullTextSearch>Use</xr:FullTextSearch>
|
||||||
|
<xr:ChoiceParameterLinks/>
|
||||||
|
<xr:FillValue xsi:nil="true"/>
|
||||||
|
<xr:Mask/>
|
||||||
|
<xr:ChoiceParameters/>
|
||||||
|
</xr:StandardAttribute>
|
||||||
|
<xr:StandardAttribute name="Recorder">
|
||||||
|
<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/>
|
||||||
|
<xr:ExtendedEdit>false</xr:ExtendedEdit>
|
||||||
|
<xr:Format/>
|
||||||
|
<xr:ChoiceForm/>
|
||||||
|
<xr:QuickChoice>Auto</xr:QuickChoice>
|
||||||
|
<xr:ChoiceHistoryOnInput>Auto</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/>
|
||||||
|
<xr:Comment/>
|
||||||
|
<xr:FullTextSearch>Use</xr:FullTextSearch>
|
||||||
|
<xr:ChoiceParameterLinks/>
|
||||||
|
<xr:FillValue xsi:nil="true"/>
|
||||||
|
<xr:Mask/>
|
||||||
|
<xr:ChoiceParameters/>
|
||||||
|
</xr:StandardAttribute>
|
||||||
|
<xr:StandardAttribute name="Period">
|
||||||
|
<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/>
|
||||||
|
<xr:ExtendedEdit>false</xr:ExtendedEdit>
|
||||||
|
<xr:Format/>
|
||||||
|
<xr:ChoiceForm/>
|
||||||
|
<xr:QuickChoice>Auto</xr:QuickChoice>
|
||||||
|
<xr:ChoiceHistoryOnInput>Auto</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/>
|
||||||
|
<xr:Comment/>
|
||||||
|
<xr:FullTextSearch>Use</xr:FullTextSearch>
|
||||||
|
<xr:ChoiceParameterLinks/>
|
||||||
|
<xr:FillValue xsi:nil="true"/>
|
||||||
|
<xr:Mask/>
|
||||||
|
<xr:ChoiceParameters/>
|
||||||
|
</xr:StandardAttribute>
|
||||||
|
</StandardAttributes>
|
||||||
|
<InformationRegisterPeriodicity>Nonperiodical</InformationRegisterPeriodicity>
|
||||||
|
<WriteMode>Independent</WriteMode>
|
||||||
|
<MainFilterOnPeriod>false</MainFilterOnPeriod>
|
||||||
|
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||||
|
<DataLockControlMode>Managed</DataLockControlMode>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<EnableTotalsSliceFirst>false</EnableTotalsSliceFirst>
|
||||||
|
<EnableTotalsSliceLast>false</EnableTotalsSliceLast>
|
||||||
|
<RecordPresentation/>
|
||||||
|
<ExtendedRecordPresentation/>
|
||||||
|
<ListPresentation/>
|
||||||
|
<ExtendedListPresentation/>
|
||||||
|
<Explanation/>
|
||||||
|
<DataHistory>DontUse</DataHistory>
|
||||||
|
<UpdateDataHistoryImmediatelyAfterWrite>false</UpdateDataHistoryImmediatelyAfterWrite>
|
||||||
|
<ExecuteAfterWriteDataHistoryVersionProcessing>false</ExecuteAfterWriteDataHistoryVersionProcessing>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<Resource uuid="UUID-016">
|
||||||
|
<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>2</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"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:type="xs:decimal">0</FillValue>
|
||||||
|
<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>
|
||||||
|
</Resource>
|
||||||
|
<Dimension 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>cfg:CatalogRef.Товары</v8:Type>
|
||||||
|
</Type>
|
||||||
|
<PasswordMode>false</PasswordMode>
|
||||||
|
<Format/>
|
||||||
|
<EditFormat/>
|
||||||
|
<ToolTip/>
|
||||||
|
<MarkNegatives>false</MarkNegatives>
|
||||||
|
<Mask/>
|
||||||
|
<MultiLine>false</MultiLine>
|
||||||
|
<ExtendedEdit>false</ExtendedEdit>
|
||||||
|
<MinValue xsi:nil="true"/>
|
||||||
|
<MaxValue xsi:nil="true"/>
|
||||||
|
<FillFromFillingValue>false</FillFromFillingValue>
|
||||||
|
<FillValue xsi:nil="true"/>
|
||||||
|
<FillChecking>DontCheck</FillChecking>
|
||||||
|
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
|
||||||
|
<ChoiceParameterLinks/>
|
||||||
|
<ChoiceParameters/>
|
||||||
|
<QuickChoice>Auto</QuickChoice>
|
||||||
|
<CreateOnInput>Auto</CreateOnInput>
|
||||||
|
<ChoiceForm/>
|
||||||
|
<LinkByType/>
|
||||||
|
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
|
||||||
|
<Master>false</Master>
|
||||||
|
<MainFilter>false</MainFilter>
|
||||||
|
<DenyIncompleteValues>false</DenyIncompleteValues>
|
||||||
|
<Indexing>DontIndex</Indexing>
|
||||||
|
<FullTextSearch>Use</FullTextSearch>
|
||||||
|
<DataHistory>Use</DataHistory>
|
||||||
|
</Properties>
|
||||||
|
</Dimension>
|
||||||
|
</ChildObjects>
|
||||||
|
</InformationRegister>
|
||||||
|
</MetaDataObject>
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||||
|
<Language uuid="UUID-001">
|
||||||
|
<Properties>
|
||||||
|
<Name>Русский</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Русский</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<LanguageCode>ru</LanguageCode>
|
||||||
|
</Properties>
|
||||||
|
</Language>
|
||||||
|
</MetaDataObject>
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<?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">
|
||||||
|
<Role uuid="UUID-001">
|
||||||
|
<Properties>
|
||||||
|
<Name>Менеджер</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Менеджер</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
</Properties>
|
||||||
|
</Role>
|
||||||
|
</MetaDataObject>
|
||||||
+92
@@ -0,0 +1,92 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Rights xmlns="http://v8.1c.ru/8.2/roles" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Rights" version="2.17">
|
||||||
|
<setForNewObjects>false</setForNewObjects>
|
||||||
|
<setForAttributesByDefault>true</setForAttributesByDefault>
|
||||||
|
<independentRightsOfChildObjects>false</independentRightsOfChildObjects>
|
||||||
|
<object>
|
||||||
|
<name>Catalog.Товары</name>
|
||||||
|
<right>
|
||||||
|
<name>Read</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>View</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>InputByString</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
</object>
|
||||||
|
<object>
|
||||||
|
<name>Document.Заказ</name>
|
||||||
|
<right>
|
||||||
|
<name>Read</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>Insert</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>Update</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>Delete</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>Posting</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>UndoPosting</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>View</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>InteractiveInsert</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>Edit</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>InteractiveSetDeletionMark</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>InteractiveClearDeletionMark</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>InteractivePosting</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>InteractivePostingRegular</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>InteractiveUndoPosting</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>InteractiveChangeOfPosted</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
<right>
|
||||||
|
<name>InputByString</name>
|
||||||
|
<value>true</value>
|
||||||
|
</right>
|
||||||
|
</object>
|
||||||
|
<restrictionTemplate>
|
||||||
|
<name>ДляОбъекта(Мод)</name>
|
||||||
|
<condition>ГДЕ Организация = &ТекОрг</condition>
|
||||||
|
</restrictionTemplate>
|
||||||
|
</Rights>
|
||||||
@@ -409,6 +409,16 @@ const FAMILIES = [
|
|||||||
// Существует только в PY: PowerShell регистронезависим сам по себе (свойства PSObject, ключи
|
// Существует только в PY: PowerShell регистронезависим сам по себе (свойства PSObject, ключи
|
||||||
// Hashtable, -eq/-contains, имена параметров, ValidateSet), поэтому в .ps1 копии нет и быть
|
// Hashtable, -eq/-contains, имена параметров, ValidateSet), поэтому в .ps1 копии нет и быть
|
||||||
// не должно — ps1: null.
|
// не должно — ps1: null.
|
||||||
|
// Замыкание прав и фильтр значений по умолчанию: обе роли обязаны считать одинаково, иначе
|
||||||
|
// созданная и отредактированная роль разойдутся между собой и с платформой.
|
||||||
|
{
|
||||||
|
name: 'права роли: close_rights_dependencies', py: 'close_rights_dependencies', ps1: 'Close-RightsDependencies',
|
||||||
|
variants: [{ id: 'base', authority: 'role-compile', consumers: ['role-edit'] }],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'права роли: get_default_right_value', py: 'get_default_right_value', ps1: 'Get-DefaultRightValue',
|
||||||
|
variants: [{ id: 'base', authority: 'role-compile', consumers: ['role-edit'] }],
|
||||||
|
},
|
||||||
// Значение операции может быть "@путь" — текст читается из файла. Правило поиска общее:
|
// Значение операции может быть "@путь" — текст читается из файла. Правило поиска общее:
|
||||||
// абсолютный путь как есть, относительный — рядом с DSL (или с редактируемым объектом),
|
// абсолютный путь как есть, относительный — рядом с DSL (или с редактируемым объектом),
|
||||||
// затем в текущем каталоге. Разъедется — и один навык начнёт искать не там, где другой.
|
// затем в текущем каталоге. Разъедется — и один навык начнёт искать не там, где другой.
|
||||||
|
|||||||
Reference in New Issue
Block a user