* 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 o factura si pe * un document de alt tip (amandoua cu rand in VANZARI) si pe o nota fara rand in VANZARI * - cazul de coliziune pe cod: un cod cu mai multe randuri VANZARI - 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: note al caror prim rand din tact nu duce la vanzare (tipic 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 * Documentele nu sunt ancorate pe cod: VANZARI.COD se realoca la fiecare salvare a notei, deci se * descopera la rulare dupa proprietatea ceruta de asertie (descopera_caz_test.prg). * 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 SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\descopera_caz_test.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 *!* 0) cazurile de test, descoperite pe proprietate (nu ancorate pe cod - codul se realoca la salvare) LOCAL llCazA, llCazB, llCazC, llCazD, llCazE, llCazF llCazA = DescoperaCazTest('FACTURA_ARTICOLE', 'crscaz_a') llCazB = DescoperaCazTest('NEFACTURA_ARTICOLE', 'crscaz_b') llCazC = DescoperaCazTest('NOTA_FARA_VANZARI', 'crscaz_c') llCazD = DescoperaCazTest('PRIM_RAND_ORB', 'crscaz_d') llCazE = DescoperaCazTest('COLIZIUNE_COD', 'crscaz_e') llCazF = DescoperaCazTest('FARA_RULAJE', 'crscaz_f') STRTOFILE('--- cazuri de test descoperite ---' + CHR(13) + CHR(10) + ; DescrieCazTest('FACTURA_ARTICOLE', 'crscaz_a', llCazA) + CHR(13) + CHR(10) + ; DescrieCazTest('NEFACTURA_ARTICOLE', 'crscaz_b', llCazB) + CHR(13) + CHR(10) + ; DescrieCazTest('NOTA_FARA_VANZARI', 'crscaz_c', llCazC) + CHR(13) + CHR(10) + ; DescrieCazTest('PRIM_RAND_ORB', 'crscaz_d', llCazD) + CHR(13) + CHR(10) + ; DescrieCazTest('COLIZIUNE_COD', 'crscaz_e', llCazE) + CHR(13) + CHR(10) + ; DescrieCazTest('FARA_RULAJE', 'crscaz_f', llCazF) + CHR(13) + CHR(10), lcLog, 1) *!* 1) IncarcaVanzareNota / IncarcaArticoleFactura direct, pe documente reale *!* valorile 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) IF llCazA DO verifica_vanzare_nota WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), 'A (factura, cu articole)', lcLog, .T., (crscaz_a.id_vanzare), (crscaz_a.tip), (crscaz_a.nlin) ELSE DO caz_negasit WITH 'A (factura, cu articole)', lcLog ENDIF IF llCazB DO verifica_vanzare_nota WITH (crscaz_b.cod), (crscaz_b.an), (crscaz_b.luna), 'B (tip <> 1, cu rand in VANZARI)', lcLog, .T., (crscaz_b.id_vanzare), (crscaz_b.tip), (crscaz_b.nlin) ELSE DO caz_negasit WITH 'B (tip <> 1, cu rand in VANZARI)', lcLog ENDIF IF llCazC DO verifica_vanzare_nota WITH (crscaz_c.cod), (crscaz_c.an), (crscaz_c.luna), 'C (nota fara rand in VANZARI)', lcLog, .F., 0, 0, -1 ELSE DO caz_negasit WITH 'C (nota fara rand in VANZARI)', lcLog ENDIF *!* 2) cazul de coliziune pe cod (mai multe randuri VANZARI cu acelasi cod) - filtrul compus IF llCazE DO verifica_coliziune_cod WITH lcLog, (crscaz_e.cod), (crscaz_e.nract), (crscaz_e.serie_act), (crscaz_e.dataact), (crscaz_e.id_vanzare), ; (crscaz_e.nract_fara), (crscaz_e.serie_fara), (crscaz_e.data_fara) ELSE DO caz_negasit WITH 'coliziune pe cod', lcLog ENDIF *!* 3) frm_modific2024 - PageCount pe factura reala si pe nota fara VANZARI IF llCazA DO verifica_pagecount_form WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), 'A (factura reala)', lcLog, 3, .T., (crscaz_a.id_vanzare) ELSE DO caz_negasit WITH 'frm_modific2024 A (factura reala)', lcLog ENDIF IF llCazC DO verifica_pagecount_form WITH (crscaz_c.cod), (crscaz_c.an), (crscaz_c.luna), 'C (nota fara VANZARI)', lcLog, 2, .F., 0 ELSE DO caz_negasit WITH 'frm_modific2024 C (nota fara VANZARI)', lcLog ENDIF *!* 4) regresie runda 2 - blocantul "Go Top orb pe tact": prim rand din tact nu duce la vanzare *!* (tipic o INCASARE, cu nract/serie_act/dataact diferite) - Go Top orb (runda 1) rata id_vanzare IF llCazD DO verifica_pagecount_form WITH (crscaz_d.cod), (crscaz_d.an), (crscaz_d.luna), 'D (Go Top orb - blocant runda 2)', lcLog, 3, .T., (crscaz_d.id_vanzare) ELSE DO caz_negasit WITH 'frm_modific2024 D (Go Top orb)', lcLog ENDIF IF llCazE DO verifica_pagecount_form WITH (crscaz_e.cod), (crscaz_e.an), (crscaz_e.luna), 'E (coliziune cod + Go Top orb)', lcLog, 3, .T., (crscaz_e.id_vanzare) ELSE DO caz_negasit WITH 'frm_modific2024 E (coliziune cod + Go Top orb)', lcLog ENDIF *!* 4a) punctul A: pageframe vizibil cand exista doar articole (zero rulaje) IF llCazF DO verifica_pageframe_vizibil WITH (crscaz_f.cod), (crscaz_f.an), (crscaz_f.luna), lcLog ELSE DO caz_negasit WITH 'pgfArticole.Visible (zero rulaje)', lcLog ENDIF *!* 4b) S4 runda 3A: coloane editabile (cantitate/pret/pret_cu_tva), marcaj lmodificat, valoare IF llCazA DO verifica_editare_grid WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), lcLog ELSE DO caz_negasit WITH 'S4 runda 3A, editare grid', lcLog ENDIF *!* 4c) grid blank raportat de Marius: RecordSource-ul grdArticoleFactura dupa Show() - IncarcaArticoleFactura *!* inchide si recreeaza cursorul tvd (workarea noua), care rupe legatura grid-ului cu cursorul placeholder de la Load. *!* Inaintea gardei (5): garda elibereaza definitiv ofacturare_editare.prg, unde e definita IncarcaCursoareModificareNota IF llCazF DO verifica_recordsource_grid WITH (crscaz_f.cod), (crscaz_f.an), (crscaz_f.luna), lcLog ENDIF *!* 4d) PregatesteArticoleFacturaEditare (helper cei 5 apelanti): apelat ca la afisjurcom.do_modifica - *!* inainte de Createobject, pe tact deja incarcat - workarea tvd trebuie sa ramana identica intre *!* Load si Show (fallback-ul din Show nu se mai declanseaza, la fel ca la do_editare_factura) IF llCazA DO verifica_precarcare_articole WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), lcLog ELSE DO caz_negasit WITH 'PregatesteArticoleFacturaEditare (cei 5 apelanti)', lcLog ENDIF *!* 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 IF llCazA DO verifica_garda_procedura_lipsa WITH (crscaz_a.cod), (crscaz_a.an), (crscaz_a.luna), lcLog ELSE DO caz_negasit WITH 'garda ofacturare_editare.prg lipsa', lcLog ENDIF STRTOFILE('done' + CHR(13) + CHR(10), lcLog, 1) QUIT *!* cazul cerut de asertie nu exista in datele schemei - se raporteaza FAIL, nu se sare peste PROCEDURE caz_negasit LPARAMETERS tcEticheta, tcLog STRTOFILE('--- ' + tcEticheta + ' ---' + CHR(13) + CHR(10) + ; ' niciun document din schema nu satisface conditia cazului' + CHR(13) + CHR(10) + ; ' FAIL' + CHR(13) + CHR(10), tcLog, 1) ENDPROC 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 * pe un cod cu 2+ randuri active in VANZARI, 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 prezent in nota, dar fara corespondent in VANZARI PROCEDURE verifica_coliziune_cod LPARAMETERS tcLog, tnCod, tnNract, tcSerieAct, tdDataAct, tnIdVanzareAsteptat, tnNractFara, tcSerieFara, tdDataFara LOCAL llOk1, llOk2 IncarcaVanzareNota(tnCod, tnNract, tcSerieAct, tdDataAct) llOk1 = (Reccount('tvanz') = 1 AND tvanz.id_vanzare == tnIdVanzareAsteptat) IF Used('tvanz') Use In tvanz ENDIF IncarcaVanzareNota(tnCod, tnNractFara, tcSerieFara, tdDataFara) llOk2 = (Reccount('tvanz') = 0) IF Used('tvanz') Use In tvanz ENDIF STRTOFILE('--- coliziune cod=' + TRANSFORM(tnCod) + ' (mai multe randuri VANZARI cu acelasi cod) ---' + CHR(13) + CHR(10) + ; ' nract=' + TRANSFORM(tnNract) + '/' + ALLTRIM(NVL(tcSerieAct,'')) + ' => gaseste id_vanzare=' + TRANSFORM(tnIdVanzareAsteptat) + ': ' + IIF(llOk1, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ; ' nract=' + TRANSFORM(tnNractFara) + ' (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 * S4 runda 3A: grdArticoleFactura editabil pe cantitate/pret/pret_cu_tva, marcaj lmodificat pe * linia atinsa, valoare recalculata (cantitate * (pret - discount_unitar), inmultit cu proc_tvav * cand pret_cu_tva = 0 - pret_cu_tva e flag, nu pret). Nu scrie in Oracle - doar in cursorul tvd. PROCEDURE verifica_editare_grid LPARAMETERS tnCod, tnAn, tnLuna, tcLog LOCAL llOk, lnIdSet, loForm, loGrid, llStructuraOk, llReadOnlyOk, llInitOk, llDupaEditareOk LOCAL lnCantitateVeche, lnValoareAsteptata, lnCantitateNoua, lnPretNet llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.) llStructuraOk = .F. llReadOnlyOk = .F. llInitOk = .F. llDupaEditareOk = .F. 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() loGrid = loForm.pgfArticole.Page3.grdArticoleFactura llStructuraOk = (loGrid.ColumnCount == 14) AND ; (Type('tvd.lmodificat') == 'L') AND (Type('tvd.valoare') == 'N') llReadOnlyOk = (loGrid.Column5.ReadOnly == .F.) AND (loGrid.Column6.ReadOnly == .F.) AND ; (loGrid.Column7.ReadOnly == .F.) AND (Pemstatus(loGrid.Column7, '_checkbox1', 5)) AND ; (loGrid.Column1.ReadOnly == .T.) AND (loGrid.Column14.ReadOnly == .T.) IF Reccount('tvd') > 0 Go Top In tvd lnPretNet = Nvl(tvd.pret, 0) - Nvl(tvd.discount_unitar, 0) llInitOk = (tvd.lmodificat == .F.) AND ; (Round(tvd.valoare, 2) == Round(tvd.cantitate * Iif(tvd.pret_cu_tva = 0, lnPretNet * tvd.proc_tvav, lnPretNet), 2)) lnCantitateVeche = tvd.cantitate lnCantitateNoua = lnCantitateVeche + 1 Replace cantitate With lnCantitateNoua In tvd loForm.calculeaza_valori_articol() lnValoareAsteptata = Round(lnCantitateNoua * Iif(tvd.pret_cu_tva = 0, lnPretNet * tvd.proc_tvav, lnPretNet), 2) llDupaEditareOk = (tvd.lmodificat == .T.) AND (Round(tvd.valoare, 2) == lnValoareAsteptata) ENDIF loForm.Release() ENDIF STRTOFILE('--- S4 runda 3A, editare grid, cod=' + TRANSFORM(tnCod) + ' ---' + CHR(13) + CHR(10) + ; ' structura grid/cursor (ColumnCount=14, lmodificat L, valoare N) = ' + IIF(llStructuraOk, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ; ' ReadOnly (cantitate/pret/pret_cu_tva editabile, checkbox pe pret_cu_tva, restul readonly) = ' + IIF(llReadOnlyOk, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ; ' stare initiala (lmodificat=.F., valoare calculata corect) = ' + IIF(llInitOk, 'PASS', 'FAIL') + CHR(13) + CHR(10) + ; ' dupa editare cantitate (lmodificat=.T., valoare recalculata) = ' + IIF(llDupaEditareOk, '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 * punctul A: pe un document fara rulaje (trul si trul_obinv goale), afiseaza_rulaje() colapseaza * this.pgfArticole.Visible - inainte de fix, asta ascundea si PAGE3 desi tvd are randuri; dupa fix, * conditia din Show() tine cont si de Reccount('tvd') PROCEDURE verifica_pageframe_vizibil LPARAMETERS tnCod, tnAn, tnLuna, tcLog LOCAL llOk, lnIdSet, loForm, llVizibilAsteptat, llVizibil, lnReccountTvd, lnReccountTrul, lnReccountTrulObinv llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.) llVizibil = .F. lnReccountTvd = -1 lnReccountTrul = -1 lnReccountTrulObinv = -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 Select tact loForm = Createobject([frm_modific2024], lnIdSet) loForm.WindowType = 0 loForm.Show() llVizibil = loForm.pgfArticole.Visible lnReccountTvd = Reccount('tvd') lnReccountTrul = Reccount('trul') lnReccountTrulObinv = Reccount('trul_obinv') loForm.Release() ENDIF *!* oglinda conditiei de colaps din Show(): vizibil daca oricare din trul/trul_obinv/tvd are randuri llVizibilAsteptat = !(lnReccountTrul = 0 AND lnReccountTrulObinv = 0 AND lnReccountTvd <= 0) STRTOFILE('--- pgfArticole.Visible, cod=' + TRANSFORM(tnCod) + ' (zero rulaje, doar articole) ---' + CHR(13) + CHR(10) + ; ' Reccount(trul)=' + TRANSFORM(lnReccountTrul) + ', Reccount(trul_obinv)=' + TRANSFORM(lnReccountTrulObinv) + ; ', Reccount(tvd)=' + TRANSFORM(lnReccountTvd) + CHR(13) + CHR(10) + ; ' pgfArticole.Visible = ' + TRANSFORM(llVizibil) + ' (asteptat ' + TRANSFORM(llVizibilAsteptat) + ')' + CHR(13) + CHR(10) + ; ' ' + IIF(llVizibil == llVizibilAsteptat, '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 *!* verifica ipoteza grid blank: grdArticoleFactura se leaga la construire pe workarea cursorului *!* placeholder tvd creat de Load; IncarcaArticoleFactura (apelat din Show) face Use In tvd + Select *!* Into Cursor tvd, care schimba workarea si rupe legatura, desi tvd ramane deschis cu date PROCEDURE verifica_recordsource_grid LPARAMETERS tnCod, tnAn, tnLuna, tcLog LOCAL llOk, lnIdSet, loForm, lnWorkareaLoad, lnWorkareaShow, lcRecordSourceShow, lnReccountTvd, llUsedTvd llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.) lnWorkareaLoad = 0 lnWorkareaShow = 0 lcRecordSourceShow = '?' lnReccountTvd = -1 llUsedTvd = .F. 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 *!* dupa Createobject (Load), inainte de Show: tvd e cursorul placeholder gol, pe care s-a legat grid-ul lnWorkareaLoad = Select('tvd') loForm.Show() lnWorkareaShow = Select('tvd') lcRecordSourceShow = loForm.pgfArticole.Page3.grdArticoleFactura.RecordSource lnReccountTvd = Reccount('tvd') llUsedTvd = Used('tvd') loForm.Release() ENDIF STRTOFILE('--- verificare RecordSource grid, cod=' + TRANSFORM(tnCod) + ' ---' + CHR(13) + CHR(10) + ; ' workarea tvd dupa Load (inainte de Show) = ' + TRANSFORM(lnWorkareaLoad) + CHR(13) + CHR(10) + ; ' workarea tvd dupa Show = ' + TRANSFORM(lnWorkareaShow) + CHR(13) + CHR(10) + ; ' RecordSource grid dupa Show = [' + lcRecordSourceShow + ']' + CHR(13) + CHR(10) + ; ' Used(tvd) dupa Show = ' + TRANSFORM(llUsedTvd) + ', Reccount(tvd) = ' + TRANSFORM(lnReccountTvd) + 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 *!* apelul nou al celor 5 apelanti (afisjurcom.do_modifica, importmodifica, modificanote): tact deja *!* incarcat, PregatesteArticoleFacturaEditare('tact') inainte de Createobject - trebuie sa lege grid-ul *!* pe tvd deja plin, la fel ca do_editare_factura, fara ca fallback-ul din Show sa mai reinchida cursorul PROCEDURE verifica_precarcare_articole LPARAMETERS tnCod, tnAn, tnLuna, tcLog LOCAL llOk, lnIdSet, loForm, lnWorkareaLoad, lnWorkareaShow, lnReccountTvd, llUsedTvd llOk = IncarcaCursoareModificareNota(tnCod, tnAn, tnLuna, .F.) lnWorkareaLoad = 0 lnWorkareaShow = 0 lnReccountTvd = -1 llUsedTvd = .F. 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 PregatesteArticoleFacturaEditare('tact') Select tact loForm = Createobject([frm_modific2024], lnIdSet) loForm.WindowType = 0 *!* dupa Createobject (Load): daca precarcarea a gasit articole, tvd e deja plin cu ele lnWorkareaLoad = Select('tvd') loForm.Show() lnWorkareaShow = Select('tvd') lnReccountTvd = Reccount('tvd') llUsedTvd = Used('tvd') loForm.Release() ENDIF STRTOFILE('--- PregatesteArticoleFacturaEditare, cod=' + TRANSFORM(tnCod) + ' ---' + CHR(13) + CHR(10) + ; ' workarea tvd dupa Load (cu precarcare) = ' + TRANSFORM(lnWorkareaLoad) + CHR(13) + CHR(10) + ; ' workarea tvd dupa Show = ' + TRANSFORM(lnWorkareaShow) + ' (asteptat identica cu cea de dupa Load)' + CHR(13) + CHR(10) + ; ' Used(tvd)=' + TRANSFORM(llUsedTvd) + ', Reccount(tvd)=' + TRANSFORM(lnReccountTvd) + CHR(13) + CHR(10) + ; ' ' + IIF(lnWorkareaLoad == lnWorkareaShow AND lnWorkareaLoad > 0 AND lnReccountTvd > 0, '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 IF Used('crsArticoleFactura') Use In crsArticoleFactura 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