mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-17 15:25:23 +03:00
feat(db-repo): правила захвата, нулевой шаг цикла и диагностика по отчёту субагента
Проверка навыка субагентом на сквозном сценарии вскрыла фактическую ошибку в инструкции: реквизиты и табличные части перечислялись наравне с формами как захватываемые объекты. Платформа их объектами не считает — список объектов получается пустым, причём без секции «отсутствующие в конфигурации». Правишь реквизит, табличную часть, измерение, ресурс или модуль — захватывай владельца; формы, макеты и команды захватываются отдельно. Сообщение «объект не найден» имеет три разные причины: опечатка, отставание базы от хранилища и попытка захватить то, что объектом не является. Теперь перечислены все три. В цикл добавлен нулевой шаг — получение актуального состояния перед началом работы: правки должны опираться на актуальные версии в том числе тех объектов, которые не меняются, но используются. Загрузка и обновление БД слиты в один шаг через -UpdateDB, поэтому цикл не удлинился. Захват корня конфигурации с -WithChildren отклоняется: это захват всей конфигурации, а выглядит как захват корня. Для всей конфигурации есть однозначная форма — вызов без -Objects. Текстовый отчёт печатается, а не только сохраняется в файл. Схема repository и extensions[] описана в docs/v8-project-guide.md, цикл под хранилищем — в docs/db-guide.md. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
478e7489f9
commit
3e816d3e12
@@ -1,4 +1,4 @@
|
||||
# db-repo v1.0 — 1C configuration repository operations
|
||||
# db-repo v1.1 — 1C configuration repository operations
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
# NB: движок только 1cv8 — ibcmd работу с хранилищем не поддерживает (нет такого режима).
|
||||
<#
|
||||
@@ -771,7 +771,11 @@ function Write-RepoVerdict {
|
||||
if ($Log.Missing.Count -gt 0) {
|
||||
Write-Host "Error: objects not found in the configuration:" -ForegroundColor Red
|
||||
foreach ($n in $Log.Missing) { Write-Host " $n" -ForegroundColor Red }
|
||||
Write-Host "Проверьте написание. Принимаются обе формы: Справочник.Номенклатура и Catalog.Номенклатура." -ForegroundColor Yellow
|
||||
Write-Host "Возможные причины:" -ForegroundColor Yellow
|
||||
Write-Host " - опечатка в имени. Принимаются обе формы: Справочник.Номенклатура и Catalog.Номенклатура" -ForegroundColor Yellow
|
||||
Write-Host " - база отстала от хранилища, объект появился позже — выполните /db-repo update" -ForegroundColor Yellow
|
||||
Write-Host " - это не объект хранилища: реквизиты, табличные части, измерения и ресурсы" -ForegroundColor Yellow
|
||||
Write-Host " отдельно не захватываются — указывайте объект-владельца" -ForegroundColor Yellow
|
||||
return 1
|
||||
}
|
||||
|
||||
@@ -879,6 +883,18 @@ function Write-RepoVerdict {
|
||||
return 1
|
||||
}
|
||||
Write-Host "Команда '$Cmd' выполнена." -ForegroundColor Green
|
||||
if ($Cmd -eq 'report' -and $ReportFormat -eq 'txt' -and (Test-Path $OutputFile)) {
|
||||
$txt = [System.Text.Encoding]::UTF8.GetString([System.IO.File]::ReadAllBytes($OutputFile))
|
||||
if ($txt.Length -gt 0 -and $txt[0] -eq [char]0xFEFF) { $txt = $txt.Substring(1) }
|
||||
$lines = @($txt -split "`r?`n")
|
||||
$limit = 200
|
||||
Write-Host "--- $OutputFile ---"
|
||||
Write-Host (($lines | Select-Object -First $limit) -join [Environment]::NewLine)
|
||||
if ($lines.Count -gt $limit) {
|
||||
Write-Host "[... показаны первые $limit строк из $($lines.Count); полный отчёт в файле ...]" -ForegroundColor Yellow
|
||||
}
|
||||
Write-Host "--- End ---"
|
||||
}
|
||||
return 0
|
||||
}
|
||||
}
|
||||
@@ -922,6 +938,18 @@ if ($requested.Count -gt 0 -and $objectAware -notcontains $cmd) {
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Корень с подчинёнными — это ВСЯ конфигурация, а выглядит как «захвачу корень». Для всей
|
||||
# конфигурации есть однозначная форма (вызов без -Objects), поэтому двусмысленную отклоняем.
|
||||
if ($WithChildren) {
|
||||
$rootAsked = @($requested | Where-Object { $script:ConfigRootAliases -contains $_ })
|
||||
if ($rootAsked.Count -gt 0) {
|
||||
Write-Host "Error: '$($rootAsked[0])' with -WithChildren means the WHOLE configuration, not just its root." -ForegroundColor Red
|
||||
Write-Host " Нужен только корень (чтобы добавить или удалить объект) — уберите -WithChildren." -ForegroundColor Yellow
|
||||
Write-Host " Нужна вся конфигурация — вызовите без -Objects." -ForegroundColor Yellow
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
|
||||
switch ($cmd) {
|
||||
'report' { if (-not $OutputFile) { Write-Host "Error: -OutputFile is required for report" -ForegroundColor Red; exit 1 } }
|
||||
'dump-cfg' { if (-not $OutputFile) { Write-Host "Error: -OutputFile (path to the .cf file) is required for dump-cfg" -ForegroundColor Red; exit 1 } }
|
||||
|
||||
Reference in New Issue
Block a user