From 0c42691d59dac18e37c83697cb9f2ff921a6fd16 Mon Sep 17 00:00:00 2001 From: zuevav Date: Tue, 29 Sep 2026 15:39:34 +0300 Subject: [PATCH] =?UTF-8?q?FTV=5FM2M=5FLINES:=20TimeNew=20=D0=BF=D0=B8?= =?UTF-8?q?=D1=88=D0=B5=D1=82=D1=81=D1=8F=20=D1=8F=D0=B2=D0=BD=D0=BE=20(?= =?UTF-8?q?=D0=B2=20=D0=B1=D0=BE=D0=B5=D0=B2=D0=BE=D0=B9=20DEPO=20=D1=83?= =?UTF-8?q?=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D1=8B=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BA=20=D0=BD=D0=B5=D1=82=20=D1=83=D0=BC=D0=BE?= =?UTF-8?q?=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=20GETDATE())?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi --- internal/lkgateway/depoevents.go | 9 ++++++ internal/lkgateway/ftvcols_live_test.go | 43 +++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 internal/lkgateway/ftvcols_live_test.go diff --git a/internal/lkgateway/depoevents.go b/internal/lkgateway/depoevents.go index cdfd2dd..eacb40a 100644 --- a/internal/lkgateway/depoevents.go +++ b/internal/lkgateway/depoevents.go @@ -242,6 +242,7 @@ func depoUpsertOrder(rc *RuntimeConfig, guid, direction, cpCode, deponentName, d } // SHARE (ID бумаги в DEPO) — заполняем, если колонка есть (джоба может подставить сама) hasShare := depoHasColumn(ctx, db, "FTV_M2M_LINES", "SHARE") + hasLineTimeNew := depoHasColumn(ctx, db, "FTV_M2M_LINES", "TimeNew") for _, ln := range lines { var share sql.NullInt64 if ln.ISIN != "" && hasShare { @@ -255,6 +256,14 @@ func depoUpsertOrder(rc *RuntimeConfig, guid, direction, cpCode, deponentName, d if hasDepoNumber { cols, vals = cols+", DEPO_NUMBER", vals+", @acc" } + // TimeNew — явно: у FTV_M2M_LINES в боевой DEPO нет умолчания GETDATE() (29.09.2026), время было пустым + if hasLineTimeNew { + now := "GETDATE()" + if rc.Snapshot().Fancy.IsPostgres() { + now = "LOCALTIMESTAMP" + } + cols, vals = cols+", TimeNew", vals+", "+now + } q := fsql.Ev06 + cols + `) VALUES (` + vals + `)` if _, err := tx.ExecContext(ctx, q, sql.Named("g", guid), sql.Named("r", ln.Ref), sql.Named("i", nullStr(ln.ISIN)), sql.Named("c", nullStr(ln.Code)), sql.Named("sh", share), sql.Named("a", ln.Amount), sql.Named("p", nullStr(ln.Place)), sql.Named("lnk", strings.TrimSpace(rc.Snapshot().NSD.AccountID)), sql.Named("acc", clientAcc)); err != nil { diff --git a/internal/lkgateway/ftvcols_live_test.go b/internal/lkgateway/ftvcols_live_test.go new file mode 100644 index 0000000..7f77270 --- /dev/null +++ b/internal/lkgateway/ftvcols_live_test.go @@ -0,0 +1,43 @@ +//go:build live + +package lkgateway + +import ( + "context" + "fmt" + "testing" +) + +// Только чтение: колонки времени и умолчания в таблицах обмена FTV_M2M*. +func TestFTVColsLive(t *testing.T) { + rc, err := NewRuntimeConfig("/var/lib/bj/.bj/setup.json") + if err != nil { + t.Fatal(err) + } + fs := rc.Snapshot().Fancy + db, err := fancyOpen(fs, fs.DepoDB()) + if err != nil { + t.Fatal(err) + } + defer db.Close() + ctx := context.Background() + rows, err := db.QueryContext(ctx, `SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, ISNULL(COLUMN_DEFAULT,'—') + FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE 'FTV_M2M%' AND COLUMN_NAME IN ('TimeNew','TimeBeg','TimeEnd','STATE') ORDER BY TABLE_NAME, ORDINAL_POSITION`) + if err != nil { + t.Fatal(err) + } + for rows.Next() { + var tb, c, dt, nl, def string + _ = rows.Scan(&tb, &c, &dt, &nl, &def) + fmt.Printf("%-18s %-8s %-9s null=%s default=%s\n", tb, c, dt, nl, def) + } + rows.Close() + for _, tb := range []string{"FTV_M2M", "FTV_M2M_LINES", "FTV_M2M_EVENTS"} { + var all, nnew, nbeg, nend int + _ = db.QueryRowContext(ctx, "SELECT COUNT(*), SUM(CASE WHEN TimeNew IS NULL THEN 1 ELSE 0 END), SUM(CASE WHEN TimeBeg IS NULL THEN 1 ELSE 0 END), SUM(CASE WHEN TimeEnd IS NULL THEN 1 ELSE 0 END) FROM dbo."+tb).Scan(&all, &nnew, &nbeg, &nend) + fmt.Printf("%s: строк %d, TimeNew пусто %d, TimeBeg пусто %d, TimeEnd пусто %d\n", tb, all, nnew, nbeg, nend) + } + var tn, tb2, te interface{} + _ = db.QueryRowContext(ctx, "SELECT TimeNew, TimeBeg, TimeEnd FROM dbo.FTV_M2M WHERE GUID='5A256E6D-9977-4DCD-A481-B2E494F0FE6A'").Scan(&tn, &tb2, &te) + fmt.Println("шапка 5A256E6D:", tn, tb2, te) +}