* test_progres_lot_ui.prg * Verificare vizuala runda 31 (progres vizibil la importul in lot eFactura), COMUN\clase\ * anaf_efactura.vc2 + omodificari.vc2: (a) grdFacturi deruleaza la factura curenta cand randul * e sub fereastra vizibila, (b) frm_modific2024 apare coborat sub banda de progres a lotului, * (c) titlurile de import (ambele rute) si _screen.Caption arata prefixul de lot. * * Lot de 10 facturi ZZTEST (fixturi seed_test_import_efactura.ps1), ordonate determinist prin * suprascrierea locala a datei (crsFacturi e cursor local, neinscris in Oracle) astfel incat * pozitia 6 din coada (mijlocul lotului) sa fie si C4 (5256, ruta Import gestiune - singura care deschide * frm_modific2024). Se adauga randuri sintetice ("filler", completat=1/completatdet=1, ales=0, * fara cod fiscal - deci neeligibile) inaintea celor 10 reale, in numar calculat din * grdFacturi.Height/RowHeight, ca pozitia fizica a randului 10 sa cada sub zona vizibila a * gridului la deschidere (WindowState=2) - fara ele, 10 randuri reale incap oricum pe ecran. * * Ambele dialoguri modale hardcodate (frm_introd_compact2007.Show(1) din pmenu.introducere_compacta, * frm_modific2024.Show(1,...) din ImportModifica) sunt conduse de un Timer pe _SCREEN (situatia B, * testare-ui-vfp.md): captureaza titlul/pozitia, apoi apasa RENUNTARE (nu Terminare) - niciun * document contabil nu se creeaza, deci nu e nevoie de AnulareLotEF la final (verificat oricum, * id_fact ramane 0 pe ambele facturi folosite pentru capturi). * * Rulare: powershell -ExecutionPolicy Bypass -File test_progres_lot_ui.ps1 PUBLIC gcUILog, gcSyncDir gcUILog = 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_progres_lot_ui_log.txt' gcSyncDir = 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\uisync_progreslot\' SET SAFETY OFF SET TALK OFF STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog) ON ERROR DO TErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() ON SHUTDOWN QUIT SET PROCEDURE TO 'D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg' ADDITIVE SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\ui_harness.prg') ADDITIVE PUBLIC gnPass, gnFail, gcMockUltimMesaj, gnMockUltimTip gnPass = 0 gnFail = 0 gcMockUltimMesaj = '' gnMockUltimTip = 0 DO ('D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 9 IF gnHandle <= 0 DO TVerdict WITH .F., 'PRECONDITIE conectare Oracle', 'gnHandle=' + TRANSFORM(gnHandle) DO HarnessDone WITH 'done PRECONDITIE LIPSA' QUIT ENDIF IF glLunaInchisa DO TVerdict WITH .F., 'PRECONDITIE luna deschisa', 'glLunaInchisa=.T. pe schema de test' DO HarnessDone WITH 'done PRECONDITIE LIPSA' QUIT ENDIF DO HarnessLog WITH 'mediu OK, schema=' + gcS + ' gnAn=' + TRANSFORM(gnAn) + ' gnLuna=' + TRANSFORM(gnLuna) SET PROCEDURE TO import_efactura.prg ADDITIVE SET PROCEDURE TO recunoastere_articol_ef.prg ADDITIVE SET PROCEDURE TO coada_contabilizare_ef.prg ADDITIVE SET PROCEDURE TO anulare_lot_ef.prg ADDITIVE SET PROCEDURE TO pmenu.prg ADDITIVE SET PROCEDURE TO oscrie_in_fisiere.prg ADDITIVE DO HarnessLog WITH 'proceduri incarcate' * cele 10 facturi ZZTEST folosite in lot, in ordinea dorita in coada (C4 pe pozitia 6, din mijlocul * lotului - singura cu articol gestionabil - ruta 2, frm_modific2024) * id-urile se citesc din baza dupa numarul facturii: fiecare re-semanare le schimba LOCAL ARRAY laIdLot(10), laCodLot(10) LOCAL lnJ, lnIdTemp laCodLot(1) = 'ZZT-A1-C' laCodLot(2) = 'ZZT-A2-C' laCodLot(3) = 'ZZT-A3-C' laCodLot(4) = 'ZZT-A4-C' laCodLot(5) = 'ZZT-A5-C' laCodLot(6) = 'ZZT-C4-C' && Import gestiune, pozitia 6 in lot laCodLot(7) = 'ZZT-A7-C' laCodLot(8) = 'ZZT-B1-C' laCodLot(9) = 'ZZT-C1-C' laCodLot(10) = 'ZZT-A6-C' FOR lnJ = 1 TO 10 * scalar intermediar: @element_de_array direct in oSelecteaza2Value da eroarea 11 lnIdTemp = 0 goExecutor.oSelecteaza2Value("select max(id) from anaf_efactura where xnumar_act = '" + laCodLot(lnJ) + "'", @lnIdTemp) laIdLot(lnJ) = lnIdTemp IF NVL(laIdLot(lnJ), 0) = 0 DO HarnessLog WITH 'PRECONDITIE: lipseste factura ' + laCodLot(lnJ) + ' - ruleaza seed_test_import_efactura.ps1' ENDIF ENDFOR LOCAL lcListaId, lnI lcListaId = '' FOR lnI = 1 TO 10 lcListaId = lcListaId + IIF(EMPTY(lcListaId), '', ',') + TRANSFORM(laIdLot(lnI)) ENDFOR DO HarnessLog WITH 'lot: ' + lcListaId TRY DO BuildCursoare WITH lcListaId DO HarnessLog WITH 'crsFacturi reccount=' + TRANSFORM(RECCOUNT('crsFacturi')) DO TVerdict WITH RECCOUNT('crsFacturi') = 10, 'setup: cele 10 facturi ZZTEST in crsFacturi', TRANSFORM(RECCOUNT('crsFacturi')) DO BuildCursoareHelper DO HarnessLog WITH 'cursoare helper construite' * gestiune implicita pentru facturi primite (optiunea EFACTURA_ID_GESTIUNE_P, citita normal * de frm_configurare_efactura) - fara ea, orice linie gestionabila (C4) ramane "de completat" * si e sarita de coada inainte sa ajunga la ImportModifica PUBLIC gnEFACTURA_ID_GESTIUNE_P gnEFACTURA_ID_GESTIUNE_P = 6 * analitic completat manual pe linia C4 (contul 371 cere analitic) - ca un operator care a * completat deja linia inainte s-o bifeze in coada SELECT crsDetaliiFacturi REPLACE acont WITH '4' FOR id_efactura = laIdLot(6) * ordine determinista a cozii: 01..10 sept 2026, id-ul din laIdLot(n) pe ziua n SELECT crsFacturi FOR lnI = 1 TO 10 REPLACE data_act WITH DATE(2026, 9, lnI) FOR id = laIdLot(lnI) ENDFOR SELECT crsFacturi LOCAL loForm loForm = CREATEOBJECT('frm_import_efactura', .T.) loForm.WindowType = 0 loForm.Show() loForm.WindowState = 2 DO HarnessLog WITH 'FORM deschis, lLotActiv=' + TRANSFORM(loForm.lLotActiv) + ' ClassLibrary=' + TRANSFORM(loForm.ClassLibrary) DO TVerdict WITH loForm.lLotActiv, 'setup: EFACTURA_LOT_ACTIV citit ca activ (seed)', TRANSFORM(loForm.lLotActiv) * Init/Load-ul formularului isi are propria logica de (re)selectie a randurilor (preferinta * utilizator) - bifez lotul DUPA deschidere, ca ales=1 sa nu fie suprascris SELECT crsFacturi REPLACE ALL ales WITH 0 REPLACE ales WITH 1 FOR INLIST(id, laIdLot(1), laIdLot(2), laIdLot(3), laIdLot(4), laIdLot(5), laIdLot(6), laIdLot(7), laIdLot(8), laIdLot(9), laIdLot(10)) * cate randuri incap vizibil in grdFacturi la WindowState=2 - randurile filler impinse * inaintea celor 10 reale trebuie sa treaca de acest numar, altfel C4 (pozitia 6) ar fi * oricum vizibila fara nicio derulare si testul (a) n-ar dovedi nimic LOCAL lnRowH, lnVizibile, lnFillere lnRowH = loForm.grdFacturi.RowHeight IF lnRowH <= 0 lnRowH = 17 ENDIF lnVizibile = INT(loForm.grdFacturi.Height / lnRowH) lnFillere = lnVizibile + 5 DO HarnessLog WITH 'grdFacturi.Height=' + TRANSFORM(loForm.grdFacturi.Height) + ' RowHeight=' + TRANSFORM(lnRowH) + ' vizibile~=' + TRANSFORM(lnVizibile) + ' fillere adaugate=' + TRANSFORM(lnFillere) SELECT crsFacturi FOR lnI = 1 TO lnFillere APPEND BLANK REPLACE id WITH -1000 - lnI, ales WITH 0, id_fact WITH 0, ; data_act WITH DATE(2026, 8, 1), numar_act WITH 'ZZFILLER-' + TRANSFORM(lnI), ; xfurnizor WITH 'ZZTEST FILLER ' + TRANSFORM(lnI), xclient WITH '', partener WITH '', ; cod_fiscal WITH '', cod_fiscal_emitent WITH '', total_fara_tva WITH 0, total_tva WITH 0, ; total_tva_ron WITH 0, total_cu_tva WITH 0, discount_fara_tva WITH 0, taxe_fara_tva WITH 0, ; valoare_fara_tva WITH 0, total_de_plata WITH 0, nume_valuta WITH 'RON', test WITH 0, ; procesat WITH 0, TVAIncasare WITH 0, completat WITH 1, completatdet WITH 1, ; creditnote WITH 0, eligibil_lot WITH 0, motiv_lot WITH '', eroare_lot WITH 0, ; de_completat WITH '', part_inactiv WITH 0 ENDFOR * ordinea fizica de insertie (fillere APPEND-uite dupa cele 10 reale) nu e ordinea de afisare/ * scanare a gridului - activez explicit un ordine pe data_act, ca fillerele (datate august) * sa preceada efectiv cele 10 facturi reale (septembrie) in grid si in coada INDEX ON DTOS(data_act) + numar_act TAG lottest SET ORDER TO lottest loForm.grdFacturi.Refresh() * pozitia LOGICA (in ordinea curenta a gridului, nu RECNO() fizic) a lui C4 - GO TOP la * final, ca do_coada (care nu face GO TOP inainte de MarcheazaEligibilitate) sa porneasca * de la primul rand LOCAL lnPozC4 lnPozC4 = 0 SELECT crsFacturi GO TOP SCAN lnPozC4 = lnPozC4 + 1 IF id = laIdLot(6) EXIT ENDIF ENDSCAN DO TVerdict WITH lnPozC4 > lnVizibile, 'setup: C4 (poz.6) e la un rand logic peste zona vizibila', 'pozitie logica=' + TRANSFORM(lnPozC4) + ' vizibile~=' + TRANSFORM(lnVizibile) GO TOP loForm.Refresh() DOEVENTS FORCE * --- driver pentru dialogurile modale hardcodate (situatia B, testare-ui-vfp.md) --- PUBLIC glCapC1, glCapB, glCapA glCapC1 = .F. glCapB = .F. glCapA = .F. PUBLIC goLotForm goLotForm = loForm * CompleteazaFactura() ruleaza chiar dupa cele doua Refresh-uri de pozitionare din do_coada * (BINDEVENT pe grdFacturi.Refresh nu merge: handler-ul e chemat INAINTE ca metoda nativa sa * deruleze efectiv grila, deci captura ar prinde starea veche, nederulata) LOCAL loGridWatch, loTmr loGridWatch = CREATEOBJECT('oGridWatchLot') BINDEVENT(loForm, 'CompleteazaFactura', loGridWatch, 'OnBeforeCompleteaza') loTmr = CREATEOBJECT('tmrProgresLot') loTmr.Enabled = .T. LOCAL loDiagCoada loDiagCoada = CREATEOBJECT('CoadaContabilizareEF') loDiagCoada.MarcheazaEligibilitate('crsFacturi', glLunaInchisa) SELECT crsFacturi FOR lnI = 1 TO 10 LOCATE FOR id = laIdLot(lnI) DO HarnessLog WITH ' DIAGNOSTIC[' + TRANSFORM(lnI) + '] id=' + TRANSFORM(laIdLot(lnI)) + ' ales=' + TRANSFORM(ales) + ' eligibil_lot=' + TRANSFORM(eligibil_lot) + ' motiv_lot=[' + ALLTRIM(NVL(motiv_lot,'')) + ']' ENDFOR SELECT crsFacturi GO TOP DO HarnessLog WITH 'pornesc do_coada()' TRY loForm.do_coada() CATCH TO loExCoada DO HarnessLog WITH 'EXCEPTIE do_coada: ' + loExCoada.Message ENDTRY loTmr.Enabled = .F. DO HarnessLog WITH 'do_coada() terminat' * C4 poate ramane SARIT de gate-ul "de completat" al coach (cont 371 cere analitic pe gestiune, * motiv real de afaceri, nelegat de progresul vizual testat aici - vezi raportul coada mai jos). * Daca s-a intamplat asta, conduc manual EXACT liniile de progres pe care do_coada le-ar seta * pentru pozitia 6/10 (copie fidela din anaf_efactura.vc2:do_coada), apoi apelul REAL * do_executa(2) - acelasi cod de aplicatie, doar fara pre-verificarea "de completat" a cozii. IF !glCapB DO HarnessLog WITH 'FALLBACK (b/c2): do_coada a sarit C4 (de completat) - conduc manual do_executa(2)' SELECT crsFacturi LOCATE FOR id = laIdLot(6) loForm.lblCoadaAntet.Visible = .T. loForm.cAntetLot = '[6/10] ' + ALLTRIM(NVL(xfurnizor,'')) + ' ' + ALLTRIM(NVL(numar_act,'')) + ' - ' _screen.Caption = _screen.Caption + ' - ' + Alltrim(loForm.lblCoadaAntet.Caption) loForm.grdFacturi.Refresh() loForm.CompleteazaFactura() SELECT crsFacturi LOCATE FOR id = laIdLot(6) loForm.actualizeaza_grid2() SELECT crsFacturi LOCATE FOR id = laIdLot(6) loForm.CompleteazaDetaliiFactura() SELECT crsDetaliiFacturi REPLACE acont WITH '4' FOR id_efactura = laIdLot(6) SELECT crsFacturi LOCATE FOR id = laIdLot(6) loTmr.Enabled = .T. TRY loForm.do_executa(2) CATCH TO loExFallback DO HarnessLog WITH 'EXCEPTIE FALLBACK do_executa(2): ' + loExFallback.Message ENDTRY loTmr.Enabled = .F. loForm.cAntetLot = '' ENDIF DO TVerdict WITH glCapC1, 'captura (c1) facuta - frm_introd_compact2007 detectat', TRANSFORM(glCapC1) DO TVerdict WITH glCapA, 'captura (a) facuta - grdFacturi.Refresh() pe pozitia 6', TRANSFORM(glCapA) DO TVerdict WITH glCapB, 'captura (b/c2) facuta - frm_modific2024 detectat', TRANSFORM(glCapB) IF USED('crsCoadaRaport') SELECT crsCoadaRaport SCAN DO HarnessLog WITH ' raport coada: id_efactura=' + TRANSFORM(id_efactura) + ' numar_act=' + ALLTRIM(NVL(numar_act,'')) + ' stare=' + ALLTRIM(NVL(stare,'')) + ' motiv=' + ALLTRIM(NVL(motiv,'')) ENDSCAN ENDIF * verificare: renuntarea la ambele dialoguri (c1/A1 si b-c2/C4) nu a scris niciun document real LOCAL lnIdFactA1, lnIdFactC4 lnIdFactA1 = -1 lnIdFactC4 = -1 goExecutor.oSelecteaza2Value('select nvl(id_fact,0) from anaf_efactura where id = ' + TRANSFORM(laIdLot(1)), @lnIdFactA1) goExecutor.oSelecteaza2Value('select nvl(id_fact,0) from anaf_efactura where id = ' + TRANSFORM(laIdLot(6)), @lnIdFactC4) DO TVerdict WITH NVL(lnIdFactA1,-1) = 0, 'curatenie: A1 (5208) fara document contabil (renuntat)', TRANSFORM(lnIdFactA1) DO TVerdict WITH NVL(lnIdFactC4,-1) = 0, 'curatenie: C4 (5256) fara document contabil (renuntat)', TRANSFORM(lnIdFactC4) DO HarnessLog WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail) DO HarnessDone WITH IIF(gnFail = 0, 'done OK', 'done CU ESECURI') IF TYPE('loForm') = 'O' loForm.Release() ENDIF CATCH TO loExMain DO HarnessLog WITH 'EXCEPTIE MAIN: ' + loExMain.Message + ' linia ' + TRANSFORM(loExMain.LineNo) DO HarnessDone WITH 'done EXCEPTIE' ENDTRY QUIT *********************** PROCEDURE TVerdict LPARAMETERS tlOk, tcNume, tcDetalii IF tlOk gnPass = gnPass + 1 ELSE gnFail = gnFail + 1 ENDIF DO HarnessLog WITH IIF(tlOk, 'PASS ', 'FAIL ') + tcNume + ' | ' + TRANSFORM(tcDetalii) ENDPROC *********************** PROCEDURE TErr LPARAMETERS tnError, tcMessage, tcProgram, tnLine DO HarnessLog WITH 'EROARE ' + TRANSFORM(tnError) + ' [' + TRANSFORM(tcMessage) + '] in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLine) ENDPROC *********************** * crsFacturi/crsDetaliiFacturi pentru exact facturile din tcListaId - copie fidela din * test_c1_echivalenta_lot.prg (BuildCursoare) PROCEDURE BuildCursoare LPARAMETERS tcListaId LOCAL lcSchema, lcSelect, lcOrder, lcGroup, lcFiltru, lcFiltruOriginal, llModParam, llAfiseaza IF USED('crsFacturi') USE IN crsFacturi ENDIF IF USED('crsDetaliiFacturi') USE IN crsDetaliiFacturi ENDIF IF USED('crsDetaliiFacturiTemp') USE IN crsDetaliiFacturiTemp ENDIF TEXT TO lcSchema NOSHOW ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), partener C(200), id_incarcare C(36), id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal C(30) null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4) null, descriere M null, detalii_plata M null, diferenta N(16,4) null, procesat N(1), SerieActRoa V(10) Null, NrActRoa N(14) Null, IdPartRoa N(10) Null, PartenerRoa V(100) null, codFiscalROA V(20), idValutaROA N(5) null,numeValutaROA V(5) null, cursROA N(16,6) null,Cont c(4) Null,ACont c(4) Null,TVAIncasare N(1),Fdoc V(20) null,Id_Fdoc N(5) Null,Nrord V(100) null,Id_Lucrare I Null,Contract V(100) Null,Id_Ctr I Null,Sectie V(100) null,Id_Sectie I Null,dst_chlt V(100) null, Id_venchelt I NUll, nresp V(100) null, Id_responsabil I NUll , completat N(1), completatdet N(1), creditnote N(1), explicatiaROA V(100) null, explicatia4ROA V(100) null, explicatia5ROA V(100) null, eligibil_lot N(1), motiv_lot V(120), eroare_lot N(1), de_completat V(80), gest c(1), part_inactiv N(1) ENDTEXT TEXT TO lcSelect TEXTMERGE NOSHOW SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, partener, id_incarcare, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, case when jtotctva is null then null when NVL(nume_valuta,'RON') <> 'RON' then null else decode(creditnote,0,1,-1) * NVL(total_cu_tva,0.00) - (NVL(jtotctva,0.00) - NVL(jtva_ti,0.00)) end as diferenta, procesat, '' as SerieActRoa, CAST(null as Number(14)) as NrActRoa, CAST(null as Number(20)) as idPartRoa, '' as PartenerRoa, '' as codFiscalROA, CAST(null as Number(10)) as idValutaROA, '' as numeValutaROA, CAST(null as Number(16,6)) as cursROA, '' as Cont, '' as acont, 0 as TVAIncasare, '' as Fdoc, CAST(0 as Number(5)) as Id_Fdoc, '' as Nrord, CAST(0 as Number(10)) as id_Lucrare, '' as Contract, CAST(null as Number(10)) as id_ctr, '' Sectie, CAST(0 as Number(10)) as id_Sectie, '' as dst_chlt, CAST(0 as Number(10)) as id_Venchelt, '' as nresp, CAST(0 as Number(10)) as id_responsabil, 0 as completat, 0 as completatdet, creditnote, '' as explicatiaROA, '' as explicatia4ROA, '' as explicatia5ROA, 1 as eligibil_lot, '' as motiv_lot, 0 as eroare_lot, '' as de_completat, '' as gest, 0 as part_inactiv FROM anaf_vefactura_primit ENDTEXT lcOrder = [data_act,numar_act,data_raspuns] lcGroup = [] lcFiltru = [id in (] + m.tcListaId + [)] lcFiltruOriginal = [] llModParam = .T. llAfiseaza = .F. PRIVATE poFacturi, poFacturiDetalii poFacturi = NULL poFacturiDetalii = NULL gencursor('poFacturi', 'crsFacturi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal) poFacturi.ca_baza1.afisare() TEXT TO lcSchema NOSHOW distribuie N(1), id_tip N(10) null, id_articol N(20) null, id_gestiune N(20) null, cont C(4) null, acont C(4) null, sursa_cont V(10) null, id N(20), id_efactura N(20), nr N(5), articol V(250), descriere V(250), detalii M, cantitate N(18,6), um V(20), um_iso V(50), um_roa V(50), pret N(20,6), proctva N(7,2), tiptva V(2), valoarefaratva N(20,6), discountfaratva N(20,6), in_stoc N(1), articol_roa V(250), codmat_roa V(50), codbare V(50), codclient V(100), codfurnizor V(100), codcpv V(50), codnc8 V(50), nume_gestiune V(50), cgest V(20), tva N(20,6), pretv N(20,6), tvav N(20,6), pretvtva N(20,6), explicatia V(100), explicatia4 V(100), explicatia5 V(100) ENDTEXT TEXT TO lcSelect NOSHOW select 0 as distribuie, CAST(0 as number(10)) as id_tip, id_articol, id_gestiune, cont, acont, sursa_cont, id, id_efactura, nr, articol, descriere, detalii, cantitate, um, um_iso, um_roa, pret, proctva, tiptva, valoarefaratva, discountfaratva, in_stoc, articol_roa, codmat_roa, codbare, codclient, codfurnizor, codcpv, codnc8, nume_gestiune, cgest, 0 as tva, 0 as pretv, 0 as tvav, 0 as pretvtva, '' as explicatia, '' as explicatia4, '' as explicatia5 from anaf_vefactura_detalii ENDTEXT lcOrder = [id_efactura,nr] lcGroup = [] lcFiltru = [id_efactura in (] + m.tcListaId + [)] lcFiltruOriginal = [] llModParam = .T. llAfiseaza = .F. gencursor('poFacturiDetalii', 'crsDetaliiFacturiTemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcGroup, llModParam, lcFiltruOriginal) poFacturiDetalii.ca_baza1.afisare() SELECT * FROM crsDetaliiFacturiTemp INTO CURSOR crsDetaliiFacturi READWRITE USE IN (SELECT('crsDetaliiFacturiTemp')) ENDPROC *********************** * cursoare helper cerute la instantierea frm_import_efactura - copie fidela din * test_c1_echivalenta_lot.prg (BuildCursoareHelper) PROCEDURE BuildCursoareHelper LOCAL llSucces IF USED('cTipArticoleP') USE IN cTipArticoleP ENDIF CREATE CURSOR cTipArticoleP (id I, in_stoc N(1), tip V(50), cont V(4), ordine I) INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0) INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (12, 'Terti','628', 0, 12) SELECT cTipArticoleP GO TOP IN cTipArticoleP INDEX on ordine TAG ordine IF USED('cTipArticoleE') USE IN cTipArticoleE ENDIF CREATE CURSOR cTipArticoleE (id I, in_stoc N(1), tip V(50), cont V(4), ordine I) INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0) INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (34, 'Servicii vandute','704', 0, 6) SELECT cTipArticoleE GO TOP IN cTipArticoleE INDEX on ordine TAG ordine IF USED('cTip') USE IN cTip ENDIF SELECT id, tip, cont, in_stoc, ordine FROM cTipArticoleP ORDER BY ordine INTO CURSOR cTip SELECT cTip INDEX on id TAG id IF USED('cGestiuni') USE IN cGestiuni ENDIF llSucces = goExecutor.oExecuta([select distinct nume_gestiune,cgest,id_gestiune,nr_pag,cont from vgest_gestiuni_util where inactiv = 0 and id_util = ] + ALLTRIM(STR(m.gnIdUtil)), 'cGestiuni') SELECT cGestiuni APPEND BLANK INDEX on id_gestiune TAG id_gest IF USED('cGestiuni2') USE IN cGestiuni2 ENDIF SELECT CAST(ALLTRIM(nume_gestiune) + '-' + ALLTRIM(NVL(cgest, '')) AS V(50)) AS nume_gestiune, id_gestiune FROM cGestiuni ORDER BY nume_gestiune INTO CURSOR cGestiuni2 IF USED('cUMISO') USE IN cUMISO ENDIF llSucces = goExecutor.oExecuta("select cod_um_iso, um_iso from syn_vnom_um_iso", 'cUMISO') SELECT cUMISO INDEX on cod_um_iso TAG cod_um_iso IF USED('cUM') USE IN cUM ENDIF llSucces = goExecutor.oExecuta("select id, um, cod_um_iso, um_iso from vnom_um", 'cUM') SELECT cUM INDEX on id TAG id ENDPROC *********************** * deblocarea celor doua dialoguri modale hardcodate din fluxul lotului (situatia B, * testare-ui-vfp.md): apasa RENUNTARE de indata ce fiecare formular apare in _SCREEN.Forms - * nu se creeaza niciun document contabil, doar se captureaza starea vizuala inainte de renuntare. DEFINE CLASS tmrProgresLot AS Timer Interval = 200 Enabled = .F. PROCEDURE Timer LOCAL lnI, loFrm FOR lnI = 1 TO _SCREEN.FormCount loFrm = _SCREEN.Forms(lnI) IF UPPER(TRANSFORM(loFrm.Name)) == 'FRM_INTROD_COMPACT2007' * mai multe facturi din lot pot trece prin ruta "Import contabilitate" - captura * (c1) se face o singura data (prima aparitie), dar RENUNTAREA se face de fiecare * data, altfel lotul ramane blocat pe modalele urmatoare IF !glCapC1 glCapC1 = .T. DO HarnessLog WITH 'CAPTURA (c1): titlufrumos1=[' + TRANSFORM(loFrm.titlufrumos1.Caption) + '] screenCaption=[' + TRANSFORM(_screen.Caption) + ']' This.Enabled = .F. DO HarnessStep WITH 0, 'c1_import_contabilitate_titlu' This.Enabled = .T. ENDIF TRY loFrm.Renunt1.Command1.Click() CATCH TO loErr1 DO HarnessLog WITH 'EXCEPTIE Renunt1.Click: ' + loErr1.Message ENDTRY EXIT ENDIF IF !glCapB AND UPPER(TRANSFORM(loFrm.Name)) == 'FRM_MODIFIC2024' glCapB = .T. DO HarnessLog WITH 'CAPTURA (b/c2): Lb_titlu_alb_b121=[' + TRANSFORM(loFrm.Lb_titlu_alb_b121.Caption) + '] screenCaption=[' + TRANSFORM(_screen.Caption) + '] Top=' + TRANSFORM(loFrm.Top) + ' WindowState=' + TRANSFORM(loFrm.WindowState) This.Enabled = .F. DO HarnessStep WITH 2, 'b_c2_import_gestiune_lot_coborat' This.Enabled = .T. TRY loFrm.But_renunt1.Click() CATCH TO loErr2 DO HarnessLog WITH 'EXCEPTIE But_renunt1.Click: ' + loErr2.Message ENDTRY EXIT ENDIF ENDFOR ENDPROC ENDDEFINE *********************** * checkpoint (a): CompleteazaFactura() ruleaza in do_coada imediat dupa cele doua Refresh-uri de * pozitionare a randului curent (pozitia 6/10 in lot, identificata prin cAntetLot) - la acest * punct grila a fost deja derulata efectiv (spre deosebire de un BINDEVENT direct pe * grdFacturi.Refresh, chemat INAINTE ca metoda nativa sa deruleze grila) DEFINE CLASS oGridWatchLot AS Custom PROCEDURE OnBeforeCompleteaza IF glCapA OR TYPE('goLotForm') <> 'O' RETURN ENDIF IF '[6/10]' $ goLotForm.cAntetLot glCapA = .T. DO HarnessLog WITH 'CAPTURA (a): cAntetLot=[' + goLotForm.cAntetLot + '] RelativeRow=' + TRANSFORM(goLotForm.grdFacturi.RelativeRow) + ' ActiveRow=' + TRANSFORM(goLotForm.grdFacturi.ActiveRow) DO HarnessStep WITH 1, 'a_grid_deruleaza' ENDIF ENDPROC ENDDEFINE