* test_page3_articole.prg * Verifica S4 runda 1+2 (PAGE3, view VVANZARI_ARTICOLE, pozitionare in tact, garda ROACONT/ROAGEST) pe date reale: * - IncarcaVanzareNota/IncarcaArticoleFactura (ofacturare_editare.prg) direct, pe cod=1140888, * cod=1140885 (au rand in VANZARI) si cod=1125486 (nota fara rand in VANZARI) * - cazul de coliziune pe cod: cod=1139934 are 4 randuri VANZARI cu acelasi cod - verifica ca * filtrul compus (cod+nract+serie_act+data_act) gaseste exact randul corect si NU gaseste * nimic pentru un nract fara corespondent (evitarea unei potriviri gresite) * - frm_modific2024 instantiat ca in do_editare_factura (Createobject+Show): PageCount ajunge 3 * pe documente cu rand in VANZARI, ramane 2 pe o nota fara VANZARI * - regresie runda 2: cod=1137874/an=2009/luna=8 si cod=1139934/an=2021/luna=12, unde primul * rand din tact e o INCASARE - Go Top orb (runda 1) rata id_vanzare, IncarcaVanzareDinNota il * gaseste prin toate tripletele distincte (nract,serie_act,dataact) din tact * - garda ROACONT/ROAGEST: cu ofacturare_editare.prg eliberat din SET PROCEDURE, Show() degradeaza * curat la PageCount=2, fara eroare * Nu atinge Oracle in scriere - doar SELECT-uri prin goExecutor. QUIT la final. SET SAFETY OFF SET TALK OFF LOCAL lcLog lcLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_page3_articole_log.txt' STRTOFILE('start' + CHR(13) + CHR(10), lcLog) PUBLIC gcErrLog gcErrLog = lcLog ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT' IF gnHandle <= 0 STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), lcLog, 1) QUIT ENDIF SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE *!* OBLIGATORIU: test_init_env_auto:139 face "Set Classlib To omodificari Additive", iar SET PATH *!* e pe D:\ROA\ROACONT\..., deci se incarca copia ROACONT a clasei (alt working copy, fara *!* modificarile noastre). O eliberam si o reincarcam pe cea DE SUB TEST, cu cale completa - *!* altfel Createobject valideaza cu totul alt fisier decat cel editat. RELEASE CLASSLIB omodificari SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE *!* 1) IncarcaVanzareNota / IncarcaArticoleFactura direct, pe documente reale *!* (gnAn)/(gnLuna) in paranteze = pasare PRIN VALOARE: DO ... WITH paseaza prin REFERINTA, iar o *!* variabila pasata prin referinta devine invizibila sub numele ei propriu in procedura apelata - *!* de acolo venea dialogul nativ "View Parameter: Enter the value for gnAn" (?gnAn din SQL passthrough) DO verifica_vanzare_nota WITH 1140888, (gnAn), (gnLuna), 'A (factura, cu articole)', lcLog, .T., 1050, 1, 4 DO verifica_vanzare_nota WITH 1140885, (gnAn), (gnLuna), 'B (aviz/tip -12, cu rand in VANZARI)', lcLog, .T., 1047, -12, -1 DO verifica_vanzare_nota WITH 1125486, 2008, 2, 'C (nota fara rand in VANZARI)', lcLog, .F., 0, 0, -1 *!* 2) cazul de coliziune pe cod=1139934 (4 randuri VANZARI cu acelasi cod) - filtrul compus DO verifica_coliziune_cod WITH lcLog *!* 3) frm_modific2024 - PageCount pe factura reala (cod=1140888) si pe nota fara VANZARI (cod=1125486) DO verifica_pagecount_form WITH 1140888, (gnAn), (gnLuna), 'A (factura reala)', lcLog, 3, .T., 1050 DO verifica_pagecount_form WITH 1125486, 2008, 2, 'C (nota fara VANZARI)', lcLog, 2, .F., 0 *!* 4) regresie runda 2 - blocantul "Go Top orb pe tact": prim rand din tact e o INCASARE, cu *!* nract/serie_act/dataact diferite de randul facturii - Go Top orb (runda 1) rata id_vanzare DO verifica_pagecount_form WITH 1137874, 2009, 8, 'D (Go Top orb - blocant runda 2)', lcLog, 3, .T., 506 DO verifica_pagecount_form WITH 1139934, 2021, 12, 'E (coliziune cod + Go Top orb)', lcLog, 3, .T., 882 *!* 5) garda ROACONT/ROAGEST: cu ofacturare_editare.prg eliberat, Show() nu mai gaseste garda si *!* degradeaza curat la PageCount=2 - ultimul test, elibereaza procedura definitiv pentru restul rularii DO verifica_garda_procedura_lipsa WITH 1140888, (gnAn), (gnLuna), lcLog STRTOFILE('done' + CHR(13) + CHR(10), lcLog, 1) QUIT PROCEDURE verifica_vanzare_nota LPARAMETERS tnCod, tnAn, tnLuna, tcEticheta, tcLog, tlAsteptatGasit, tnIdVanzareAsteptat, tnTipAsteptat, tnLiniiAsteptate LOCAL llOk, lcMsg, llGasit, lnIdVanzare, lnTip, lnLinii, llIdOk, llTipOk, llLiniiOk llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.) llGasit = .F. lnIdVanzare = 0 lnTip = 0 lnLinii = -1 IF llOk AND Used('tact') AND Reccount('tact') > 0 Go Top In tact IncarcaVanzareNota(tact.cod, tact.nract, tact.serie_act, tact.dataact) IF Reccount('tvanz') = 1 llGasit = .T. lnIdVanzare = tvanz.id_vanzare lnTip = tvanz.tip IncarcaArticoleFactura(lnIdVanzare) lnLinii = Reccount('tvd') ENDIF ENDIF llIdOk = IIF(tlAsteptatGasit, lnIdVanzare == tnIdVanzareAsteptat, .T.) llTipOk = IIF(tlAsteptatGasit, lnTip == tnTipAsteptat, .T.) llLiniiOk = IIF(tlAsteptatGasit AND tnLiniiAsteptate >= 0, lnLinii == tnLiniiAsteptate, .T.) lcMsg = '--- cod=' + TRANSFORM(tnCod) + ' [' + tcEticheta + '] ---' + CHR(13) + CHR(10) + ; ' IncarcaCursoareModificareNota => ' + TRANSFORM(llOk) + CHR(13) + CHR(10) + ; ' gasit in vanzari = ' + TRANSFORM(llGasit) + ' (asteptat ' + TRANSFORM(tlAsteptatGasit) + ')' + CHR(13) + CHR(10) + ; ' id_vanzare = ' + TRANSFORM(lnIdVanzare) + ' (asteptat ' + TRANSFORM(tnIdVanzareAsteptat) + ')' + CHR(13) + CHR(10) + ; ' tip = ' + TRANSFORM(lnTip) + ' (asteptat ' + TRANSFORM(tnTipAsteptat) + ')' + CHR(13) + CHR(10) + ; ' Reccount(tvd) = ' + TRANSFORM(lnLinii) + ' (asteptat ' + TRANSFORM(tnLiniiAsteptate) + ')' + CHR(13) + CHR(10) + ; ' ' + IIF(llGasit == tlAsteptatGasit AND llIdOk AND llTipOk AND llLiniiOk, 'PASS', 'FAIL') + CHR(13) + CHR(10) STRTOFILE(lcMsg, tcLog, 1) IF Used('actactan') Use In actactan ENDIF IF Used('tact') Use In tact ENDIF IF Used('rul_temp') Use In rul_temp ENDIF IF Used('trul') Use In trul ENDIF IF Used('rul_temp_obinv') Use In rul_temp_obinv ENDIF IF Used('trul_obinv') Use In trul_obinv ENDIF IF Used('tvanz') Use In tvanz ENDIF IF Used('tvd') Use In tvd ENDIF ENDPROC * cod=1139934 are 4 randuri active in VANZARI cu acelasi cod (verificat pe MARIUSM_AUTO): * id_vanzare=882 numar_act=375/SSS, 883=24/PF, 884=25/PF, 885=26/PF - filtrul pe cod singur * ar fi ambiguu; filtrul compus (cod+nract+serie_act+data_act) trebuie sa gaseasca exact * randul cerut si sa NU gaseasca nimic pentru un nract fara corespondent in VANZARI (ACT are * randuri cu nract=13 pe acelasi cod, fara VANZARI corespunzator) PROCEDURE verifica_coliziune_cod LPARAMETERS tcLog LOCAL ldDataAct, llOk1, llOk2 ldDataAct = DATE(2021,12,31) IncarcaVanzareNota(1139934, 375, 'SSS', ldDataAct) llOk1 = (Reccount('tvanz') = 1 AND tvanz.id_vanzare == 882) IF Used('tvanz') Use In tvanz ENDIF IncarcaVanzareNota(1139934, 13, '', ldDataAct) llOk2 = (Reccount('tvanz') = 0) IF Used('tvanz') Use In tvanz ENDIF STRTOFILE('--- coliziune cod=1139934 (4 randuri VANZARI cu acelasi cod) ---' + CHR(13) + CHR(10) + ; ' nract=375/SSS => gaseste id_vanzare=882: ' + IIF(llOk1, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ; ' nract=13 (fara corespondent) => 0 randuri: ' + IIF(llOk2, 'PASS', 'FAIL') + CHR(13) + CHR(10), tcLog, 1) ENDPROC * instantiaza frm_modific2024 exact ca in do_editare_factura (ofacturare_comun.vc2:3781-3803): * IncarcaCursoareModificareNota, rebuild tact cu coloana cu_Tva, Createobject+Show; verifica * pgfArticole.PageCount si proprietatile de detectie dupa Show() PROCEDURE verifica_pagecount_form LPARAMETERS tnCod, tnAn, tnLuna, tcEticheta, tcLog, tnPageCountAsteptat, tlAreArticoleAsteptat, tnIdVanzareAsteptat LOCAL llOk, lnIdSet, lnPageCount, llAreArticole, lnIdVanzare, loForm, llIdVanzareOk llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.) lnPageCount = -1 llAreArticole = .F. lnIdVanzare = 0 IF llOk AND Used('tact') AND Reccount('tact') > 0 Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite Go Top In tact lnIdSet = tact.id_set IF !Used('crsJtvaTemp') update_jtva_coloane("", "crsJtvaTemp", 6) ENDIF Select tact loForm = Createobject([frm_modific2024], lnIdSet) loForm.WindowType = 0 loForm.Show() lnPageCount = loForm.pgfArticole.PageCount llAreArticole = loForm.lAreArticoleVanzari lnIdVanzare = loForm.nIdVanzare loForm.Release() ENDIF llIdVanzareOk = IIF(PCOUNT() >= 9, lnIdVanzare == tnIdVanzareAsteptat, .T.) STRTOFILE('--- frm_modific2024, cod=' + TRANSFORM(tnCod) + ' [' + tcEticheta + '] ---' + CHR(13) + CHR(10) + ; ' PageCount = ' + TRANSFORM(lnPageCount) + ' (asteptat ' + TRANSFORM(tnPageCountAsteptat) + ')' + CHR(13) + CHR(10) + ; ' lAreArticoleVanzari = ' + TRANSFORM(llAreArticole) + ' (asteptat ' + TRANSFORM(tlAreArticoleAsteptat) + ')' + CHR(13) + CHR(10) + ; ' nIdVanzare = ' + TRANSFORM(lnIdVanzare) + IIF(PCOUNT() >= 9, ' (asteptat ' + TRANSFORM(tnIdVanzareAsteptat) + ')', '') + CHR(13) + CHR(10) + ; ' ' + IIF(lnPageCount == tnPageCountAsteptat AND llAreArticole == tlAreArticoleAsteptat AND llIdVanzareOk, 'PASS', 'FAIL') + CHR(13) + CHR(10), tcLog, 1) IF Used('actactan') Use In actactan ENDIF IF Used('tact') Use In tact ENDIF IF Used('rul_temp') Use In rul_temp ENDIF IF Used('trul') Use In trul ENDIF IF Used('rul_temp_obinv') Use In rul_temp_obinv ENDIF IF Used('trul_obinv') Use In trul_obinv ENDIF IF Used('tvanz') Use In tvanz ENDIF IF Used('tvd') Use In tvd ENDIF ENDPROC * verifica garda ROACONT/ROAGEST: cu ofacturare_editare.prg eliberat din SET PROCEDURE, Show() * trebuie sa degradeze curat la PageCount=2, fara eroare - ultimul test din suita, procedura * ramane eliberata pentru restul rularii (QUIT urmeaza imediat) PROCEDURE verifica_garda_procedura_lipsa LPARAMETERS tnCod, tnAn, tnLuna, tcLog LOCAL llOk, lnIdSet, lnPageCount, loForm, lcProcList, lnI, lcFile llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.) lnPageCount = -1 IF llOk AND Used('tact') AND Reccount('tact') > 0 Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite Go Top In tact lnIdSet = tact.id_set IF !Used('crsJtvaTemp') update_jtva_coloane("", "crsJtvaTemp", 6) ENDIF *!* simuleaza ROACONT/ROAGEST: reconstruieste lista de proceduri incarcate, fara ofacturare_editare.prg *!* (VFP nu are un "release" pe un singur fisier din SET PROCEDURE - se inchid toate si se redeschid restul) lcProcList = Set('Procedure') SET PROCEDURE TO FOR lnI = 1 TO GETWORDCOUNT(lcProcList, ',') lcFile = ALLTRIM(GETWORDNUM(lcProcList, lnI, ',')) IF !EMPTY(lcFile) AND !("OFACTURARE_EDITARE" $ UPPER(lcFile)) SET PROCEDURE TO (lcFile) ADDITIVE ENDIF ENDFOR Select tact loForm = Createobject([frm_modific2024], lnIdSet) loForm.WindowType = 0 loForm.Show() lnPageCount = loForm.pgfArticole.PageCount loForm.Release() ENDIF STRTOFILE('--- garda ofacturare_editare.prg lipsa, cod=' + TRANSFORM(tnCod) + ' ---' + CHR(13) + CHR(10) + ; ' PageCount = ' + TRANSFORM(lnPageCount) + ' (asteptat 2, ca pe ROACONT/ROAGEST)' + CHR(13) + CHR(10) + ; ' ' + IIF(lnPageCount == 2, 'PASS', 'FAIL') + CHR(13) + CHR(10), tcLog, 1) IF Used('actactan') Use In actactan ENDIF IF Used('tact') Use In tact ENDIF IF Used('rul_temp') Use In rul_temp ENDIF IF Used('trul') Use In trul ENDIF IF Used('rul_temp_obinv') Use In rul_temp_obinv ENDIF IF Used('trul_obinv') Use In trul_obinv 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) ENDPROC