Канал ИШ: необязательные параметры — NULL (иначе ИШ молча выкидывал канал); мастер: шаг «Учётные записи», HTTPS сразу, DEPO без процедур — не блокирует

- bj-igate-admin: пустые строки в числовых/интервальных параметрах канала ИШ разбирал с ошибкой и не
  загружал канал («There are no active channels», API 500 «more than one Channel…»); теперь NULL, как пишет
  интерфейс ИШ; старые каналы чинятся при «Создать канал»; папка архивов 1042S — по имени
- проверка «Шлюз НРД»: канал контура действительно загружен и включён (api/admin/channels/wsl)
- «Учёт DEPO»: нет процедур bj2depo — жёлтое «не забудьте доустановить», не блокирует
- HTTPS: перенаправление с http:// включено по умолчанию, только когда HTTPS реально слушает порт
- мастер: шаг «Учётные записи» (роли, создание, «Придумать пароль») перед проверкой; письма с проверки убраны;
  форма «создать» не меняет существующую запись с тем же логином

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
zuevav
2026-10-06 23:19:01 +03:00
parent b3f3454e4a
commit 44f00a006a
12 changed files with 264 additions and 47 deletions
+36 -13
View File
@@ -1439,28 +1439,51 @@ var (
)
func depoObjectsMissing(ctx context.Context, db *sql.DB, f FancyMSSQLSettings) string {
if msg := depoTablesMissing(ctx, db, f); msg != "" {
return msg
}
return depoProcsMissing(ctx, db, f)
}
// depoMissing — какие объекты из списка (тип U — таблица, P — процедура) отсутствуют в базе DEPO.
func depoMissing(ctx context.Context, db *sql.DB, names []string, typ string) []string {
var out []string
for _, n := range names {
var ok int
if err := db.QueryRowContext(ctx, "SELECT CASE WHEN OBJECT_ID(@n, @t) IS NULL THEN 0 ELSE 1 END", sql.Named("n", "dbo."+n), sql.Named("t", typ)).Scan(&ok); err == nil && ok == 0 {
out = append(out, n)
}
}
return out
}
// depoTablesMissing — нет таблиц Fancy DEPO с поддержкой M2M: без них обмен невозможен.
func depoTablesMissing(ctx context.Context, db *sql.DB, f FancyMSSQLSettings) string {
if f.IsPostgres() {
return ""
}
missing := func(names []string, typ string) []string {
var out []string
for _, n := range names {
var ok int
if err := db.QueryRowContext(ctx, "SELECT CASE WHEN OBJECT_ID(@n, @t) IS NULL THEN 0 ELSE 1 END", sql.Named("n", "dbo."+n), sql.Named("t", typ)).Scan(&ok); err == nil && ok == 0 {
out = append(out, n)
}
}
return out
}
if m := missing(depoFancyM2MTables, "U"); len(m) > 0 {
if m := depoMissing(ctx, db, depoFancyM2MTables, "U"); len(m) > 0 {
return "в базе " + f.DepoDB() + " нет таблиц Fancy DEPO с поддержкой M2M (" + strings.Join(m, ", ") + "): нужна версия Fancy DEPO с M2M — обратитесь к разработчику Fancy"
}
return ""
}
// depoProcsMissingText — начало сообщения «нет процедур bj2depo» (по нему отличается от других отказов обработки).
const depoProcsMissingText = "нет процедур обработки bj2depo"
// depoProcsMissing — нет процедур обработки bj2depo. С 06.10.2026 это не блокирует запуск: формат обмена с учётной
// системой ещё готовится, процедуры могут поставляться отдельно (в том числе сообщениями в саму учётную систему) —
// проверка готовности напоминает «не забудьте доустановить».
func depoProcsMissing(ctx context.Context, db *sql.DB, f FancyMSSQLSettings) string {
if f.IsPostgres() {
return ""
}
procs := depoBj2depoProcs
if p := strings.TrimSpace(f.DepoJobProc); p != "" && !strings.EqualFold(strings.TrimPrefix(p, "dbo."), "FTV_M2M_JOB") {
procs = []string{strings.TrimPrefix(p, "dbo.")} // своя процедура обработки — проверяем только её
}
if m := missing(procs, "P"); len(m) > 0 {
return "в базе " + f.DepoDB() + " нет процедур обработки bj2depo: " + strings.Join(m, ", ") + ". Их нужно установить в базу DEPO (порядок: WIRING → OPERATION → EVENTS → CREATE → JOB), затем — «Перепроверить всё»"
if m := depoMissing(ctx, db, procs, "P"); len(m) > 0 {
return "в базе " + f.DepoDB() + " " + depoProcsMissingText + ": " + strings.Join(m, ", ") + ". Их нужно установить в базу DEPO (порядок: WIRING → OPERATION → EVENTS → CREATE → JOB), затем — «Перепроверить всё»"
}
return ""
}