* test_s4b_dialog.prg * Smoke test pentru clasa noua frm_sincronizare_articole (COMUN\clase\omodificari.vc2, la finalul * fisierului) - dialogul S4b etapa 2 (buton cmdSincronizeazaArticole + AfiseazaDialogSincronizareArticole * in frm_modific2024). Complet headless, FARA Oracle: tvd/trul se construiesc in test (helperele * AdaugaTvd/AdaugaTrul, copiate din test_s4b_sincronizare.prg, acelasi folder), dummyform (copiat din * acelasi fisier) se refoloseste ca oFormArticole. Logica pura din spatele dialogului * (ConstruiestePropunereSincronizare/AplicaSincronizareArticole, ofacturare_editare.prg) e deja * acoperita de test_s4b_sincronizare.prg (35/0) - aici se verifica DOAR ca dialogul (Load/Init/ * ConstruiesteEnumerare/inainte_de_do_termin/Unload) leaga corect gridul de propunere_afisata, * comuta directia fara sa dubleze/ramana cu randuri vechi, si activeaza/dezactiveaza But_termin1. * * Clasa e OF "_frm_child.vcx" (WindowType=1, modala), dar modalitatea se declanseaza la .Show(), nu * la Createobject() - niciun test de aici cheama .Show(), deci nimic nu ramane blocat headless. * Mediul de clase/proceduri e cel din Programe\roafacturare.prg (SET PATH + SET CLASSLIB, replicat * aici ca sa rezolve lantul de mostenire _frm_child.vcx -> _frm_base.vcx -> _baza.vcx si controalele * _grdrow/_optiongrup/_label), FARA test_init_env_auto (acela deschide o conexiune Oracle reala, * nefolositoare aici si interzisa de scopul sarcinii). * * Nu scrie in Oracle. Nu da COMMIT. QUIT la final. SET SAFETY OFF SET TALK OFF LOCAL lcLog lcLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s4b_dialog_log.txt' STRTOFILE('start ' + TTOC(DATETIME()) + CHR(13) + CHR(10), lcLog) PUBLIC gcErrLog, gnPass, gnFail gcErrLog = lcLog gnPass = 0 gnFail = 0 ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO() IF Type('gnPC') <> 'N' PUBLIC gnPC gnPC = 2 ENDIF *!* defensiv - Column.InputMask din grdPropunere foloseste get_mask(12,gnPCANT)/get_mask(12,gnPPRET); *!* sub -A -T coloanele de grid nu se materializeaza (nu se evalueaza InputMask), dar le definim oricum IF Type('gnPCANT') <> 'N' PUBLIC gnPCANT gnPCANT = 3 ENDIF IF Type('gnPPRET') <> 'N' PUBLIC gnPPRET gnPPRET = 4 ENDIF CLOSE DATABASES Set Century On Set Deleted On Set Date To Dmy Set Exact On Set NullDisplay To '' Set Decimals To 6 LOCAL gcAppPath, lcPath gcAppPath = 'D:\ROA\ROAFACTURARE\' SET DEFAULT TO (gcAppPath) lcPath = gcAppPath + 'Date;' + ; gcAppPath + 'Include;' + ; gcAppPath + 'FERESTRE;' + ; gcAppPath + 'GRAFICE;' + ; gcAppPath + 'CLASE;' + ; gcAppPath + 'MENIURI;' + ; gcAppPath + 'PROGRAME;' + ; gcAppPath + 'RAPOARTE;' + ; gcAppPath + 'COMUN\CLASE;' + ; gcAppPath + 'COMUN\FERESTRE;' + ; gcAppPath + 'COMUN\PROGRAME;' + ; gcAppPath + 'COMUN\GRAFICE;' + ; gcAppPath + 'COMUN\RAPOARTE;' + ; gcAppPath + 'COMUN\UTILE\CALENDAR;' + ; gcAppPath + 'COMUN\UTILE\CTL32;' + ; gcAppPath + 'COMUN\UTILE\HPDF;' + ; gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ; gcAppPath + 'COMUN\UTILE\WEB;' + ; gcAppPath + 'COMUN\UTILE\EMAIL;' + ; gcAppPath + 'COMUN\UTILE\NFJSON;' + ; gcAppPath + 'COMUN\UTILE\NFXML;' + ; 'D:\ROA\COMUNROA\' SET PATH TO &lcPath ADDITIVE *!* CLASE - lantul replicat din Programe\roafacturare.prg, fara init_program/Oracle SET CLASSLIB TO (gcAppPath + 'comun\clase\appwiz.vcx') ADDITIVE SET CLASSLIB TO registry ADDITIVE SET CLASSLIB TO cauta_alfa_forms ADDITIVE SET CLASSLIB TO ofacturare.vcx ADDITIVE SET CLASSLIB TO ofacturare_comun.vcx ADDITIVE SET CLASSLIB TO omodificari.vcx ADDITIVE SET CLASSLIB TO accessibility.vcx ADDITIVE SET CLASSLIB TO ocriterii.vcx ADDITIVE SET CLASSLIB TO ctl32_statusbar.vcx ADDITIVE SET CLASSLIB TO ctl32_common.vcx ADDITIVE SET CLASSLIB TO ctl32_structs.vcx ADDITIVE SET CLASSLIB TO ctl32_progressbar.vcx ADDITIVE SET CLASSLIB TO DECABAZA ADDITIVE SET CLASSLIB TO onomenclatoare ADDITIVE SET CLASSLIB TO onomenclatoare2 ADDITIVE SET CLASSLIB TO ofacturare ADDITIVE SET CLASSLIB TO ofacturare_rapoarte ADDITIVE SET CLASSLIB TO orapoarte ADDITIVE SET CLASSLIB TO ferestre_oracle ADDITIVE SET CLASSLIB TO Messagebox ADDITIVE SET CLASSLIB TO otoolbar ADDITIVE SET CLASSLIB TO onom_curs ADDITIVE SET CLASSLIB TO comun ADDITIVE SET CLASSLIB TO ferestre_cere_date ADDITIVE SET CLASSLIB TO baza ADDITIVE SET CLASSLIB TO caut ADDITIVE SET CLASSLIB TO ointroduceri ADDITIVE SET CLASSLIB TO serii_numere ADDITIVE SET CLASSLIB TO caut_ora ADDITIVE SET CLASSLIB TO wwdialogs.vcx ADDITIVE SET CLASSLIB TO _calendar.vcx ADDITIVE SET CLASSLIB TO locale ADDITIVE SET CLASSLIB TO overificari ADDITIVE SET CLASSLIB TO ocomenzi ADDITIVE *!* PROCEDURI - doar cele chiar necesare logicii testate (fara Oracle) SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\proceduri_comune.prg ADDITIVE SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE *!* MEDIU - fara goApp, _frmbase.Init trimite .F. in SetFont si accessibility deschide GETFONT(), *!* dialog modal care atarna rularea headless; gcAcces e cerut de actualizeaza_drepturi PUBLIC goApp, gcAcces gcAcces = [1;2;3;4;5;6;7;8;] goApp = Createobject("wzApplication") *============================================================================================ * T1 - instantiere pe dataset cu Modificare+Adaugare+Semnalare+N-A: fara eroare, propunere_afisata * identica (camp cu camp) cu propunere_sincronizare, But_termin1.Enabled = .T. *============================================================================================ CreeazaTvdTest() CreeazaTrulTest() AdaugaTvd(800, 2, 10, 1, 1, 'ARTICOL 800', 'COD800', 20) AdaugaTrul(800, 4, 0, 16, 0, 1, '371', 1.19) AdaugaTrul(900, 1, 0, 50, 0, 2, '371', 1.19) AdaugaTvd(1000, 1, 1, 1, 1, 'ARTICOL 1000', 'COD1000', 1) AdaugaTvd(1100, 1, 1, 1, 0, 'ARTICOL 1100', 'COD1100', 1) LOCAL loForm1 loForm1 = Createobject('frm_sincronizare_articole') DO asserteaza WITH 'T1 instantiere fara eroare (Modificare+Adaugare+Semnalare+N-A)', ; Vartype(loForm1) == 'O' AND Upper(loForm1.Class) == 'FRM_SINCRONIZARE_ARTICOLE', TRANSFORM(Vartype(loForm1)) IF Vartype(loForm1) == 'O' DO asserteaza WITH 'T1 propunere_afisata exista si e deschisa', Used('propunere_afisata'), '' DO asserteaza WITH 'T1 propunere_sincronizare exista (sursa copiata de ConstruiesteEnumerare)', Used('propunere_sincronizare'), '' IF Used('propunere_afisata') AND Used('propunere_sincronizare') DO asserteaza WITH 'T1 propunere_afisata are 4 randuri (800 Modificare, 900 Adaugare, 1000 Semnalare, 1100 N-A)', ; Reccount('propunere_afisata') == 4, TRANSFORM(Reccount('propunere_afisata')) DO asserteaza WITH 'T1 acelasi numar de randuri in propunere_sincronizare si propunere_afisata', ; Reccount('propunere_sincronizare') == Reccount('propunere_afisata'), ; TRANSFORM(Reccount('propunere_sincronizare')) + '/' + TRANSFORM(Reccount('propunere_afisata')) LOCAL lnMismatch1 lnMismatch1 = VerificaCursoareIdentice('propunere_sincronizare', 'propunere_afisata') DO asserteaza WITH 'T1 propunere_afisata identica camp-cu-camp cu propunere_sincronizare', lnMismatch1 == 0, TRANSFORM(lnMismatch1) ENDIF DO asserteaza WITH 'T1 But_termin1.Enabled = .T. (exista Modificare 800 si Adaugare 900)', loForm1.But_termin1.Enabled, TRANSFORM(loForm1.But_termin1.Enabled) loForm1.Release() ENDIF *============================================================================================ * T2 - But_termin1.Enabled = .F. cand propunerea e goala (document identic) *============================================================================================ CreeazaTvdTest() CreeazaTrulTest() AdaugaTvd(100, 5, 10, 1, 1, 'ARTICOL 100', 'COD100', 50) AdaugaTrul(100, 5, 0, 10, 0, 1, '371', 1) LOCAL loForm2 loForm2 = Createobject('frm_sincronizare_articole') DO asserteaza WITH 'T2 instantiere pe document identic: fara eroare', Vartype(loForm2) == 'O', TRANSFORM(Vartype(loForm2)) IF Vartype(loForm2) == 'O' DO asserteaza WITH 'T2 propunere_afisata goala (nimic de sincronizat)', Reccount('propunere_afisata') == 0, TRANSFORM(Reccount('propunere_afisata')) DO asserteaza WITH 'T2 But_termin1.Enabled = .F. (propunere goala)', !loForm2.But_termin1.Enabled, TRANSFORM(loForm2.But_termin1.Enabled) loForm2.Release() ENDIF *============================================================================================ * T2b - But_termin1.Enabled = .F. cand propunerea contine DOAR N-A/Semnalare (niciun aplicabil) *============================================================================================ CreeazaTvdTest() CreeazaTrulTest() AdaugaTvd(500, 1, 99, 1, 0, 'ARTICOL 500 SERVICIU', 'COD500', 99) AdaugaTvd(1000, 1, 1, 1, 1, 'ARTICOL 1000', 'COD1000', 1) LOCAL loForm2b loForm2b = Createobject('frm_sincronizare_articole') DO asserteaza WITH 'T2b instantiere pe document doar N-A/Semnalare: fara eroare', Vartype(loForm2b) == 'O', TRANSFORM(Vartype(loForm2b)) IF Vartype(loForm2b) == 'O' DO asserteaza WITH 'T2b propunere_afisata are 2 randuri (500 N-A, 1000 Semnalare), niciunul aplicabil', ; Reccount('propunere_afisata') == 2, TRANSFORM(Reccount('propunere_afisata')) DO asserteaza WITH 'T2b But_termin1.Enabled = .F. (doar N-A/Semnalare)', !loForm2b.But_termin1.Enabled, TRANSFORM(loForm2b.But_termin1.Enabled) loForm2b.Release() ENDIF *============================================================================================ * T3 - comutarea directiei: optDirectie.Click() reumple propunere_afisata (nu dubleaza, nu ramane veche) *============================================================================================ CreeazaTvdTest() CreeazaTrulTest() AdaugaTvd(800, 2, 10, 1, 1, 'ARTICOL 800', 'COD800', 20) AdaugaTrul(800, 4, 0, 16, 0, 1, '371', 1.19) AdaugaTrul(900, 1, 0, 50, 0, 2, '371', 1.19) AdaugaTvd(1000, 1, 1, 1, 1, 'ARTICOL 1000', 'COD1000', 1) LOCAL loForm3 loForm3 = Createobject('frm_sincronizare_articole') DO asserteaza WITH 'T3 instantiere: fara eroare', Vartype(loForm3) == 'O', TRANSFORM(Vartype(loForm3)) IF Vartype(loForm3) == 'O' DO asserteaza WITH 'T3 initial (RUL_SURSA implicit): 3 randuri (800 Modificare, 900 Adaugare, 1000 Semnalare)', ; Reccount('propunere_afisata') == 3, TRANSFORM(Reccount('propunere_afisata')) SELECT propunere_afisata LOCATE FOR id_articol == 900 DO asserteaza WITH 'T3 initial: 900 e Adaugare (doar in trul)', Found() AND Alltrim(actiune) == 'Adaugare', Iif(Found(), Alltrim(actiune), 'lipsa') LOCATE FOR id_articol == 1000 DO asserteaza WITH 'T3 initial: 1000 e Semnalare (doar in tvd, stocat)', Found() AND Alltrim(actiune) == 'Semnalare', Iif(Found(), Alltrim(actiune), 'lipsa') loForm3.optDirectie.Value = 2 loForm3.optDirectie.Click() DO asserteaza WITH 'T3 dupa comutare: cDirectie == ARTICOLE_SURSA', Alltrim(loForm3.cDirectie) == 'ARTICOLE_SURSA', loForm3.cDirectie DO asserteaza WITH 'T3 dupa comutare: propunere_afisata tot 3 randuri (reumpluta, nu dublata)', ; Reccount('propunere_afisata') == 3, TRANSFORM(Reccount('propunere_afisata')) SELECT propunere_afisata LOCATE FOR id_articol == 900 DO asserteaza WITH 'T3 dupa comutare: 900 e acum Semnalare (rolul s-a inversat, nu a ramas Adaugare)', ; Found() AND Alltrim(actiune) == 'Semnalare', Iif(Found(), Alltrim(actiune), 'lipsa') LOCATE FOR id_articol == 1000 DO asserteaza WITH 'T3 dupa comutare: 1000 e acum Adaugare (rolul s-a inversat)', ; Found() AND Alltrim(actiune) == 'Adaugare', Iif(Found(), Alltrim(actiune), 'lipsa') LOCATE FOR id_articol == 800 DO asserteaza WITH 'T3 dupa comutare: 800 tot Modificare (in ambele directii)', ; Found() AND Alltrim(actiune) == 'Modificare', Iif(Found(), Alltrim(actiune), 'lipsa') loForm3.Release() ENDIF *============================================================================================ * T4 - inainte_de_do_termin() aplica efectiv in tvd (RUL_SURSA), cu oFormArticole = dummyform *============================================================================================ CreeazaTvdTest() CreeazaTrulTest() AdaugaTvd(800, 2, 10, 1, 1, 'ARTICOL 800', 'COD800', 20) AdaugaTrul(800, 4, 0, 16, 0, 1, '371', 1.19) AdaugaTrul(900, 1, 0, 50, 0, 2, '371', 1.19) LOCAL loDummy4, loForm4, llRet4 loDummy4 = Createobject('dummyform') loForm4 = Createobject('frm_sincronizare_articole') DO asserteaza WITH 'T4 instantiere: fara eroare', Vartype(loForm4) == 'O', TRANSFORM(Vartype(loForm4)) IF Vartype(loForm4) == 'O' loForm4.oFormArticole = loDummy4 llRet4 = loForm4.inainte_de_do_termin() DO asserteaza WITH 'T4 inainte_de_do_termin() intoarce .T.', llRet4 == .T., TRANSFORM(llRet4) SELECT tvd LOCATE FOR id_articol == 800 DO asserteaza WITH 'T4 aplicat in tvd: 800 modificat (cantitate=4, pret=16)', Found() AND cantitate == 4 AND pret == 16, ; TRANSFORM(cantitate) + '/' + TRANSFORM(pret) LOCATE FOR id_articol == 900 DO asserteaza WITH 'T4 aplicat in tvd: 900 adaugat (linie noua, cantitate=1, pret=50)', Found() AND cantitate == 1 AND pret == 50, ; TRANSFORM(cantitate) + '/' + TRANSFORM(pret) DO asserteaza WITH 'T4 dummyform.AdaugaLinieTvdDinArticol apelat o singura data (Adaugarea 900)', loDummy4.nAdaugaCalls == 1, TRANSFORM(loDummy4.nAdaugaCalls) DO asserteaza WITH 'T4 dummyform.ActualizeazaBaraTotaluri apelat (Pemstatus + lnAplicate>0)', loDummy4.nBaraCalls >= 1, TRANSFORM(loDummy4.nBaraCalls) loForm4.Release() ENDIF *============================================================================================ * T5 - oFormArticole ramas .F. (implicit): nicio eroare, se aplica tot REPLACE-ul de baza pe tvd *============================================================================================ CreeazaTvdTest() CreeazaTrulTest() AdaugaTvd(800, 2, 10, 1, 1, 'ARTICOL 800', 'COD800', 20) AdaugaTrul(800, 4, 0, 16, 0, 1, '371', 1.19) LOCAL loForm5, llRet5 loForm5 = Createobject('frm_sincronizare_articole') DO asserteaza WITH 'T5 instantiere: fara eroare', Vartype(loForm5) == 'O', TRANSFORM(Vartype(loForm5)) IF Vartype(loForm5) == 'O' DO asserteaza WITH 'T5 oFormArticole implicit e .F. (nesetat)', Vartype(loForm5.oFormArticole) == 'L' AND !loForm5.oFormArticole, TRANSFORM(Vartype(loForm5.oFormArticole)) llRet5 = loForm5.inainte_de_do_termin() DO asserteaza WITH 'T5 inainte_de_do_termin() cu oFormArticole=.F.: fara eroare, intoarce .T.', llRet5 == .T., TRANSFORM(llRet5) SELECT tvd LOCATE FOR id_articol == 800 DO asserteaza WITH 'T5 REPLACE de baza tot s-a aplicat pe 800 (cantitate=4, pret=16), fara toForm', Found() AND cantitate == 4 AND pret == 16, ; TRANSFORM(cantitate) + '/' + TRANSFORM(pret) loForm5.Release() ENDIF *============================================================================================ * T6 - Unload/Release inchide propunere_afisata *============================================================================================ CreeazaTvdTest() CreeazaTrulTest() AdaugaTvd(100, 5, 10, 1, 1, 'ARTICOL 100', 'COD100', 50) AdaugaTrul(100, 5, 0, 10, 0, 1, '371', 1) LOCAL loForm6 loForm6 = Createobject('frm_sincronizare_articole') DO asserteaza WITH 'T6 instantiere: fara eroare', Vartype(loForm6) == 'O', TRANSFORM(Vartype(loForm6)) IF Vartype(loForm6) == 'O' DO asserteaza WITH 'T6 inainte de Release: propunere_afisata deschisa', Used('propunere_afisata'), '' loForm6.Release() DO asserteaza WITH 'T6 dupa Release: propunere_afisata inchisa (Unload a facut Use In)', !Used('propunere_afisata'), TRANSFORM(Used('propunere_afisata')) ENDIF STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), lcLog, 1) IF Used('tvd') Use In tvd ENDIF IF Used('trul') Use In trul ENDIF IF Used('propunere_sincronizare') Use In propunere_sincronizare ENDIF IF Used('propunere_afisata') Use In propunere_afisata ENDIF QUIT *!* --- helpere de constructie a cursoarelor de test (copiate din test_s4b_sincronizare.prg) --- PROCEDURE CreeazaTvdTest CreeazaCursorArticoleGol('tvd') ENDPROC PROCEDURE CreeazaTrulTest IF Used('trul') Use In trul ENDIF CREATE CURSOR trul (id_articol I, denumire C(100), codmat C(30), um C(10), cant N(12,3), cante N(12,3), ; pretvtva N(14,4), id_tip_rulaj I, sters I, id_gestiune I, cont C(20), proc_tvav N(6,4)) ENDPROC *!* adauga o linie in tvd, cu valoarea data explicit (nu recalculata aici - fixture, nu logica de productie) PROCEDURE AdaugaTvd LPARAMETERS tnIdArticol, tnCantitate, tnPret, tnPretCuTva, tnInStoc, tcDenumire, tcCodmat, tnValoare SELECT tvd APPEND BLANK REPLACE id_vanzare WITH 1, id_vanzare_det WITH Recno('tvd'), id_articol WITH m.tnIdArticol, ; cantitate WITH m.tnCantitate, pret WITH m.tnPret, pret_cu_tva WITH m.tnPretCuTva, proc_tvav WITH 1, ; discount_unitar WITH 0, sters WITH 0, denumire WITH m.tcDenumire, codmat WITH m.tcCodmat, ; in_stoc WITH m.tnInStoc, valoare WITH m.tnValoare, lmodificat WITH .F. IN tvd ENDPROC *!* adauga o linie in trul: id_articol, cant, cante, pretvtva, id_tip_rulaj, id_gestiune, cont, proc_tvav PROCEDURE AdaugaTrul LPARAMETERS tnIdArticol, tnCant, tnCante, tnPretvtva, tnIdTipRulaj, tnIdGestiune, tcCont, tnProcTvav SELECT trul APPEND BLANK REPLACE id_articol WITH m.tnIdArticol, cant WITH m.tnCant, cante WITH m.tnCante, pretvtva WITH m.tnPretvtva, ; id_tip_rulaj WITH m.tnIdTipRulaj, sters WITH 0, um WITH 'BUC', id_gestiune WITH m.tnIdGestiune, ; cont WITH m.tcCont, proc_tvav WITH m.tnProcTvav, denumire WITH 'ARTICOL ' + Transform(m.tnIdArticol), ; codmat WITH 'COD' + Transform(m.tnIdArticol) IN trul ENDPROC *!* compara doua cursoare cu structura identica (id_articol/denumire/codmat/cantitate_veche/cantitate_noua/ *!* pret_vechi/pret_nou/actiune/motiv), matching pe id_articol; intoarce numarul de randuri nepotrivite *!* (lipsa in tinta sau cu vreun camp diferit) PROCEDURE VerificaCursoareIdentice LPARAMETERS tcSursa, tcTinta LOCAL lnMismatch, lnIdArt, lcDenSursa, lcCodSursa, lnCvSursa, lnCnSursa, lnPvSursa, lnPnSursa, lcActSursa, lcMotSursa lnMismatch = 0 SELECT (tcSursa) SCAN lnIdArt = id_articol lcDenSursa = Alltrim(denumire) lcCodSursa = Alltrim(codmat) lnCvSursa = cantitate_veche lnCnSursa = cantitate_noua lnPvSursa = pret_vechi lnPnSursa = pret_nou lcActSursa = Alltrim(actiune) lcMotSursa = Alltrim(motiv) SELECT (tcTinta) LOCATE FOR id_articol == m.lnIdArt IF !Found() lnMismatch = lnMismatch + 1 ELSE IF !(Alltrim(denumire) == m.lcDenSursa AND Alltrim(codmat) == m.lcCodSursa AND ; cantitate_veche == m.lnCvSursa AND cantitate_noua == m.lnCnSursa AND ; pret_vechi == m.lnPvSursa AND pret_nou == m.lnPnSursa AND ; Alltrim(actiune) == m.lcActSursa AND Alltrim(motiv) == m.lcMotSursa) lnMismatch = lnMismatch + 1 ENDIF ENDIF SELECT (tcSursa) ENDSCAN RETURN m.lnMismatch 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: ' + 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 *!* test-double pentru frm_modific2024 - oglindeste EXACT calculeaza_valori_articol/AdaugaLinieTvdDinArticol/ *!* ActualizeazaBaraTotaluri din omodificari.vc2, copiat din test_s4b_sincronizare.prg (acelasi folder) DEFINE CLASS dummyform AS Custom nCalcCalls = 0 nAdaugaCalls = 0 nBaraCalls = 0 PROCEDURE calculeaza_valori_articol LOCAL lnCantitate, lnPretNet, lnProcTvav, lnValoare This.nCalcCalls = This.nCalcCalls + 1 SELECT tvd lnCantitate = Nvl(cantitate,0) lnPretNet = Nvl(pret,0) - Nvl(discount_unitar,0) lnProcTvav = Nvl(proc_tvav,1) lnValoare = Round(m.lnCantitate * Iif(Nvl(pret_cu_tva,0) = 0, m.lnPretNet * m.lnProcTvav, m.lnPretNet), gnPC) REPLACE lmodificat WITH .T., valoare WITH m.lnValoare IN tvd This.ActualizeazaBaraTotaluri() ENDPROC PROCEDURE AdaugaLinieTvdDinArticol LPARAMETERS toArticol LOCAL lnPretRon, lnDiscountRon, lnPret, lnDiscount This.nAdaugaCalls = This.nAdaugaCalls + 1 lnPretRon = Iif(toArticol.preturi_cu_tva = 0, toArticol.pretftva, toArticol.pretctva) lnDiscountRon = Iif(toArticol.preturi_cu_tva = 0, toArticol.discount_unitar, toArticol.discount_unitar_ctva) lnPret = m.lnPretRon * 1 / 1 lnDiscount = m.lnDiscountRon * 1 / 1 SELECT tvd APPEND BLANK REPLACE id_vanzare WITH 1, id_vanzare_det WITH 0, id_articol WITH toArticol.id_articol, ; cantitate WITH toArticol.cantitate, pret WITH m.lnPret, pret_cu_tva WITH toArticol.preturi_cu_tva, ; proc_tvav WITH toArticol.proc_tvav, discount_unitar WITH m.lnDiscount, ; id_gestiune WITH toArticol.id_gestiune, cont WITH toArticol.Cont, sters WITH 0, ; denumire WITH toArticol.denumire, codmat WITH toArticol.codmat, ; pret_achizitie WITH Nvl(toArticol.pret_achizitie,0), lmodificat WITH .T. IN tvd This.calculeaza_valori_articol() ENDPROC PROCEDURE ActualizeazaBaraTotaluri This.nBaraCalls = This.nBaraCalls + 1 ENDPROC ENDDEFINE