From 9b1bf22e8f32cb1748d1b8a220615ddcb7c5effa Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 19 Sep 2026 18:31:33 +0300 Subject: [PATCH] =?UTF-8?q?fix(cfe-patch-method,cfe-validate):=20=D0=BC?= =?UTF-8?q?=D0=B0=D1=80=D0=BA=D0=B5=D1=80=20=D0=B2=D0=BE=D0=B7=D0=B2=D1=80?= =?UTF-8?q?=D0=B0=D1=89=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D1=82=D0=BE=D0=B9?= =?UTF-8?q?=20=D0=B6=D0=B5=20=D1=81=D1=82=D1=80=D0=BE=D0=BA=D0=BE=D0=B9,?= =?UTF-8?q?=20=D1=81=D1=87=D1=91=D1=82=D1=87=D0=B8=D0=BA=20=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BD=D0=B5=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D1=8B?= =?UTF-8?q?=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Две находки ревью. Приняв хвостовой комментарий у маркера, разбор запоминал только содержимое блока, а -Actualize писал на его место голое ключевое слово: авторская пометка вроде «#Вставка // проверка прав, ТЗ-142» молча исчезала при первой же актуализации. Теперь строки открывающего и закрывающего маркера едут вместе с блоком и возвращаются как были — с комментарием, отступом и своим написанием; ключевое слово остаётся запасным вариантом. Кейс actualize-marker-tail-comment эту потерю ловит: без правки падает. Счётчик контролируемых методов в cfe-validate был единственным новым сопоставлением без учёта регистра, хотя язык регистронезависим: на &changeAndValidate он показывал ноль и расходился с cfe-patch-method -Check, на который сам же и ссылается. Co-Authored-By: Claude Opus 5 (1M context) --- .../scripts/cfe-patch-method.ps1 | 37 ++- .../scripts/cfe-patch-method.py | 45 +++- .../cfe-validate/scripts/cfe-validate.ps1 | 2 +- .../cfe-validate/scripts/cfe-validate.py | 2 +- .../actualize-marker-tail-comment.json | 33 +++ .../CommonModules/ХвостМод.xml | 23 ++ .../CommonModules/ХвостМод/Ext/Module.bsl | 10 + .../Configuration.xml | 252 ++++++++++++++++++ .../Ext/ClientApplicationInterface.xml | 18 ++ .../Languages/Русский.xml | 16 ++ .../cfe/CommonModules/ХвостМод.xml | 18 ++ .../cfe/CommonModules/ХвостМод/Ext/Module.bsl | 12 + .../cfe/Configuration.xml | 72 +++++ .../cfe/Languages/Русский.xml | 13 + .../cfe/Roles/Тест_ОсновнаяРоль.xml | 10 + 15 files changed, 535 insertions(+), 28 deletions(-) create mode 100644 tests/skills/cases/cfe-patch-method/actualize-marker-tail-comment.json create mode 100644 tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/CommonModules/ХвостМод.xml create mode 100644 tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/CommonModules/ХвостМод/Ext/Module.bsl create mode 100644 tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/Configuration.xml create mode 100644 tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/Ext/ClientApplicationInterface.xml create mode 100644 tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/Languages/Русский.xml create mode 100644 tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/CommonModules/ХвостМод.xml create mode 100644 tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/CommonModules/ХвостМод/Ext/Module.bsl create mode 100644 tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/Configuration.xml create mode 100644 tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/Languages/Русский.xml create mode 100644 tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/Roles/Тест_ОсновнаяРоль.xml diff --git a/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.ps1 b/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.ps1 index ed716b8ea..1cbc5965a 100644 --- a/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.ps1 +++ b/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.ps1 @@ -487,18 +487,25 @@ function Parse-MarkedBody { while ($i -lt $bodyLines.Count) { $kind = Get-BslMarkerKind $bodyLines[$i] if ($kind -eq 'Insert') { + # Marker lines are kept verbatim: they carry the author's spelling, indent and — since + # a tail comment is legal — the note explaining the edit. Re-emitting a bare keyword + # would silently drop that note on -Actualize. + $open = $bodyLines[$i] $ins = @() $i++ while ($i -lt $bodyLines.Count -and (Get-BslMarkerKind $bodyLines[$i]) -ne 'EndInsert') { $ins += $bodyLines[$i]; $i++ } + $close = if ($i -lt $bodyLines.Count) { $bodyLines[$i] } else { $null } $i++ # skip #КонецВставки - $ops += @{ Kind = 'insert'; After = ($v1.Count - 1); Lines = $ins } + $ops += @{ Kind = 'insert'; After = ($v1.Count - 1); Lines = $ins; Open = $open; Close = $close } } elseif ($kind -eq 'Delete') { + $open = $bodyLines[$i] $startIdx = $v1.Count $i++ $del = @() while ($i -lt $bodyLines.Count -and (Get-BslMarkerKind $bodyLines[$i]) -ne 'EndDelete') { $del += $bodyLines[$i]; $v1 += $bodyLines[$i]; $i++ } + $close = if ($i -lt $bodyLines.Count) { $bodyLines[$i] } else { $null } $i++ # skip #КонецУдаления - $ops += @{ Kind = 'delete'; Start = $startIdx; End = ($v1.Count - 1); Lines = $del } + $ops += @{ Kind = 'delete'; Start = $startIdx; End = ($v1.Count - 1); Lines = $del; Open = $open; Close = $close } } else { $v1 += $bodyLines[$i] $i++ @@ -715,7 +722,9 @@ function Write-ConflictFolder { $md += "### Конфликт №$cn — вставка" $md += "Как блок стоял в вашей версии (local):" if ($d.Before -and $d.Before.Count -gt 0) { foreach ($l in $d.Before) { $md += $l } } - $md += "#$($kw.Insert)"; foreach ($l in $d.Lines) { $md += $l }; $md += "#$($kw.EndInsert)" + $openLine = if ([string]::IsNullOrEmpty($d.Open)) { "#$($kw.Insert)" } else { $d.Open } + $closeLine = if ([string]::IsNullOrEmpty($d.Close)) { "#$($kw.EndInsert)" } else { $d.Close } + $md += $openLine; foreach ($l in $d.Lines) { $md += $l }; $md += $closeLine if ($d.After -and $d.After.Count -gt 0) { foreach ($l in $d.After) { $md += $l } } $md += "" $md += "Якорь (строки вокруг #$($kw.Insert)) изменился/исчез в новом оригинале — блок не лёг автоматически (см. дифф base→remote ниже)." @@ -809,14 +818,14 @@ function Invoke-Resync { elseif ($null -eq $k) { $dbefore = @(); if ($op.After -ge 0) { $bz = [Math]::Max(0, $op.After - 2); for ($z = $bz; $z -le $op.After; $z++) { $dbefore += $v1[$z] } } $dafter = @(); $az = [Math]::Min($v1.Count - 1, $op.After + 3); for ($z = $op.After + 1; $z -le $az; $z++) { $dafter += $v1[$z] } - $disputed += @{ Kind = 'insert'; Lines = $op.Lines; Before = $dbefore; After = $dafter } + $disputed += @{ Kind = 'insert'; Lines = $op.Lines; Open = $op.Open; Close = $op.Close; Before = $dbefore; After = $dafter } } - elseif ($k -lt 0) { $insertTop += ,$op.Lines; $transferred += @{ Kind = 'insert' } } - else { if (-not $insertAfter.ContainsKey($k)) { $insertAfter[$k] = @() }; $insertAfter[$k] += ,$op.Lines; $transferred += @{ Kind = 'insert' } } + elseif ($k -lt 0) { $insertTop += $op; $transferred += @{ Kind = 'insert' } } + else { if (-not $insertAfter.ContainsKey($k)) { $insertAfter[$k] = @() }; $insertAfter[$k] += $op; $transferred += @{ Kind = 'insert' } } } else { $keys = @(); for ($m = $op.Start; $m -le $op.End; $m++) { $keys += $v1norm[$m] } $p = Find-UniqueRun $v2norm $keys - if ($p -ge 0) { $delStart[$p] = $true; $delEnd[$p + $keys.Count - 1] = $true; $transferred += @{ Kind = 'delete' } } + if ($p -ge 0) { $delStart[$p] = $op.Open; $delEnd[$p + $keys.Count - 1] = $op.Close; $transferred += @{ Kind = 'delete' } } else { # Nearest significant neighbours around the deleted block; adjacency in the significant # projection means the block is already cut (blanks/comments left behind don't matter). @@ -836,14 +845,16 @@ function Invoke-Resync { return @{ Id = $methodId; Status = $st; ExtBsl = $extBsl; Transferred = $transferred.Count; Absorbed = $absorbed.Count; Disputed = $disputed.Count; Reason = $rsn; AbsorbedNotes = $absorbedNotes } } - # assemble new marked body + # assemble new marked body. Marker lines come back as they were read (Open/Close); the keyword + # form is only a fallback for a block whose closing marker the module never had. + $mk = { param($orig, [string]$key) if ([string]::IsNullOrEmpty($orig)) { "#$($kw[$key])" } else { $orig } } $newBody = @() - foreach ($blk in $insertTop) { $newBody += "#$($kw.Insert)"; foreach ($l in $blk) { $newBody += $l }; $newBody += "#$($kw.EndInsert)" } + foreach ($blk in $insertTop) { $newBody += (& $mk $blk.Open 'Insert'); foreach ($l in $blk.Lines) { $newBody += $l }; $newBody += (& $mk $blk.Close 'EndInsert') } for ($k = 0; $k -lt $v2.Count; $k++) { - if ($delStart.ContainsKey($k)) { $newBody += "#$($kw.Delete)" } + if ($delStart.ContainsKey($k)) { $newBody += (& $mk $delStart[$k] 'Delete') } $newBody += $v2[$k] - if ($delEnd.ContainsKey($k)) { $newBody += "#$($kw.EndDelete)" } - if ($insertAfter.ContainsKey($k)) { foreach ($blk in $insertAfter[$k]) { $newBody += "#$($kw.Insert)"; foreach ($l in $blk) { $newBody += $l }; $newBody += "#$($kw.EndInsert)" } } + if ($delEnd.ContainsKey($k)) { $newBody += (& $mk $delEnd[$k] 'EndDelete') } + if ($insertAfter.ContainsKey($k)) { foreach ($blk in $insertAfter[$k]) { $newBody += (& $mk $blk.Open 'Insert'); foreach ($l in $blk.Lines) { $newBody += $l }; $newBody += (& $mk $blk.Close 'EndInsert') } } } if ($disputed.Count -gt 0) { $newBody += "`t// [РЕСИНК-КОНФЛИКТ] блоки ниже не легли автоматически — перенесите вручную (по № см. conflict.md / index.md в merge-воркспейсе, путь в выводе)." @@ -852,7 +863,7 @@ function Invoke-Resync { $cn++ if ($d.Kind -eq 'insert') { $newBody += "`t// [РЕСИНК-КОНФЛИКТ №$cn] вставка — исходный якорь изменён в новом оригинале." - $newBody += "#$($kw.Insert)"; foreach ($l in $d.Lines) { $newBody += $l }; $newBody += "#$($kw.EndInsert)" + $newBody += (& $mk $d.Open 'Insert'); foreach ($l in $d.Lines) { $newBody += $l }; $newBody += (& $mk $d.Close 'EndInsert') } else { $newBody += "`t// [РЕСИНК-КОНФЛИКТ №$cn] удаление — строки не найдены в новом оригинале:" diff --git a/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.py b/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.py index 6f2c67d67..e29c4f003 100644 --- a/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.py +++ b/.claude/skills/cfe-patch-method/scripts/cfe-patch-method.py @@ -616,14 +616,21 @@ def parse_marked_body(body_lines): while i < n: kind = bsl_marker_kind(body_lines[i]) if kind == "Insert": + # Marker lines are kept verbatim: they carry the author's spelling, indent and — since + # a tail comment is legal — the note explaining the edit. Re-emitting a bare keyword + # would silently drop that note on -Actualize. + open_line = body_lines[i] ins = [] i += 1 while i < n and bsl_marker_kind(body_lines[i]) != "EndInsert": ins.append(body_lines[i]) i += 1 + close_line = body_lines[i] if i < n else None i += 1 - ops.append({"kind": "insert", "after": len(v1) - 1, "lines": ins}) + ops.append({"kind": "insert", "after": len(v1) - 1, "lines": ins, + "open": open_line, "close": close_line}) elif kind == "Delete": + open_line = body_lines[i] start_idx = len(v1) i += 1 dels = [] @@ -631,8 +638,10 @@ def parse_marked_body(body_lines): dels.append(body_lines[i]) v1.append(body_lines[i]) i += 1 + close_line = body_lines[i] if i < n else None i += 1 - ops.append({"kind": "delete", "start": start_idx, "end": len(v1) - 1, "lines": dels}) + ops.append({"kind": "delete", "start": start_idx, "end": len(v1) - 1, "lines": dels, + "open": open_line, "close": close_line}) else: v1.append(body_lines[i]) i += 1 @@ -1207,7 +1216,8 @@ def write_conflict_folder(folder, method_id, ext_bsl, existing_name, method, v1, if d.get("before"): for l in d["before"]: md.append(l) - md.append("#" + kw["Insert"]); md.extend(d["lines"]); md.append("#" + kw["EndInsert"]) + md.append(d.get("open") or ("#" + kw["Insert"])); md.extend(d["lines"]) + md.append(d.get("close") or ("#" + kw["EndInsert"])) if d.get("after"): for l in d["after"]: md.append(l) @@ -1280,7 +1290,7 @@ def resync_one(ext_bsl, ext_lines, dup, method, logical_module, conflict_folder, if not params_drift and control_key(v1) == control_key(v2): return {"id": method_id, "status": "АКТУАЛЕН", "ext_bsl": ext_bsl} - insert_top = []; insert_after = {}; del_start = set(); del_end = set(); disputed = []; transferred = 0; absorbed = 0; absorbed_notes = [] + insert_top = []; insert_after = {}; del_start = {}; del_end = {}; disputed = []; transferred = 0; absorbed = 0; absorbed_notes = [] v2sig, v2map = significant_projection(v2norm) for op in ops: if op["kind"] == "insert": @@ -1306,16 +1316,17 @@ def resync_one(ext_bsl, ext_lines, dup, method, logical_module, conflict_folder, elif k is None: dbefore = v1[max(0, after - 2):after + 1] if after >= 0 else [] dafter = v1[after + 1:after + 4] - disputed.append({"kind": "insert", "lines": op["lines"], "before": dbefore, "after": dafter}) + disputed.append({"kind": "insert", "lines": op["lines"], "open": op.get("open"), + "close": op.get("close"), "before": dbefore, "after": dafter}) elif k < 0: - insert_top.append(op["lines"]); transferred += 1 + insert_top.append(op); transferred += 1 else: - insert_after.setdefault(k, []).append(op["lines"]); transferred += 1 + insert_after.setdefault(k, []).append(op); transferred += 1 else: keys = v1norm[op["start"]:op["end"] + 1] p = find_unique_run(v2norm, keys) if p >= 0: - del_start.add(p); del_end.add(p + len(keys) - 1); transferred += 1 + del_start[p] = op.get("open"); del_end[p + len(keys) - 1] = op.get("close"); transferred += 1 else: # Nearest significant neighbours; adjacency in the significant projection means the # block is already cut (blanks/comments left behind don't matter). @@ -1347,18 +1358,25 @@ def resync_one(ext_bsl, ext_lines, dup, method, logical_module, conflict_folder, return {"id": method_id, "status": st, "ext_bsl": ext_bsl, "transferred": transferred, "absorbed": absorbed, "disputed": len(disputed), "reason": rsn, "absorbed_notes": absorbed_notes} + # Marker lines come back as they were read (open/close); the keyword form is only a fallback + # for a block whose closing marker the module never had. + def mk(orig, key): + return ("#" + kw[key]) if not orig else orig + new_body = [] for blk in insert_top: - new_body.append("#" + kw["Insert"]); new_body.extend(blk); new_body.append("#" + kw["EndInsert"]) + new_body.append(mk(blk.get("open"), "Insert")); new_body.extend(blk["lines"]) + new_body.append(mk(blk.get("close"), "EndInsert")) for k in range(len(v2)): if k in del_start: - new_body.append("#" + kw["Delete"]) + new_body.append(mk(del_start[k], "Delete")) new_body.append(v2[k]) if k in del_end: - new_body.append("#" + kw["EndDelete"]) + new_body.append(mk(del_end[k], "EndDelete")) if k in insert_after: for blk in insert_after[k]: - new_body.append("#" + kw["Insert"]); new_body.extend(blk); new_body.append("#" + kw["EndInsert"]) + new_body.append(mk(blk.get("open"), "Insert")); new_body.extend(blk["lines"]) + new_body.append(mk(blk.get("close"), "EndInsert")) if disputed: new_body.append("\t// [РЕСИНК-КОНФЛИКТ] блоки ниже не легли автоматически — перенесите вручную (по № см. conflict.md / index.md в merge-воркспейсе, путь в выводе).") cn = 0 @@ -1366,7 +1384,8 @@ def resync_one(ext_bsl, ext_lines, dup, method, logical_module, conflict_folder, cn += 1 if d["kind"] == "insert": new_body.append("\t// [РЕСИНК-КОНФЛИКТ №%d] вставка — исходный якорь изменён в новом оригинале." % cn) - new_body.append("#" + kw["Insert"]); new_body.extend(d["lines"]); new_body.append("#" + kw["EndInsert"]) + new_body.append(mk(d.get("open"), "Insert")); new_body.extend(d["lines"]) + new_body.append(mk(d.get("close"), "EndInsert")) else: new_body.append("\t// [РЕСИНК-КОНФЛИКТ №%d] удаление — строки не найдены в новом оригинале:" % cn) for l in d["lines"]: diff --git a/.claude/skills/cfe-validate/scripts/cfe-validate.ps1 b/.claude/skills/cfe-validate/scripts/cfe-validate.ps1 index c489e2fe4..2156b3985 100644 --- a/.claude/skills/cfe-validate/scripts/cfe-validate.ps1 +++ b/.claude/skills/cfe-validate/scripts/cfe-validate.ps1 @@ -1338,7 +1338,7 @@ function Get-BslKeywords { # --- Breadcrumb: controlled methods (&ИзменениеИКонтроль) drift is not checked here --- $extRootDir = Split-Path $resolvedPath -Parent $ctrlKw = Get-BslKeywords -$ctrlRe = '(?m)^\s*&(?:' + $ctrlKw.ru.Control + '|' + $ctrlKw.en.Control + ')\(' +$ctrlRe = '(?im)^\s*&(?:' + $ctrlKw.ru.Control + '|' + $ctrlKw.en.Control + ')\(' $ctrlCount = 0 foreach ($bslFile in (Get-ChildItem -Path $extRootDir -Recurse -Filter *.bsl -File -ErrorAction SilentlyContinue)) { $txt = [System.IO.File]::ReadAllText($bslFile.FullName, [System.Text.Encoding]::UTF8) diff --git a/.claude/skills/cfe-validate/scripts/cfe-validate.py b/.claude/skills/cfe-validate/scripts/cfe-validate.py index 86f0e9d1e..38748c686 100644 --- a/.claude/skills/cfe-validate/scripts/cfe-validate.py +++ b/.claude/skills/cfe-validate/scripts/cfe-validate.py @@ -1304,7 +1304,7 @@ def main(): # --- Breadcrumb: controlled methods (&ИзменениеИКонтроль) drift is not checked here --- ctrl_kw = bsl_keywords() - ctrl_re = re.compile(r'^\s*&(?:' + ctrl_kw["ru"]["Control"] + '|' + ctrl_kw["en"]["Control"] + r')\(') + ctrl_re = re.compile(r'^\s*&(?:' + ctrl_kw["ru"]["Control"] + '|' + ctrl_kw["en"]["Control"] + r')\(', re.IGNORECASE) ctrl_count = 0 for dp, _dn, files in os.walk(config_dir): for fn in files: diff --git a/tests/skills/cases/cfe-patch-method/actualize-marker-tail-comment.json b/tests/skills/cases/cfe-patch-method/actualize-marker-tail-comment.json new file mode 100644 index 000000000..e0a887809 --- /dev/null +++ b/tests/skills/cases/cfe-patch-method/actualize-marker-tail-comment.json @@ -0,0 +1,33 @@ +{ + "name": "-Actualize: комментарий на строке маркера не теряется при перезаписи блока", + "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Спр.Записать();\n\tЗаписатьЖурнал();\n\tЗафиксироватьТранзакцию();\nКонецПроцедуры\n\n#КонецОбласти\n" + } + }, + { + "script": "cfe-init/scripts/cfe-init", + "args": { "-Name": "Тест", "-OutputDir": "{workDir}/cfe", "-ConfigPath": "{workDir}" } + }, + { + "script": "cfe-borrow/scripts/cfe-borrow", + "args": { "-ExtensionPath": "{workDir}/cfe", "-ConfigPath": "{workDir}", "-Object": "CommonModule.ХвостМод" } + }, + { + "writeFile": { + "path": "cfe/CommonModules/ХвостМод/Ext/Module.bsl", + "content": "#Область ПрограммныйИнтерфейс\n&ИзменениеИКонтроль(\"Записать\")\nПроцедура Тест_Записать(Спр)\n\tНачатьТранзакцию();\n\tСпр.Записать();\n#Вставка // проверка прав, ТЗ-142\n\tПроверитьПрава(Спр);\n#КонецВставки // конец проверки прав\n\tЗафиксироватьТранзакцию();\nКонецПроцедуры\n#КонецОбласти\n" + } + } + ], + "params": { "extensionPath": "cfe" }, + "args_extra": ["-Actualize"], + "expect": { "stdoutContains": "актуализировано: 1" } +} diff --git a/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/CommonModules/ХвостМод.xml b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/CommonModules/ХвостМод.xml new file mode 100644 index 000000000..7e61d98c1 --- /dev/null +++ b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/CommonModules/ХвостМод.xml @@ -0,0 +1,23 @@ + + + + + ХвостМод + + + ru + Хвост мод + + + + false + false + false + false + false + false + false + DontUse + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/CommonModules/ХвостМод/Ext/Module.bsl b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/CommonModules/ХвостМод/Ext/Module.bsl new file mode 100644 index 000000000..c547bb1d5 --- /dev/null +++ b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/CommonModules/ХвостМод/Ext/Module.bsl @@ -0,0 +1,10 @@ +#Область ПрограммныйИнтерфейс + +Процедура Записать(Спр) Экспорт + НачатьТранзакцию(); + Спр.Записать(); + ЗаписатьЖурнал(); + ЗафиксироватьТранзакцию(); +КонецПроцедуры + +#КонецОбласти diff --git a/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/Configuration.xml b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/Configuration.xml new file mode 100644 index 000000000..22c3f67fa --- /dev/null +++ b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/Configuration.xml @@ -0,0 +1,252 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + TestConfig + + + ru + TestConfig + + + + + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + + + + false + false + false + + + + + + + + + + + + + + + + + + + + + + Biometrics + true + + + Location + false + + + BackgroundLocation + false + + + BluetoothPrinters + false + + + WiFiPrinters + false + + + Contacts + false + + + Calendars + false + + + PushNotifications + false + + + LocalNotifications + false + + + InAppPurchases + false + + + PersonalComputerFileExchange + false + + + Ads + false + + + NumberDialing + false + + + CallProcessing + false + + + CallLog + false + + + AutoSendSMS + false + + + ReceiveSMS + false + + + SMSLog + false + + + Camera + false + + + Microphone + false + + + MusicLibrary + false + + + PictureAndVideoLibraries + false + + + AudioPlaybackAndVibration + false + + + BackgroundAudioPlaybackAndVibration + false + + + InstallPackages + false + + + OSBackup + true + + + ApplicationUsageStatistics + false + + + BarcodeScanning + false + + + BackgroundAudioRecording + false + + + AllFilesAccess + false + + + Videoconferences + false + + + NFC + false + + + DocumentScanning + false + + + SpeechToText + false + + + Geofences + false + + + IncomingShareRequests + false + + + AllIncomingShareRequestsTypesProcessing + false + + + + + + Normal + + + Language.Русский + + + + + + Managed + NotAutoFree + DontUse + DontUse + TaxiEnableVersion8_2 + DontUse + Version8_3_24 + + + + Русский + ХвостМод + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/Ext/ClientApplicationInterface.xml b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/Ext/ClientApplicationInterface.xml new file mode 100644 index 000000000..3c1161b2d --- /dev/null +++ b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/Ext/ClientApplicationInterface.xml @@ -0,0 +1,18 @@ + + + + + UUID-002 + + + + + UUID-004 + + + + + + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/Languages/Русский.xml b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/Languages/Русский.xml new file mode 100644 index 000000000..37c60d786 --- /dev/null +++ b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/Languages/Русский.xml @@ -0,0 +1,16 @@ + + + + + Русский + + + ru + Русский + + + + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/CommonModules/ХвостМод.xml b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/CommonModules/ХвостМод.xml new file mode 100644 index 000000000..12debb939 --- /dev/null +++ b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/CommonModules/ХвостМод.xml @@ -0,0 +1,18 @@ + + + + + + Adopted + ХвостМод + + UUID-002 + false + false + false + false + false + false + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/CommonModules/ХвостМод/Ext/Module.bsl b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/CommonModules/ХвостМод/Ext/Module.bsl new file mode 100644 index 000000000..2f430f5c7 --- /dev/null +++ b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/CommonModules/ХвостМод/Ext/Module.bsl @@ -0,0 +1,12 @@ +#Область ПрограммныйИнтерфейс +&ИзменениеИКонтроль("Записать") +Процедура Тест_Записать(Спр) + НачатьТранзакцию(); + Спр.Записать(); +#Вставка // проверка прав, ТЗ-142 + ПроверитьПрава(Спр); +#КонецВставки // конец проверки прав + ЗаписатьЖурнал(); + ЗафиксироватьТранзакцию(); +КонецПроцедуры +#КонецОбласти diff --git a/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/Configuration.xml b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/Configuration.xml new file mode 100644 index 000000000..dbf074f68 --- /dev/null +++ b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/Configuration.xml @@ -0,0 +1,72 @@ + + + + + + UUID-002 + UUID-003 + + + UUID-004 + UUID-005 + + + UUID-006 + UUID-007 + + + UUID-008 + UUID-009 + + + UUID-010 + UUID-011 + + + UUID-012 + UUID-013 + + + UUID-014 + UUID-015 + + + + Adopted + Тест + + + ru + Тест + + + + Customization + true + Тест_ + Version8_3_24 + ManagedApplication + + PlatformApplication + + Russian + + Role.Тест_ОсновнаяРоль + + + + Language.Русский + + + + + + TaxiEnableVersion8_2 + + + Русский + Тест_ОсновнаяРоль + ХвостМод + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/Languages/Русский.xml b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/Languages/Русский.xml new file mode 100644 index 000000000..c21624f52 --- /dev/null +++ b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/Languages/Русский.xml @@ -0,0 +1,13 @@ + + + + + + Adopted + Русский + + UUID-002 + ru + + + \ No newline at end of file diff --git a/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/Roles/Тест_ОсновнаяРоль.xml b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/Roles/Тест_ОсновнаяРоль.xml new file mode 100644 index 000000000..ec9dfbaf6 --- /dev/null +++ b/tests/skills/cases/cfe-patch-method/snapshots/actualize-marker-tail-comment/cfe/Roles/Тест_ОсновнаяРоль.xml @@ -0,0 +1,10 @@ + + + + + Тест_ОсновнаяРоль + + + + + \ No newline at end of file