Cache ANAF: verificarea in masa a codurilor fiscale, pe transe (SVN r17935)
Verificarea "in masa" (VerificaListaCIF ... 'MASA') pica pe ORA-01795 peste 1000 de coduri, iar esecul trimitea tot lotul la ANAF, cu pauze de o secunda la fiecare 100 de coduri. Pe langa asta, fiecare rand servit din cache era salvat inapoi in istoric si logat separat. - programe/validare.prg: CitesteIstoricPentruCoduri citeste pe transe de maxim 1000 de coduri legate cu OR in aceeasi interogare (fara obiecte noi in baza, compatibil cu Oracle 10g); plasa de siguranta cere codurile neacoperite o singura data, nu cod cu cod; SalveazaIstoricDinCursor sare peste randurile cu sursa CACHE*; bucla de log per rand devine o singura linie cu totalul. - clase/overificari.vc2: completarea tabelului de parteneri foloseste index pe codul normalizat si SEEK in loc de LOCATE cu UDF (era patratic). - utile/Teste/cache_anaf/: harness-uri de masurare si non-regresie pentru timpii de mai jos. Masurat pe MARIUSM_AUTO, cu ANAF blocat: 1000 de coduri 5,1 s -> 0,318 s; 1001 coduri 16,6 s cu ORA-01795 -> 0,553 s fara eroare; 3000 de coduri 1,565 s; 200 de coduri din cache 3,93 s -> 0,05 s, cu 0 randuri noi in istoric; completarea tabelului pentru 2000 de parteneri 11,97 s -> 0,028 s. Randurile intoarse si verdictele raman identice. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JCzVWfqscv1xyo5uvJiWiW
This commit is contained in:
@@ -2727,6 +2727,10 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
|
||||
|
||||
loVerificareANAF = CREATEOBJECT("VerificareANAF") && validare.prg
|
||||
|
||||
SELECT crsVerificareParteneri
|
||||
REPLACE ALL cod_fiscalfro WITH ALLTRIM(Strtran(cod_fiscal, loVerificare.GetCodTara(cod_fiscal),''))
|
||||
INDEX ON cod_fiscalfro TAG cfro
|
||||
|
||||
SELECT distinct data FROM cListaCIFTempX INTO CURSOR cListaCIFTempData
|
||||
SELECT cListaCIFTempData
|
||||
SCAN
|
||||
@@ -2741,17 +2745,29 @@ DEFINE CLASS frm_verificare_parteneri AS _frmbase OF "_frm_base.vcx"
|
||||
SCAN
|
||||
SCATTER NAME loRec
|
||||
WITH loRec
|
||||
lcCheieCauta = PADR(ALLTRIM(STR(.cui)), 30)
|
||||
SELECT crsVerificareParteneri
|
||||
LOCATE FOR ALLTRIM(Strtran(cod_fiscal, loVerificare.GetCodTara(cod_fiscal),'')) = ALLTRIM(STR(.cui)) AND (EMPTY(NVL(data, {})) OR data = m.ldData)
|
||||
IF FOUND()
|
||||
llGasit = .F.
|
||||
IF SEEK(m.lcCheieCauta, 'crsVerificareParteneri', 'cfro')
|
||||
llGasit = .T.
|
||||
DO WHILE !(EMPTY(NVL(data, {})) OR data = m.ldData)
|
||||
SKIP
|
||||
IF EOF() OR cod_fiscalfro <> m.lcCheieCauta
|
||||
llGasit = .F.
|
||||
EXIT
|
||||
ENDIF
|
||||
ENDDO
|
||||
ENDIF
|
||||
IF llGasit
|
||||
Replace firma With .denumire, adresa With .adresa, datatvamfin With TRANSFORM(.data), platitortvamfin With .tva, stare With .mesaj, cod WITH ALLTRIM(STR(.cui)), ;
|
||||
tvaincasare WITH .tvaincasare, splittva WITH .splittva, inactiv WITH .inactiv, ;
|
||||
sursa WITH NVL(.sursa, 'ANAF'), data_sursa WITH .data_sursa
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDWITH
|
||||
ENDSCAN && (m.lcCursorVerificareANAF)
|
||||
ENDIF
|
||||
ENDSCAN && cListaCIFTempData
|
||||
SET ORDER TO 0 IN crsVerificareParteneri
|
||||
USE IN (SELECT('cListaCIFTempData'))
|
||||
USE IN (SELECT('cListaCIFTempX'))
|
||||
USE IN (SELECT('cListaCIFTemp'))
|
||||
|
||||
Reference in New Issue
Block a user