Files
comun/utile/Teste/efactura_import/test_progres_lot_ui.prg
2026-09-11 16:44:00 +03:00

497 lines
23 KiB
Plaintext

* 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