Экспорт QUIK: очистка таблиц-срезов (ClearTables) для включённых пакетов

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
zuevav
2026-09-17 21:56:10 +03:00
parent 10e765b5b1
commit 1f12167946
2 changed files with 40 additions and 0 deletions
+14
View File
@@ -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 {
@@ -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)
}
}