feat(db-repo): сетевое хранилище проверено, различаем недоступный сервер

Установлен crserver 8.3.23, поднят на порту 1542 — сетевое хранилище перестало
быть непроверенным местом. Адрес tcp://<хост>[:<порт>]/<имя>, порт по умолчанию
1542; хранилище создаётся сервером по требованию. Весь цикл, файл списка
объектов и администрирование работают так же, как на файловом, и одинаково в
обоих портах. Отдельного поведения у сетевого хранилища не обнаружено.

Нашлась двусмысленность: недоступный сервер даёт «Соединение с хранилищем
конфигурации не установлено» — ровно то же сообщение, что и отсутствие
реквизитов. Прежняя подсказка «добавьте repository в реестр» в сетевом случае
уводила не туда. Теперь db-repo различает по схеме адреса и советует проверить
сервер и порт, а подсказка db-load-xml и db-load-git называет обе причины.

Документация больше не оговаривается «не проверено»: форма адреса подтверждена
на стенде.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-23 14:07:10 +03:00
co-authored by Claude Opus 5
parent 3cdba1f70c
commit 1c74843c05
8 changed files with 54 additions and 27 deletions
+7 -6
View File
@@ -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: цикл, файл списка объектов и администрирование работают так же, как на
> файловом. Недоступный сервер даёт «Соединение с хранилищем конфигурации не установлено» — то же
> сообщение, что и при отсутствии реквизитов.
## Алгоритм разрешения базы данных
@@ -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/<ver>/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
}
}
@@ -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):
@@ -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/<ver>/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
}
}
@@ -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):
+12 -1
View File
@@ -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 обратный слэш не спецсимвол: два символа дают два слэша.
+11 -1
View File
@@ -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("\\", "\\\\")
+8 -7
View File
@@ -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` и реквизиты не
переданы явно: на базе, **не** подключённой к хранилищу, эта команда молча заменяет всю