Экспорт QUIK: настройка пакетами данных вместо правки export.ini

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
zuevav
2026-09-17 21:43:41 +03:00
parent 1fbc5d2375
commit 893e1222ab
3 changed files with 318 additions and 16 deletions
+36 -9
View File
@@ -96,27 +96,54 @@
</div>
<div class="card">
<h2><span class="dot ok"></span>3. Объём данных</h2>
<p class="muted">Какие таблицы QUIK выгружаем. Чем больше набор, тем больше нагрузка на сервер QUIK, база и диск. Портфели пересчитываются каждые «период портфелей» секунд (ARQA рекомендует не менее 60); история изменений НПР/УДС хранится в схеме <code>npr</code>.</p>
<form method="post" action="/admin/setup/quikexport" style="display:grid;gap:10px;margin-top:10px">
<h2><span class="dot ok"></span>3. Какие данные выгружаем</h2>
<p class="muted">Выгрузка настраивается пакетами: отметьте, что нужно, — bj сам соберёт секцию <code>[Output tables]</code> в <code>export.ini</code>, править файл руками не нужно. Чем больше пакетов, тем выше нагрузка на сервер QUIK, базу и диск. Пакет «Маржа и риск» включён всегда: на нём держится модуль «НПР / УДС».</p>
<form method="post" action="/admin/setup/quikexport" style="display:grid;gap:12px;margin-top:10px">
<input type="hidden" name="section" value="sec-quikexport"><input type="hidden" name="part" value="volume">
<div style="display:grid;gap:6px">{{range $X.Presets}}
<label style="display:flex;gap:8px;align-items:flex-start;font-weight:400;margin:0"><input type="radio" name="preset" value="{{.Key}}" {{if eq $S.Preset .Key}}checked{{end}} onchange="document.getElementById('qx-tables').style.display=this.value==='custom'?'block':'none'"><span><b>{{.Title}}</b><br><span class="muted" style="font-size:12px">{{.Desc}}</span></span></label>{{end}}
<input type="hidden" name="mode" value="{{if eq $S.Preset "custom"}}custom{{else}}packages{{end}}" id="qx-mode">
<div id="qx-packages" style="display:{{if eq $S.Preset "custom"}}none{{else}}grid{{end}};grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:10px">
{{range $X.Packages}}
<label style="display:block;border:1px solid {{if index $X.PkgOn .Key}}var(--accent){{else}}var(--border){{end}};border-radius:10px;padding:12px 14px;margin:0;font-weight:400;cursor:pointer;background:var(--card)">
<span style="display:flex;gap:8px;align-items:flex-start">
<input type="checkbox" name="packages" value="{{.Key}}" {{if index $X.PkgOn .Key}}checked{{end}} {{if eq .Key "risk"}}checked disabled{{end}} style="width:auto;margin-top:3px">
<span style="flex:1">
<b style="font-size:14px">{{.Title}}</b>
{{if index $X.PkgLive .Key}}<span class="badge ok" style="margin-left:6px" title="данные этого пакета уже есть в базе">данные поступают</span>{{else if index $X.PkgOn .Key}}<span class="badge warn" style="margin-left:6px" title="выбрано, но экспортёр ещё не перенастроен">после применения</span>{{end}}
<span class="muted" style="display:block;font-size:12.5px;margin-top:4px">{{.What}}</span>
<span style="display:block;margin-top:6px;font-size:12.5px">Что это даёт:</span>
<ul style="margin:2px 0 0;padding-left:18px;font-size:12.5px">{{range .Gives}}<li>{{.}}</li>{{end}}</ul>
<span class="muted" style="display:block;font-size:12px;margin-top:6px">Объём: {{.Load}} · таблиц: {{len .Tables}}</span>
{{if .Warn}}<span style="display:block;font-size:12px;margin-top:4px;color:var(--warn)">{{.Warn}}</span>{{end}}
<span class="muted" style="display:block;font-size:11.5px;margin-top:4px">{{range .Tables}}<code>{{.}}</code> {{end}}</span>
</span>
</span>
</label>{{end}}
<input type="hidden" name="packages" value="risk">
</div>
<div id="qx-tables" style="display:{{if eq $S.Preset "custom"}}block{{else}}none{{end}};border:1px solid var(--border);border-radius:8px;padding:10px">
<p class="muted" style="margin:0 0 8px;font-size:12.5px">Ручной набор таблиц — когда пакетов недостаточно. Список таблиц экспортёра ARQA целиком.</p>
{{range $g := $X.Groups}}<div style="font-weight:600;margin:6px 0 4px">{{$g}}</div>
<div style="display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:4px 12px">{{range $X.Tables}}{{if eq .Group $g}}
<label style="display:flex;gap:6px;align-items:flex-start;font-weight:400;margin:0;font-size:12.5px"><input type="checkbox" name="tables" value="{{.Name}}" {{if index $X.Enabled .Name}}checked{{end}}><span><code>{{.Name}}</code> — {{.Title}} <span class="muted">· объём: {{.Load}}{{if .Note}} · {{.Note}}{{end}}</span></span></label>{{end}}{{end}}</div>{{end}}
<label style="display:flex;gap:6px;align-items:flex-start;font-weight:400;margin:0;font-size:12.5px"><input type="checkbox" name="tables" value="{{.Name}}" {{if index $X.Enabled .Name}}checked{{end}} style="width:auto"><span><code>{{.Name}}</code> — {{.Title}} <span class="muted">· объём: {{.Load}}{{if .Note}} · {{.Note}}{{end}}</span></span></label>{{end}}{{end}}</div>{{end}}
</div>
<details><summary class="muted" style="cursor:pointer">Сейчас включено: {{len $S.Tables}} таблиц — {{range $S.Tables}}<code>{{.}}</code> {{end}}</summary></details>
<div style="display:grid;grid-template-columns:repeat(4,1fr);gap:10px;max-width:820px">
<div style="display:flex;gap:10px;flex-wrap:wrap;align-items:center">
<button type="submit" class="btn btn-ok">Сохранить</button>
<button type="button" class="btn btn-secondary" onclick="qxMode()">{{if eq $S.Preset "custom"}}← Вернуться к пакетам{{else}}Выбрать таблицы вручную →{{end}}</button>
<span class="muted" style="font-size:12.5px">Сейчас выбрано таблиц: {{len $S.Tables}}{{if eq $S.Preset "custom"}} (ручной набор){{end}}. В экспортёр попадут после «Применить настройки».</span>
</div>
<details><summary class="muted" style="cursor:pointer;font-size:12.5px">Список выбранных таблиц</summary><p class="muted" style="font-size:12px">{{range $S.Tables}}<code>{{.}}</code> {{end}}</p></details>
<div style="display:grid;grid-template-columns:repeat(4,minmax(140px,1fr));gap:10px;max-width:820px">
<label>Период портфелей, с <input type="number" name="portfolio_period" min="10" value="{{$S.PortfolioPeriod}}" style="width:100%"></label>
<label>Период «Текущих торгов», с <input type="number" name="param_period" min="0" value="{{$S.ParamPeriod}}" style="width:100%"></label>
<label>Виды лимитов (LimitKinds) <input type="text" name="limit_kinds" value="{{$S.LimitKinds}}" style="width:100%"></label>
<label>Уровень лога (DebugLevel) <input type="number" name="debug_level" min="0" max="255" value="{{$S.DebugLevel}}" style="width:100%"></label>
</div>
<div><button type="submit" class="btn btn-ok">Сохранить</button></div>
</form>
<script>
function qxMode(){var m=document.getElementById('qx-mode'),p=document.getElementById('qx-packages'),t=document.getElementById('qx-tables');
var custom=m.value!=='custom';m.value=custom?'custom':'packages';p.style.display=custom?'none':'grid';t.style.display=custom?'block':'none';
event.target.textContent=custom?'← Вернуться к пакетам':'Выбрать таблицы вручную →'}
</script>
</div>
<div class="card">