* test_s8c_buton_antet.prg * Proba S8c (docs\propunere_s8c_antet.md sectiunea 6): butonul comutator de antet, pe traseul REAL * Newobject('frm_facturi') + .do_editare_unificata() + Thisform.do_comuta_antet() (nu apel direct pe * ScrieAntetEditare - proba doar codul, nu traseul, cf. lectia platita de S8b). * * Documente reale, deja folosite si validate de test_s8b_rutare_scriere.prg pe MARIUSM_AUTO: * 1055 - sursa CONTRACT, cu delegat - caz 1 (corectare delegat prin buton) + caz 4 (Termina dupa * salvare, fara alta modificare, trebuie ruta 0) * 1048 - factura SIMPLA - caz 2 (corectare data scadentei prin buton) * 1130 - VALUTA - caz 3 (deschis si inchis fara a apasa butonul, zero scriere) * * Masurare pe Oracle (nu pe UI - coloanele/proprietatile de grid nu se materializeaza headless): * dataoras + numarul de randuri din VANZARI_DETALII, si sumele SUM(valoare)/SUM(valoarev) din * vact_tot/vrul_tot (acelasi filtru sters=0/an/luna/cod ca StergeDocumentFacturare), neschimbate. SET SAFETY OFF SET TALK OFF PUBLIC gcErrLog gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s8c_buton_antet_log.txt' STRTOFILE('start ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog) ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT' IF gnHandle <= 0 STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1) QUIT ENDIF gnIdUtil = 8 PUBLIC gnScadereStoc gnScadereStoc = 0 SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE *!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul - *!* mock-ul se pune in fata listei existente, altfel amessagebox() real blocheaza headless LOCAL lcProcExistent lcProcExistent = SET("PROCEDURE") SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent PUBLIC gnPass, gnFail, gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns, gnContorExecutiiS8c gcMockUltimMesaj = '' gnMockUltimTip = 0 gnMockRaspuns = 6 gnPass = 0 gnFail = 0 gnContorExecutiiS8c = 0 *!* --- driver: gaseste fereastra modala frm_facturare_articole2 si conduce cazul (acelasi tipar *!* validat de test_s8b_rutare_scriere.prg - Timer legat de _SCREEN, viu in interiorul Show()-ului *!* modal, care citeste formularul din colectia Forms) --- PUBLIC goDriverS8c goDriverS8c = Createobject('driverS8cAntet') _SCREEN.AddObject('tmrS8cAntet', 'Timer') _SCREEN.tmrS8cAntet.Interval = 150 BINDEVENT(_SCREEN.tmrS8cAntet, 'Timer', goDriverS8c, 'Executa') _SCREEN.tmrS8cAntet.Enabled = .T. *!* --- crsfacturi, exact ca in test_s8b_rutare_scriere.prg (schema/select deja validate) --- Private poFacturi poFacturi = Null IF Used('crsfacturi') Use In crsfacturi ENDIF LOCAL lcSchema, lcSelect, lcOrder, lcFiltru lcSchema = ['ales n(1),id_vanzare n(20),id_comanda n(20),dataora t,dataora_exp t,data_act d,data_scad d,sters n(1),dataoras t,numar_act n(14),serie_act c(10),'+] + ; ['tip n(5),id_part n(10),discount n(17,4),disc_fara_tva n(17,4),discount_evidentiat n(1),text_aditional M,facturat n(1),data_facturat t,'+] + ; ['explicatie c(240),altele c(200),client c(100),cod n(20),id_util I,utilizator c(30),utils c(30),utilfact c(30),delegat c(70),'+] + ; ['bidelegat c(30),cnpdelegat c(15),nume_agent c(70),nrinmat c(10),total_fara_tva n(20,4),total_tva n(20,4),total_cu_tva n(20,4),id_gestiune n(10),'+] + ; ['serie_chit c(20),nr_incasare n(10),incasat n(17,4),in_valuta n(1),sucursala c(100),id_ruta n(10),ruta c(100),curs n(20,4),multiplicator n(10),nume_val c(50),'+] + ; ['valuta c(50), id_valuta n(5), valval n(20,4), tvaval n(20,4), totval n(20,4),'+] + ; ['id_delegat n(10),id_agent n(10),id_masina n(10),valoarea N(20,4),nume_gestiune C(50),id_sectie n(5),sectie c(50),id_lucrare n(20), lucrare c(200),'+] + ; ['tip_incasare n(10),afisare_scadenta n(1),id_ordl n(10),tva_incasare n(1),listare_detaliata n(1),'+] + ; ['id_facturare n(10),adresa_facturare c(250),email_facturare c(100),adresa_client c(250),email_client c(100),adresa_beneficiar c(250),email_beneficiar c(100),'+] + ; ['id_beneficiar n(20),beneficiar C(100),tip_factura N(5),ctip_factura C(100), id_ctr N(10), contract C(100),eproforma N(1),tip_saft N(3) null,tip_saftname V(250) null,'+]+; ['id_livrare N(10),adresa_livrare V(250), denumire_adresa_livrare V(100), email_livrare V(100),institutie_publica N(1) null,efactura N(1) null,cod_fiscal C(20),id_fact N(20)'] lcSelect = ['select 0 as ales,id_vanzare,id_comanda,dataora,dataora_exp,data_act,data_scad,sters,dataoras,numar_act,serie_act,'+] + ; ['tip,id_part,discount,disc_fara_tva,discount_evidentiat,text_aditional,facturat,data_facturat,'+] + ; ['explicatie,altele,client,cod,id_util,utilizator,utils,utilfact,delegat,bidelegat,cnpdelegat,'+] + ; ['nume_agent,nrinmat,total_fara_tva,total_tva,total_cu_tva,id_gestiune,serie_chit,nr_incasare,incasat,'+] + ; ['in_valuta,sucursala,id_ruta,ruta,curs,multiplicator,nume_val,'+] + ; ['valuta,id_valuta,valval,tvaval,totval,'+] + ; ['id_delegat,id_agent,id_masina,valoarea,'+] + ; ['nume_gestiune,id_sectie,sectie,id_lucrare,lucrare,tip_incasare,afisare_scadenta,id_ordl,tva_incasare,listare_detaliata,'+] + ; ['id_facturare,adresa_facturare,email_facturare,adresa_client,email_client,adresa_beneficiar,email_beneficiar,'+] + ; ['id_beneficiar, beneficiar, tip_factura, ctip_factura, id_ctr, contract, eproforma,tip_saft,tip_saftname, '+]+; ['id_livrare,adresa_livrare,denumire_adresa_livrare,email_livrare,institutie_publica,efactura,cod_fiscal,id_fact from fact_vfacturi where '] lcOrder = [data_act,numar_act] lcFiltru = [id_vanzare in (1055, 1048, 1130)] gencursor('poFacturi', 'crsfacturi', lcSelect, lcFiltru, lcSchema, lcOrder, .F., [], .F., []) poFacturi.ca_baza1.afisare() DO asserteaza WITH 'crsfacturi incarcat cu cele 3 documente reale (rownum=3)', Used('crsfacturi') AND Reccount('crsfacturi') = 3, IIF(Used('crsfacturi'), TRANSFORM(Reccount('crsfacturi')), 'crsfacturi lipsa') *!* --- alternativa valida de delegat pentru cazul 1: orice id_delegat real, diferit de cel curent *!* de pe 1055 - FK valid (interogare directa pe VANZARI, nu un id inventat); testul scrie in *!* Oracle real, deci rularile repetate pot lasa 1055 deja pe valoarea scrisa de o rulare anterioara - *!* interogarea ia direct din baza un delegat diferit, nu unul fix dintr-un document martor --- LOCAL lnDelegatAlt, lcDelegatAlt, lnDelegatOriginal1055 lnDelegatAlt = 0 lcDelegatAlt = '' IF USED('crsfacturi') SELECT crsfacturi LOCATE FOR id_vanzare = 1055 lnDelegatOriginal1055 = IIF(FOUND(), NVL(id_delegat, 0), 0) ENDIF IF USED('v_s8c_delegat_alt') USE IN v_s8c_delegat_alt ENDIF *!* doar id_delegat - "delegat" (numele) nu e coloana pe VANZARI (doar pe view-uri cu JOIN), si oricum *!* nu e scris de modifica_date_factura/ScrieAntetEditare, deci nu e nevoie de un nume real aici IF goExecutor.oExecute([select id_delegat from ] + gcs + [.vanzari where id_delegat is not null and id_delegat <> ] + TRANSFORM(NVL(lnDelegatOriginal1055,0)) + [ and rownum <= 1], 'v_s8c_delegat_alt') >= 0 IF USED('v_s8c_delegat_alt') AND RECCOUNT('v_s8c_delegat_alt') = 1 lnDelegatAlt = v_s8c_delegat_alt.id_delegat lcDelegatAlt = 'S8C TEST DELEGAT' ENDIF ENDIF goExecutor.oReset() IF USED('v_s8c_delegat_alt') USE IN v_s8c_delegat_alt ENDIF DO asserteaza WITH 'alternativa de delegat gasita in Oracle, diferita de cea curenta de pe 1055', lnDelegatAlt > 0 AND lnDelegatAlt <> lnDelegatOriginal1055, TRANSFORM(lnDelegatAlt) *!* ===================================================================================== *!* cele 3 cazuri ale criteriului "Gata cand", plus caz 4 (ruta 0 dupa salvare) legat de cazul 1 *!* ===================================================================================== DO VerificaButonAntetDelegat WITH 1055, lnDelegatAlt, lcDelegatAlt, 'caz 1+4: corectare delegat prin buton, apoi Termina fara alta modificare' DO VerificaButonAntetDataScad WITH 1048, 'caz 2: corectare data scadentei prin buton' DO VerificaFaraButon WITH 1130, 'caz 3: deschis si inchis fara a apasa butonul - zero scriere' _SCREEN.tmrS8cAntet.Enabled = .F. Try _SCREEN.RemoveObject('tmrS8cAntet') Catch Endtry STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1) STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1) QUIT *!* ===================================================================================== *!* martor Oracle comun celor 3 cazuri: dataoras antet, numarul si dataoras liniilor, sumele *!* ACT/RUL ale documentului (acelasi filtru ca StergeDocumentFacturare) *!* ===================================================================================== PROCEDURE CapturaMartor LPARAMETERS tnIdVanzare, tnAn, tnLuna, tnCod, tcAlias LOCAL loMartor, lnSucces loMartor = Createobject('Empty') IF USED(m.tcAlias) USE IN (m.tcAlias) ENDIF lnSucces = goExecutor.oExecute([select dataoras, id_delegat, data_scad from vanzari where id_vanzare = ] + TRANSFORM(m.tnIdVanzare), m.tcAlias) goExecutor.oReset() IF m.lnSucces >= 0 AND USED(m.tcAlias) AND RECCOUNT(m.tcAlias) = 1 =AddProperty(loMartor, 'dataoras_antet', NVL(&tcAlias..dataoras, {})) =AddProperty(loMartor, 'id_delegat', NVL(&tcAlias..id_delegat, 0)) =AddProperty(loMartor, 'data_scad', NVL(&tcAlias..data_scad, {})) ELSE =AddProperty(loMartor, 'dataoras_antet', {}) =AddProperty(loMartor, 'id_delegat', -1) =AddProperty(loMartor, 'data_scad', {}) ENDIF USE IN (m.tcAlias) IF USED(m.tcAlias + '_det') USE IN (m.tcAlias + '_det') ENDIF lnSucces = goExecutor.oExecute([select count(*) as nr, max(dataoras) as mx from vanzari_detalii where id_vanzare = ] + TRANSFORM(m.tnIdVanzare) + [ and sters = 0], m.tcAlias + '_det') goExecutor.oReset() =AddProperty(loMartor, 'linii_nr', NVL(Evaluate(m.tcAlias + '_det.nr'), -1)) =AddProperty(loMartor, 'linii_mx', NVL(Evaluate(m.tcAlias + '_det.mx'), {})) USE IN (m.tcAlias + '_det') IF USED(m.tcAlias + '_act') USE IN (m.tcAlias + '_act') ENDIF *!* vact_tot: coloanele de suma sunt SUMA (lei) / SUMA_VAL (valuta), nu VALOARE/VALOAREV (acelea *!* sunt specifice vrul_tot) - verificat live (probe_s8c_vact_cols.prg) lnSucces = goExecutor.oExecute([select nvl(sum(suma),0) as lei, nvl(sum(suma_val),0) as val from ] + gcs + [.vact_tot where sters = 0 and an = ] + TRANSFORM(m.tnAn) + [ and luna = ] + TRANSFORM(m.tnLuna) + [ and cod = ] + TRANSFORM(m.tnCod), m.tcAlias + '_act') goExecutor.oReset() =AddProperty(loMartor, 'act_lei', NVL(Evaluate(m.tcAlias + '_act.lei'), -1)) =AddProperty(loMartor, 'act_val', NVL(Evaluate(m.tcAlias + '_act.val'), -1)) USE IN (m.tcAlias + '_act') IF USED(m.tcAlias + '_rul') USE IN (m.tcAlias + '_rul') ENDIF lnSucces = goExecutor.oExecute([select nvl(sum(valoare),0) as lei, nvl(sum(valoarev),0) as val from ] + gcs + [.vrul_tot where sters = 0 and an = ] + TRANSFORM(m.tnAn) + [ and luna = ] + TRANSFORM(m.tnLuna) + [ and cod = ] + TRANSFORM(m.tnCod), m.tcAlias + '_rul') goExecutor.oReset() =AddProperty(loMartor, 'rul_lei', NVL(Evaluate(m.tcAlias + '_rul.lei'), -1)) =AddProperty(loMartor, 'rul_val', NVL(Evaluate(m.tcAlias + '_rul.val'), -1)) USE IN (m.tcAlias + '_rul') RETURN m.loMartor ENDPROC *!* ===================================================================================== PROCEDURE VerificaButonAntetDelegat LPARAMETERS tnIdVanzare, tnDelegatAlt, tcDelegatAlt, tcEticheta LOCAL lcPrefix, loFrm, loMartorA, loMartorB, lnAn, lnLuna, lnCod lcPrefix = TRANSFORM(m.tnIdVanzare) + ' [' + m.tcEticheta + ']' gcMockUltimMesaj = '' DO CurataAliasuriReziduale IF m.tnDelegatAlt <= 0 STRTOFILE(lcPrefix + ': SARIT - nicio alternativa valida de delegat gasita' + CHR(13) + CHR(10), gcErrLog, 1) RETURN ENDIF SELECT crsfacturi LOCATE FOR id_vanzare = m.tnIdVanzare DO asserteaza WITH lcPrefix + ': documentul e in crsfacturi', FOUND(), TRANSFORM(FOUND()) IF !FOUND() RETURN ENDIF lnAn = YEAR(data_act) lnLuna = MONTH(data_act) lnCod = cod loMartorA = CapturaMartor(m.tnIdVanzare, m.lnAn, m.lnLuna, m.lnCod, 'v_s8c_a') Select crsfacturi loFrm = Newobject('frm_facturi', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx') DO asserteaza WITH lcPrefix + ': Newobject(frm_facturi) reuseste', VARTYPE(m.loFrm) == 'O', VARTYPE(m.loFrm) IF VARTYPE(m.loFrm) <> 'O' RETURN ENDIF SELECT crsfacturi LOCATE FOR id_vanzare = m.tnIdVanzare goDriverS8c.Reseteaza() goDriverS8c.nCaz = 1 goDriverS8c.nDelegatAlt = m.tnDelegatAlt goDriverS8c.cDelegatAlt = m.tcDelegatAlt loFrm.do_editare_unificata() DO asserteaza WITH lcPrefix + ': formularul s-a deschis', goDriverS8c.lGasit, TRANSFORM(goDriverS8c.lGasit) IF !goDriverS8c.lGasit STRTOFILE(lcPrefix + ' diagnostic iesire: mesaj=[' + gcMockUltimMesaj + ']' + CHR(13) + CHR(10), gcErrLog, 1) Try loFrm.Release() Catch Endtry DO CurataAliasuriReziduale RETURN ENDIF DO asserteaza WITH lcPrefix + ': fara eroare in driver - ' + goDriverS8c.cEroare, EMPTY(goDriverS8c.cEroare), goDriverS8c.cEroare DO asserteaza WITH lcPrefix + ': click 1 a deblocat antetul (lantet_deblocat=.T. dupa click 1)', goDriverS8c.lDeblocatDupaClick1, TRANSFORM(goDriverS8c.lDeblocatDupaClick1) DO asserteaza WITH lcPrefix + ': click 2 (salvare) - cel putin un apel catre goExecutor', goDriverS8c.nContorClick2 >= 1, TRANSFORM(goDriverS8c.nContorClick2) DO asserteaza WITH lcPrefix + ': dupa click 2, antetul s-a reblocat (lantet_deblocat=.F.)', goDriverS8c.lReblocatDupaClick2, TRANSFORM(goDriverS8c.lReblocatDupaClick2) *!* --- caz 4: Termina fara alta modificare -> ruta 0, snapshot-ul s-a reimprospatat --- DO asserteaza WITH lcPrefix + ': Termina dupa salvare (fara alta modificare) - zero apeluri suplimentare (ruta 0)', goDriverS8c.nContorTermina == 0, TRANSFORM(goDriverS8c.nContorTermina) DO asserteaza WITH lcPrefix + ': Termina dupa salvare intoarce .T. (nu blocheaza)', goDriverS8c.lRezultatTermina, TRANSFORM(goDriverS8c.lRezultatTermina) Try loFrm.Release() Catch Endtry loMartorB = CapturaMartor(m.tnIdVanzare, m.lnAn, m.lnLuna, m.lnCod, 'v_s8c_b') DO asserteaza WITH lcPrefix + ': VANZARI.ID_DELEGAT s-a schimbat la valoarea noua', loMartorB.id_delegat == m.tnDelegatAlt, TRANSFORM(loMartorB.id_delegat) DO asserteaza WITH lcPrefix + ': VANZARI.ID_DELEGAT diferit de valoarea veche', !(loMartorB.id_delegat == loMartorA.id_delegat), TRANSFORM(loMartorA.id_delegat) DO asserteaza WITH lcPrefix + ': VANZARI_DETALII numar randuri neschimbat (zero scriere pe linii)', loMartorB.linii_nr == loMartorA.linii_nr, TRANSFORM(loMartorB.linii_nr) DO asserteaza WITH lcPrefix + ': VANZARI_DETALII.MAX(dataoras) neschimbat (zero scriere pe linii)', loMartorB.linii_mx == loMartorA.linii_mx, TRANSFORM(loMartorB.linii_mx) DO asserteaza WITH lcPrefix + ': suma ACT (lei) neschimbata', ROUND(loMartorB.act_lei, 2) == ROUND(loMartorA.act_lei, 2), TRANSFORM(loMartorB.act_lei) DO asserteaza WITH lcPrefix + ': suma ACT (valuta) neschimbata', ROUND(loMartorB.act_val, 2) == ROUND(loMartorA.act_val, 2), TRANSFORM(loMartorB.act_val) DO asserteaza WITH lcPrefix + ': suma RUL (lei) neschimbata', ROUND(loMartorB.rul_lei, 2) == ROUND(loMartorA.rul_lei, 2), TRANSFORM(loMartorB.rul_lei) DO asserteaza WITH lcPrefix + ': suma RUL (valuta) neschimbata', ROUND(loMartorB.rul_val, 2) == ROUND(loMartorA.rul_val, 2), TRANSFORM(loMartorB.rul_val) DO CurataAliasuriReziduale ENDPROC *!* ===================================================================================== PROCEDURE VerificaButonAntetDataScad LPARAMETERS tnIdVanzare, tcEticheta LOCAL lcPrefix, loFrm, loMartorA, loMartorB, lnAn, lnLuna, lnCod, ldDataScadNoua lcPrefix = TRANSFORM(m.tnIdVanzare) + ' [' + m.tcEticheta + ']' gcMockUltimMesaj = '' DO CurataAliasuriReziduale SELECT crsfacturi LOCATE FOR id_vanzare = m.tnIdVanzare DO asserteaza WITH lcPrefix + ': documentul e in crsfacturi', FOUND(), TRANSFORM(FOUND()) IF !FOUND() RETURN ENDIF lnAn = YEAR(data_act) lnLuna = MONTH(data_act) lnCod = cod loMartorA = CapturaMartor(m.tnIdVanzare, m.lnAn, m.lnLuna, m.lnCod, 'v_s8c_c') ldDataScadNoua = IIF(EMPTY(loMartorA.data_scad), DATE() + 30, loMartorA.data_scad + 5) Select crsfacturi loFrm = Newobject('frm_facturi', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx') DO asserteaza WITH lcPrefix + ': Newobject(frm_facturi) reuseste', VARTYPE(m.loFrm) == 'O', VARTYPE(m.loFrm) IF VARTYPE(m.loFrm) <> 'O' RETURN ENDIF SELECT crsfacturi LOCATE FOR id_vanzare = m.tnIdVanzare goDriverS8c.Reseteaza() goDriverS8c.nCaz = 2 goDriverS8c.dDataScadNoua = m.ldDataScadNoua loFrm.do_editare_unificata() DO asserteaza WITH lcPrefix + ': formularul s-a deschis', goDriverS8c.lGasit, TRANSFORM(goDriverS8c.lGasit) IF !goDriverS8c.lGasit STRTOFILE(lcPrefix + ' diagnostic iesire: mesaj=[' + gcMockUltimMesaj + ']' + CHR(13) + CHR(10), gcErrLog, 1) Try loFrm.Release() Catch Endtry DO CurataAliasuriReziduale RETURN ENDIF DO asserteaza WITH lcPrefix + ': fara eroare in driver - ' + goDriverS8c.cEroare, EMPTY(goDriverS8c.cEroare), goDriverS8c.cEroare DO asserteaza WITH lcPrefix + ': click 2 (salvare) - cel putin un apel catre goExecutor', goDriverS8c.nContorClick2 >= 1, TRANSFORM(goDriverS8c.nContorClick2) DO asserteaza WITH lcPrefix + ': dupa click 2, antetul s-a reblocat (lantet_deblocat=.F.)', goDriverS8c.lReblocatDupaClick2, TRANSFORM(goDriverS8c.lReblocatDupaClick2) Try loFrm.Release() Catch Endtry loMartorB = CapturaMartor(m.tnIdVanzare, m.lnAn, m.lnLuna, m.lnCod, 'v_s8c_d') DO asserteaza WITH lcPrefix + ': VANZARI.DATA_SCAD s-a schimbat la valoarea noua', loMartorB.data_scad == m.ldDataScadNoua, DTOC(loMartorB.data_scad) DO asserteaza WITH lcPrefix + ': VANZARI.DATA_SCAD diferita de valoarea veche', !(loMartorB.data_scad == loMartorA.data_scad), DTOC(loMartorA.data_scad) DO asserteaza WITH lcPrefix + ': VANZARI_DETALII numar randuri neschimbat', loMartorB.linii_nr == loMartorA.linii_nr, TRANSFORM(loMartorB.linii_nr) DO asserteaza WITH lcPrefix + ': suma ACT (lei) neschimbata', ROUND(loMartorB.act_lei, 2) == ROUND(loMartorA.act_lei, 2), TRANSFORM(loMartorB.act_lei) DO asserteaza WITH lcPrefix + ': suma RUL (lei) neschimbata', ROUND(loMartorB.rul_lei, 2) == ROUND(loMartorA.rul_lei, 2), TRANSFORM(loMartorB.rul_lei) DO CurataAliasuriReziduale ENDPROC *!* ===================================================================================== PROCEDURE VerificaFaraButon LPARAMETERS tnIdVanzare, tcEticheta LOCAL lcPrefix, loFrm, loMartorA, loMartorB, lnAn, lnLuna, lnCod lcPrefix = TRANSFORM(m.tnIdVanzare) + ' [' + m.tcEticheta + ']' gcMockUltimMesaj = '' DO CurataAliasuriReziduale SELECT crsfacturi LOCATE FOR id_vanzare = m.tnIdVanzare DO asserteaza WITH lcPrefix + ': documentul e in crsfacturi', FOUND(), TRANSFORM(FOUND()) IF !FOUND() RETURN ENDIF lnAn = YEAR(data_act) lnLuna = MONTH(data_act) lnCod = cod loMartorA = CapturaMartor(m.tnIdVanzare, m.lnAn, m.lnLuna, m.lnCod, 'v_s8c_e') Select crsfacturi loFrm = Newobject('frm_facturi', 'D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vcx') DO asserteaza WITH lcPrefix + ': Newobject(frm_facturi) reuseste', VARTYPE(m.loFrm) == 'O', VARTYPE(m.loFrm) IF VARTYPE(m.loFrm) <> 'O' RETURN ENDIF SELECT crsfacturi LOCATE FOR id_vanzare = m.tnIdVanzare goDriverS8c.Reseteaza() goDriverS8c.nCaz = 3 loFrm.do_editare_unificata() DO asserteaza WITH lcPrefix + ': formularul s-a deschis', goDriverS8c.lGasit, TRANSFORM(goDriverS8c.lGasit) IF goDriverS8c.lGasit DO asserteaza WITH lcPrefix + ': fara eroare in driver - ' + goDriverS8c.cEroare, EMPTY(goDriverS8c.cEroare), goDriverS8c.cEroare DO asserteaza WITH lcPrefix + ': butonul porneste blocat (lantet_deblocat=.F.)', goDriverS8c.lBlocatInitial, TRANSFORM(goDriverS8c.lBlocatInitial) ENDIF Try loFrm.Release() Catch Endtry loMartorB = CapturaMartor(m.tnIdVanzare, m.lnAn, m.lnLuna, m.lnCod, 'v_s8c_f') DO asserteaza WITH lcPrefix + ': VANZARI.DATAORAS neschimbat (zero scriere pe antet)', loMartorB.dataoras_antet == loMartorA.dataoras_antet, IIF(EMPTY(loMartorB.dataoras_antet), '(gol)', TTOC(loMartorB.dataoras_antet)) DO asserteaza WITH lcPrefix + ': VANZARI_DETALII numar randuri neschimbat', loMartorB.linii_nr == loMartorA.linii_nr, TRANSFORM(loMartorB.linii_nr) DO asserteaza WITH lcPrefix + ': VANZARI_DETALII.MAX(dataoras) neschimbat', loMartorB.linii_mx == loMartorA.linii_mx, TRANSFORM(loMartorB.linii_mx) DO asserteaza WITH lcPrefix + ': suma ACT (lei) neschimbata', ROUND(loMartorB.act_lei, 2) == ROUND(loMartorA.act_lei, 2), TRANSFORM(loMartorB.act_lei) DO asserteaza WITH lcPrefix + ': suma RUL (lei) neschimbata', ROUND(loMartorB.rul_lei, 2) == ROUND(loMartorA.rul_lei, 2), TRANSFORM(loMartorB.rul_lei) DO CurataAliasuriReziduale ENDPROC PROCEDURE CurataAliasuriReziduale LOCAL laAlias(1), lnI, lcA laAlias(1) = 'CRSGESTIUNI' DIMENSION laAlias(9) laAlias(2) = 'JTVA_COLOANE' laAlias(3) = 'JTVA_COLOANE_TEMP' laAlias(4) = 'SAFT_TAXTABLE' laAlias(5) = 'CRSCURSURI' laAlias(6) = 'CRSARTICOLE_DOC' laAlias(7) = 'CRSARTICOLE_EDITARE' laAlias(8) = 'V_ANTET_EDITARE' laAlias(9) = 'CRSFACTURA' FOR lnI = 1 TO ALEN(laAlias) lcA = laAlias(lnI) IF Used(m.lcA) Use In (m.lcA) ENDIF ENDFOR ENDPROC PROCEDURE asserteaza LPARAMETERS tcNume, tlConditie, tcValoare IF m.tlConditie gnPass = gnPass + 1 STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1) ELSE gnFail = gnFail + 1 STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + Transform(m.tcValoare) + ')' + CHR(13) + CHR(10), gcErrLog, 1) 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 *!* --- subclasa de contor pentru oexecutor: acelasi tipar ca test_s8b_rutare_scriere.prg (oReal, *!* nu DODEFAULT) - numara ORICE apel catre oExecute; oExecuta (mostenita, nesuprascrisa) cheama *!* intern This.oExecute, deci e numarata automat, fara suprascriere separata --- DEFINE CLASS oExecutorContorS8c AS oexecutor oReal = NULL PROCEDURE oExecute LPARAMETERS tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect gnContorExecutiiS8c = gnContorExecutiiS8c + 1 RETURN This.oReal.oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect) ENDPROC ENDDEFINE DEFINE CLASS driverS8cAntet AS Custom lBusy = .F. lGasit = .F. nCaz = 0 nDelegatAlt = 0 cDelegatAlt = '' dDataScadNoua = {} cEroare = '' lDeblocatDupaClick1 = .F. lReblocatDupaClick2 = .F. lBlocatInitial = .F. nContorClick2 = -1 nContorTermina = -1 lRezultatTermina = .F. PROCEDURE Reseteaza This.lGasit = .F. This.cEroare = '' This.lDeblocatDupaClick1 = .F. This.lReblocatDupaClick2 = .F. This.lBlocatInitial = .F. This.nContorClick2 = -1 This.nContorTermina = -1 This.lRezultatTermina = .F. ENDPROC PROCEDURE Executa IF This.lBusy OR This.lGasit RETURN ENDIF This.lBusy = .T. TRY LOCAL lnI, loFrm2, loExecutorOriginal, loExecutorContor FOR lnI = 1 TO _SCREEN.FormCount IF Upper(_SCREEN.Forms(m.lnI).Class) == 'FRM_FACTURARE_ARTICOLE2' loFrm2 = _SCREEN.Forms(m.lnI) This.lGasit = .T. This.lBlocatInitial = !loFrm2.lantet_deblocat DO CASE CASE This.nCaz = 1 *!* click 1: deblocheaza antetul loFrm2.do_comuta_antet() This.lDeblocatDupaClick1 = loFrm2.lantet_deblocat IF TYPE('poDate') == 'O' poDate.id_delegat = This.nDelegatAlt poDate.nume_delegat = This.cDelegatAlt ELSE This.cEroare = 'poDate nevizibil din driver (caz 1)' ENDIF IF EMPTY(This.cEroare) gnContorExecutiiS8c = 0 loExecutorOriginal = goExecutor loExecutorContor = Createobject('oExecutorContorS8c') loExecutorContor.oReal = loExecutorOriginal goExecutor = loExecutorContor TRY *!* click 2: salveaza antetul (ScrieAntetEditare + reimprospatare snapshot) loFrm2.do_comuta_antet() CATCH TO loExcInterior This.cEroare = 'click2 do_comuta_antet: ' + TRANSFORM(loExcInterior.ErrorNo) + ' ' + loExcInterior.Message ENDTRY goExecutor = loExecutorOriginal This.nContorClick2 = gnContorExecutiiS8c This.lReblocatDupaClick2 = !loFrm2.lantet_deblocat *!* caz 4: Termina fara alta modificare -> ruta 0 (zero apeluri suplimentare) IF EMPTY(This.cEroare) gnContorExecutiiS8c = 0 loExecutorOriginal = goExecutor loExecutorContor = Createobject('oExecutorContorS8c') loExecutorContor.oReal = loExecutorOriginal goExecutor = loExecutorContor TRY This.lRezultatTermina = loFrm2.do_scrie_factura() CATCH TO loExcTermina This.cEroare = 'Termina (do_scrie_factura): ' + TRANSFORM(loExcTermina.ErrorNo) + ' ' + loExcTermina.Message ENDTRY goExecutor = loExecutorOriginal This.nContorTermina = gnContorExecutiiS8c ENDIF ENDIF CASE This.nCaz = 2 loFrm2.do_comuta_antet() IF TYPE('poDate') == 'O' poDate.datascad = This.dDataScadNoua ELSE This.cEroare = 'poDate nevizibil din driver (caz 2)' ENDIF IF EMPTY(This.cEroare) gnContorExecutiiS8c = 0 loExecutorOriginal = goExecutor loExecutorContor = Createobject('oExecutorContorS8c') loExecutorContor.oReal = loExecutorOriginal goExecutor = loExecutorContor TRY loFrm2.do_comuta_antet() CATCH TO loExcInterior2 This.cEroare = 'click2 do_comuta_antet: ' + TRANSFORM(loExcInterior2.ErrorNo) + ' ' + loExcInterior2.Message ENDTRY goExecutor = loExecutorOriginal This.nContorClick2 = gnContorExecutiiS8c This.lReblocatDupaClick2 = !loFrm2.lantet_deblocat ENDIF CASE This.nCaz = 3 *!* nimic - nu se apasa butonul ENDCASE Try loFrm2.Release() Catch Endtry EXIT ENDIF ENDFOR CATCH TO loExcS8c This.cEroare = 'driver: ' + TRANSFORM(loExcS8c.ErrorNo) + ' ' + loExcS8c.Message STRTOFILE('DRIVER EROARE ' + TRANSFORM(loExcS8c.ErrorNo) + ' ' + loExcS8c.Message + CHR(13) + CHR(10), gcErrLog, 1) FINALLY This.lBusy = .F. ENDTRY ENDPROC ENDDEFINE