From 1f1216794631bc0ae6a7b5332a862b01fb246523 Mon Sep 17 00:00:00 2001 From: zuevav Date: Thu, 17 Sep 2026 21:56:10 +0300 Subject: [PATCH] =?UTF-8?q?=D0=AD=D0=BA=D1=81=D0=BF=D0=BE=D1=80=D1=82=20QU?= =?UTF-8?q?IK:=20=D0=BE=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B0=20=D1=82=D0=B0?= =?UTF-8?q?=D0=B1=D0=BB=D0=B8=D1=86-=D1=81=D1=80=D0=B5=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=20(ClearTables)=20=D0=B4=D0=BB=D1=8F=20=D0=B2=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D1=91=D0=BD=D0=BD=D1=8B=D1=85=20=D0=BF=D0=B0=D0=BA?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 (1M context) --- modules/quikexport/quikexport.go | 14 ++++++++++ .../quikexport/quikexport_cleartables_test.go | 26 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 modules/quikexport/quikexport_cleartables_test.go diff --git a/modules/quikexport/quikexport.go b/modules/quikexport/quikexport.go index 7e1848f..76ff330 100644 --- a/modules/quikexport/quikexport.go +++ b/modules/quikexport/quikexport.go @@ -540,9 +540,23 @@ func quikExportRenderExportINI(s QuikExportSettings) (string, error) { t = iniSet(t, "General", "LimitKinds", s.LimitKinds) t = iniSet(t, "Files", "LogDepth", "3") t = iniOutputTables(t, s.Tables) + t = iniClearTables(t, s.Tables) return t, nil } +// iniClearTables — [ClearTables]: таблицы-срезы экспортёр очищает в начале сессии. Без этого повторная +// загрузка бьётся о первичный ключ (ошибки вставки текут памятью, как было с Portfolio) либо копит +// дубликаты. Portfolio не очищаем — на нём история НПР; журналы изменений очищать нельзя по смыслу. +func iniClearTables(text string, enabled []string) string { + for _, name := range enabled { + if name == "Portfolio" || strings.HasSuffix(name, "Journal") { + continue + } + text = iniSet(text, "ClearTables", name, "1") + } + return text +} + func quikExportRenderInfoINI(s QuikExportSettings) (string, error) { b, err := quikExportFS.ReadFile("web/quikexport/info.ini.tmpl") if err != nil { diff --git a/modules/quikexport/quikexport_cleartables_test.go b/modules/quikexport/quikexport_cleartables_test.go new file mode 100644 index 0000000..8ca2140 --- /dev/null +++ b/modules/quikexport/quikexport_cleartables_test.go @@ -0,0 +1,26 @@ +package quikexport + +import ( + "strings" + "testing" +) + +// [ClearTables]: включённые таблицы-срезы очищаются, Portfolio и журналы — нет. +func TestIniClearTables(t *testing.T) { + ini := "[Output tables]\n;SettleCodes=SettleCodes\nPortfolio=Portfolio\n\n[ClearTables]\nClasses=1\n;Securities=1\n" + out := iniClearTables(ini, []string{"Portfolio", "SettleCodes", "Securities", "DepoLimitsJournal"}) + for _, want := range []string{"SettleCodes=1", "Securities=1", "Classes=1"} { + if !strings.Contains(out, want) { + t.Errorf("нет %q в:\n%s", want, out) + } + } + if strings.Contains(out, "Portfolio=1") { + t.Errorf("Portfolio очищать нельзя:\n%s", out) + } + if strings.Contains(out, "DepoLimitsJournal=1") { + t.Errorf("журнал очищать нельзя:\n%s", out) + } + if strings.Contains(out, ";Securities=1") { + t.Errorf("строка осталась закомментированной:\n%s", out) + } +}