Verificarile de partener nu mai depind exclusiv de raspunsul ANAF: se citeste intai cache-ul din ISTORIC_CODURI_FISCALE (mutat in CONTAFIN_ORACLE), cu provenienta afisata pe ecrane (sursa / data_sursa) si cu plasa de siguranta cand ANAF tace. Ordinea cache/ANAF e configurabila; cache-ul expira. - programe/validare.prg: verificare single si pe loturi peste cache, contract 404 separat de caderea de serviciu, expirarea cache-ului, corectii la verdictul pe firma si la etichetarea CACHE_INDISP. - programe/ocautare.prg: plasa de siguranta si banda de provenienta la cautarea de partener. - programe/oproceduri_comune.prg: VERIFICA_RTVAI_DATA citeste si cache-ul. - clase/overificari.vc2: propagarea provenientei in interfata. - utile/Teste/: harness-uri de testare headless - echivalenta cache/ANAF pe 200 de coduri reale, marginile pe inactiv si TVA la incasare, mock batch ANAF, baseline D394 si sondele de diagnostic ANAF. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JCzVWfqscv1xyo5uvJiWiW
150 lines
6.6 KiB
Plaintext
150 lines
6.6 KiB
Plaintext
* sonda_anaf_single.prg
|
|
* Diagnostic (NU repara nimic): pe schema MARIUSM_AUTO, ecranul de cautare partener arata
|
|
* pentru toate codurile fiscale banda "ANAF nu a raspuns - verificare sarita"
|
|
* (COMUN\programe\ocautare.prg:801), desi ANAF raspunde OK 200 la curl direct pe aceeasi masina.
|
|
* Scopul scriptului: izoleaza pasul care arunca exceptie in ANAF_VerificaCuiSingle /
|
|
* ANAF_CreeazaCerereANAF (validare.prg), pas cu pas, cu Try/Catch separat pe fiecare bucata.
|
|
*
|
|
* Rulare headless (nu tine VFP IDE sau roacont.exe deschis):
|
|
* & "C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe" -A -T ;
|
|
* "D:\ROA\ROACONT\COMUN\utile\Teste\partener_anaf\sonda_anaf_single.prg"
|
|
* Rezultatul se scrie in %TEMP%\sonda_anaf_single.txt
|
|
|
|
PUBLIC gcLogFile
|
|
gcLogFile = ADDBS(SYS(2023)) + 'sonda_anaf_single.txt'
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13)+CHR(10), gcLogFile)
|
|
DO SondaLog WITH 'SET(SAFETY)=' + SET('SAFETY') + ' SET(RESOURCE)=' + SET('RESOURCE')
|
|
|
|
ON ERROR DO SondaErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
ON SHUTDOWN QUIT
|
|
|
|
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
|
IF gnHandle <= 0
|
|
DO SondaLog WITH 'EROARE: conectare Oracle esuata, gnHandle=' + TRANSFORM(gnHandle)
|
|
DO SondaLog WITH 'REZULTAT: NEDETERMINAT'
|
|
QUIT
|
|
ENDIF
|
|
DO SondaLog WITH 'mediu OK, gnAn=' + TRANSFORM(gnAn) + ' luna=' + TRANSFORM(gnLuna) + ' gcS=' + gcS
|
|
|
|
* ===== pas 0: instantiere VerificareANAF, ca in ANAF_VerificaCuiSingle - incarca =====
|
|
* ===== nfjsonread.prg / nfjsoncreate.prg ca proceduri (VerificareANAF.Init) =====
|
|
LOCAL loVerifANAF, loEx1 As Exception
|
|
TRY
|
|
loVerifANAF = CREATEOBJECT('VerificareANAF')
|
|
DO SondaLog WITH 'PAS0 CREATEOBJECT(VerificareANAF): OK, nfjsonread/nfjsoncreate incarcate'
|
|
CATCH TO loEx1
|
|
DO SondaLog WITH 'PAS0 CREATEOBJECT(VerificareANAF): EXCEPTIE ' + loEx1.Message + ' [' + loEx1.Procedure + ':' + TRANSFORM(loEx1.LineNo) + ']'
|
|
ENDTRY
|
|
|
|
* ===== pas A: doar Createobject('winHTTP.winHTTPrequest.5.1') =====
|
|
LOCAL loHttpA, loEx2 As Exception
|
|
TRY
|
|
loHttpA = CREATEOBJECT('winHTTP.winHTTPrequest.5.1')
|
|
DO SondaLog WITH 'PAS A winHTTP.winHTTPrequest.5.1: OK, VARTYPE=' + VARTYPE(loHttpA)
|
|
CATCH TO loEx2
|
|
DO SondaLog WITH 'PAS A winHTTP.winHTTPrequest.5.1: EXCEPTIE ' + loEx2.Message + ' [' + loEx2.Procedure + ':' + TRANSFORM(loEx2.LineNo) + ']'
|
|
ENDTRY
|
|
|
|
* ===== pas B: nfjsoncreate pe un array cu un obiect (cui + data), ca in ANAF_CreeazaCerereANAF =====
|
|
LOCAL loColB As "empty", laCoduriB[1], lcSendB, loEx3 As Exception
|
|
TRY
|
|
loColB = CREATEOBJECT('empty')
|
|
ADDPROPERTY(loColB, 'cui', 1879855)
|
|
ADDPROPERTY(loColB, 'data', '2026-08-01')
|
|
laCoduriB[1] = loColB
|
|
lcSendB = nfjsoncreate(@laCoduriB)
|
|
DO SondaLog WITH 'PAS B nfjsoncreate: OK, rezultat=' + TRANSFORM(lcSendB)
|
|
CATCH TO loEx3
|
|
DO SondaLog WITH 'PAS B nfjsoncreate: EXCEPTIE ' + loEx3.Message + ' [' + loEx3.Procedure + ':' + TRANSFORM(loEx3.LineNo) + ']'
|
|
ENDTRY
|
|
|
|
* ===== pas C: ANAF_CreeazaCerereANAF(1879855, Date(), .F.) direct, sincron =====
|
|
LOCAL loHttpC, loEx4 As Exception
|
|
TRY
|
|
loHttpC = ANAF_CreeazaCerereANAF(1879855, DATE(), .F.)
|
|
IF VARTYPE(loHttpC) = 'O'
|
|
DO SondaLog WITH 'PAS C ANAF_CreeazaCerereANAF: OK, Status=' + TRANSFORM(loHttpC.Status) + ' responseText(200)=' + LEFT(ALLTRIM(loHttpC.responseText), 200)
|
|
ELSE
|
|
DO SondaLog WITH 'PAS C ANAF_CreeazaCerereANAF: OK dar VARTYPE=' + VARTYPE(loHttpC) + ' (nu e obiect)'
|
|
ENDIF
|
|
CATCH TO loEx4
|
|
DO SondaLog WITH 'PAS C ANAF_CreeazaCerereANAF: EXCEPTIE ' + loEx4.Message + ' [' + loEx4.Procedure + ':' + TRANSFORM(loEx4.LineNo) + ']'
|
|
ENDTRY
|
|
|
|
* ===== pas E: nfjsonread + ParseJsonANAFv8 direct pe raspunsul de la pasul C, izolat =====
|
|
LOCAL loParsedE, loEx5 As Exception
|
|
IF VARTYPE(loHttpC) = 'O'
|
|
TRY
|
|
loParsedE = nfjsonread(ALLTRIM(loHttpC.responseText))
|
|
DO SondaLog WITH 'PAS E nfjsonread: OK, TYPE=' + TYPE('loParsedE') + ' PEMSTATUS(found_vfpsafe_)=' + TRANSFORM(PEMSTATUS(loParsedE, 'found_vfpsafe_', 5))
|
|
loVerifANAF.ParseJsonANAFv8(loParsedE, 'crsDiagE')
|
|
DO SondaLog WITH 'PAS E ParseJsonANAFv8: OK, RECCOUNT(crsDiagE)=' + TRANSFORM(RECCOUNT('crsDiagE'))
|
|
IF USED('crsDiagE') AND RECCOUNT('crsDiagE') > 0
|
|
SELECT crsDiagE
|
|
GO TOP
|
|
DO SondaLog WITH 'PAS E primul rand: cui=' + TRANSFORM(NVL(cui, 0)) + ' denumire=' + NVL(denumire, '')
|
|
ENDIF
|
|
CATCH TO loEx5
|
|
DO SondaLog WITH 'PAS E nfjsonread/ParseJsonANAFv8: EXCEPTIE ' + loEx5.Message + ' [' + loEx5.Procedure + ':' + TRANSFORM(loEx5.LineNo) + ']'
|
|
ENDTRY
|
|
ELSE
|
|
DO SondaLog WITH 'PAS E: sarit, loHttpC nu e obiect (PAS C a esuat)'
|
|
ENDIF
|
|
|
|
* ===== pas F: exact linia "Use In (Select(alias))" din ANAF_VerificaCuiSingle, pe un alias =====
|
|
* ===== care NU e deschis (ca la primul apel din sesiune) =====
|
|
LOCAL lcAliasF, lnSelF, loEx6 As Exception
|
|
lcAliasF = "crsANAFSingleTemp"
|
|
lnSelF = SELECT(m.lcAliasF)
|
|
DO SondaLog WITH 'PAS F SELECT(' + m.lcAliasF + ')=' + TRANSFORM(lnSelF) + ' inainte de orice Use'
|
|
TRY
|
|
Use In (SELECT(m.lcAliasF))
|
|
DO SondaLog WITH 'PAS F Use In (Select(alias)) pe alias neschis: OK'
|
|
CATCH TO loEx6
|
|
DO SondaLog WITH 'PAS F Use In (Select(alias)) pe alias neschis: EXCEPTIE ' + loEx6.Message + ' [' + loEx6.Procedure + ':' + TRANSFORM(loEx6.LineNo) + ']'
|
|
ENDTRY
|
|
|
|
* ===== pas D: fluxul real, ANAF_VerificaCuiSingle, pentru cele 3 coduri fiscale =====
|
|
LOCAL lcCui, loResult, llNegasit, lcClasaEsec, lnI
|
|
LOCAL ARRAY laCui[3]
|
|
laCui[1] = '1879855'
|
|
laCui[2] = '12751583'
|
|
laCui[3] = '11980333'
|
|
FOR lnI = 1 TO 3
|
|
lcCui = laCui[lnI]
|
|
llNegasit = .F.
|
|
lcClasaEsec = ''
|
|
loResult = ANAF_VerificaCuiSingle(m.lcCui, DATE(), @llNegasit, @lcClasaEsec)
|
|
IF VARTYPE(loResult) = 'O'
|
|
DO SondaLog WITH 'PAS D CUI=' + m.lcCui + ' -> OBIECT, denumire=' + NVL(loResult.denumire, '') + ' tlNegasit=' + TRANSFORM(llNegasit) + ' tcClasaEsec=' + m.lcClasaEsec
|
|
ELSE
|
|
DO SondaLog WITH 'PAS D CUI=' + m.lcCui + ' -> VARTYPE=' + VARTYPE(loResult) + ' tlNegasit=' + TRANSFORM(llNegasit) + ' tcClasaEsec=' + m.lcClasaEsec
|
|
ENDIF
|
|
IF USED('crsANAFSingleTemp')
|
|
LOCAL lnSelSaveD
|
|
lnSelSaveD = SELECT()
|
|
SELECT crsANAFSingleTemp
|
|
DO SondaLog WITH 'PAS D dupa CUI=' + m.lcCui + ': crsANAFSingleTemp deschis, RECCOUNT=' + TRANSFORM(RECCOUNT()) + ' RECNO=' + TRANSFORM(RECNO()) + ' EOF=' + TRANSFORM(EOF()) + ' denumire=[' + NVL(denumire, '<NULL>') + ']'
|
|
SELECT (m.lnSelSaveD)
|
|
ELSE
|
|
DO SondaLog WITH 'PAS D dupa CUI=' + m.lcCui + ': crsANAFSingleTemp NU e deschis'
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
DO SondaLog WITH 'REZULTAT: TERMINAT ' + TTOC(DATETIME())
|
|
QUIT
|
|
|
|
PROCEDURE SondaErr
|
|
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
|
DO SondaLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
|
|
ENDPROC
|
|
|
|
PROCEDURE SondaLog
|
|
LPARAMETERS tcMsg
|
|
LOCAL lcL
|
|
lcL = FILETOSTR(gcLogFile)
|
|
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcLogFile)
|
|
ENDPROC
|