From 1c74843c05ba95606e1060b15b62244e9086047d Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sun, 23 Aug 2026 14:07:10 +0300 Subject: [PATCH] =?UTF-8?q?feat(db-repo):=20=D1=81=D0=B5=D1=82=D0=B5=D0=B2?= =?UTF-8?q?=D0=BE=D0=B5=20=D1=85=D1=80=D0=B0=D0=BD=D0=B8=D0=BB=D0=B8=D1=89?= =?UTF-8?q?=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=B5=D0=BD=D0=BE?= =?UTF-8?q?,=20=D1=80=D0=B0=D0=B7=D0=BB=D0=B8=D1=87=D0=B0=D0=B5=D0=BC=20?= =?UTF-8?q?=D0=BD=D0=B5=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Установлен crserver 8.3.23, поднят на порту 1542 — сетевое хранилище перестало быть непроверенным местом. Адрес tcp://<хост>[:<порт>]/<имя>, порт по умолчанию 1542; хранилище создаётся сервером по требованию. Весь цикл, файл списка объектов и администрирование работают так же, как на файловом, и одинаково в обоих портах. Отдельного поведения у сетевого хранилища не обнаружено. Нашлась двусмысленность: недоступный сервер даёт «Соединение с хранилищем конфигурации не установлено» — ровно то же сообщение, что и отсутствие реквизитов. Прежняя подсказка «добавьте repository в реестр» в сетевом случае уводила не туда. Теперь db-repo различает по схеме адреса и советует проверить сервер и порт, а подсказка db-load-xml и db-load-git называет обе причины. Документация больше не оговаривается «не проверено»: форма адреса подтверждена на стенде. Co-Authored-By: Claude Opus 5 --- .claude/skills/db-list/SKILL.md | 13 +++++++------ .../skills/db-load-git/scripts/db-load-git.ps1 | 7 ++++--- .claude/skills/db-load-git/scripts/db-load-git.py | 7 ++++--- .../skills/db-load-xml/scripts/db-load-xml.ps1 | 7 ++++--- .claude/skills/db-load-xml/scripts/db-load-xml.py | 7 ++++--- .claude/skills/db-repo/scripts/db-repo.ps1 | 13 ++++++++++++- .claude/skills/db-repo/scripts/db-repo.py | 12 +++++++++++- docs/v8-project-guide.md | 15 ++++++++------- 8 files changed, 54 insertions(+), 27 deletions(-) diff --git a/.claude/skills/db-list/SKILL.md b/.claude/skills/db-list/SKILL.md index f5fa87527..b1f8243c0 100644 --- a/.claude/skills/db-list/SKILL.md +++ b/.claude/skills/db-list/SKILL.md @@ -106,7 +106,7 @@ allowed-tools: | Поле | Тип | Обязательное | Описание | |------|-----|:------------:|----------| -| `repository.path` | string | да | Каталог хранилища или адрес сервера хранилища | +| `repository.path` | string | да | Каталог хранилища или `tcp://<хост>[:<порт>]/<имя>` | | `repository.user` | string | нет | Пользователь **хранилища**. Не наследуется от `user` базы | | `repository.password` | string | нет | Пароль пользователя хранилища | @@ -120,11 +120,12 @@ allowed-tools: Пароль хранилища — такой же секрет, как `password` базы; `.v8-project.json` в `.gitignore`. -> **Сетевое хранилище.** Путь передаётся платформе как есть, поэтому подходит любая форма, -> которую она принимает, — в том числе адрес сервера хранилища. Конкретный синтаксис в -> документации, которой мы располагаем (7.4.15 «Команды работы с хранилищем конфигурации», -> «Приложение 4»), не описан, и на серверном хранилище навык не проверялся: под рукой нет -> сервера хранилища. Файловое хранилище проверено полностью. +> **Сетевое хранилище.** Адрес — `tcp://<хост>[:<порт>]/<имя>`, порт по умолчанию 1542; хранилище +> обслуживает сервер хранилища (`crserver`). В документации, которой мы располагаем (7.4.15 +> «Команды работы с хранилищем конфигурации», «Приложение 4»), эта форма не описана — проверена +> на стенде 8.3.23: цикл, файл списка объектов и администрирование работают так же, как на +> файловом. Недоступный сервер даёт «Соединение с хранилищем конфигурации не установлено» — то же +> сообщение, что и при отсутствии реквизитов. ## Алгоритм разрешения базы данных diff --git a/.claude/skills/db-load-git/scripts/db-load-git.ps1 b/.claude/skills/db-load-git/scripts/db-load-git.ps1 index 985abbcb2..26e5ef1db 100644 --- a/.claude/skills/db-load-git/scripts/db-load-git.ps1 +++ b/.claude/skills/db-load-git/scripts/db-load-git.ps1 @@ -1,4 +1,4 @@ -# db-load-git v1.23 — Load Git changes into 1C database +# db-load-git v1.24 — Load Git changes into 1C database # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -238,8 +238,9 @@ function Write-RepositoryHints { } } if ($LogText -match 'Соединение с хранилищем конфигурации не установлено') { - Write-Host "[hint] база подключена к хранилищу, но его реквизиты неизвестны." -ForegroundColor Yellow - Write-Host " Добавьте `"repository`" в запись базы в .v8-project.json (см. /db-list)." -ForegroundColor Yellow + Write-Host "[hint] соединение с хранилищем не установлено. Две причины:" -ForegroundColor Yellow + Write-Host " реквизиты неизвестны — добавьте `"repository`" в запись базы в .v8-project.json (см. /db-list);" -ForegroundColor Yellow + Write-Host " либо хранилище недоступно — для сетевого проверьте сервер хранилища и порт." -ForegroundColor Yellow } } diff --git a/.claude/skills/db-load-git/scripts/db-load-git.py b/.claude/skills/db-load-git/scripts/db-load-git.py index 7ae29f5ea..fbd8a0f99 100644 --- a/.claude/skills/db-load-git/scripts/db-load-git.py +++ b/.claude/skills/db-load-git/scripts/db-load-git.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-load-git v1.23 — Load Git changes into 1C database +# db-load-git v1.24 — Load Git changes into 1C database # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -177,8 +177,9 @@ def write_repository_hints(log_text): else: print('[hint] объект не захвачен в хранилище: /db-repo lock <база> -Objects "%s"' % obj) if "Соединение с хранилищем конфигурации не установлено" in log_text: - print("[hint] база подключена к хранилищу, но его реквизиты неизвестны.") - print(' Добавьте "repository" в запись базы в .v8-project.json (см. /db-list).') + print("[hint] соединение с хранилищем не установлено. Две причины:") + print(' реквизиты неизвестны — добавьте "repository" в запись базы в .v8-project.json (см. /db-list);') + print(" либо хранилище недоступно — для сетевого проверьте сервер хранилища и порт.") def arg_key_match(token, key): diff --git a/.claude/skills/db-load-xml/scripts/db-load-xml.ps1 b/.claude/skills/db-load-xml/scripts/db-load-xml.ps1 index bb2f3956d..5feb4c56b 100644 --- a/.claude/skills/db-load-xml/scripts/db-load-xml.ps1 +++ b/.claude/skills/db-load-xml/scripts/db-load-xml.ps1 @@ -1,4 +1,4 @@ -# db-load-xml v1.24 — Load 1C configuration from XML files +# db-load-xml v1.25 — Load 1C configuration from XML files # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: *nix-раскладку платформы (/opt/1cv8//1cv8, без .exe) знает только .py-порт — PS на *nix не исполняется. <# @@ -232,8 +232,9 @@ function Write-RepositoryHints { } } if ($LogText -match 'Соединение с хранилищем конфигурации не установлено') { - Write-Host "[hint] база подключена к хранилищу, но его реквизиты неизвестны." -ForegroundColor Yellow - Write-Host " Добавьте `"repository`" в запись базы в .v8-project.json (см. /db-list)." -ForegroundColor Yellow + Write-Host "[hint] соединение с хранилищем не установлено. Две причины:" -ForegroundColor Yellow + Write-Host " реквизиты неизвестны — добавьте `"repository`" в запись базы в .v8-project.json (см. /db-list);" -ForegroundColor Yellow + Write-Host " либо хранилище недоступно — для сетевого проверьте сервер хранилища и порт." -ForegroundColor Yellow } } diff --git a/.claude/skills/db-load-xml/scripts/db-load-xml.py b/.claude/skills/db-load-xml/scripts/db-load-xml.py index 3a17e4317..36aa2c96d 100644 --- a/.claude/skills/db-load-xml/scripts/db-load-xml.py +++ b/.claude/skills/db-load-xml/scripts/db-load-xml.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-load-xml v1.24 — Load 1C configuration from XML files +# db-load-xml v1.25 — Load 1C configuration from XML files # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -177,8 +177,9 @@ def write_repository_hints(log_text): else: print('[hint] объект не захвачен в хранилище: /db-repo lock <база> -Objects "%s"' % obj) if "Соединение с хранилищем конфигурации не установлено" in log_text: - print("[hint] база подключена к хранилищу, но его реквизиты неизвестны.") - print(' Добавьте "repository" в запись базы в .v8-project.json (см. /db-list).') + print("[hint] соединение с хранилищем не установлено. Две причины:") + print(' реквизиты неизвестны — добавьте "repository" в запись базы в .v8-project.json (см. /db-list);') + print(" либо хранилище недоступно — для сетевого проверьте сервер хранилища и порт.") def arg_key_match(token, key): diff --git a/.claude/skills/db-repo/scripts/db-repo.ps1 b/.claude/skills/db-repo/scripts/db-repo.ps1 index 2392a1cfd..66c2747fd 100644 --- a/.claude/skills/db-repo/scripts/db-repo.ps1 +++ b/.claude/skills/db-repo/scripts/db-repo.ps1 @@ -1,4 +1,4 @@ -# db-repo v1.8 — 1C configuration repository operations +# db-repo v1.9 — 1C configuration repository operations # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: движок только 1cv8 — ibcmd работу с хранилищем не поддерживает (нет такого режима). <# @@ -1222,6 +1222,17 @@ try { } # Реестр — не формальность: без repository реквизиты придётся передавать в каждом вызове, # а update откажется работать вовсе. Модель об этом не вспомнит, поэтому даём готовый блок. + # «Соединение не установлено» у сетевого хранилища означает не отсутствие реквизитов, + # а недоступный сервер — трактовка «добавьте repository» увела бы не туда. + if ($verdict -ne 0 -and $logText -match 'Соединение с хранилищем конфигурации не установлено') { + if ($repo.Path -match '^(tcp|http)s?://') { + Write-Host "[hint] сервер хранилища недоступен по адресу $($repo.Path)." -ForegroundColor Yellow + Write-Host " Проверьте, запущен ли crserver и верен ли порт (по умолчанию 1542)." -ForegroundColor Yellow + } else { + Write-Host "[hint] хранилище недоступно по пути $($repo.Path) — проверьте путь и реквизиты." -ForegroundColor Yellow + } + } + # Признак — что путь задали аргументом: значит в реестре его нет (или он другой). if ($verdict -eq 0 -and @('create', 'connect') -contains $cmd -and $RepositoryPath) { # В строке замены -replace обратный слэш не спецсимвол: два символа дают два слэша. diff --git a/.claude/skills/db-repo/scripts/db-repo.py b/.claude/skills/db-repo/scripts/db-repo.py index 3a6ccde55..bc804baa0 100644 --- a/.claude/skills/db-repo/scripts/db-repo.py +++ b/.claude/skills/db-repo/scripts/db-repo.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# db-repo v1.8 — 1C configuration repository operations +# db-repo v1.9 — 1C configuration repository operations # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: движок только 1cv8 — ibcmd работу с хранилищем не поддерживает (нет такого режима). """Работа с хранилищем конфигурации 1С. @@ -1175,6 +1175,16 @@ def main(): print("--- End ---") # Реестр — не формальность: без repository реквизиты придётся передавать в каждом вызове, # а update откажется работать вовсе. Модель об этом не вспомнит, поэтому даём готовый блок. + # «Соединение не установлено» у сетевого хранилища означает не отсутствие реквизитов, + # а недоступный сервер — трактовка «добавьте repository» увела бы не туда. + if verdict != 0 and "Соединение с хранилищем конфигурации не установлено" in log_text: + if re.match(r"^(tcp|http)s?://", repo["path"] or ""): + print("[hint] сервер хранилища недоступен по адресу %s." % repo["path"]) + print(" Проверьте, запущен ли crserver и верен ли порт (по умолчанию 1542).") + else: + print("[hint] хранилище недоступно по пути %s — проверьте путь и реквизиты." + % repo["path"]) + # Признак — что путь задали аргументом: значит в реестре его нет (или он другой). if verdict == 0 and cmd in ("create", "connect") and args.RepositoryPath: json_path = repo["path"].replace("\\", "\\\\") diff --git a/docs/v8-project-guide.md b/docs/v8-project-guide.md index 2a47a2d32..1d8c22602 100644 --- a/docs/v8-project-guide.md +++ b/docs/v8-project-guide.md @@ -33,7 +33,7 @@ // работать с базой, подключённой к хранилищу: платформа не примет от них ни одной // операции конфигуратора. "repository": { - "path": "\\\\srv01\\repo\\MyApp", // каталог хранилища или адрес сервера хранилища + "path": "\\\\srv01\\repo\\MyApp", // каталог или tcp://srv01:1542/MyApp "user": "Ivanov", "password": "" }, @@ -115,7 +115,7 @@ | Поле | Тип | Обяз. | Описание | |------|-----|:-----:|----------| -| `repository.path` | string | да | Каталог хранилища или адрес сервера хранилища | +| `repository.path` | string | да | Каталог хранилища или `tcp://<хост>[:<порт>]/<имя>` | | `repository.user` | string | нет | Пользователь хранилища. **Не наследуется** от `user` базы — задаётся явно | | `repository.password` | string | нет | Пароль пользователя хранилища | @@ -129,11 +129,12 @@ Пароль хранилища — такой же секрет, как `password` базы; `.v8-project.json` в `.gitignore`. -> **Сетевое хранилище.** Путь передаётся платформе как есть, поэтому подходит любая форма, -> которую она принимает, — в том числе адрес сервера хранилища. Конкретный синтаксис в -> документации, которой мы располагаем (7.4.15 «Команды работы с хранилищем конфигурации», -> «Приложение 4»), не описан, и на серверном хранилище навык не проверялся: под рукой нет -> сервера хранилища. Файловое хранилище проверено полностью. +> **Сетевое хранилище.** Адрес — `tcp://<хост>[:<порт>]/<имя>`, порт по умолчанию 1542; хранилище +> обслуживает сервер хранилища (`crserver`). В документации, которой мы располагаем (7.4.15 +> «Команды работы с хранилищем конфигурации», «Приложение 4»), эта форма не описана — проверена +> на стенде 8.3.23: цикл, файл списка объектов и администрирование работают так же, как на +> файловом. Недоступный сервер даёт «Соединение с хранилищем конфигурации не установлено» — то же +> сообщение, что и при отсутствии реквизитов. `/db-repo update` отказывается работать, если у базы не объявлено `repository` и реквизиты не переданы явно: на базе, **не** подключённой к хранилищу, эта команда молча заменяет всю