Экспорт QUIK: очистка таблиц-срезов (ClearTables) для включённых пакетов
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user