Files
comun/utile/Teste/facturare_unificat/probe_s4g_e2e_positional.prg
Marius Mutu 8e022d332e #13: formular de facturare unificat - etapa curenta
Squash al branch-ului de lucru plan13-s2.

Clase: ofacturare (nucleul formularului unificat), ofacturare_comun,
ferestre_cere_date, ocomenzi, caut_ora (lista de preturi in combo-urile de
cautare), omodificari.

Programe: ofacturare impartit - ofacturare_antet, ofacturare_rutare_scriere si
ogrid_latimi sunt fisiere noi; oproceduri_facturare primeste discountul pe linie
si cota standard de TVA cand articolul nu are cota pe politica.

Documentatie: capcana SQLExec no_data_found, conventia de encoding, depanarea
testelor VFP si regulile de lucru - conflictele cu modificarile venite din alte
proiecte sunt rezolvate pastrand ambele parti.

Loguri de rulare a testelor scoase din versionare; testele raman.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PkyjGyrV2S7932om4kfSiK
2026-09-09 21:38:25 +03:00

209 lines
11 KiB
Plaintext

* probe_s4g_e2e_positional.prg
* Proba end-to-end (S4g, reparatie pozitionala): apel real prin goExecutor catre
* pack_facturare.adauga_articol_factura, cu argumentele 28/29 pozitionale asa cum le scrie
* acum COMUN\clase\ofacturare.vc2 (do_scrie_articole, ambele clase). Verifica ca apelul
* AJUNGE in PL/SQL (nu doar ca sirul se construieste corect) si ca V_CONT_VENIT (poz. 29)
* ajunge in VANZARI_DETALII_TEMP.CONT_VENIT. Tranzactie cu ROLLBACK, zero date consumate.
*
* Rulare: vfp9.exe -A -T "...\probe_s4g_e2e_positional.prg"
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\probe_s4g_e2e_positional.log
SET SAFETY OFF
SET TALK OFF
SET NOTIFY OFF
CLOSE DATABASES
PUBLIC gcLog, gcCaz
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\probe_s4g_e2e_positional.log"
IF !DIRECTORY("D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out")
MD "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out"
ENDIF
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
gcCaz = ""
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
DO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
IF TYPE('gnHandle') <> 'N' OR gnHandle <= 0
DO AfLog WITH "FAIL: conexiune Oracle esuata"
DO Final
ENDIF
gnIdUtil = 8
DO AfLog WITH "ENV OK"
PRIVATE lnSucces, lcSql, lnIdArticol, lnIdTemp1, lnIdTemp2, lnIdTemp3, lcContAsteptat, lcContObtinut1, lcContObtinut2, lcContObtinut3, ;
lnTransOriginal, lnCantObtinut1, lnCantObtinut2, lnCantObtinut3
*----------------------------------------------------------------------------------------
* confirmare diagnostic: VANZARI_DETALII_TEMP e GTT cu ON COMMIT DELETE ROWS
gcCaz = "[diag-gtt] "
lnSucces = goExecutor.oExecute([select temporary, duration from user_tables where table_name = 'VANZARI_DETALII_TEMP'],[crsgtt])
IF lnSucces >= 0 AND USED('crsgtt') AND RECCOUNT('crsgtt') = 1
DO AfLog WITH "DIAG user_tables VANZARI_DETALII_TEMP: temporary=[" + ALLTRIM(crsgtt.temporary) + "] duration=[" + ALLTRIM(NVL(crsgtt.duration,'<NULL>')) + "]"
DO Assert WITH ALLTRIM(crsgtt.temporary) == "Y" AND ALLTRIM(NVL(crsgtt.duration,'')) == "SYS$TRANSACTION", ;
"VANZARI_DETALII_TEMP e GTT ON COMMIT DELETE ROWS (TEMPORARY=Y, DURATION=SYS$TRANSACTION)"
ELSE
DO AfLog WITH "DIAG user_tables: lnSucces=" + TRANSFORM(lnSucces) + " used=" + TRANSFORM(USED('crsgtt'))
ENDIF
IF USED('crsgtt')
USE IN crsgtt
ENDIF
* tranzactie manuala, ca sa nu piarda autocommit-ul randul din GTT (ON COMMIT DELETE ROWS)
* inainte ca SELECT-ul de verificare sa apuce sa-l citeasca; se restaureaza la iesire (Final)
lnTransOriginal = SQLGetprop(goExecutor.nHandle,"Transactions")
DO AfLog WITH "DIAG Transactions inainte de proba=" + TRANSFORM(lnTransOriginal)
SQLSetprop(goExecutor.nHandle,"Transactions",2)
*----------------------------------------------------------------------------------------
* date reale de ancora: un articol si o coloana JTVA valida, plus contul de venit derivat
* (aceeasi formula pe care o cablaza VFP - reprodusa aici direct pe date, nu prin apel la
* deriva_cont_venit_fara_pol, ca sa nu depinda de alt fisier .prg pentru proba)
gcCaz = "[setup] "
lnSucces = goExecutor.oExecute([select id_articol from nom_articole where id_articol > 0 and rownum = 1],[crsart])
DO Assert WITH lnSucces >= 0 AND USED('crsart') AND RECCOUNT('crsart') = 1, "articol de ancora gasit"
lnIdArticol = 0
IF USED('crsart') AND RECCOUNT('crsart') = 1
lnIdArticol = crsart.id_articol
ENDIF
IF USED('crsart')
USE IN crsart
ENDIF
lnSucces = goExecutor.oExecute([select nvl((select cont_venit from vcoresp_cont_venchelt where cont = 'ZZ_INEXISTENT' and cont_venit is not null),] + ;
[case when substr('ZZ_INEXISTENT',1,1) in ('6','7') then 'ZZ_INEXISTENT' else '704' end) as cont_venit from dual],[crscv])
lcContAsteptat = "704"
IF USED('crscv')
USE IN crscv
ENDIF
lnIdTemp1 = -999901
lnIdTemp2 = -999902
lnIdTemp3 = -999903
*----------------------------------------------------------------------------------------
* (a) linie FARA id_pol -> id_pol=NULL, cont_venit pozitional pe locul 29 = '704'
gcCaz = "[a-fara-id_pol] "
lcSql = [begin pack_facturare.adauga_articol_factura(] + Transform(lnIdTemp1) + [,] + Transform(lnIdArticol) + ;
[,'','',NULL,-1000,0,0,NULL,0,3,0,1,10,0,NULL,1,1,176,NULL,NULL,0,NULL,NULL,] + Transform(gnIdUtil) + ;
[,NULL,NULL,NULL,'] + lcContAsteptat + ['); end;]
lnSucces = goExecutor.oExecute(lcSql)
DO AfLog WITH "(a) sql=[" + lcSql + "] lnSucces=" + TRANSFORM(lnSucces) + " nEroare=" + TRANSFORM(goExecutor.nEroare) + " eroare=[" + goExecutor.cEroare + "]"
DO Assert WITH lnSucces >= 0, "(a) apelul RPC trece (ajunge in PL/SQL, fara eroare ODBC/PLSQL)"
lcContObtinut1 = "?"
IF lnSucces >= 0
LOCAL lnDiagSucces
lnDiagSucces = goExecutor.oExecute([select id_temp, nvl(cont_venit,'<NULL>') as cont_venit from vanzari_detalii_temp where id_temp < 0],[crsdiag])
DO AfLog WITH "DIAG toate id_temp<0: lnSucces=" + TRANSFORM(lnDiagSucces) + " used=" + TRANSFORM(USED('crsdiag')) + " reccount=" + IIF(USED('crsdiag'),TRANSFORM(RECCOUNT('crsdiag')),"n/a")
IF USED('crsdiag')
SELECT crsdiag
SCAN
DO AfLog WITH "DIAG rand: id_temp=" + TRANSFORM(crsdiag.id_temp) + " cont_venit=" + ALLTRIM(crsdiag.cont_venit)
ENDSCAN
USE IN crsdiag
ENDIF
DO AfLog WITH "DIAG SQLGetprop Transactions=" + TRANSFORM(SQLGetprop(goExecutor.nHandle,"Transactions")) + " nHandle=" + TRANSFORM(goExecutor.nHandle)
lnSucces = goExecutor.oExecute([select nvl(cont_venit,'<NULL>') as cont_venit, nvl(cantitate,-1) as cantitate from vanzari_detalii_temp where id_temp = ] + Transform(lnIdTemp1),[crsverif1])
DO AfLog WITH "(a) verif: lnSucces=" + TRANSFORM(lnSucces) + " used=" + TRANSFORM(USED('crsverif1')) + " reccount=" + IIF(USED('crsverif1'),TRANSFORM(RECCOUNT('crsverif1')),"n/a") + " eroare=[" + goExecutor.cEroare + "]"
lnCantObtinut1 = -1
IF lnSucces >= 0 AND USED('crsverif1') AND RECCOUNT('crsverif1') = 1
lcContObtinut1 = ALLTRIM(crsverif1.cont_venit)
lnCantObtinut1 = crsverif1.cantitate
ENDIF
IF USED('crsverif1')
USE IN crsverif1
ENDIF
ENDIF
DO Assert WITH lcContObtinut1 == lcContAsteptat, "(a) CONT_VENIT in VANZARI_DETALII_TEMP = [" + lcContAsteptat + "], obtinut [" + lcContObtinut1 + "]"
DO Assert WITH lnCantObtinut1 = 10, "(a) CANTITATE (aliniere pozitionala, poz. 14) = 10, obtinut [" + TRANSFORM(lnCantObtinut1) + "]"
*----------------------------------------------------------------------------------------
* (b) linie CU id_pol -> id_pol populat, cont_venit pozitional pe locul 29 = NULL explicit
gcCaz = "[b-cu-id_pol] "
lcSql = [begin pack_facturare.adauga_articol_factura(] + Transform(lnIdTemp2) + [,] + Transform(lnIdArticol) + ;
[,'','',63,-1000,0,0,NULL,0,3,0,1,10,0,NULL,1,1,176,NULL,NULL,0,NULL,NULL,] + Transform(gnIdUtil) + ;
[,NULL,NULL,NULL,NULL); end;]
lnSucces = goExecutor.oExecute(lcSql)
DO AfLog WITH "(b) sql=[" + lcSql + "] lnSucces=" + TRANSFORM(lnSucces) + " nEroare=" + TRANSFORM(goExecutor.nEroare) + " eroare=[" + goExecutor.cEroare + "]"
DO Assert WITH lnSucces >= 0, "(b) apelul RPC trece (ajunge in PL/SQL, fara eroare ODBC/PLSQL)"
lcContObtinut2 = "?"
IF lnSucces >= 0
lnSucces = goExecutor.oExecute([select nvl(cont_venit,'<NULL>') as cont_venit, nvl(cantitate,-1) as cantitate from vanzari_detalii_temp where id_temp = ] + Transform(lnIdTemp2),[crsverif2])
DO AfLog WITH "(b) verif: lnSucces=" + TRANSFORM(lnSucces) + " used=" + TRANSFORM(USED('crsverif2')) + " reccount=" + IIF(USED('crsverif2'),TRANSFORM(RECCOUNT('crsverif2')),"n/a") + " eroare=[" + goExecutor.cEroare + "]"
lnCantObtinut2 = -1
IF lnSucces >= 0 AND USED('crsverif2') AND RECCOUNT('crsverif2') = 1
lcContObtinut2 = ALLTRIM(crsverif2.cont_venit)
lnCantObtinut2 = crsverif2.cantitate
ENDIF
IF USED('crsverif2')
USE IN crsverif2
ENDIF
ENDIF
DO Assert WITH lcContObtinut2 == "<NULL>", "(b) CONT_VENIT ramane NULL (comportament neschimbat), obtinut [" + lcContObtinut2 + "]"
DO Assert WITH lnCantObtinut2 = 10, "(b) CANTITATE (aliniere pozitionala, poz. 14) = 10, obtinut [" + TRANSFORM(lnCantObtinut2) + "]"
*----------------------------------------------------------------------------------------
* (c) linie de RATA reala (id_articol=NULL SI id_pol=NULL deodata) - combinatia gasita in
* productie pe VANZARI_DETALII pentru liniile financiare scrise de do_adauga_rata, sursa
* PACK_FACTURARE.cursor_contract (ramura CTR_SCADENTAR, "NULL AS ID_POL" + "null as id_articol")
gcCaz = "[c-rata-fara-articol-si-pol] "
lcSql = [begin pack_facturare.adauga_articol_factura(] + Transform(lnIdTemp3) + ;
[,NULL,'','',NULL,-1000,0,0,NULL,0,3,0,1,10,0,NULL,1,1,176,NULL,NULL,0,NULL,NULL,] + Transform(gnIdUtil) + ;
[,NULL,NULL,NULL,'] + lcContAsteptat + ['); end;]
lnSucces = goExecutor.oExecute(lcSql)
DO AfLog WITH "(c) sql=[" + lcSql + "] lnSucces=" + TRANSFORM(lnSucces) + " nEroare=" + TRANSFORM(goExecutor.nEroare) + " eroare=[" + goExecutor.cEroare + "]"
DO Assert WITH lnSucces >= 0, "(c) apelul RPC trece cu id_articol=NULL si id_pol=NULL (ajunge in PL/SQL, fara eroare ODBC/PLSQL)"
lcContObtinut3 = "?"
IF lnSucces >= 0
lnSucces = goExecutor.oExecute([select nvl(cont_venit,'<NULL>') as cont_venit, nvl(cantitate,-1) as cantitate from vanzari_detalii_temp where id_temp = ] + Transform(lnIdTemp3),[crsverif3])
DO AfLog WITH "(c) verif: lnSucces=" + TRANSFORM(lnSucces) + " used=" + TRANSFORM(USED('crsverif3')) + " reccount=" + IIF(USED('crsverif3'),TRANSFORM(RECCOUNT('crsverif3')),"n/a") + " eroare=[" + goExecutor.cEroare + "]"
lnCantObtinut3 = -1
IF lnSucces >= 0 AND USED('crsverif3') AND RECCOUNT('crsverif3') = 1
lcContObtinut3 = ALLTRIM(crsverif3.cont_venit)
lnCantObtinut3 = crsverif3.cantitate
ENDIF
IF USED('crsverif3')
USE IN crsverif3
ENDIF
ENDIF
DO Assert WITH lcContObtinut3 == lcContAsteptat, "(c) CONT_VENIT in VANZARI_DETALII_TEMP = [" + lcContAsteptat + "], obtinut [" + lcContObtinut3 + "]"
DO Assert WITH lnCantObtinut3 = 10, "(c) CANTITATE (aliniere pozitionala, poz. 14) = 10, obtinut [" + TRANSFORM(lnCantObtinut3) + "]"
*----------------------------------------------------------------------------------------
gcCaz = "[rollback] "
lnSucces = goExecutor.oExecute("ROLLBACK")
DO AfLog WITH "ROLLBACK: lnSucces=" + TRANSFORM(lnSucces) + " eroare=" + goExecutor.cEroare
SQLSetprop(goExecutor.nHandle,"Transactions",lnTransOriginal)
DO AfLog WITH "DIAG Transactions restaurat la=" + TRANSFORM(SQLGetprop(goExecutor.nHandle,"Transactions"))
DO Final
*----------------------------------------------------------------------------------------
PROCEDURE Assert
LPARAMETERS tlCond, tcMsg
IF tlCond
DO AfLog WITH "PASS: " + gcCaz + tcMsg
ELSE
DO AfLog WITH "FAIL: " + gcCaz + tcMsg
ENDIF
ENDPROC
PROCEDURE AfLog
LPARAMETERS tcMsg
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
ENDPROC
PROCEDURE AfErr
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + gcCaz + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
ENDPROC
PROCEDURE Final
DO AfLog WITH "END " + TTOC(DATETIME())
QUIT
ENDPROC