From a13c9d61849670b6b7444ec121004d86df2a0d7d Mon Sep 17 00:00:00 2001 From: fontvielle Date: Tue, 20 Oct 2026 15:58:27 +0300 Subject: [PATCH] =?UTF-8?q?QUIK:=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D0=B1=D0=BE=D1=80=20=D1=81=D1=87=D1=91=D1=82=D0=B0=20?= =?UTF-8?q?=E2=80=94=20=D1=83=D1=81=D1=82=D0=BE=D0=B9=D1=87=D0=B8=D0=B2=20?= =?UTF-8?q?=D0=BA=20=D1=80=D0=B0=D0=B7=D0=BD=D1=8B=D0=BC=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BB=D0=BE=D0=BD=D0=BA=D0=B0=D0=BC;=20=D0=BE=D1=82=D1=87?= =?UTF-8?q?=D1=91=D1=82=20=D1=81=D0=B2=D1=91=D1=80=D0=BD=D1=83=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - quikDetectAccounts: Export не имеет колонки QuikFirm (ошибка 207 Invalid column name) — запросы по Actions/Export выполняются по отдельности, источник без нужной колонки пропускается. - «Полный ответ сервера (последняя проверка)» свёрнут в details, чтобы не прятать настройки ниже. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn --- internal/lkgateway/quikdetect.go | 50 ++++++++++++------- .../lkgateway/web/templates/part_quik.html | 7 +-- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/internal/lkgateway/quikdetect.go b/internal/lkgateway/quikdetect.go index 5e95192..11d77db 100644 --- a/internal/lkgateway/quikdetect.go +++ b/internal/lkgateway/quikdetect.go @@ -4,6 +4,7 @@ import ( "context" "database/sql" "net/http" + "sort" "strings" "time" ) @@ -13,7 +14,9 @@ import ( // коду нашей фирмы (QuikFirm/FirmID = код участника). Если счёт один — подставляем; // несколько — показываем на выбор; нет истории — просим ввести вручную. -// quikDetectAccounts — торговые счета фирмы firm из БД МНП (только чтение). +// quikDetectAccounts — торговые счета фирмы firm из БД МНП (только чтение). Разные версии +// модуля отличаются колонками (у Export нет QuikFirm и т. п.), поэтому пробуем несколько +// источников по отдельности и пропускаем те, где колонки нет (Invalid column name). func quikDetectAccounts(ctx context.Context, s QuikMNPSettings, firm string) ([]string, error) { db, err := quikOpen(s) if err != nil { @@ -22,29 +25,38 @@ func quikDetectAccounts(ctx context.Context, s QuikMNPSettings, firm string) ([] defer db.Close() cctx, cancel := context.WithTimeout(ctx, 20*time.Second) defer cancel() - const q = `SELECT DISTINCT LTRIM(RTRIM(Account)) AS acc FROM ( - SELECT Account, QuikFirm, FirmID FROM dbo.Actions - UNION ALL - SELECT Account, QuikFirm, FirmID FROM dbo.Export - ) t - WHERE Account IS NOT NULL AND LTRIM(RTRIM(Account)) <> '' - AND (@firm = '' OR QuikFirm = @firm OR FirmID = @firm) - ORDER BY acc` - rows, err := db.QueryContext(cctx, q, sql.Named("firm", firm)) - if err != nil { - return nil, err + queries := []string{ + `SELECT DISTINCT LTRIM(RTRIM(Account)) FROM dbo.Actions WHERE Account IS NOT NULL AND LTRIM(RTRIM(Account)) <> '' AND (@firm = '' OR FirmID = @firm)`, + `SELECT DISTINCT LTRIM(RTRIM(Account)) FROM dbo.Actions WHERE Account IS NOT NULL AND LTRIM(RTRIM(Account)) <> '' AND (@firm = '' OR QuikFirm = @firm)`, + `SELECT DISTINCT LTRIM(RTRIM(Account)) FROM dbo.Export WHERE Account IS NOT NULL AND LTRIM(RTRIM(Account)) <> '' AND (@firm = '' OR FirmID = @firm)`, } - defer rows.Close() + seen := map[string]bool{} var out []string - for rows.Next() { - var a string - if err := rows.Scan(&a); err == nil { - if a = strings.TrimSpace(a); a != "" { - out = append(out, a) + okAny := false + var lastErr error + for _, q := range queries { + rows, err := db.QueryContext(cctx, q, sql.Named("firm", firm)) + if err != nil { + lastErr = err // чаще всего «Invalid column name» — этот источник пропускаем + continue + } + okAny = true + for rows.Next() { + var a string + if rows.Scan(&a) == nil { + if a = strings.TrimSpace(a); a != "" && !seen[a] { + seen[a] = true + out = append(out, a) + } } } + rows.Close() } - return out, rows.Err() + if !okAny && lastErr != nil { + return nil, lastErr + } + sort.Strings(out) + return out, nil } // detectQuikAccount — POST /admin/setup/quik/detect-account: подобрать торговый счёт из QUIK. diff --git a/internal/lkgateway/web/templates/part_quik.html b/internal/lkgateway/web/templates/part_quik.html index f713f28..5d2d377 100644 --- a/internal/lkgateway/web/templates/part_quik.html +++ b/internal/lkgateway/web/templates/part_quik.html @@ -77,13 +77,14 @@ {{if .Settings.Quik.LastReport}}
-

Полный ответ сервера (последняя проверка)

-

Можно выделить и скопировать целиком — для отправки коллегам/аутсорсеру QUIK. - {{if not .Settings.Quik.LastAt.IsZero}}Проверка от {{.Settings.Quik.LastAt.Format "02.01.2006 15:04:05"}} UTC.{{end}}

+
+ Полный ответ сервера (последняя проверка){{if not .Settings.Quik.LastAt.IsZero}} · проверка от {{.Settings.Quik.LastAt.Format "02.01.2006 15:04:05"}} UTC{{end}} +

Можно выделить и скопировать целиком — для отправки коллегам/аутсорсеру QUIK.

{{.Settings.Quik.LastReport}}
+
{{end}} {{end}}