* test_s10_proc_tvav.prg * Control negativ S10 (docs\propunere_s10_proc_tvav.md §10), PE COD NEMODIFICAT: dovedeste ca * PACK_FACTURARE.adauga_articol_factura re-deriva PROC_TVAV, silentios, pe ramura contract SI pe * ramura ELSE - inainte de a scrie diff-ul din runda 2. * * PROIECTARE REVIZUITA (fata de prima incercare din aceasta sesiune): apel DIRECT la * pack_facturare.adauga_articol_factura, cu parametrii exact ca linia reala 1604 (doc 1055), nu * prin tot lantul do_scrie_factura()/scrie_factura2 - acela a picat cu o eroare Oracle NELEGATA de * S10 ("SQL statement parameter is required for non-prepared SQLEXEC() calls", pe scrie_factura2 * pentru documente CONTRACT reale - vezi §11 din propunere). Apelul direct testeaza EXACT * mecanismul in discutie (CASE-ul din adauga_articol_factura), scrie doar in * VANZARI_DETALII_TEMP (niciodata in VANZARI/VANZARI_DETALII/DOCUMENTE - zero risc, zero SSS ars, * nimic de reparat la un document real) si e complet reversibil. * * EXTINDERE (aplicare Oracle, dupa scrierea diff-ului din §7 - vezi docs\raport_s10_aplicare_oracle.md): * cazurile 3 si 4 folosesc parametrul nou V_PROC_TVAV_TEMP (pozitia 28) si flag-ul de pachet * pack_facturare.nregenerare_editare, ca sa dovedeasca proba ceruta de decizia 3: cu flag=1 si * V_PROC_TVAV_TEMP trimis, cota scrisa trebuie sa fie cea SALVATA, nu cea derivata. Cazurile 1/2 * raman NESCHIMBATE LA COD (apel cu 27 argumente, flag-ul niciodata atins) - proba de "neschimbat" * e ca produc EXACT ACELASI TIPAR de PASS/FAIL dupa diff ca inainte (CTR-2/ELSE-2 continua sa PICE, * adica tot re-deriva - flag-ul implicit 0 inseamna "override-ul nu se aplica", nu "comportament * corect"), nu ca ar incepe sa treaca. * * Parametru tnCaz: * 1 = CONTRACT - parametrii liniei reale 1604 (doc 1055: id_articol 4294507173, id_pol 41, * pret 101.13, id_valuta 3, id_jtva_coloana 37, proc_tvav SALVAT 1.21), trimisi la * adauga_articol_factura (27 argumente, flag neatins - ramane 0) cu V_ID_CTR = 61 * (CONTRACTE.OPT_FACTURARE NULL -> branch-ul principal, nu portita NO_DATA_FOUND). Setup: * CRM_POLITICI_PRET_ART (id_pol_art 1593, acelasi articol/politica ca linia reala, azi * PROC_TVAV NULL) -> 1.09; CTR_ARTICOLE nou care leaga contractul 61 de politica 1593 * (pret_unitar=0, ca sa nu amestece si divergenta de PRET - izolat strict pe PROC_TVAV). * INAINTE si DUPA diff: TREBUIE sa PICE la fel (CTR-2), tot re-deriva - flag=0 nu schimba * nimic pentru apelantii de azi. * 2 = ELSE - parametrii liniei reale 481 (doc 287: id_jtva_coloana 1 "RO19B", proc_tvav * SALVAT 1.19), trimisi cu pack_facturare.ntip := 1 (tip simplu, nu comanda/aviz/restaurant/ * contract - cade pe ELSE). Setup: JTVA_COLOANE.COTA_TVA (id 1) 19 -> 9 (simuleaza o * schimbare legala de cota intre emiterea documentului si o eventuala regenerare). INAINTE si * DUPA diff: TREBUIE sa PICE la fel (ELSE-2). * 3 = CONTRACT + FLAG - acelasi setup ca 1, dar apel cu 28 argumente: * pack_facturare.nregenerare_editare := 1 inainte de apel, V_PROC_TVAV_TEMP = cota salvata * (1.21). Cere pachetul deja recompilat cu diff-ul din §7 (altfel pica cu "wrong number of * arguments"). TREBUIE sa TREACA: cota scrisa = cea salvata, nu cea noua din politica. * 4 = ELSE + FLAG - acelasi setup ca 2, apel cu 28 argumente, flag=1, V_PROC_TVAV_TEMP = cota * salvata (1.19). TREBUIE sa TREACA: cota scrisa = cea salvata, nu cea noua din JTVA_COLOANE. * * Cazurile 1/2: asertul central e "PROC_TVAV in TEMP = cel salvat pe linia reala" - PICA mereu (si * inainte, si dupa diff, cat timp flag-ul ramane 0): Oracle re-deriva din politica/JTVA_COLOANE * curente, nu primeste si nu respecta o valoare salvata pe calea normala (fara flag). Asertul de * control CTR-3/ELSE-3 (valoarea noua chiar a ajuns in TEMP) confirma ca testul masoara ceva real * si inainte, si dupa - proba ca diff-ul n-a schimbat comportamentul implicit. Setup-ul de schema e * revertit necondiționat la finalul fiecarui caz. Cazurile 3/4 reseteaza flag-ul la 0 imediat dupa * citirea rezultatului, in ACELASI bloc/sesiune, ca sa nu ramana agatat pentru vreun apel urmator * din aceeasi conexiune. LPARAMETERS tnCaz SET SAFETY OFF SET TALK OFF PUBLIC gcErrLog, gnPass, gnFail gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s10_proc_tvav_log_' + ; STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt' STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' caz=' + TRANSFORM(tnCaz) + CHR(13) + CHR(10), gcErrLog) ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() ON SHUTDOWN QUIT DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT' IF gnHandle <= 0 STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1) QUIT ENDIF gnIdUtil = 8 gnPass = 0 gnFail = 0 LOCAL lnCaz lnCaz = VAL(TRANSFORM(tnCaz)) DO CASE CASE lnCaz = 1 DO CazContract CASE lnCaz = 2 DO CazElse CASE lnCaz = 3 DO CazContractFlag CASE lnCaz = 4 DO CazElseFlag OTHERWISE STRTOFILE('EROARE: tnCaz trebuie sa fie 1 (CONTRACT) / 2 (ELSE) / 3 (CONTRACT+FLAG) / 4 (ELSE+FLAG)' + CHR(13) + CHR(10), gcErrLog, 1) ENDCASE STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1) STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1) QUIT *============================================================================================== * CazContract: parametrii liniei reale 1604 (doc 1055), trimisi cu V_ID_CTR=61 (OPT_FACTURARE * NULL - branch-ul principal, nu NO_DATA_FOUND). *============================================================================================== PROCEDURE CazContract LOCAL lnIdPolArt, lnIdCtr, lnProcTvavVechi, lnIdCtrArtNou, lnProcTvavSalvat, lnProcTvavTemp LOCAL llOk lnIdPolArt = 1593 lnIdCtr = 61 lnProcTvavSalvat = Val1([select proc_tvav as v from vanzari_detalii where id_vanzare_det = 1604]) DO asserteaza WITH 'PRECONDITIE linia reala 1604 are proc_tvav salvat = 1.21', lnProcTvavSalvat = 1.21, TRANSFORM(lnProcTvavSalvat) lnProcTvavVechi = Val1([select proc_tvav as v from crm_politici_pret_art where id_pol_art = ] + TRANSFORM(lnIdPolArt)) STRTOFILE('SETUP inainte: crm_politici_pret_art.proc_tvav (id_pol_art=' + TRANSFORM(lnIdPolArt) + ') = ' + TRANSFORM(lnProcTvavVechi) + CHR(13) + CHR(10), gcErrLog, 1) DO asserteaza WITH 'PRECONDITIE contractul 61 are OPT_FACTURARE care cade pe branch-ul principal (NVL(...,3)=3)', ; Val1([select nvl(opt_facturare,3) as v from contracte where id_ctr = ] + TRANSFORM(lnIdCtr)) = 3, ; TRANSFORM(Val1([select nvl(opt_facturare,3) as v from contracte where id_ctr = ] + TRANSFORM(lnIdCtr))) llOk = goExecutor.oExecuta([update crm_politici_pret_art set proc_tvav = 1.09 where id_pol_art = ] + TRANSFORM(lnIdPolArt)) DO asserteaza WITH 'SETUP update politica reusit', llOk, TRANSFORM(llOk) IF !llOk RETURN ENDIF lnIdCtrArtNou = Val1([select seq_ctr_articole.nextval as v from dual]) llOk = goExecutor.oExecuta([insert into ctr_articole (id_ctr_art, id_ctr, id_pol_art, pret_unitar) values (] + ; TRANSFORM(lnIdCtrArtNou) + [, ] + TRANSFORM(lnIdCtr) + [, ] + TRANSFORM(lnIdPolArt) + [, 0)]) DO asserteaza WITH 'SETUP insert ctr_articole reusit (id_ctr_art=' + TRANSFORM(lnIdCtrArtNou) + ')', llOk, TRANSFORM(llOk) IF !llOk DO CazContractRevert WITH lnIdPolArt, lnProcTvavVechi, -1 RETURN ENDIF *!* apel DIRECT, 27 argumente, ca la ofacturare.vc2:19977-19999 - flag NEATINS (implicit 0 pe *!* pachet, sau ce a ramas de la un caz anterior din aceeasi sesiune - de aceea CazContractFlag/ *!* CazElseFlag reseteaza flag-ul la 0 imediat dupa citire). CITIREA rezultatului trebuie sa fie *!* in ACELASI apel/tranzactie: VANZARI_DETALII_TEMP e GLOBAL TEMPORARY TABLE cu *!* DURATION=SYS$TRANSACTION (verificat pe USER_TABLES) - randul dispare la primul COMMIT, iar *!* goExecutor face auto-commit dupa fiecare oExecuta separat (Transactions <> 2, nicio *!* tranzactie manuala deschisa aici). Un al doilea apel SELECT separat vedea mereu 0 randuri. *!* Solutia: SELECT ... INTO ?@pnRezultatCtr (bind OUT, PRIVATE - vezi tiparul ?@poDate.nid_vanzare *!* din ofacturare.vc2) IN ACELASI bloc PL/SQL, inainte de commit-ul acelui apel. PRIVATE pnRezultatCtr pnRezultatCtr = -999 LOCAL lcSqlApel lcSqlApel = [begin pack_facturare.ntip := 2; pack_facturare.adauga_articol_factura(] + ; [999001, 4294507173, '', '', 41, NULL, 0, NULL, NULL, ] + ; [101.13, 3, 0, 1, 1, 0, 'XXXX', 1, 1, 37, NULL, NULL, 101.13, NULL, ] + TRANSFORM(lnIdCtr) + [, 8, NULL, NULL); ] + ; [select proc_tvav into ?@pnRezultatCtr from vanzari_detalii_temp where id_temp = 999001; end;] *!* oExecute (spre deosebire de oExecuta) intoarce direct codul numeric (lnSucces < 0 = eroare) LOCAL lnSuccesApel lnSuccesApel = goExecutor.oExecute(lcSqlApel) llOk = (lnSuccesApel >= 0) STRTOFILE('goExecutor.cEroare dupa apel: [' + NVL(goExecutor.cEroare,'') + ']' + CHR(13) + CHR(10), gcErrLog, 1) DO asserteaza WITH 'CTR-1 apelul la adauga_articol_factura a reusit (fara exceptie Oracle)', llOk, TRANSFORM(lnSuccesApel) IF llOk lnProcTvavTemp = NVL(pnRezultatCtr, -1) STRTOFILE('CTR proc_tvav in VANZARI_DETALII_TEMP: ' + TRANSFORM(lnProcTvavTemp) + ; ' (salvat_pe_document=' + TRANSFORM(lnProcTvavSalvat) + ', politica_noua=1.09)' + CHR(13) + CHR(10), gcErrLog, 1) *!* ASERTUL CENTRAL - flag ramane 0 (neatins) - TREBUIE sa PICE la fel INAINTE si DUPA diff *!* (dovada ca diff-ul nu schimba comportamentul implicit pentru apelantii de azi) DO asserteaza WITH 'CTR-2 PROC_TVAV = cel salvat pe document (decizia 3, flag implicit 0 - trebuie sa PICE, neschimbat fata de azi)', ; lnProcTvavTemp = lnProcTvavSalvat, TRANSFORM(lnProcTvavSalvat) + ' -> ' + TRANSFORM(lnProcTvavTemp) DO asserteaza WITH 'CTR-3 (control ca testul masoara ceva) cota noua a politicii chiar a ajuns in TEMP', ; lnProcTvavTemp = 1.09, TRANSFORM(lnProcTvavTemp) ENDIF DO CazContractRevert WITH lnIdPolArt, lnProcTvavVechi, lnIdCtrArtNou ENDPROC PROCEDURE CazContractRevert LPARAMETERS tnIdPolArt, tnProcTvavVechi, tnIdCtrArtNou LOCAL llOk1, llOk2 llOk2 = .T. IF tnIdCtrArtNou <> -1 llOk2 = goExecutor.oExecuta([delete from ctr_articole where id_ctr_art = ] + TRANSFORM(tnIdCtrArtNou)) ENDIF llOk1 = goExecutor.oExecuta([update crm_politici_pret_art set proc_tvav = ] + ; IIF(ISNULL(tnProcTvavVechi) OR tnProcTvavVechi = -1, [NULL], TRANSFORM(tnProcTvavVechi)) + [ where id_pol_art = ] + TRANSFORM(tnIdPolArt)) STRTOFILE('REVERT: delete ctr_articole=' + TRANSFORM(llOk2) + ' update politica=' + TRANSFORM(llOk1) + CHR(13) + CHR(10), gcErrLog, 1) DO asserteaza WITH 'CTR-9 revert setup (politica + ctr_articole) reusit', llOk1 AND llOk2, TRANSFORM(llOk1) + '/' + TRANSFORM(llOk2) LOCAL lnVerif lnVerif = Val1([select proc_tvav as v from crm_politici_pret_art where id_pol_art = ] + TRANSFORM(tnIdPolArt)) STRTOFILE('REVERT verificat: proc_tvav acum = ' + TRANSFORM(lnVerif) + CHR(13) + CHR(10), gcErrLog, 1) ENDPROC *============================================================================================== * CazElse: parametrii liniei reale 481 (doc 287), trimisi cu pack_facturare.ntip := 1 (cade pe * ELSE - nu e in nicio lista comanda/aviz/restaurant/contract). *============================================================================================== PROCEDURE CazElse LOCAL lnCotaVeche, lnProcTvavSalvat, lnProcTvavTemp, llOk lnProcTvavSalvat = Val1([select proc_tvav as v from vanzari_detalii where id_vanzare_det = 481]) DO asserteaza WITH 'PRECONDITIE linia reala 481 are proc_tvav salvat = 1.19', lnProcTvavSalvat = 1.19, TRANSFORM(lnProcTvavSalvat) lnCotaVeche = Val1([select cota_tva as v from jtva_coloane where id_jtva_coloana = 1]) STRTOFILE('SETUP inainte: jtva_coloane.cota_tva (id=1) = ' + TRANSFORM(lnCotaVeche) + CHR(13) + CHR(10), gcErrLog, 1) DO asserteaza WITH 'PRECONDITIE cota_tva porneste de la 19', lnCotaVeche = 19, TRANSFORM(lnCotaVeche) llOk = goExecutor.oExecuta([update jtva_coloane set cota_tva = 9 where id_jtva_coloana = 1]) DO asserteaza WITH 'SETUP update jtva_coloane reusit', llOk, TRANSFORM(llOk) IF !llOk RETURN ENDIF *!* apel DIRECT, 27 argumente (V_ID_JTVA_COLOANA=1, restul dupa vanzari_detalii), ntip=1 *!* (tip simplu -> ELSE); V_ID_ARTICOL 691698485 ca in linia reala - flag NEATINS. Citire in *!* ACELASI apel/tranzactie - vezi comentariul din CazContract (VANZARI_DETALII_TEMP e GTT *!* DURATION=SYS$TRANSACTION, disparea la commit-ul automat al urmatorului oExecuta separat) PRIVATE pnRezultatElse pnRezultatElse = -999 LOCAL lcSqlApel2, lnSuccesApel2 lcSqlApel2 = [begin pack_facturare.ntip := 1; pack_facturare.adauga_articol_factura(] + ; [999002, 691698485, '', '', NULL, NULL, 0, NULL, NULL, ] + ; [100, 1, 0, 1, 1, 0, 'XXXX', 1, 1, 1, NULL, NULL, 100, NULL, NULL, 8, NULL, NULL); ] + ; [select proc_tvav into ?@pnRezultatElse from vanzari_detalii_temp where id_temp = 999002; end;] lnSuccesApel2 = goExecutor.oExecute(lcSqlApel2) llOk = (lnSuccesApel2 >= 0) STRTOFILE('goExecutor.cEroare dupa apel: [' + NVL(goExecutor.cEroare,'') + ']' + CHR(13) + CHR(10), gcErrLog, 1) DO asserteaza WITH 'ELSE-1 apelul la adauga_articol_factura a reusit (fara exceptie Oracle)', llOk, TRANSFORM(lnSuccesApel2) IF llOk lnProcTvavTemp = NVL(pnRezultatElse, -1) STRTOFILE('ELSE proc_tvav in VANZARI_DETALII_TEMP: ' + TRANSFORM(lnProcTvavTemp) + ; ' (salvat_pe_document=' + TRANSFORM(lnProcTvavSalvat) + ', cota_noua_asteptata=1.09)' + CHR(13) + CHR(10), gcErrLog, 1) DO asserteaza WITH 'ELSE-2 PROC_TVAV = cel salvat pe document (decizia 3, flag implicit 0 - trebuie sa PICE, neschimbat fata de azi)', ; lnProcTvavTemp = lnProcTvavSalvat, TRANSFORM(lnProcTvavSalvat) + ' -> ' + TRANSFORM(lnProcTvavTemp) DO asserteaza WITH 'ELSE-3 (control ca testul masoara ceva) cota noua din JTVA_COLOANE chiar a ajuns in TEMP', ; lnProcTvavTemp = 1.09, TRANSFORM(lnProcTvavTemp) ENDIF DO CazElseRevert WITH lnCotaVeche ENDPROC PROCEDURE CazElseRevert LPARAMETERS tnCotaVeche LOCAL llOk llOk = goExecutor.oExecuta([update jtva_coloane set cota_tva = ] + TRANSFORM(tnCotaVeche) + [ where id_jtva_coloana = 1]) STRTOFILE('REVERT: update jtva_coloane=' + TRANSFORM(llOk) + CHR(13) + CHR(10), gcErrLog, 1) DO asserteaza WITH 'ELSE-9 revert setup (jtva_coloane) reusit', llOk, TRANSFORM(llOk) LOCAL lnVerif lnVerif = Val1([select cota_tva as v from jtva_coloane where id_jtva_coloana = 1]) STRTOFILE('REVERT verificat: cota_tva acum = ' + TRANSFORM(lnVerif) + CHR(13) + CHR(10), gcErrLog, 1) ENDPROC *============================================================================================== * CazContractFlag: acelasi setup ca CazContract, dar apel cu 28 argumente - flag=1, * V_PROC_TVAV_TEMP = cota salvata (1.21). Cere parametrul nou pe pachet (dupa diff-ul din §7). *============================================================================================== PROCEDURE CazContractFlag LOCAL lnIdPolArt, lnIdCtr, lnProcTvavVechi, lnIdCtrArtNou, lnProcTvavSalvat, lnProcTvavTemp LOCAL llOk lnIdPolArt = 1593 lnIdCtr = 61 lnProcTvavSalvat = Val1([select proc_tvav as v from vanzari_detalii where id_vanzare_det = 1604]) DO asserteaza WITH 'PRECONDITIE linia reala 1604 are proc_tvav salvat = 1.21', lnProcTvavSalvat = 1.21, TRANSFORM(lnProcTvavSalvat) lnProcTvavVechi = Val1([select proc_tvav as v from crm_politici_pret_art where id_pol_art = ] + TRANSFORM(lnIdPolArt)) STRTOFILE('SETUP inainte: crm_politici_pret_art.proc_tvav (id_pol_art=' + TRANSFORM(lnIdPolArt) + ') = ' + TRANSFORM(lnProcTvavVechi) + CHR(13) + CHR(10), gcErrLog, 1) llOk = goExecutor.oExecuta([update crm_politici_pret_art set proc_tvav = 1.09 where id_pol_art = ] + TRANSFORM(lnIdPolArt)) DO asserteaza WITH 'SETUP update politica reusit', llOk, TRANSFORM(llOk) IF !llOk RETURN ENDIF lnIdCtrArtNou = Val1([select seq_ctr_articole.nextval as v from dual]) llOk = goExecutor.oExecuta([insert into ctr_articole (id_ctr_art, id_ctr, id_pol_art, pret_unitar) values (] + ; TRANSFORM(lnIdCtrArtNou) + [, ] + TRANSFORM(lnIdCtr) + [, ] + TRANSFORM(lnIdPolArt) + [, 0)]) DO asserteaza WITH 'SETUP insert ctr_articole reusit (id_ctr_art=' + TRANSFORM(lnIdCtrArtNou) + ')', llOk, TRANSFORM(llOk) IF !llOk DO CazContractRevert WITH lnIdPolArt, lnProcTvavVechi, -1 RETURN ENDIF *!* apel cu 28 argumente: flag pornit inainte de apel, V_PROC_TVAV_TEMP = cota salvata pe *!* document. Flag resetat la 0 IN ACELASI bloc, dupa citirea rezultatului, ca sa nu ramana *!* agatat pentru vreun apel urmator din aceeasi sesiune (goExecutor.oExecute e o singura *!* conexiune reutilizata pe tot testul). PRIVATE pnRezultatCtrFlag pnRezultatCtrFlag = -999 LOCAL lcSqlApel lcSqlApel = [begin pack_facturare.nregenerare_editare := 1; pack_facturare.ntip := 2; ] + ; [pack_facturare.adauga_articol_factura(] + ; [999003, 4294507173, '', '', 41, NULL, 0, NULL, NULL, ] + ; [101.13, 3, 0, 1, 1, 0, 'XXXX', 1, 1, 37, NULL, NULL, 101.13, NULL, ] + TRANSFORM(lnIdCtr) + [, 8, NULL, NULL, ] + ; ALLTRIM(STR(lnProcTvavSalvat,18,4)) + [); ] + ; [select proc_tvav into ?@pnRezultatCtrFlag from vanzari_detalii_temp where id_temp = 999003; ] + ; [pack_facturare.nregenerare_editare := 0; end;] LOCAL lnSuccesApel lnSuccesApel = goExecutor.oExecute(lcSqlApel) llOk = (lnSuccesApel >= 0) STRTOFILE('goExecutor.cEroare dupa apel: [' + NVL(goExecutor.cEroare,'') + ']' + CHR(13) + CHR(10), gcErrLog, 1) DO asserteaza WITH 'CTRF-1 apelul (28 arg, flag=1) la adauga_articol_factura a reusit (fara exceptie Oracle)', llOk, TRANSFORM(lnSuccesApel) IF llOk lnProcTvavTemp = NVL(pnRezultatCtrFlag, -1) STRTOFILE('CTRF proc_tvav in VANZARI_DETALII_TEMP: ' + TRANSFORM(lnProcTvavTemp) + ; ' (salvat_pe_document=' + TRANSFORM(lnProcTvavSalvat) + ', politica_noua=1.09)' + CHR(13) + CHR(10), gcErrLog, 1) *!* ASERTUL CENTRAL - cu flag=1 SI V_PROC_TVAV_TEMP trimis, TREBUIE sa TREACA: cota *!* pastrata = cea salvata, nu cea noua din politica DO asserteaza WITH 'CTRF-2 PROC_TVAV = cel salvat pe document (decizia 3, flag=1 - pastrat)', ; lnProcTvavTemp = lnProcTvavSalvat, TRANSFORM(lnProcTvavSalvat) + ' -> ' + TRANSFORM(lnProcTvavTemp) DO asserteaza WITH 'CTRF-3 (control) cota pastrata NU e cea noua a politicii (1.09)', ; lnProcTvavTemp <> 1.09, TRANSFORM(lnProcTvavTemp) ENDIF DO CazContractRevert WITH lnIdPolArt, lnProcTvavVechi, lnIdCtrArtNou ENDPROC *============================================================================================== * CazElseFlag: acelasi setup ca CazElse, dar apel cu 28 argumente - flag=1, V_PROC_TVAV_TEMP = * cota salvata (1.19). *============================================================================================== PROCEDURE CazElseFlag LOCAL lnCotaVeche, lnProcTvavSalvat, lnProcTvavTemp, llOk lnProcTvavSalvat = Val1([select proc_tvav as v from vanzari_detalii where id_vanzare_det = 481]) DO asserteaza WITH 'PRECONDITIE linia reala 481 are proc_tvav salvat = 1.19', lnProcTvavSalvat = 1.19, TRANSFORM(lnProcTvavSalvat) lnCotaVeche = Val1([select cota_tva as v from jtva_coloane where id_jtva_coloana = 1]) STRTOFILE('SETUP inainte: jtva_coloane.cota_tva (id=1) = ' + TRANSFORM(lnCotaVeche) + CHR(13) + CHR(10), gcErrLog, 1) DO asserteaza WITH 'PRECONDITIE cota_tva porneste de la 19', lnCotaVeche = 19, TRANSFORM(lnCotaVeche) llOk = goExecutor.oExecuta([update jtva_coloane set cota_tva = 9 where id_jtva_coloana = 1]) DO asserteaza WITH 'SETUP update jtva_coloane reusit', llOk, TRANSFORM(llOk) IF !llOk RETURN ENDIF PRIVATE pnRezultatElseFlag pnRezultatElseFlag = -999 LOCAL lcSqlApel2, lnSuccesApel2 lcSqlApel2 = [begin pack_facturare.nregenerare_editare := 1; pack_facturare.ntip := 1; ] + ; [pack_facturare.adauga_articol_factura(] + ; [999004, 691698485, '', '', NULL, NULL, 0, NULL, NULL, ] + ; [100, 1, 0, 1, 1, 0, 'XXXX', 1, 1, 1, NULL, NULL, 100, NULL, NULL, 8, NULL, NULL, ] + ; ALLTRIM(STR(lnProcTvavSalvat,18,4)) + [); ] + ; [select proc_tvav into ?@pnRezultatElseFlag from vanzari_detalii_temp where id_temp = 999004; ] + ; [pack_facturare.nregenerare_editare := 0; end;] lnSuccesApel2 = goExecutor.oExecute(lcSqlApel2) llOk = (lnSuccesApel2 >= 0) STRTOFILE('goExecutor.cEroare dupa apel: [' + NVL(goExecutor.cEroare,'') + ']' + CHR(13) + CHR(10), gcErrLog, 1) DO asserteaza WITH 'ELSEF-1 apelul (28 arg, flag=1) la adauga_articol_factura a reusit (fara exceptie Oracle)', llOk, TRANSFORM(lnSuccesApel2) IF llOk lnProcTvavTemp = NVL(pnRezultatElseFlag, -1) STRTOFILE('ELSEF proc_tvav in VANZARI_DETALII_TEMP: ' + TRANSFORM(lnProcTvavTemp) + ; ' (salvat_pe_document=' + TRANSFORM(lnProcTvavSalvat) + ', cota_noua_asteptata=1.09)' + CHR(13) + CHR(10), gcErrLog, 1) DO asserteaza WITH 'ELSEF-2 PROC_TVAV = cel salvat pe document (decizia 3, flag=1 - pastrat)', ; lnProcTvavTemp = lnProcTvavSalvat, TRANSFORM(lnProcTvavSalvat) + ' -> ' + TRANSFORM(lnProcTvavTemp) DO asserteaza WITH 'ELSEF-3 (control) cota pastrata NU e cea noua din JTVA_COLOANE (1.09)', ; lnProcTvavTemp <> 1.09, TRANSFORM(lnProcTvavTemp) ENDIF DO CazElseRevert WITH lnCotaVeche ENDPROC *============================================================================================== FUNCTION Val1 LPARAMETERS tcSql LOCAL lnRet lnRet = -1 IF USED('v_val10') USE IN v_val10 ENDIF IF goExecutor.oExecuta(tcSql, 'v_val10') SELECT v_val10 IF RECCOUNT('v_val10') > 0 GO TOP lnRet = NVL(v_val10.v, -1) ENDIF USE IN v_val10 ELSE STRTOFILE('EROARE Val1: ' + goExecutor.cEroare + CHR(13) + CHR(10), gcErrLog, 1) ENDIF RETURN lnRet ENDFUNC PROCEDURE asserteaza LPARAMETERS tcNume, tlConditie, tcValoare IF m.tlConditie gnPass = gnPass + 1 STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1) ELSE gnFail = gnFail + 1 STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + TRANSFORM(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1) ENDIF ENDPROC PROCEDURE test_error_handler LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1) gnFail = gnFail + 1 STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1) STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1) QUIT ENDPROC