mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-31 00:37:47 +03:00
feat(cfe-patch-method): устойчивый якорь ресинка, прозрачность, merge-имена файлов
Упрочнение актуализации &ИзменениеИКонтроль (v2.1): - Якорь вставки теперь двусторонний (контекст до+после, окно 3) с расширением: Тир A — уникальная смежная пара; Тир B — одиночная уникальность before/after. Срезает ложные конфликты, когда строка перед вставкой generic/повторяется (пустая, КонецЦикла;, КонецЕсли; и т.п.), сохраняя безопасность (не уверены → конфликт). - Прозрачность: на [АКТУАЛИЗИРОВАН] и ЧАСТИЧНО печатается сводка перенесённого. - Файлы-версии переименованы в конвенцию git-mergetool: base/local/remote/merged (+diff base->remote) вместо v1/v2/current; merged.bsl добавлен. Комментарий в модуле и SKILL.md обновлены. Тесты: +resync-reanchor (generic-строка -> авто), resync-conflict переделан на настоящий конфликт (окружающий блок исчез). 13 кейсов, оба рантайма зелёные, байтовый паритет ps1<->py включая merge-воркспейс. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
a125464caa
commit
39fc1b977d
@@ -77,8 +77,8 @@ allowed-tools:
|
|||||||
Если для метода уже есть перехватчик `&ИзменениеИКонтроль`, повторный вызов **актуализирует** его по текущему оригиналу:
|
Если для метода уже есть перехватчик `&ИзменениеИКонтроль`, повторный вызов **актуализирует** его по текущему оригиналу:
|
||||||
|
|
||||||
- `[АКТУАЛЕН]` — оригинал не менялся, изменений нет;
|
- `[АКТУАЛЕН]` — оригинал не менялся, изменений нет;
|
||||||
- `[АКТУАЛИЗИРОВАН]` — тело обновлено по новому оригиналу, правки (`#Вставка`/`#Удаление`) перенесены автоматически;
|
- `[АКТУАЛИЗИРОВАН]` — тело обновлено по новому оригиналу, правки (`#Вставка`/`#Удаление`) перенесены автоматически (в выводе — сводка перенесённого);
|
||||||
- `[АКТУАЛИЗИРОВАН-ЧАСТИЧНО]` — часть правок не удалось разместить (изменился якорь). Они помечены `// [РЕСИНК-КОНФЛИКТ]` и не потеряны; для анализа выгружаются файлы-версии (`v1.bsl`, `v2.bsl`, `current.bsl`, `diff.txt`) — путь печатается в выводе. Проверь конфликтные блоки и размести вручную.
|
- `[АКТУАЛИЗИРОВАН-ЧАСТИЧНО]` — часть правок не удалось разместить (окружающий контекст изменился). Они помечены `// [РЕСИНК-КОНФЛИКТ]` и не потеряны; в системный temp выгружается merge-воркспейс (`base.bsl` — предок, `local.bsl` — твоя версия с маркерами, `remote.bsl` — новый оригинал, `merged.bsl` — результат, `diff.txt` — base→remote) — путь печатается в выводе. Проверь конфликтные блоки и размести вручную.
|
||||||
|
|
||||||
Повторный вызов `Before`/`After`/`Instead` для уже перехваченного метода не создаёт дубль (`[ПРОПУЩЕН]`).
|
Повторный вызов `Before`/`After`/`Instead` для уже перехваченного метода не создаёт дубль (`[ПРОПУЩЕН]`).
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# cfe-patch-method v2.0 — Source-aware method interceptor for 1C extension (CFE)
|
# cfe-patch-method v2.1 — Source-aware method interceptor for 1C extension (CFE)
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
param(
|
param(
|
||||||
[Parameter(Mandatory)]
|
[Parameter(Mandatory)]
|
||||||
@@ -419,6 +419,62 @@ function Find-UniqueRun {
|
|||||||
return $found
|
return $found
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Resolve where an insertion lands in v2 using two-sided context.
|
||||||
|
# Returns index to "insert after" (-1 = top of body), or $null if ambiguous/conflict.
|
||||||
|
function Resolve-InsertionPoint {
|
||||||
|
param($v2norm, $beforeLines, $afterLines)
|
||||||
|
$nb = $beforeLines.Count; $na = $afterLines.Count
|
||||||
|
|
||||||
|
# Tier A: adjacent pair (before[-1] immediately followed by after[0] in v2), widening symmetrically
|
||||||
|
if ($nb -ge 1 -and $na -ge 1) {
|
||||||
|
$cands = @()
|
||||||
|
for ($k = 0; $k -lt ($v2norm.Count - 1); $k++) {
|
||||||
|
if ($v2norm[$k] -eq $beforeLines[$nb - 1] -and $v2norm[$k + 1] -eq $afterLines[0]) { $cands += $k }
|
||||||
|
}
|
||||||
|
if ($cands.Count -eq 1) { return $cands[0] }
|
||||||
|
if ($cands.Count -gt 1) {
|
||||||
|
$w = 1
|
||||||
|
while ($cands.Count -gt 1 -and ($w -lt $nb -or $w -lt $na)) {
|
||||||
|
$w++
|
||||||
|
$filtered = @()
|
||||||
|
foreach ($k in $cands) {
|
||||||
|
$ok = $true
|
||||||
|
if ($w -le $nb) {
|
||||||
|
if (($k - ($w - 1)) -lt 0 -or $v2norm[$k - ($w - 1)] -ne $beforeLines[$nb - $w]) { $ok = $false }
|
||||||
|
}
|
||||||
|
if ($ok -and $w -le $na) {
|
||||||
|
if (($k + $w) -ge $v2norm.Count -or $v2norm[$k + $w] -ne $afterLines[$w - 1]) { $ok = $false }
|
||||||
|
}
|
||||||
|
if ($ok) { $filtered += $k }
|
||||||
|
}
|
||||||
|
if ($filtered.Count -eq 0) { break }
|
||||||
|
$cands = $filtered
|
||||||
|
}
|
||||||
|
if ($cands.Count -eq 1) { return $cands[0] }
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Tier B: one side changed -> single-side uniqueness
|
||||||
|
if ($nb -ge 1) {
|
||||||
|
$bk = Find-UniqueIndex $v2norm $beforeLines[$nb - 1]
|
||||||
|
if ($bk -ge 0) { return $bk }
|
||||||
|
}
|
||||||
|
if ($na -ge 1) {
|
||||||
|
$ak = Find-UniqueIndex $v2norm $afterLines[0]
|
||||||
|
if ($ak -ge 0) { return ($ak - 1) }
|
||||||
|
}
|
||||||
|
return $null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Truncate a line for compact summary output
|
||||||
|
function Get-Truncated {
|
||||||
|
param([string]$s, [int]$n = 60)
|
||||||
|
$t = $s.Trim()
|
||||||
|
if ($t.Length -gt $n) { return $t.Substring(0, $n) + "…" }
|
||||||
|
return $t
|
||||||
|
}
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# Main
|
# Main
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@@ -556,17 +612,30 @@ if ($dup) {
|
|||||||
$delStart = @{} # v2 index -> $true
|
$delStart = @{} # v2 index -> $true
|
||||||
$delEnd = @{}
|
$delEnd = @{}
|
||||||
$disputed = @()
|
$disputed = @()
|
||||||
|
$transferred = @() # for the summary: @{ Kind; Anchor }
|
||||||
|
|
||||||
foreach ($op in $ops) {
|
foreach ($op in $ops) {
|
||||||
if ($op.Kind -eq 'insert') {
|
if ($op.Kind -eq 'insert') {
|
||||||
if ($op.After -lt 0) { $insertTop += ,$op.Lines; continue }
|
# two-sided context anchor
|
||||||
$anchorKey = $v1norm[$op.After]
|
$beforeLines = @()
|
||||||
$k = Find-UniqueIndex $v2norm $anchorKey
|
if ($op.After -ge 0) {
|
||||||
if ($k -ge 0) {
|
$bs = [Math]::Max(0, $op.After - 2)
|
||||||
|
for ($m = $bs; $m -le $op.After; $m++) { $beforeLines += $v1norm[$m] }
|
||||||
|
}
|
||||||
|
$afterLines = @()
|
||||||
|
$ae = [Math]::Min($v1norm.Count - 1, $op.After + 3)
|
||||||
|
for ($m = $op.After + 1; $m -le $ae; $m++) { $afterLines += $v1norm[$m] }
|
||||||
|
|
||||||
|
$k = Resolve-InsertionPoint $v2norm $beforeLines $afterLines
|
||||||
|
if ($null -eq $k) {
|
||||||
|
$disputed += @{ Kind = 'insert'; Lines = $op.Lines }
|
||||||
|
} elseif ($k -lt 0) {
|
||||||
|
$insertTop += ,$op.Lines
|
||||||
|
$transferred += @{ Kind = 'insert'; Anchor = '(в начало метода)' }
|
||||||
|
} else {
|
||||||
if (-not $insertAfter.ContainsKey($k)) { $insertAfter[$k] = @() }
|
if (-not $insertAfter.ContainsKey($k)) { $insertAfter[$k] = @() }
|
||||||
$insertAfter[$k] += ,$op.Lines
|
$insertAfter[$k] += ,$op.Lines
|
||||||
} else {
|
$transferred += @{ Kind = 'insert'; Anchor = $v2[$k] }
|
||||||
$disputed += @{ Kind = 'insert'; Lines = $op.Lines }
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$keys = @()
|
$keys = @()
|
||||||
@@ -575,6 +644,7 @@ if ($dup) {
|
|||||||
if ($p -ge 0) {
|
if ($p -ge 0) {
|
||||||
$delStart[$p] = $true
|
$delStart[$p] = $true
|
||||||
$delEnd[$p + $keys.Count - 1] = $true
|
$delEnd[$p + $keys.Count - 1] = $true
|
||||||
|
$transferred += @{ Kind = 'delete'; Anchor = $op.Lines[0] }
|
||||||
} else {
|
} else {
|
||||||
$disputed += @{ Kind = 'delete'; Lines = $op.Lines }
|
$disputed += @{ Kind = 'delete'; Lines = $op.Lines }
|
||||||
}
|
}
|
||||||
@@ -599,7 +669,7 @@ if ($dup) {
|
|||||||
# disputed blocks appended with conflict markers (never lost)
|
# disputed blocks appended with conflict markers (never lost)
|
||||||
if ($disputed.Count -gt 0) {
|
if ($disputed.Count -gt 0) {
|
||||||
$newBody += "`t// [РЕСИНК-КОНФЛИКТ] перенесите блоки ниже вручную — исходный якорь изменился в новой версии оригинала."
|
$newBody += "`t// [РЕСИНК-КОНФЛИКТ] перенесите блоки ниже вручную — исходный якорь изменился в новой версии оригинала."
|
||||||
$newBody += "`t// Материалы для анализа см. в выводе команды (файлы v1/v2/current/diff)."
|
$newBody += "`t// Материалы для анализа см. в выводе команды (файлы base/local/remote/merged)."
|
||||||
foreach ($d in $disputed) {
|
foreach ($d in $disputed) {
|
||||||
if ($d.Kind -eq 'insert') {
|
if ($d.Kind -eq 'insert') {
|
||||||
$newBody += "#Вставка"; foreach ($l in $d.Lines) { $newBody += $l }; $newBody += "#КонецВставки"
|
$newBody += "#Вставка"; foreach ($l in $d.Lines) { $newBody += $l }; $newBody += "#КонецВставки"
|
||||||
@@ -632,26 +702,37 @@ if ($dup) {
|
|||||||
|
|
||||||
[System.IO.File]::WriteAllText($extBsl, (($out -join "`r`n") + "`r`n"), $enc)
|
[System.IO.File]::WriteAllText($extBsl, (($out -join "`r`n") + "`r`n"), $enc)
|
||||||
|
|
||||||
|
# transferred summary (shared by full-auto and partial)
|
||||||
|
function Write-TransferSummary {
|
||||||
|
param($items)
|
||||||
|
foreach ($t in $items) {
|
||||||
|
if ($t.Kind -eq 'insert') { Write-Host " • вставка после «$(Get-Truncated $t.Anchor)»" }
|
||||||
|
else { Write-Host " • удаление «$(Get-Truncated $t.Anchor)»" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($disputed.Count -gt 0) {
|
if ($disputed.Count -gt 0) {
|
||||||
# write version files
|
# merge workspace (git-mergetool convention: base/local/remote/merged)
|
||||||
$tmpRoot = Join-Path ([System.IO.Path]::GetTempPath()) ("cfe-resync\" + ($ModulePath -replace '[\\/:*?"<>|]', '_') + "." + $MethodName)
|
$tmpRoot = Join-Path ([System.IO.Path]::GetTempPath()) ("cfe-resync\" + ($ModulePath -replace '[\\/:*?"<>|]', '_') + "." + $MethodName)
|
||||||
if (-not (Test-Path $tmpRoot)) { New-Item -ItemType Directory -Path $tmpRoot -Force | Out-Null }
|
if (-not (Test-Path $tmpRoot)) { New-Item -ItemType Directory -Path $tmpRoot -Force | Out-Null }
|
||||||
[System.IO.File]::WriteAllText((Join-Path $tmpRoot "v1.bsl"), (($v1 -join "`r`n") + "`r`n"), $enc)
|
[System.IO.File]::WriteAllText((Join-Path $tmpRoot "base.bsl"), (($v1 -join "`r`n") + "`r`n"), $enc)
|
||||||
[System.IO.File]::WriteAllText((Join-Path $tmpRoot "v2.bsl"), (($v2 -join "`r`n") + "`r`n"), $enc)
|
[System.IO.File]::WriteAllText((Join-Path $tmpRoot "local.bsl"), (($markedBody -join "`r`n") + "`r`n"), $enc)
|
||||||
[System.IO.File]::WriteAllText((Join-Path $tmpRoot "current.bsl"), (($markedBody -join "`r`n") + "`r`n"), $enc)
|
[System.IO.File]::WriteAllText((Join-Path $tmpRoot "remote.bsl"), (($v2 -join "`r`n") + "`r`n"), $enc)
|
||||||
|
[System.IO.File]::WriteAllText((Join-Path $tmpRoot "merged.bsl"), (($newBlock -join "`r`n") + "`r`n"), $enc)
|
||||||
$diff = @()
|
$diff = @()
|
||||||
$diff += "--- v1 (что было скопировано) vs v2 (новый оригинал) ---"
|
$diff += "--- base -> remote (что изменилось в оригинале) ---"
|
||||||
foreach ($l in $v1) { if ($v2norm -notcontains (Get-Normalized $l)) { $diff += "- $l" } }
|
foreach ($l in $v1) { if ($v2norm -notcontains (Get-Normalized $l)) { $diff += "- $l" } }
|
||||||
foreach ($l in $v2) { if ($v1norm -notcontains (Get-Normalized $l)) { $diff += "+ $l" } }
|
foreach ($l in $v2) { if ($v1norm -notcontains (Get-Normalized $l)) { $diff += "+ $l" } }
|
||||||
[System.IO.File]::WriteAllText((Join-Path $tmpRoot "diff.txt"), (($diff -join "`r`n") + "`r`n"), $enc)
|
[System.IO.File]::WriteAllText((Join-Path $tmpRoot "diff.txt"), (($diff -join "`r`n") + "`r`n"), $enc)
|
||||||
|
|
||||||
Write-Host "[АКТУАЛИЗИРОВАН-ЧАСТИЧНО] &ИзменениеИКонтроль(`"$MethodName`")"
|
Write-Host "[АКТУАЛИЗИРОВАН-ЧАСТИЧНО] &ИзменениеИКонтроль(`"$MethodName`") — перенесено: $($transferred.Count), конфликтов: $($disputed.Count)"
|
||||||
Write-Host " Перенесено автоматически, конфликтов: $($disputed.Count) (помечены // [РЕСИНК-КОНФЛИКТ])"
|
Write-TransferSummary $transferred
|
||||||
Write-Host " Файлы-версии для анализа:"
|
Write-Host " Конфликтные блоки помечены // [РЕСИНК-КОНФЛИКТ] — разместите вручную."
|
||||||
|
Write-Host " Merge-воркспейс (base/local/remote/merged/diff):"
|
||||||
Write-Host " $tmpRoot"
|
Write-Host " $tmpRoot"
|
||||||
Write-Host " Проверьте конфликтные блоки и разместите их вручную."
|
|
||||||
} else {
|
} else {
|
||||||
Write-Host "[АКТУАЛИЗИРОВАН] &ИзменениеИКонтроль(`"$MethodName`") — тело обновлено по новому оригиналу, правки перенесены."
|
Write-Host "[АКТУАЛИЗИРОВАН] &ИзменениеИКонтроль(`"$MethodName`") — тело обновлено, перенесено правок: $($transferred.Count)"
|
||||||
|
Write-TransferSummary $transferred
|
||||||
}
|
}
|
||||||
Write-Host " Файл: $extBsl"
|
Write-Host " Файл: $extBsl"
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# cfe-patch-method v2.0 — Source-aware method interceptor for 1C extension (CFE)
|
# cfe-patch-method v2.1 — Source-aware method interceptor for 1C extension (CFE)
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
@@ -410,6 +410,57 @@ def find_unique_run(v2norm, keys):
|
|||||||
return found
|
return found
|
||||||
|
|
||||||
|
|
||||||
|
def resolve_insertion_point(v2norm, before_lines, after_lines):
|
||||||
|
"""Where an insertion lands in v2 using two-sided context.
|
||||||
|
Returns index to insert-after (-1 = top), or None if ambiguous/conflict."""
|
||||||
|
nb = len(before_lines)
|
||||||
|
na = len(after_lines)
|
||||||
|
|
||||||
|
# Tier A: adjacent pair (before[-1] then after[0] in v2), widening symmetrically
|
||||||
|
if nb >= 1 and na >= 1:
|
||||||
|
cands = [k for k in range(len(v2norm) - 1)
|
||||||
|
if v2norm[k] == before_lines[-1] and v2norm[k + 1] == after_lines[0]]
|
||||||
|
if len(cands) == 1:
|
||||||
|
return cands[0]
|
||||||
|
if len(cands) > 1:
|
||||||
|
w = 1
|
||||||
|
while len(cands) > 1 and (w < nb or w < na):
|
||||||
|
w += 1
|
||||||
|
filtered = []
|
||||||
|
for k in cands:
|
||||||
|
ok = True
|
||||||
|
if w <= nb:
|
||||||
|
if k - (w - 1) < 0 or v2norm[k - (w - 1)] != before_lines[nb - w]:
|
||||||
|
ok = False
|
||||||
|
if ok and w <= na:
|
||||||
|
if k + w >= len(v2norm) or v2norm[k + w] != after_lines[w - 1]:
|
||||||
|
ok = False
|
||||||
|
if ok:
|
||||||
|
filtered.append(k)
|
||||||
|
if not filtered:
|
||||||
|
break
|
||||||
|
cands = filtered
|
||||||
|
if len(cands) == 1:
|
||||||
|
return cands[0]
|
||||||
|
return None
|
||||||
|
|
||||||
|
# Tier B: one side changed -> single-side uniqueness
|
||||||
|
if nb >= 1:
|
||||||
|
bk = find_unique_index(v2norm, before_lines[-1])
|
||||||
|
if bk >= 0:
|
||||||
|
return bk
|
||||||
|
if na >= 1:
|
||||||
|
ak = find_unique_index(v2norm, after_lines[0])
|
||||||
|
if ak >= 0:
|
||||||
|
return ak - 1
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def truncate(s, n=60):
|
||||||
|
t = s.strip()
|
||||||
|
return (t[:n] + "…") if len(t) > n else t
|
||||||
|
|
||||||
|
|
||||||
def die(msg):
|
def die(msg):
|
||||||
print(msg, file=sys.stderr)
|
print(msg, file=sys.stderr)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
@@ -677,23 +728,29 @@ def resync(ext_bsl, ext_lines, dup, method, method_name, module_path):
|
|||||||
del_start = set()
|
del_start = set()
|
||||||
del_end = set()
|
del_end = set()
|
||||||
disputed = []
|
disputed = []
|
||||||
|
transferred = [] # for the summary: {"kind", "anchor"}
|
||||||
|
|
||||||
for op in ops:
|
for op in ops:
|
||||||
if op["kind"] == "insert":
|
if op["kind"] == "insert":
|
||||||
if op["after"] < 0:
|
after = op["after"]
|
||||||
insert_top.append(op["lines"])
|
before_lines = v1norm[max(0, after - 2):after + 1] if after >= 0 else []
|
||||||
continue
|
after_lines = v1norm[after + 1:after + 4]
|
||||||
k = find_unique_index(v2norm, v1norm[op["after"]])
|
k = resolve_insertion_point(v2norm, before_lines, after_lines)
|
||||||
if k >= 0:
|
if k is None:
|
||||||
insert_after.setdefault(k, []).append(op["lines"])
|
|
||||||
else:
|
|
||||||
disputed.append({"kind": "insert", "lines": op["lines"]})
|
disputed.append({"kind": "insert", "lines": op["lines"]})
|
||||||
|
elif k < 0:
|
||||||
|
insert_top.append(op["lines"])
|
||||||
|
transferred.append({"kind": "insert", "anchor": "(в начало метода)"})
|
||||||
|
else:
|
||||||
|
insert_after.setdefault(k, []).append(op["lines"])
|
||||||
|
transferred.append({"kind": "insert", "anchor": v2[k]})
|
||||||
else:
|
else:
|
||||||
keys = v1norm[op["start"]:op["end"] + 1]
|
keys = v1norm[op["start"]:op["end"] + 1]
|
||||||
p = find_unique_run(v2norm, keys)
|
p = find_unique_run(v2norm, keys)
|
||||||
if p >= 0:
|
if p >= 0:
|
||||||
del_start.add(p)
|
del_start.add(p)
|
||||||
del_end.add(p + len(keys) - 1)
|
del_end.add(p + len(keys) - 1)
|
||||||
|
transferred.append({"kind": "delete", "anchor": op["lines"][0]})
|
||||||
else:
|
else:
|
||||||
disputed.append({"kind": "delete", "lines": op["lines"]})
|
disputed.append({"kind": "delete", "lines": op["lines"]})
|
||||||
|
|
||||||
@@ -716,7 +773,7 @@ def resync(ext_bsl, ext_lines, dup, method, method_name, module_path):
|
|||||||
|
|
||||||
if disputed:
|
if disputed:
|
||||||
new_body.append("\t// [РЕСИНК-КОНФЛИКТ] перенесите блоки ниже вручную — исходный якорь изменился в новой версии оригинала.")
|
new_body.append("\t// [РЕСИНК-КОНФЛИКТ] перенесите блоки ниже вручную — исходный якорь изменился в новой версии оригинала.")
|
||||||
new_body.append("\t// Материалы для анализа см. в выводе команды (файлы v1/v2/current/diff).")
|
new_body.append("\t// Материалы для анализа см. в выводе команды (файлы base/local/remote/merged).")
|
||||||
for d in disputed:
|
for d in disputed:
|
||||||
if d["kind"] == "insert":
|
if d["kind"] == "insert":
|
||||||
new_body.append("#Вставка")
|
new_body.append("#Вставка")
|
||||||
@@ -747,14 +804,23 @@ def resync(ext_bsl, ext_lines, dup, method, method_name, module_path):
|
|||||||
out.extend(ext_lines[block_end + 1:])
|
out.extend(ext_lines[block_end + 1:])
|
||||||
write_bsl(ext_bsl, out)
|
write_bsl(ext_bsl, out)
|
||||||
|
|
||||||
|
def print_transfer_summary(items):
|
||||||
|
for t in items:
|
||||||
|
if t["kind"] == "insert":
|
||||||
|
print(" • вставка после «%s»" % truncate(t["anchor"]))
|
||||||
|
else:
|
||||||
|
print(" • удаление «%s»" % truncate(t["anchor"]))
|
||||||
|
|
||||||
if disputed:
|
if disputed:
|
||||||
|
# merge workspace (git-mergetool convention: base/local/remote/merged)
|
||||||
safe = re.sub(r'[\\/:*?"<>|]', '_', module_path)
|
safe = re.sub(r'[\\/:*?"<>|]', '_', module_path)
|
||||||
tmp_root = os.path.join(tempfile.gettempdir(), "cfe-resync", safe + "." + method_name)
|
tmp_root = os.path.join(tempfile.gettempdir(), "cfe-resync", safe + "." + method_name)
|
||||||
os.makedirs(tmp_root, exist_ok=True)
|
os.makedirs(tmp_root, exist_ok=True)
|
||||||
write_bsl(os.path.join(tmp_root, "v1.bsl"), v1)
|
write_bsl(os.path.join(tmp_root, "base.bsl"), v1)
|
||||||
write_bsl(os.path.join(tmp_root, "v2.bsl"), v2)
|
write_bsl(os.path.join(tmp_root, "local.bsl"), marked_body)
|
||||||
write_bsl(os.path.join(tmp_root, "current.bsl"), marked_body)
|
write_bsl(os.path.join(tmp_root, "remote.bsl"), v2)
|
||||||
diff = ["--- v1 (что было скопировано) vs v2 (новый оригинал) ---"]
|
write_bsl(os.path.join(tmp_root, "merged.bsl"), new_block)
|
||||||
|
diff = ["--- base -> remote (что изменилось в оригинале) ---"]
|
||||||
for l in v1:
|
for l in v1:
|
||||||
if normalize(l) not in v2norm:
|
if normalize(l) not in v2norm:
|
||||||
diff.append("- " + l)
|
diff.append("- " + l)
|
||||||
@@ -763,13 +829,16 @@ def resync(ext_bsl, ext_lines, dup, method, method_name, module_path):
|
|||||||
diff.append("+ " + l)
|
diff.append("+ " + l)
|
||||||
write_bsl(os.path.join(tmp_root, "diff.txt"), diff)
|
write_bsl(os.path.join(tmp_root, "diff.txt"), diff)
|
||||||
|
|
||||||
print('[АКТУАЛИЗИРОВАН-ЧАСТИЧНО] &ИзменениеИКонтроль("%s")' % method_name)
|
print('[АКТУАЛИЗИРОВАН-ЧАСТИЧНО] &ИзменениеИКонтроль("%s") — перенесено: %d, конфликтов: %d'
|
||||||
print(" Перенесено автоматически, конфликтов: %d (помечены // [РЕСИНК-КОНФЛИКТ])" % len(disputed))
|
% (method_name, len(transferred), len(disputed)))
|
||||||
print(" Файлы-версии для анализа:")
|
print_transfer_summary(transferred)
|
||||||
|
print(" Конфликтные блоки помечены // [РЕСИНК-КОНФЛИКТ] — разместите вручную.")
|
||||||
|
print(" Merge-воркспейс (base/local/remote/merged/diff):")
|
||||||
print(" %s" % tmp_root)
|
print(" %s" % tmp_root)
|
||||||
print(" Проверьте конфликтные блоки и разместите их вручную.")
|
|
||||||
else:
|
else:
|
||||||
print('[АКТУАЛИЗИРОВАН] &ИзменениеИКонтроль("%s") — тело обновлено по новому оригиналу, правки перенесены.' % method_name)
|
print('[АКТУАЛИЗИРОВАН] &ИзменениеИКонтроль("%s") — тело обновлено, перенесено правок: %d'
|
||||||
|
% (method_name, len(transferred)))
|
||||||
|
print_transfer_summary(transferred)
|
||||||
print(" Файл: %s" % ext_bsl)
|
print(" Файл: %s" % ext_bsl)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "Ресинк ИзменениеИКонтроль: изменился якорь вставки (конфликт)",
|
"name": "Ресинк ИзменениеИКонтроль: окружающий блок исчез (настоящий конфликт)",
|
||||||
"preRun": [
|
"preRun": [
|
||||||
{
|
{
|
||||||
"script": "meta-compile/scripts/meta-compile",
|
"script": "meta-compile/scripts/meta-compile",
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
{
|
{
|
||||||
"writeFile": {
|
"writeFile": {
|
||||||
"path": "CommonModules/РесинкКонфл/Ext/Module.bsl",
|
"path": "CommonModules/РесинкКонфл/Ext/Module.bsl",
|
||||||
"content": "#Область ПрограммныйИнтерфейс\n\nФункция Расчёт(А, Б) Экспорт\n\tИтог = 0.00;\n\tИтог = А + Б;\n\tИтог = ОкруглитьВверх(Итог);\n\tВозврат Итог;\nКонецФункции\n\n#КонецОбласти\n"
|
"content": "#Область ПрограммныйИнтерфейс\n\nФункция Расчёт(А, Б) Экспорт\n\tВозврат 0;\nКонецФункции\n\n#КонецОбласти\n"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
{
|
{
|
||||||
"writeFile": {
|
"writeFile": {
|
||||||
"path": "ext/CommonModules/РесинкКонфл/Ext/Module.bsl",
|
"path": "ext/CommonModules/РесинкКонфл/Ext/Module.bsl",
|
||||||
"content": "#Область ПрограммныйИнтерфейс\n&ИзменениеИКонтроль(\"Расчёт\")\nФункция Тест_Расчёт(А, Б)\n\tИтог = 0;\n#Вставка\n\tИтог = 999;\n#КонецВставки\n\tИтог = А + Б;\n\tВозврат Итог;\nКонецФункции\n#КонецОбласти\n"
|
"content": "#Область ПрограммныйИнтерфейс\n&ИзменениеИКонтроль(\"Расчёт\")\nФункция Тест_Расчёт(А, Б)\n\tИтог = 0;\n\tДля Сч = 1 По А Цикл\n#Вставка\n\t\tИтог = Итог + Б;\n#КонецВставки\n\t\tИтог = Итог + 1;\n\tКонецЦикла;\n\tВозврат Итог;\nКонецФункции\n#КонецОбласти\n"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"name": "Ресинк: generic строка перед вставкой — двусторонний якорь размещает автоматически",
|
||||||
|
"preRun": [
|
||||||
|
{
|
||||||
|
"script": "meta-compile/scripts/meta-compile",
|
||||||
|
"input": { "type": "CommonModule", "name": "РеанкорМод", "properties": { "Server": true } },
|
||||||
|
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"writeFile": {
|
||||||
|
"path": "CommonModules/РеанкорМод/Ext/Module.bsl",
|
||||||
|
"content": "#Область ПрограммныйИнтерфейс\n\nПроцедура П(Сп) Экспорт\n\tДля Каждого Э Из Сп Цикл\n\t\tЭ.Обработать();\n\tКонецЦикла;\n\tСообщить(\"A\");\n\tДля Каждого Э Из Сп Цикл\n\t\tЭ.Проверить(Истина);\n\tКонецЦикла;\nКонецПроцедуры\n\n#КонецОбласти\n"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"script": "cfe-init/scripts/cfe-init",
|
||||||
|
"args": { "-Name": "Тест", "-OutputDir": "{workDir}/ext", "-ConfigPath": "{workDir}" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"script": "cfe-borrow/scripts/cfe-borrow",
|
||||||
|
"args": { "-ExtensionPath": "{workDir}/ext", "-ConfigPath": "{workDir}", "-Object": "CommonModule.РеанкорМод" }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"writeFile": {
|
||||||
|
"path": "ext/CommonModules/РеанкорМод/Ext/Module.bsl",
|
||||||
|
"content": "#Область ПрограммныйИнтерфейс\n&ИзменениеИКонтроль(\"П\")\nПроцедура Тест_П(Сп)\n\tДля Каждого Э Из Сп Цикл\n\t\tЭ.Обработать();\n\tКонецЦикла;\n#Вставка\n\tСообщить(\"вставка\");\n#КонецВставки\n\tСообщить(\"A\");\n\tДля Каждого Э Из Сп Цикл\n\t\tЭ.Проверить();\n\tКонецЦикла;\nКонецПроцедуры\n#КонецОбласти\n"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"params": {
|
||||||
|
"extensionPath": "ext",
|
||||||
|
"modulePath": "CommonModule.РеанкорМод",
|
||||||
|
"methodName": "П",
|
||||||
|
"interceptorType": "ModificationAndControl"
|
||||||
|
},
|
||||||
|
"expect": { "stdoutContains": "перенесено правок:" }
|
||||||
|
}
|
||||||
+1
-4
@@ -1,10 +1,7 @@
|
|||||||
#Область ПрограммныйИнтерфейс
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
Функция Расчёт(А, Б) Экспорт
|
Функция Расчёт(А, Б) Экспорт
|
||||||
Итог = 0.00;
|
Возврат 0;
|
||||||
Итог = А + Б;
|
|
||||||
Итог = ОкруглитьВверх(Итог);
|
|
||||||
Возврат Итог;
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|||||||
+3
-6
@@ -1,14 +1,11 @@
|
|||||||
#Область ПрограммныйИнтерфейс
|
#Область ПрограммныйИнтерфейс
|
||||||
&ИзменениеИКонтроль("Расчёт")
|
&ИзменениеИКонтроль("Расчёт")
|
||||||
Функция Тест_Расчёт(А, Б)
|
Функция Тест_Расчёт(А, Б)
|
||||||
Итог = 0.00;
|
Возврат 0;
|
||||||
Итог = А + Б;
|
|
||||||
Итог = ОкруглитьВверх(Итог);
|
|
||||||
Возврат Итог;
|
|
||||||
// [РЕСИНК-КОНФЛИКТ] перенесите блоки ниже вручную — исходный якорь изменился в новой версии оригинала.
|
// [РЕСИНК-КОНФЛИКТ] перенесите блоки ниже вручную — исходный якорь изменился в новой версии оригинала.
|
||||||
// Материалы для анализа см. в выводе команды (файлы v1/v2/current/diff).
|
// Материалы для анализа см. в выводе команды (файлы base/local/remote/merged).
|
||||||
#Вставка
|
#Вставка
|
||||||
Итог = 999;
|
Итог = Итог + Б;
|
||||||
#КонецВставки
|
#КонецВставки
|
||||||
КонецФункции
|
КонецФункции
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
|
|||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
<?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">
|
||||||
|
<CommonModule uuid="UUID-001">
|
||||||
|
<Properties>
|
||||||
|
<Name>РеанкорМод</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Реанкор мод</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<Global>false</Global>
|
||||||
|
<ClientManagedApplication>false</ClientManagedApplication>
|
||||||
|
<Server>false</Server>
|
||||||
|
<ExternalConnection>false</ExternalConnection>
|
||||||
|
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
|
||||||
|
<ServerCall>false</ServerCall>
|
||||||
|
<Privileged>false</Privileged>
|
||||||
|
<ReturnValuesReuse>DontUse</ReturnValuesReuse>
|
||||||
|
</Properties>
|
||||||
|
</CommonModule>
|
||||||
|
</MetaDataObject>
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
|
||||||
|
Процедура П(Сп) Экспорт
|
||||||
|
Для Каждого Э Из Сп Цикл
|
||||||
|
Э.Обработать();
|
||||||
|
КонецЦикла;
|
||||||
|
Сообщить("A");
|
||||||
|
Для Каждого Э Из Сп Цикл
|
||||||
|
Э.Проверить(Истина);
|
||||||
|
КонецЦикла;
|
||||||
|
КонецПроцедуры
|
||||||
|
|
||||||
|
#КонецОбласти
|
||||||
@@ -0,0 +1,252 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||||
|
<Configuration uuid="UUID-001">
|
||||||
|
<InternalInfo>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-002</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-003</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-004</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-005</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-006</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-007</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-008</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-009</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-010</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-011</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-012</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-013</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
<xr:ContainedObject>
|
||||||
|
<xr:ClassId>UUID-014</xr:ClassId>
|
||||||
|
<xr:ObjectId>UUID-015</xr:ObjectId>
|
||||||
|
</xr:ContainedObject>
|
||||||
|
</InternalInfo>
|
||||||
|
<Properties>
|
||||||
|
<Name>TestConfig</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>TestConfig</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment />
|
||||||
|
<NamePrefix />
|
||||||
|
<ConfigurationExtensionCompatibilityMode>Version8_3_24</ConfigurationExtensionCompatibilityMode>
|
||||||
|
<DefaultRunMode>ManagedApplication</DefaultRunMode>
|
||||||
|
<UsePurposes>
|
||||||
|
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
|
||||||
|
</UsePurposes>
|
||||||
|
<ScriptVariant>Russian</ScriptVariant>
|
||||||
|
<DefaultRoles />
|
||||||
|
<Vendor></Vendor>
|
||||||
|
<Version></Version>
|
||||||
|
<UpdateCatalogAddress />
|
||||||
|
<IncludeHelpInContents>false</IncludeHelpInContents>
|
||||||
|
<UseManagedFormInOrdinaryApplication>false</UseManagedFormInOrdinaryApplication>
|
||||||
|
<UseOrdinaryFormInManagedApplication>false</UseOrdinaryFormInManagedApplication>
|
||||||
|
<AdditionalFullTextSearchDictionaries />
|
||||||
|
<CommonSettingsStorage />
|
||||||
|
<ReportsUserSettingsStorage />
|
||||||
|
<ReportsVariantsStorage />
|
||||||
|
<FormDataSettingsStorage />
|
||||||
|
<DynamicListsUserSettingsStorage />
|
||||||
|
<URLExternalDataStorage />
|
||||||
|
<Content />
|
||||||
|
<DefaultReportForm />
|
||||||
|
<DefaultReportVariantForm />
|
||||||
|
<DefaultReportSettingsForm />
|
||||||
|
<DefaultReportAppearanceTemplate />
|
||||||
|
<DefaultDynamicListSettingsForm />
|
||||||
|
<DefaultSearchForm />
|
||||||
|
<DefaultDataHistoryChangeHistoryForm />
|
||||||
|
<DefaultDataHistoryVersionDataForm />
|
||||||
|
<DefaultDataHistoryVersionDifferencesForm />
|
||||||
|
<DefaultCollaborationSystemUsersChoiceForm />
|
||||||
|
<RequiredMobileApplicationPermissions />
|
||||||
|
<UsedMobileApplicationFunctionalities>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Biometrics</app:functionality>
|
||||||
|
<app:use>true</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Location</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BackgroundLocation</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BluetoothPrinters</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>WiFiPrinters</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Contacts</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Calendars</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>PushNotifications</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>LocalNotifications</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>InAppPurchases</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>PersonalComputerFileExchange</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Ads</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>NumberDialing</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>CallProcessing</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>CallLog</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AutoSendSMS</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>ReceiveSMS</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>SMSLog</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Camera</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Microphone</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>MusicLibrary</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>PictureAndVideoLibraries</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AudioPlaybackAndVibration</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BackgroundAudioPlaybackAndVibration</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>InstallPackages</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>OSBackup</app:functionality>
|
||||||
|
<app:use>true</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>ApplicationUsageStatistics</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BarcodeScanning</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>BackgroundAudioRecording</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AllFilesAccess</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Videoconferences</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>NFC</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>DocumentScanning</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>SpeechToText</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>Geofences</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>IncomingShareRequests</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
<app:functionality>
|
||||||
|
<app:functionality>AllIncomingShareRequestsTypesProcessing</app:functionality>
|
||||||
|
<app:use>false</app:use>
|
||||||
|
</app:functionality>
|
||||||
|
</UsedMobileApplicationFunctionalities>
|
||||||
|
<StandaloneConfigurationRestrictionRoles />
|
||||||
|
<MobileApplicationURLs />
|
||||||
|
<AllowedIncomingShareRequestTypes />
|
||||||
|
<MainClientApplicationWindowMode>Normal</MainClientApplicationWindowMode>
|
||||||
|
<DefaultInterface />
|
||||||
|
<DefaultStyle />
|
||||||
|
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||||
|
<BriefInformation />
|
||||||
|
<DetailedInformation />
|
||||||
|
<Copyright />
|
||||||
|
<VendorInformationAddress />
|
||||||
|
<ConfigurationInformationAddress />
|
||||||
|
<DataLockControlMode>Managed</DataLockControlMode>
|
||||||
|
<ObjectAutonumerationMode>NotAutoFree</ObjectAutonumerationMode>
|
||||||
|
<ModalityUseMode>DontUse</ModalityUseMode>
|
||||||
|
<SynchronousPlatformExtensionAndAddInCallUseMode>DontUse</SynchronousPlatformExtensionAndAddInCallUseMode>
|
||||||
|
<InterfaceCompatibilityMode>TaxiEnableVersion8_2</InterfaceCompatibilityMode>
|
||||||
|
<DatabaseTablespacesUseMode>DontUse</DatabaseTablespacesUseMode>
|
||||||
|
<CompatibilityMode>Version8_3_24</CompatibilityMode>
|
||||||
|
<DefaultConstantsForm />
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<Language>Русский</Language>
|
||||||
|
<CommonModule>РеанкорМод</CommonModule>
|
||||||
|
</ChildObjects>
|
||||||
|
</Configuration>
|
||||||
|
</MetaDataObject>
|
||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ClientApplicationInterface xmlns="http://v8.1c.ru/8.2/managed-application/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="InterfaceLayouter">
|
||||||
|
<top>
|
||||||
|
<panel id="UUID-001">
|
||||||
|
<uuid>UUID-002</uuid>
|
||||||
|
</panel>
|
||||||
|
</top>
|
||||||
|
<left>
|
||||||
|
<panel id="UUID-003">
|
||||||
|
<uuid>UUID-004</uuid>
|
||||||
|
</panel>
|
||||||
|
</left>
|
||||||
|
<panelDef id="UUID-004"/>
|
||||||
|
<panelDef id="UUID-005"/>
|
||||||
|
<panelDef id="UUID-006"/>
|
||||||
|
<panelDef id="UUID-002"/>
|
||||||
|
<panelDef id="UUID-007"/>
|
||||||
|
</ClientApplicationInterface>
|
||||||
+18
@@ -0,0 +1,18 @@
|
|||||||
|
<?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">
|
||||||
|
<CommonModule uuid="UUID-001">
|
||||||
|
<InternalInfo/>
|
||||||
|
<Properties>
|
||||||
|
<ObjectBelonging>Adopted</ObjectBelonging>
|
||||||
|
<Name>РеанкорМод</Name>
|
||||||
|
<Comment/>
|
||||||
|
<ExtendedConfigurationObject>UUID-002</ExtendedConfigurationObject>
|
||||||
|
<Global>false</Global>
|
||||||
|
<ClientManagedApplication>false</ClientManagedApplication>
|
||||||
|
<Server>false</Server>
|
||||||
|
<ExternalConnection>false</ExternalConnection>
|
||||||
|
<ClientOrdinaryApplication>false</ClientOrdinaryApplication>
|
||||||
|
<ServerCall>false</ServerCall>
|
||||||
|
</Properties>
|
||||||
|
</CommonModule>
|
||||||
|
</MetaDataObject>
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
#Область ПрограммныйИнтерфейс
|
||||||
|
&ИзменениеИКонтроль("П")
|
||||||
|
Процедура Тест_П(Сп)
|
||||||
|
Для Каждого Э Из Сп Цикл
|
||||||
|
Э.Обработать();
|
||||||
|
КонецЦикла;
|
||||||
|
#Вставка
|
||||||
|
Сообщить("вставка");
|
||||||
|
#КонецВставки
|
||||||
|
Сообщить("A");
|
||||||
|
Для Каждого Э Из Сп Цикл
|
||||||
|
Э.Проверить(Истина);
|
||||||
|
КонецЦикла;
|
||||||
|
КонецПроцедуры
|
||||||
|
#КонецОбласти
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
<?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>
|
||||||
|
<ObjectBelonging>Adopted</ObjectBelonging>
|
||||||
|
<Name>Тест</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Тест</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment />
|
||||||
|
<ConfigurationExtensionPurpose>Customization</ConfigurationExtensionPurpose>
|
||||||
|
<KeepMappingToExtendedConfigurationObjectsByIDs>true</KeepMappingToExtendedConfigurationObjectsByIDs>
|
||||||
|
<NamePrefix>Тест_</NamePrefix>
|
||||||
|
<ConfigurationExtensionCompatibilityMode>Version8_3_24</ConfigurationExtensionCompatibilityMode>
|
||||||
|
<DefaultRunMode>ManagedApplication</DefaultRunMode>
|
||||||
|
<UsePurposes>
|
||||||
|
<v8:Value xsi:type="app:ApplicationUsePurpose">PlatformApplication</v8:Value>
|
||||||
|
</UsePurposes>
|
||||||
|
<ScriptVariant>Russian</ScriptVariant>
|
||||||
|
<DefaultRoles>
|
||||||
|
<xr:Item xsi:type="xr:MDObjectRef">Role.Тест_ОсновнаяРоль</xr:Item>
|
||||||
|
</DefaultRoles>
|
||||||
|
<Vendor></Vendor>
|
||||||
|
<Version></Version>
|
||||||
|
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||||
|
<BriefInformation />
|
||||||
|
<DetailedInformation />
|
||||||
|
<Copyright />
|
||||||
|
<VendorInformationAddress />
|
||||||
|
<ConfigurationInformationAddress />
|
||||||
|
<InterfaceCompatibilityMode>TaxiEnableVersion8_2</InterfaceCompatibilityMode>
|
||||||
|
</Properties>
|
||||||
|
<ChildObjects>
|
||||||
|
<Language>Русский</Language>
|
||||||
|
<Role>Тест_ОсновнаяРоль</Role>
|
||||||
|
<CommonModule>РеанкорМод</CommonModule>
|
||||||
|
</ChildObjects>
|
||||||
|
</Configuration>
|
||||||
|
</MetaDataObject>
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
<?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">
|
||||||
|
<InternalInfo/>
|
||||||
|
<Properties>
|
||||||
|
<ObjectBelonging>Adopted</ObjectBelonging>
|
||||||
|
<Name>Русский</Name>
|
||||||
|
<Comment/>
|
||||||
|
<ExtendedConfigurationObject>UUID-002</ExtendedConfigurationObject>
|
||||||
|
<LanguageCode>ru</LanguageCode>
|
||||||
|
</Properties>
|
||||||
|
</Language>
|
||||||
|
</MetaDataObject>
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
<?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/>
|
||||||
|
<Comment/>
|
||||||
|
</Properties>
|
||||||
|
</Role>
|
||||||
|
</MetaDataObject>
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.17">
|
||||||
|
<Language uuid="UUID-001">
|
||||||
|
<Properties>
|
||||||
|
<Name>Русский</Name>
|
||||||
|
<Synonym>
|
||||||
|
<v8:item>
|
||||||
|
<v8:lang>ru</v8:lang>
|
||||||
|
<v8:content>Русский</v8:content>
|
||||||
|
</v8:item>
|
||||||
|
</Synonym>
|
||||||
|
<Comment/>
|
||||||
|
<LanguageCode>ru</LanguageCode>
|
||||||
|
</Properties>
|
||||||
|
</Language>
|
||||||
|
</MetaDataObject>
|
||||||
Reference in New Issue
Block a user