ЛК на Fancy с Firebird: все запросы к DEPO, курсы, база SPECTRE
ЛК (bj-lk берёт данные у bj-server) сам работает с той СУБД, что выбрана для DEPO. - Перевод на Firebird: YEAR/MONTH/DAY(x) — EXTRACT, AS float — AS DOUBLE PRECISION (float T-SQL — 8 байт, FLOAT Firebird — 4: точность сумм и цен в ЛК); шаблоны со сложением строк (история операций Hist02, поиск клиента Man01) — Firebird-тексты до подстановки (depoSQL); UPPER по кириллице — в WIN1251 (база NONE). - Курсы валют (Fx01): на Firebird запрос от всех курсов шёл больше 200 с (лимит 15 с — курсов нет) — для Firebird от 20 валют, 0,2 с. - База SPECTRE (архив портфеля и операций ЛК): поле в «Трансферные таблицы DEPO»; у Firebird — путь или строка подключения Fancy (может быть на другом компьютере); не задана — ЛК пишет, где указать. На данных SPECTRE не проверено: базы нет. - Тест FBLiveLK: функции ЛК, ручного ввода, сверки переводов и QUIK на копии базы по договору К1 Бубликова — все работают, 0,07–0,26 с каждая; FBLivePrepare — 101 из 101 запроса. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -9,6 +9,7 @@ package lkgateway
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"git.zetit.ru/zuevav/Bridge-and-Join-s/internal/lkgateway/fsql"
|
||||
"strings"
|
||||
"sync"
|
||||
@@ -50,12 +51,34 @@ var spectreContractCache = struct {
|
||||
at map[string]time.Time
|
||||
}{m: map[string]spectreContract{}, at: map[string]time.Time{}}
|
||||
|
||||
// spectreOpen — подключение к копии SPECTRE тем же логином, что и к DEPO.
|
||||
// spectreOpen — подключение к копии SPECTRE тем же логином, что и к DEPO. Firebird: база SPECTRE — свой файл,
|
||||
// путь или строка подключения Fancy (может быть на другом компьютере, чем DEPO).
|
||||
func spectreOpen(s FancyMSSQLSettings) (*sql.DB, error) {
|
||||
if err := spectreMissing(s); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
db := strings.TrimSpace(s.SpectreDB())
|
||||
if s.IsFirebird() {
|
||||
host, port, path, err := fbSplitConn(db)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if host != "" {
|
||||
s.Server, s.Port = host, port
|
||||
}
|
||||
db = path
|
||||
}
|
||||
return fancyOpen(s, db)
|
||||
}
|
||||
|
||||
// spectreMissing — у Firebird имени базы SPECTRE по умолчанию нет: путь к ней задают в настройке.
|
||||
func spectreMissing(s FancyMSSQLSettings) error {
|
||||
if s.IsFirebird() && strings.TrimSpace(s.SpectreDatabase) == "" {
|
||||
return fmt.Errorf("база брокерского учёта SPECTRE не указана — Настройка → «Обмен с DEPO», карточка «Трансферные таблицы DEPO»")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SpectreDB — база SPECTRE рядом с DEPO: по умолчанию BJ_SPECTRE_DATA.
|
||||
func (s FancyMSSQLSettings) SpectreDB() string {
|
||||
if v := strings.TrimSpace(s.SpectreDatabase); v != "" {
|
||||
|
||||
Reference in New Issue
Block a user