* test_s3_controale.prg * Headless: controalele de antet adaugate pe frm_facturare_articole2 exista dupa Createobject, * iar frm_date_factura (calea veche, neatinsa) le are in continuare. * * Rezultat asteptat (declarat inainte de rulare), pe poDate tip 1, gnScadereStoc = 0 (fara gestiune * sursa: Init-ul de antet elimina Ct_clb_gestiune_init pe tip 1, deci dupa pasul 1 acesta e ABSENT): * frm_facturare_articole2: Clb_dataireg, Ct_clb_politici_preturi(*), txtCodFiscal, lblCodFiscal, * txtSoldLei, lblSoldLei, But_verifica1 -> PEMSTATUS(...,5) = .T. * Ct_clb_gestiune_init -> prezent DOAR daca Init-ul de antet (pasul 1) nu e inca portat; dupa * pasul 1 e eliminat pe tip 1 (ca pe frm_date_factura). Se logheaza, nu se asserteaza. * (*) dupa pasul 1, pe factura Ct_clb_politici_preturi e eliminat (control doar de aviz). * Clb_dataireg.Text_simplu1.ControlSource = 'poDate.dataireg' * Prezenta = apartenenta la colectia Objects (PEMSTATUS/TYPE raman .T. dupa RemoveObject). * frm_date_factura (acelasi poDate): Clb_dataireg, txtCodFiscal, lblCodFiscal, txtSoldLei, * lblSoldLei, But_verifica1 -> .T.; Ct_clb_gestiune_init -> .F. (eliminat de Init pe tip 1). * * Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\test_s3_controale.prg" * Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s3_controale.log SET SAFETY OFF SET TALK OFF SET NOTIFY OFF PUBLIC gcLog, gnFail, gnPass gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\test_s3_controale.log" IF !DIRECTORY("D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out") MD "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out" ENDIF STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog) gnFail = 0 gnPass = 0 ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() DO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT' IF TYPE('gnHandle') <> 'N' OR gnHandle <= 0 DO AfLog WITH "FAIL: conexiune Oracle esuata" DO Final ENDIF SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE PUBLIC gcMockUltimMesaj, gnMockUltimTip gcMockUltimMesaj = "" gnMockUltimTip = 0 DO AfLog WITH "ENV OK, gnAn=" + TRANSFORM(gnAn) + " gnLuna=" + TRANSFORM(gnLuna) IF !actualizeaza_optiuni_program() DO AfLog WITH "FAIL: actualizeaza_optiuni_program()" DO Final ENDIF gnScadereStoc = 0 * seriile de facturi (tipdoc 5) sunt pe utilizator in MARIUSM_AUTO: utilizatorul 8 are plaja activa 2010-2099 gnIdUtil = 8 goExecutor.oExecuta([begin pack_sesiune.set_Id_Util(?gnIdUtil); end;]) DO AfLog WITH "gnScadereStoc=" + TRANSFORM(gnScadereStoc) + " gnScadentaAutomata=" + TRANSFORM(gnScadentaAutomata) PRIVATE poDate, poGeneratorNumere, plVizibil plVizibil = .F. DO AfLog WITH "creez poDate" poDate = CREATEOBJECT("oDateFactura", 25000, 1) DO AfLog WITH "poDate creat" poDate.nIdTipDoc = 5 poGeneratorNumere = CREATEOBJECT("oGeneratorNumere") poGeneratorNumere.ResetNumere() DO AfLog WITH "generator creat" DO ProbaSerii WITH poDate.nIdTipDoc poDate.rezultat_serii = poGeneratorNumere.creeaza_cursor_serii(poDate.nIdTipDoc) DO AfLog WITH "poDate tip=1 rezultat_serii=" + TRANSFORM(poDate.rezultat_serii) + " ultim amessagebox=[" + gcMockUltimMesaj + "]" IF USED('crscursuri') USE IN crscursuri ENDIF CREATE CURSOR crscursuri (curs N(12,4), nume_val C(10), multiplicator N(6)) DO creeaza_facturacrs WITH 'crsfactura' * grd_factura.cGestiune e legat la crsFactura.gestiune, camp inexistent in creeaza_facturacrs (nume_gestiune) SELECT *, CAST(NULL AS C(100)) AS gestiune FROM crsfactura INTO CURSOR crsfact_tmp READWRITE USE IN crsfactura SELECT * FROM crsfact_tmp INTO CURSOR crsfactura READWRITE USE IN crsfact_tmp * gridextras.vcx e referit din ofacturare.vcx cu cale relativa (..\utile\gridextras), rezolvabila doar din exe/IDE SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras\gridextras.vcx" ADDITIVE SET PATH TO "D:\ROA\ROAFACTURARE\COMUN\utile\gridextras" ADDITIVE * grd_factura.cCodMat.cboCodmat e declarat AS combosql OF cautare.vcx, dar clasa e definita in _cb_base.vcx SET CLASSLIB TO "D:\ROA\ROAFACTURARE\COMUN\clase\_cb_base.vcx" ADDITIVE LOCAL loNou, loVechi, lcC DO AfLog WITH "creez frm_facturare_articole2" * clasa REALA (nu subclasa: pe o subclasa RemoveObject nu scoate membrii definiti in parinte). * Atentie: metoda Error a prototipului face SET STEP ON - orice eroare in Init deschide debugger-ul * si blocheaza rularea headless; diagnosticul se face atunci cu o subclasa cu Error care logheaza. loNou = CREATEOBJECT('frm_facturare_articole2') DO Assert WITH VARTYPE(loNou) = 'O', "Createobject frm_facturare_articole2" IF VARTYPE(loNou) = 'O' LOCAL laC[6], i laC[1] = "Clb_dataireg" laC[2] = "txtCodFiscal" laC[3] = "lblCodFiscal" laC[4] = "txtSoldLei" laC[5] = "lblSoldLei" laC[6] = "But_verifica1" FOR i = 1 TO 6 DO Assert WITH ObjExists(loNou, laC[i]), "nou: " + laC[i] + " prezent" ENDFOR DO AfLog WITH "nou: Ct_clb_gestiune_init prezent=" + TRANSFORM(ObjExists(loNou, 'Ct_clb_gestiune_init')) + ; " Ct_clb_politici_preturi prezent=" + TRANSFORM(ObjExists(loNou, 'Ct_clb_politici_preturi')) DO Assert WITH loNou.Clb_dataireg.Text_simplu1.ControlSource == 'poDate.dataireg', "nou: Clb_dataireg.ControlSource" DO Assert WITH loNou.Clb_dataireg.Top >= 30, "nou: Clb_dataireg sub bara de titlu (Top=" + TRANSFORM(loNou.Clb_dataireg.Top) + ")" DO Assert WITH PEMSTATUS(loNou, 'cgestiune_init', 5) AND PEMSTATUS(loNou, 'lcopiere', 5) AND PEMSTATUS(loNou, 'nid_tip', 5) ; AND PEMSTATUS(loNou, 'nsoldlei', 5) AND PEMSTATUS(loNou, 'nsoldvaluta', 5) AND PEMSTATUS(loNou, 'ntip', 5), "nou: proprietati *p: materializate" * C6: Error nu mai face SET STEP ON - o eroare provocata nu blocheaza rularea LOCAL llErr llErr = .F. TRY loNou.metoda_inexistenta_s3() CATCH llErr = .T. ENDTRY DO Assert WITH llErr, "C6: eroarea provocata (metoda inexistenta) a fost prinsa, fara blocaj" loNou.Error(1, 'test', 1) DO Assert WITH .T., "C6: apel direct o.Error(1,'test',1) a revenit" loNou.Release() RELEASE loNou ENDIF loVechi = CREATEOBJECT('frm_date_factura') DO Assert WITH VARTYPE(loVechi) = 'O', "Createobject frm_date_factura" IF VARTYPE(loVechi) = 'O' FOR i = 1 TO 6 DO Assert WITH ObjExists(loVechi, laC[i]), "vechi: " + laC[i] + " prezent" ENDFOR DO Assert WITH !ObjExists(loVechi, 'Ct_clb_gestiune_init'), "vechi: Ct_clb_gestiune_init eliminat pe tip 1" loVechi.Release() RELEASE loVechi ENDIF DO Final PROCEDURE ProbaSerii * apel direct al procedurii Oracle din creeaza_cursor_serii: logheaza eroarea reala (goExecutor * ar deschide amessagebox modal, care agata rularea headless) si incalzeste starea pachetului LPARAMETERS tnIdTipDoc LOCAL lnOk, laErr[1], i, lcSql PRIVATE pnIdTipDoc, pnRezultat pnIdTipDoc = tnIdTipDoc pnRezultat = 0 lcSql = "{call " + gcS + ".pack_serii_numere.verifica_cursor_serii(?pnIdTipDoc,?gnIdUtil,?gnIdSucursala,?@pnRezultat)}" FOR i = 1 TO 3 lnOk = SQLEXEC(gnHandle, lcSql, "crsprobaserii") IF lnOk > 0 DO AfLog WITH "proba serii OK la incercarea " + TRANSFORM(i) + ", pnRezultat=" + TRANSFORM(pnRezultat) + " randuri=" + TRANSFORM(RECCOUNT("crsprobaserii")) USE IN (SELECT("crsprobaserii")) EXIT ELSE AERROR(laErr) DO AfLog WITH "proba serii ESEC la incercarea " + TRANSFORM(i) + ": " + TRANSFORM(laErr[1]) + " / " + TRANSFORM(laErr[2]) + " / " + TRANSFORM(laErr[5]) ENDIF ENDFOR ENDPROC FUNCTION ObjExists * prezenta reala in colectia Objects, cautare recursiva - controalele pot fi in containere LPARAMETERS toContainer, tcName LOCAL i, loO FOR i = 1 TO toContainer.Objects.Count loO = toContainer.Objects(i) IF UPPER(loO.Name) == UPPER(tcName) RETURN .T. ENDIF IF TYPE('loO.Objects.Count') = 'N' IF ObjExists(loO, tcName) RETURN .T. ENDIF ENDIF ENDFOR RETURN .F. ENDFUNC PROCEDURE Assert LPARAMETERS tlCond, tcMsg IF tlCond gnPass = gnPass + 1 DO AfLog WITH "PASS: " + tcMsg ELSE gnFail = gnFail + 1 DO AfLog WITH "FAIL: " + tcMsg ENDIF ENDPROC PROCEDURE AfLog LPARAMETERS tcMsg STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1) ENDPROC PROCEDURE AfErr LPARAMETERS tnErr, tcMsg, tcProg, tnLine gnFail = gnFail + 1 DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg ENDPROC PROCEDURE Final DO AfLog WITH "TOTAL pass=" + TRANSFORM(gnPass) + " fail=" + TRANSFORM(gnFail) DO AfLog WITH "END " + TTOC(DATETIME()) QUIT ENDPROC