ofacturare_editare.prg (nou): helpere comune - garda eFactura, cursoarele notei si ale rulajelor, randul de vanzare corespunzator notei si liniile de articole citite din view-ul VVANZARI_ARTICOLE. omodificari.vc2 (frm_modific2024): pagina noua de articole ale facturii, deocamdata doar afisare. Apare numai cand ofacturare_editare.prg e inregistrat si documentul are rand in VANZARI; in ROACONT si ROAGEST, unde fisierul nu e incarcat, pagina lipseste si registrul jurnal ramane neatins. Randul de vanzare al notei se cauta pe toate tripletele distincte (nract, serie_act, dataact) din nota, pentru ca primul rand poate fi o incasare. ofacturare_comun.vc2 (frm_facturi): do_editare_factura si butonul aferent, dupa modelul lui do_sterge, cu garzile de luna inchisa, luna curenta, document sters, referinte si eFactura. docs: comentariile se scriu strict necesar, si in cod si in scripturile de migrare - fara referinte la planuri, stories, decizii sau erori, istoricul doar in antetul fisierului. Plus regula zero (predarea contextului), capcanele de la testarea headless si completari pe fluxul text -> binar. utile/Teste: suita de regresie pentru editarea facturii si harness-ul watchdog (nu sunt in SVN, unde utile/Teste e ignorat). .gitignore ignora si capturile PNG si watchdog_out/, ramase din rulari. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
306 lines
12 KiB
Plaintext
306 lines
12 KiB
Plaintext
* 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
|