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
209 lines
11 KiB
Plaintext
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
|