* 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,'')) + "]" 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,'') 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,'') 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,'') 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 == "", "(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,'') 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