Decizii LACERTA: data = ultima zi, 542 cu parteneri, 4428/01, backup .fbk

- genereaza_xlsx: coloana data = ultima zi a lunii; etalonul de regresie
  actualizat doar pe aceasta coloana (verificat celula cu celula).
- config: 542 cont cu parteneri (acum identic cu REF); descrierea lui 4092
  corectata.
- extrage/citire_fdb: .fbk se restaureaza cu gbak -c in temporar; test ca
  da aceleasi fisiere ca FDB-ul.
- test_lacerta: 49/53 frunze identice cu REF, 4428.TOATE -> 4428/01.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYeAtVxeS8m4oXekjX8Am2
This commit is contained in:
2026-09-27 16:43:54 +03:00
parent 99d9cf0aff
commit b5773c9822
11 changed files with 71 additions and 35 deletions

View File

@@ -22,7 +22,7 @@ colector `%` se exclude.
Baza primita se copiaza in temporar si copia se repune online (clientul o poate opri
cu `full shutdown` inainte de copiere); fisierul primit nu se atinge.
VERIFICARI: firma de joaca din `D:\SAGA250909\0001` (sinteticele = exportul .xlsx,
VERIFICARI: firma de joaca din `D:/SAGA250909/0001` (sinteticele = exportul .xlsx,
la octet) si LACERTA 06/2026 (tests/test_lacerta.py: 48 din 53 de frunze identice cu
importul facut din exportul SAGA, restul explicate in docs/analiza_lacerta_fdb.md;
facturile per document insumeaza netul fiecarui partener). La un client nou se
@@ -43,6 +43,7 @@ from datetime import date
FBCLIENT = r"C:\Program Files\Firebird\Firebird30_Saga\fbclient.dll"
GFIX = os.path.join(os.path.dirname(FBCLIENT), "gfix.exe")
GBAK = os.path.join(os.path.dirname(FBCLIENT), "gbak.exe")
UTILIZATOR = "SYSDBA"
PAROLA = "masterkey"
CHARSET = "WIN1250"
@@ -292,12 +293,20 @@ def scrie_csv(rows, cale, coloane):
def copie_online(cale_fdb, dir_tmp):
"""Copiaza baza in dir_tmp si o repune online, daca clientul a oprit-o inainte de
copiere (`full shutdown`). Fisierul primit nu se atinge. Pe o baza deja online
gfix raspunde cu eroare, inofensiva: daca repunerea chiar esueaza, conectarea
urmatoare pica cu mesajul real (`database ... shutdown`)."""
copiere (`full shutdown`). Un backup `.fbk` se restaureaza cu gbak in dir_tmp.
Fisierul primit nu se atinge. Pe o baza deja online gfix raspunde cu eroare,
inofensiva: daca repunerea chiar esueaza, conectarea urmatoare pica cu mesajul
real (`database ... shutdown`)."""
if not os.path.exists(cale_fdb):
raise FileNotFoundError("lipseste baza Firebird: %s" % cale_fdb)
copie = os.path.join(dir_tmp, "CONT_BAZA.FDB")
if cale_fdb.lower().endswith(".fbk"):
rez = subprocess.run([GBAK, "-c", cale_fdb, copie, "-user", UTILIZATOR,
"-password", PAROLA], capture_output=True, text=True)
if rez.returncode != 0:
raise RuntimeError("restaurarea %s a esuat: %s"
% (cale_fdb, (rez.stderr or rez.stdout).strip()))
return copie
shutil.copyfile(cale_fdb, copie)
if os.path.exists(GFIX):
subprocess.run([GFIX, "-online", "normal", copie, "-user", UTILIZATOR,