* test_splitter_ef.prg * Splitter sub grila de facturi la importul eFactura (frm_import_efactura, COMUN\clase\anaf_efactura.vc2): * Sfsplitterv1 = sfsplitterv_panou (sfsplitter.vcx), T7 tragere simulata cu MouseMove. * Sfsplitterv1 intre grdFacturi si _shape3, pozitia salvata in settings.ini [efactura] import_splitter_top. * T1 fara cheie in ini: layout de design neschimbat. T2 MoveSplitterToPosition muta panoul si grila de * linii, fara sa schimbe marginea de jos a grilei de linii. T3 clamp la limitele 100px/60px. T4 persistenta * (Destroy scrie doar daca s-a schimbat, Show restaureaza, forma neschimbata nu rescrie fisierul). T5 * compatibilitate cu pozitioneazalistasubimport() dupa mutare. T6 calea REALA a meniului * (CREATEOBJECT + Show(1) modal, ca in import_efactura.prg) - la deschidere, restaurarea rula in Show() * inainte ca maximizarea sa aduca grdDetaliiFacturi la inaltimea reala, deci clamp-ul MoveSplitterToPosition * o taia prematur; muta acum in Resize (o singura data, dupa maximizare). * gcGeneralIniFile redirectat pe un .ini temporar - nu atinge settings.ini real. * * Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef.prg" * Iesire in D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef_log.txt SET SAFETY OFF SET TALK OFF SET DELETED ON SET EXACT ON SET CENTURY ON SET DATE DMY SET NULLDISPLAY TO '' CLOSE DATABASES PUBLIC gcUILog, gnPass, gnFail, gcTempIni gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef_log.txt" gcTempIni = "D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_splitter_ef_temp.ini" gnPass = 0 gnFail = 0 IF FILE(gcTempIni) DELETE FILE (gcTempIni) ENDIF STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog) ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() ON SHUTDOWN QUIT TRY SET PROCEDURE TO 'D:\ROA\ROACONT\COMUN\utile\Teste\mock_amessagebox.prg' ADDITIVE DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT' IF gnHandle <= 0 DO PrLogLocal WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')' QUIT ENDIF SET PROCEDURE TO import_efactura.prg ADDITIVE SET PROCEDURE TO recunoastere_articol_ef.prg ADDITIVE SET PROCEDURE TO coada_contabilizare_ef.prg ADDITIVE gcGeneralIniFile = m.gcTempIni DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle) + ' gcGeneralIniFile=' + m.gcGeneralIniFile *-- crsFacturi/crsDetaliiFacturi si cursoarele ajutatoare cerute de Init, copie din test_pozitie_lista_ef.prg TEXT TO lcSchemaFacturi 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 IF USED('crsFacturi') USE IN crsFacturi ENDIF CREATE CURSOR crsFacturi (&lcSchemaFacturi) INSERT INTO crsFacturi (ales, id, id_fact, data_act, numar_act, xfurnizor, partener, cod_fiscal, ; total_cu_tva, nume_valuta, procesat, completat, completatdet, creditnote, detalii, ; eligibil_lot, motiv_lot, eroare_lot, de_completat, gest) ; VALUES (0, 1, 0, DATE(), 'TEST-SPL-1', 'FIXTURA SPLITTER 1', 'FIXTURA SPLITTER 1', 'RO99970001', ; 100, 'RON', 0, 0, 0, 0, 'x', 1, '', 0, '1 cont', '') TEXT TO lcSchemaDetalii 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 IF USED('crsDetaliiFacturi') USE IN crsDetaliiFacturi ENDIF CREATE CURSOR crsDetaliiFacturi (&lcSchemaDetalii) * rand mut pe id_efactura=1, ca actualizeaza_grid2 sa gaseasca detaliile deja in cursor (fara poFacturiDetalii/Oracle) INSERT INTO crsDetaliiFacturi (id, id_efactura, nr, articol) VALUES (100, 1, 1, 'FIXTURA') 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) SELECT cTipArticoleP GO TOP IN cTipArticoleP INDEX ON ordine TAG ordine 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) SELECT cTipArticoleE GO TOP IN cTipArticoleE INDEX ON ordine TAG ordine SELECT id, tip, cont, in_stoc, ordine FROM cTipArticoleP ORDER BY ordine INTO CURSOR cTip SELECT cTip INDEX ON id TAG id 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 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 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 goExecutor.oExecuta("select id, um, cod_um_iso, um_iso from vnom_um", 'cUM') SELECT cUM INDEX ON id TAG id LOCAL loForm, lnTopInitial, lnTopMutat SELECT crsFacturi GO TOP *=== T1: fara cheie in ini -> layout de design neschimbat dupa Show === loForm = CREATEOBJECT('frm_import_efactura', .T.) loForm.WindowType = 0 DO PrTest WITH 'formular instantiat', TYPE('loForm') == 'O' loForm.Show() lnTopInitial = loForm.Sfsplitterv1.Top DO PrTest WITH 'T1 grdFacturi.Height = 292 (design)', loForm.grdFacturi.Height = 292, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height) DO PrTest WITH 'T1 _shape3.Top = 369 (design)', loForm._shape3.Top = 369, 'obtinut=' + TRANSFORM(loForm._shape3.Top) DO PrTest WITH 'T1 splitter.Top = 364 (design)', lnTopInitial = 364, 'obtinut=' + TRANSFORM(lnTopInitial) *=== T2: MoveSplitterToPosition(Top+100) -> muta panoul, pastreaza marginea de jos a grilei de linii === LOCAL lnShapeTop0, lnPartTop0, lnDetTop0, lnDetBottom0 lnShapeTop0 = loForm._shape3.Top lnPartTop0 = loForm.txtPartener.Top lnDetTop0 = loForm.grdDetaliiFacturi.Top lnDetBottom0 = lnDetTop0 + loForm.grdDetaliiFacturi.Height loForm.Sfsplitterv1.MoveSplitterToPosition(lnTopInitial + 100) DO PrTest WITH 'T2 grdFacturi.Height +100', loForm.grdFacturi.Height = 392, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height) DO PrTest WITH 'T2 _shape3.Top +100', loForm._shape3.Top = lnShapeTop0 + 100, 'obtinut=' + TRANSFORM(loForm._shape3.Top) DO PrTest WITH 'T2 txtPartener.Top +100', loForm.txtPartener.Top = lnPartTop0 + 100, 'obtinut=' + TRANSFORM(loForm.txtPartener.Top) DO PrTest WITH 'T2 grdDetaliiFacturi.Top +100', loForm.grdDetaliiFacturi.Top = lnDetTop0 + 100, 'obtinut=' + TRANSFORM(loForm.grdDetaliiFacturi.Top) DO PrTest WITH 'T2 marginea de jos a grdDetaliiFacturi neschimbata', loForm.grdDetaliiFacturi.Top + loForm.grdDetaliiFacturi.Height = lnDetBottom0, 'obtinut=' + TRANSFORM(loForm.grdDetaliiFacturi.Top + loForm.grdDetaliiFacturi.Height) *=== T7: tragere simulata cu MouseMove (coordonate relative la forma, ca in VFP), fara sa atinga Anchor === LOCAL lnAnchorSpl, lnTopSpl lnAnchorSpl = loForm.Sfsplitterv1.Anchor lnTopSpl = loForm.Sfsplitterv1.Top loForm.Sfsplitterv1.MouseMove(1, 0, 50, m.lnTopSpl - 30) DO PrTest WITH 'T7 MouseMove sus 30: splitter.Top -30', loForm.Sfsplitterv1.Top = m.lnTopSpl - 30, 'obtinut=' + TRANSFORM(loForm.Sfsplitterv1.Top) DO PrTest WITH 'T7 grdFacturi.Height -30', loForm.grdFacturi.Height = 362, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height) loForm.Sfsplitterv1.MouseMove(1, 0, 50, m.lnTopSpl) DO PrTest WITH 'T7 MouseMove jos 30: revine', loForm.Sfsplitterv1.Top = m.lnTopSpl, 'obtinut=' + TRANSFORM(loForm.Sfsplitterv1.Top) DO PrTest WITH 'T7 Anchor splitter neschimbat', loForm.Sfsplitterv1.Anchor = m.lnAnchorSpl DO PrTest WITH 'T7 subclasa sfsplitterv_panou, nu override pe forma', LOWER(loForm.Sfsplitterv1.Class) == 'sfsplitterv_panou' AND !PEMSTATUS(loForm, 'lSplitterRestaurat', 5) *=== T3: clamp la limite === loForm.Sfsplitterv1.MoveSplitterToPosition(9999) DO PrTest WITH 'T3 clamp sus: grdDetaliiFacturi.Height = 60', loForm.grdDetaliiFacturi.Height = 60, 'obtinut=' + TRANSFORM(loForm.grdDetaliiFacturi.Height) loForm.Sfsplitterv1.MoveSplitterToPosition(0) DO PrTest WITH 'T3 clamp jos: grdFacturi.Height = 100', loForm.grdFacturi.Height = 100, 'obtinut=' + TRANSFORM(loForm.grdFacturi.Height) *=== T5: pozitioneazalistasubimport() dupa mutare -> grdFacturi.Height revine la valoarea mutata === LOCAL lnHeightMutat lnHeightMutat = loForm.grdFacturi.Height loForm.pozitioneazalistasubimport() DO PrTest WITH 'T5 grdFacturi.Height revine la valoarea mutata', loForm.grdFacturi.Height = lnHeightMutat, 'asteptat=' + TRANSFORM(lnHeightMutat) + ' obtinut=' + TRANSFORM(loForm.grdFacturi.Height) *=== T4: persistenta === lnTopMutat = loForm.Sfsplitterv1.Top loForm.Release() DO PrTest WITH 'T4 fisierul ini a fost creat la Release (pozitie schimbata)', FILE(gcTempIni) LOCAL lnCitit lnCitit = VAL(NVL(getini(m.gcTempIni, 'efactura', 'import_splitter_top'), '')) DO PrTest WITH 'T4 cheia import_splitter_top scrisa cu pozitia mutata', m.lnCitit = m.lnTopMutat, 'asteptat=' + TRANSFORM(lnTopMutat) + ' citit=' + TRANSFORM(lnCitit) SELECT crsFacturi GO TOP LOCAL loForm2 loForm2 = CREATEOBJECT('frm_import_efactura', .T.) loForm2.WindowType = 0 loForm2.Show() DO PrTest WITH 'T4 forma noua reia pozitia salvata', loForm2.Sfsplitterv1.Top = m.lnTopMutat, 'asteptat=' + TRANSFORM(lnTopMutat) + ' obtinut=' + TRANSFORM(loForm2.Sfsplitterv1.Top) LOCAL lcIniDupaRestaurare lcIniDupaRestaurare = FILETOSTR(m.gcTempIni) loForm2.Release() DO PrTest WITH 'T4 forma deschisa/inchisa fara mutare nu rescrie ini-ul', FILETOSTR(m.gcTempIni) == m.lcIniDupaRestaurare *=== T6: calea reala (CREATEOBJECT + Show(1) modal) - pica pe codul vechi (clamp calculat pe inaltimea dinainte de maximizare) === LOCAL lnPozT6 lnPozT6 = 480 =setini(m.gcTempIni, "efactura", "import_splitter_top", TRANSFORM(m.lnPozT6)) PUBLIC goFormT6, gnPozCapturataT6 gnPozCapturataT6 = -1 SELECT crsFacturi GO TOP goFormT6 = CREATEOBJECT('frm_import_efactura', .T.) LOCAL loTmrT6 loTmrT6 = CREATEOBJECT('tmrCaptureazaT6') loTmrT6.Enabled = .T. goFormT6.Show(1) DO PrTest WITH 'T6 calea reala: Sfsplitterv1.Top restaurat dupa Show(1) modal', gnPozCapturataT6 = m.lnPozT6, 'asteptat=' + TRANSFORM(lnPozT6) + ' obtinut=' + TRANSFORM(gnPozCapturataT6) RELEASE goFormT6, gnPozCapturataT6 *=== T8: dupa deschiderea maximizata cu pozitie salvata, grila de sus ajunge exact la splitter; mutare in sus pana aproape de minim nu da eroare === =setini(m.gcTempIni, "efactura", "import_splitter_top", "670") PUBLIC goFormT8, gcRezT8 gcRezT8 = "" SELECT crsFacturi GO TOP goFormT8 = CREATEOBJECT("frm_import_efactura", .T.) LOCAL loTmrT8 loTmrT8 = CREATEOBJECT("tmrCaptureazaT8") loTmrT8.Enabled = .T. goFormT8.Show(1) DO PrLogLocal WITH " T8 geometrie: " + gcRezT8 DO PrTest WITH "T8 grdFacturi.Top+Height = Sfsplitterv1.Top", LEFT(gcRezT8, 6) == "GAP=0 ", gcRezT8 DO PrTest WITH "T8 mutare in sus pana aproape de minim fara eroare", "ERR=0" $ gcRezT8, gcRezT8 RELEASE goFormT8, gcRezT8 IF USED('crsFacturi') USE IN crsFacturi ENDIF IF USED('crsDetaliiFacturi') USE IN crsDetaliiFacturi ENDIF IF FILE(gcTempIni) DELETE FILE (gcTempIni) ENDIF DO PrTest WITH 'cleanup: crsFacturi/crsDetaliiFacturi inchise, ini temporar sters', !USED('crsFacturi') AND !USED('crsDetaliiFacturi') AND !FILE(gcTempIni) LOCAL loFH, lnCol0, lnSty0 loFH = CREATEOBJECT('Form') loFH.NewObject('splH', 'sfsplitterv_panou', 'D:\ROA\ROACONT\COMUN\clase\sfsplitter.vcx') lnCol0 = loFH.splH.BackColor lnSty0 = loFH.splH.BackStyle DO PrTest WITH 'T9 stare initiala 200,215,230 si BackStyle 1', lnCol0 = RGB(200,215,230) AND lnSty0 = 1 loFH.splH.MouseEnter() DO PrTest WITH 'T9 MouseEnter: BackColor albastru, BackStyle 1', loFH.splH.BackColor = RGB(0,120,215) AND loFH.splH.BackStyle = 1 loFH.splH.MouseLeave() DO PrTest WITH 'T9 MouseLeave: valorile initiale', loFH.splH.BackColor = lnCol0 AND loFH.splH.BackStyle = lnSty0 loFH.Release() DO PrLogLocal WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail) DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie' CATCH TO loEx DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure TRY IF USED('crsFacturi') USE IN crsFacturi ENDIF IF USED('crsDetaliiFacturi') USE IN crsDetaliiFacturi ENDIF IF FILE(gcTempIni) DELETE FILE (gcTempIni) ENDIF CATCH ENDTRY ENDTRY QUIT ********************************************************** PROCEDURE PrTest LPARAMETERS tcEticheta, tlOk, tcDetalii IF tlOk gnPass = gnPass + 1 ELSE gnFail = gnFail + 1 ENDIF DO PrLogLocal WITH ' ' + tcEticheta + ': ' + IIF(tlOk, 'OK', 'FAIL') + IIF(EMPTY(NVL(m.tcDetalii,'')), '', ' (' + m.tcDetalii + ')') ENDPROC ********************************************************** PROCEDURE PrLogLocal LPARAMETERS tcMsg LOCAL lcL SET SAFETY OFF lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '') STRTOFILE(lcL + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog) ENDPROC ********************************************************** * mock_amessagebox.prg cere HarnessLog (definit normal in ui_harness.prg, neincarcat aici) PROCEDURE HarnessLog LPARAMETERS tcMsg DO PrLogLocal WITH tcMsg ENDPROC ********************************************************** PROCEDURE PrErrLocal LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo) ENDPROC ********************************************************** * T6: goFormT6.Show(1) e modal (blocheaza pana la Release) - captureaza Sfsplitterv1.Top dupa * ce maximizarea reala s-a aplicat, apoi inchide forma ca testul sa poata continua. DEFINE CLASS tmrCaptureazaT6 AS Timer Interval = 300 Enabled = .F. PROCEDURE Timer This.Enabled = .F. IF TYPE('goFormT6') = 'O' gnPozCapturataT6 = goFormT6.Sfsplitterv1.Top goFormT6.Release() ENDIF ENDPROC ENDDEFINE ********************************************************** * T8: captureaza geometria dupa maximizare si incearca o mutare in sus (MouseMove) pana aproape de minim DEFINE CLASS tmrCaptureazaT8 AS Timer Interval = 300 Enabled = .F. PROCEDURE Timer This.Enabled = .F. LOCAL lnErr, lnGap, lnTop IF TYPE('goFormT8') = 'O' WITH goFormT8 lnGap = .Sfsplitterv1.Top - (.grdFacturi.Top + .grdFacturi.Height) gcRezT8 = "GAP=" + TRANSFORM(lnGap) + " grdF.Top=" + TRANSFORM(.grdFacturi.Top) + " grdF.H=" + TRANSFORM(.grdFacturi.Height) + ; " spl.Top=" + TRANSFORM(.Sfsplitterv1.Top) + " det.Top=" + TRANSFORM(.grdDetaliiFacturi.Top) + " det.H=" + TRANSFORM(.grdDetaliiFacturi.Height) + " " lnErr = 0 TRY lnTop = .grdFacturi.Top + 100 + 5 .Sfsplitterv1.MouseMove(1, 0, 50, lnTop) CATCH lnErr = 1 ENDTRY gcRezT8 = gcRezT8 + "ERR=" + TRANSFORM(lnErr) + " spl.Top dupa=" + TRANSFORM(.Sfsplitterv1.Top) + " grdF.H dupa=" + TRANSFORM(.grdFacturi.Height) .Release() ENDWITH ENDIF ENDPROC ENDDEFINE