achizitie import: numarul DVI nu mai suprascrie numarul facturii

In import_nota, randul de TVA al DVI-ului pastreaza doc_key-ul facturii-mama.
copiaza_valoare il sarea doar ca tinta, nu si ca sursa, asa ca o trecere prin
celula "Nr" a randului DVI scria numarul vamal peste randurile facturii (B/G/S)
si, la Terminat, in ACT si RUL.nract. Garda e acum in ambele sensuri, pentru
numar, serie, data, fel document si partener; propagarea de partener din
Grid1.cPartC.Text1.Valid a primit aceeasi protectie.

Garzile comparau numele de camp bar, dar ControlSource-ul unei coloane de grid
e calificat la runtime (introdc.nract), deci nu se activau pe drumul din grila.

Teste noi in utile/Teste/achizitie_import.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U9uDgDfUQXbh2Neib36CN8
This commit is contained in:
2026-08-01 22:47:35 +03:00
parent 832fea4913
commit ebb20fab7e
13 changed files with 5482 additions and 7 deletions

View File

@@ -8808,17 +8808,23 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx"
*!* cheia documentului, doc_key se regenereaza pe grup dupa propagare.
Lparameters tcCamp
Local lcSelect, lcCursor, luValoare, lcDocKeyOld, lcDocKeyNou, lnRecCurent, llCheie
Local llCampValuta, llCampIdentitate, llSursaProtejata
Local llCampValuta, llCampIdentitate, llSursaProtejata, lcCamp
lcCursor = Thisform.grid1.RecordSource
lcSelect = Select()
Select (lcCursor)
lnRecCurent = Recno()
lcDocKeyOld = doc_key
luValoare = &tcCamp
llCheie = Inlist(Lower(tcCamp), 'serie_act', 'nract', 'id_fdoc', 'fdoc', 'id_partc', 'partc')
llCampValuta = Inlist(Lower(tcCamp), 'in_valuta', 'id_valuta', 'nume_val', 'curs', 'suma_val')
llCampIdentitate = Inlist(Lower(tcCamp), 'nract', 'serie_act', 'partc', 'id_fdoc', 'fdoc')
llSursaProtejata = (llCampValuta And Thisform.rand_protejat())
*!* la runtime VFP califica ControlSource-ul coloanei cu aliasul grilei (introdc.nract)
lcCamp = Lower(Alltrim(tcCamp))
If '.' $ lcCamp
lcCamp = Substr(lcCamp, Rat('.', lcCamp) + 1)
Endif
llCheie = Inlist(lcCamp, 'serie_act', 'nract', 'id_fdoc', 'fdoc', 'id_partc', 'partc')
llCampValuta = Inlist(lcCamp, 'in_valuta', 'id_valuta', 'nume_val', 'curs', 'suma_val')
llCampIdentitate = Inlist(lcCamp, 'nract', 'serie_act', 'partc', 'id_partc', 'id_fdoc', 'fdoc', 'dataact')
*!* randul DVI e protejat si ca SURSA - identitatea lui vamala nu se propaga pe factura-mama
llSursaProtejata = (llCampValuta And Thisform.rand_protejat()) Or (llCampIdentitate And Nvl(rand_dvi,0) = 1)
If !llSursaProtejata
Scan For doc_key == lcDocKeyOld And Recno() <> lnRecCurent
@@ -8832,7 +8838,7 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx"
Endscan
Endif
If llCheie
If llCheie And !llSursaProtejata
Go lnRecCurent
lcDocKeyNou = Thisform.calc_doc_key()
Scan For doc_key == lcDocKeyOld
@@ -8843,7 +8849,7 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx"
Go lnRecCurent
Select (lcSelect)
Release lcSelect, lcCursor, luValoare, lcDocKeyOld, lcDocKeyNou, lnRecCurent, llCheie
Release llCampValuta, llCampIdentitate, llSursaProtejata
Release llCampValuta, llCampIdentitate, llSursaProtejata, lcCamp
ENDPROC
PROCEDURE creeaza_rand_s
@@ -11883,12 +11889,20 @@ DEFINE CLASS import_nota AS frm_termin_renunt OF "_frm_child.vcx"
lcSelect = SELECT()
SELECT introdc
*!* randul DVI are partener propriu (vama) - nu il da si nu il preia de la factura
IF Nvl(rand_dvi,0) = 1
SELECT (lcSelect)
RETURN
ENDIF
lnRecCurent = RECNO()
lcDocKey = doc_key
lnIdPart = id_partc
lcPart = partc
lcCont = scc
SCAN FOR !EMPTY(lcDocKey) AND doc_key == lcDocKey AND RECNO() <> lnRecCurent
IF Nvl(rand_dvi,0) = 1
LOOP
ENDIF
IF scc = lcCont AND EMPTY(id_partc)
REPLACE id_partc WITH lnIdPart, partc WITH lcPart
ENDIF

View File

@@ -0,0 +1,670 @@
* test_diag_controlsource_calificat.prg
* REGRESIE (initial diagnostic - a demonstrat un ocolire a gardei, acum fixata): izoleaza
* copiaza_valoare() de dialog/sparge_document, insert direct in introdc - doua randuri,
* acelasi doc_key: B nract=15000/id_fdoc=1/id_partc=601, T-DVI nract=101/id_fdoc=2/
* id_partc=900/rand_dvi=1.
*
* Context: This.Parent.ControlSource (folosit de Grid1.cNract/cDataAct/cSerie_act.Text1.Valid
* ca argument pentru Thisform.copiaza_valoare) e "nract" la design-time in .vcx, dar la
* runtime VFP il rescrie calificat cu alias-ul RecordSource-ului grid-ului ("introdc.nract").
* Garda din copiaza_valoare (COMUN\clase\ointroduceri.vcx) normalizeaza acum tcCamp la numele
* de camp BAR (dupa ultimul punct) inainte de Inlist - testul verifica DIRECT ca garda
* blocheaza propagarea de pe randul T-DVI (sursa) atat pe drumul real (Grid1.cNract/
* cDataAct.Text1.Valid()), cat si prin apel direct cu literalul 'nract'. Grid1.cPartC.
* Text1.Valid NU foloseste copiaza_valoare (are logica proprie, verificari directe pe
* rand_dvi) - neafectat de aceasta problema, testat separat in test_repro_trigger_partener.prg.
*
* Rulare:
* powershell -ExecutionPolicy Bypass -File test_diag_controlsource_calificat.ps1
SET SAFETY OFF
SET TALK OFF
SET DELETED ON
SET EXACT ON
SET CENTURY ON
SET DATE DMY
SET DECIMALS TO 4
SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcUILog, gcSyncDir
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_diag_controlsource_calificat_log.txt"
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_diag_controlsource_calificat\"
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
ON ERROR DO EeErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
TRY
LOCAL gcAppPath, lcPath
gcAppPath = "D:\ROA\ROAGEST\"
SET DEFAULT TO (gcAppPath)
lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ;
gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
SET PATH TO &lcPath ADDITIVE
DO EeLog WITH 'SET PATH OK'
*----- CLASE -----
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
SET CLASSLIB TO GESTIUNI ADDITIVE
SET CLASSLIB TO CAUT ADDITIVE
SET CLASSLIB TO BAZA ADDITIVE
SET CLASSLIB TO comun ADDITIVE
SET CLASSLIB TO accessibility.vcx ADDITIVE
SET CLASSLIB TO messagebox ADDITIVE
SET CLASSLIB TO registry ADDITIVE
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
SET CLASSLIB TO DECABAZA ADDITIVE
SET CLASSLIB TO onomenclatoare ADDITIVE
SET CLASSLIB TO stocuri.vcx ADDITIVE
SET CLASSLIB TO rulaje.vcx ADDITIVE
SET CLASSLIB TO ointroduceri ADDITIVE
SET CLASSLIB TO ointroduceri_web ADDITIVE
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
SET CLASSLIB TO overificari ADDITIVE
SET CLASSLIB TO ferestre_oracle ADDITIVE
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
SET CLASSLIB TO configurare.vcx ADDITIVE
SET CLASSLIB TO serii_numere.vcx ADDITIVE
SET CLASSLIB TO omodificari.vcx ADDITIVE
SET CLASSLIB TO ocompensari.vcx ADDITIVE
SET CLASSLIB TO caut_ora ADDITIVE
SET CLASSLIB TO onote_contabile ADDITIVE
SET CLASSLIB TO otoolbar ADDITIVE
SET CLASSLIB TO bon_fisc ADDITIVE
SET CLASSLIB TO onom_articole ADDITIVE
SET CLASSLIB TO onom_retete ADDITIVE
SET CLASSLIB TO orapoarte ADDITIVE
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
SET CLASSLIB TO orapoarte_parametri ADDITIVE
SET CLASSLIB TO ONOM_CURS ADDITIVE
SET CLASSLIB TO ctl32_statusbar_fals.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 ctl32_balloontip.vcx ADDITIVE
SET CLASSLIB TO ocriterii.vcx ADDITIVE
SET CLASSLIB TO oavize.vcx ADDITIVE
SET CLASSLIB TO onomenclatoare2 ADDITIVE
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
SET CLASSLIB TO oimportxml.vcx ADDITIVE
SET CLASSLIB TO excelxml.vcx ADDITIVE
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
DO EeLog WITH 'SET CLASSLIB OK'
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
SET PROCEDURE TO PROCEDURI
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.prg" ADDITIVE
SET PROCEDURE TO acces_meniu ADDITIVE
SET PROCEDURE TO cauta_alfa ADDITIVE
SET PROCEDURE TO pmenu ADDITIVE
SET PROCEDURE TO proceduri_comune ADDITIVE
SET PROCEDURE TO quitapp ADDITIVE
SET PROCEDURE TO init_program ADDITIVE
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
SET PROCEDURE TO orapoarte.prg ADDITIVE
SET PROCEDURE TO mesaje ADDITIVE
SET PROCEDURE TO oserii_numere.prg ADDITIVE
SET PROCEDURE TO oexport.prg ADDITIVE
SET PROCEDURE TO wwConfig.prg ADDITIVE
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
SET PROCEDURE TO validare.prg ADDITIVE
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
SET PROCEDURE TO updateserver.prg ADDITIVE
SET PROCEDURE TO oinainte_de.prg ADDITIVE
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
SET PROCEDURE TO OINTRODUCERI ADDITIVE
SET PROCEDURE TO oHeader.prg ADDITIVE
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
SET PROCEDURE TO osecurity ADDITIVE
SET PROCEDURE TO ocautare ADDITIVE
SET PROCEDURE TO orefaceri ADDITIVE
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
SET PROCEDURE TO ini.prg ADDITIVE
SET PROCEDURE TO odocumente.prg ADDITIVE
SET PROCEDURE TO regex.prg ADDITIVE
SET PROCEDURE TO wwutils.prg ADDITIVE
SET PROCEDURE TO inchidere_k ADDITIVE
SET PROCEDURE TO iniacces.prg ADDITIVE
SET PROCEDURE TO oupdate.prg ADDITIVE
SET PROCEDURE TO procese.prg ADDITIVE
SET PROCEDURE TO version.prg ADDITIVE
SET PROCEDURE TO xmlaccess.prg ADDITIVE
SET PROCEDURE TO xmlparser.prg ADDITIVE
SET PROCEDURE TO filebringer.prg ADDITIVE
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
SET PROCEDURE TO wwhttp.prg ADDITIVE
SET PROCEDURE TO xdate.prg ADDITIVE
SET PROCEDURE TO ofacturare.prg ADDITIVE
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
SET PROCEDURE TO email.prg ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
DO EeLog WITH 'SET PROCEDURE OK'
*----- Globale -----
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
STORE 2 TO gnPc, gnPval, gnPVal
gnPcant = 3
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
gl406 = .T.
gcS = 'CONTAFIN'
gnAn = YEAR(DATE())
gnLuna = MONTH(DATE())
gnIdFirma = 110
gnIdSucursala = 110
gcAcces = "1;2;3;4;5;6;7;8;"
gcFirma = gcS
PUBLIC nror(65000)
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip, gcMockArtCodmat
gnMockRaspuns = 6
gcMockUltimMesaj = ''
gnMockUltimTip = 0
PUBLIC gnButon
gnButon = 1
gcMockArtCodmat = ''
PUBLIC goExecutor, goApp
goExecutor = CREATEOBJECT('dummyexecutor')
goApp = CREATEOBJECT('dummyapp')
*----- poAct: antetul notei (factura import EUR, curs 5.23) -----
PUBLIC poAct
poAct = CREATEOBJECT('Custom')
poAct.AddProperty('nume_val', 'EUR')
poAct.AddProperty('curs', 5.23)
poAct.AddProperty('proc_tva', 1.21)
poAct.AddProperty('nnir', 0)
poAct.AddProperty('id_valuta', 978)
poAct.AddProperty('id_fdoc', 1)
poAct.AddProperty('fdoc', 'Factura')
poAct.AddProperty('id_partc', 601)
poAct.AddProperty('partc', 'FURNIZOR EXTERN GMBH')
poAct.AddProperty('serie_act', '')
poAct.AddProperty('dataact', DATE())
poAct.AddProperty('tva_incasare', 0)
poAct.AddProperty('id_set', 1)
poAct.AddProperty('id_gestin', 1)
*----- jtva_coloane2 / saft_taxtable: perechi reale 21% (achizitii interne + import) -----
IF USED('jtva_coloane2')
USE IN ('jtva_coloane2')
ENDIF
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
INSERT INTO jtva_coloane2 VALUES (3, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
INSERT INTO jtva_coloane2 VALUES (4, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
IF USED('saft_taxtable')
USE IN ('saft_taxtable')
ENDIF
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
INDEX ON taxcode TAG taxcode
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('', 0, '', 0, 1, 1, 1, 1)
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
DO CreeazaIntrodc WITH 'introdc'
DO CreeazaIntrodc WITH 'introdc_sablon'
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
id_jtva_coloana, ptva, explicatie_tva) ;
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
id_jtva_coloana, ptva, explicatie_tva) ;
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
GO TOP IN introdc_sablon
DO CreeazaRulTemp
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
*-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md)
SELECT introdc
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
SET ORDER TO ord_doc
*-- vezi antetul test_e2e_dvi_ron_discount.prg: tlIntern BARA, aceeasi valoare ca la CREATEOBJECT
PRIVATE tlIntern
tlIntern = .F.
PUBLIC gcTempPath
gcTempPath = ADDBS(SYS(2023))
PUBLIC gnHandle
gnHandle = -1
PUBLIC gnTipGest
gnTipGest = 0
PUBLIC gcCondSucursala
gcCondSucursala = ''
DO EeLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F. - mod import)'
PUBLIC goObj
goObj = CREATEOBJECT('IMPORT_nota', .F.)
IF VARTYPE(goObj) <> 'O'
DO EeLog WITH 'FAIL: instantiere import_nota'
DO HarnessDone WITH 'done-error'
QUIT
ENDIF
goObj.lDialogAratat = .T.
goObj.oact = poAct
goObj.lSpargeSecundare = .F.
goObj.WindowType = 0
goObj.Visible = .T.
goObj.Show()
goObj.WindowState = 2
DOEVENTS FORCE
SELECT rul_temp
ZAP
goObj.gridart.Refresh()
DOEVENTS FORCE
PRIVATE pnAsserts, pnPass
STORE 0 TO pnAsserts, pnPass
DO HarnessStep WITH 0, 'nota goala afisata, mod import (.F.)'
*========================= DIAGNOSTIC: insert DIRECT (fara dialog), izoleaza copiaza_valoare() =========================
*-- doua randuri, ACELASI doc_key: B (nract=15000/id_fdoc=1/id_partc=601) si T-DVI
*-- (nract=101/id_fdoc=2/id_partc=900, rand_dvi=1) - minim necesar ca sa testam DOAR garda
*-- din copiaza_valoare(), fara sparge_document/sincronizare/dialog in cale.
SELECT introdc
APPEND BLANK
REPLACE nract WITH 15000, id_fdoc WITH 1, id_partc WITH 601, serie_act WITH '', ;
tip_rand WITH 'B', nr_doc WITH 1, scd WITH '371', scc WITH '401', suma WITH 5000, ;
rand_dvi WITH 0, dataact WITH {^2026-07-20}
APPEND BLANK
REPLACE nract WITH 101, id_fdoc WITH 2, id_partc WITH 900, serie_act WITH '', ;
tip_rand WITH 'T', nr_doc WITH 1, scd WITH '4426', scc WITH '401', suma WITH 900, ;
rand_dvi WITH 1, dataact WITH {^2026-07-25}
*-- doc_key IDENTIC pe ambele randuri (T-DVI pastreaza doc_key-ul MAMEI, calculat pe baza
*-- identitatii facturii B - la fel ca in do_adauga_factura, unde Replace doc_key se face
*-- INAINTE de suprascrierea cu identitatea vamala pe randul T)
LOCAL lcDocKeyComun
SELECT introdc
GO TOP
lcDocKeyComun = goObj.calc_doc_key()
REPLACE ALL doc_key WITH lcDocKeyComun
GO TOP
DO DumpIntrodc WITH 'DUMP inainte de copiaza_valoare (insert direct, fara dialog)'
DO HarnessStep WITH 1, 'randuri B/T-DVI inserate direct, acelasi doc_key'
*========================= TRIGGER: pointerul pe randul T-DVI, copiaza_valoare('nract') DIRECT =========================
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
=Assert3('17-pozitionare pe randul T-DVI reusita (inainte de trigger)', IIF(FOUND(),1,0), 1)
LOCAL llTriggerOk
llTriggerOk = .F.
IF FOUND()
DO EeLog WITH 'DEBUG Grid1.cNract.ControlSource=[' + goObj.Grid1.cNract.ControlSource + '] LEN=' + TRANSFORM(LEN(goObj.Grid1.cNract.ControlSource)) + ' vs literal [nract] LEN=' + TRANSFORM(LEN('nract'))
DO EeLog WITH 'DEBUG Grid1.cDataAct.ControlSource=[' + goObj.Grid1.cDataAct.ControlSource + '] LEN=' + TRANSFORM(LEN(goObj.Grid1.cDataAct.ControlSource))
DO EeLog WITH 'DEBUG Grid1.cSerie_act.ControlSource=[' + goObj.Grid1.cSerie_act.ControlSource + '] LEN=' + TRANSFORM(LEN(goObj.Grid1.cSerie_act.ControlSource))
goObj.Grid1.cNract.Text1.Valid()
llTriggerOk = .T.
ENDIF
DOEVENTS FORCE
=Assert3('18-TRIGGER executat fara eroare', IIF(llTriggerOk,1,0), 1)
DO EeLog WITH 'TRIGGER folosit: Grid1.cNract.Text1.Valid()'
DO DumpIntrodc WITH 'DUMP dupa TRIGGER (copiaza_valoare direct, pointer pe T-DVI)'
*========================= TRIGGER 2: acelasi izolat, dar pe coloana Data (cDataAct) =========================
*-- randul B primeste si el o data (diferita de T-DVI), ca sa se poata verifica propagarea
SELECT introdc
GO 1
REPLACE dataact WITH {^2026-07-20}
GO 2
REPLACE dataact WITH {^2026-07-25}
GO 2
LOCAL llTrigger2Ok
llTrigger2Ok = .F.
goObj.Grid1.cDataAct.Text1.Valid()
llTrigger2Ok = .T.
DOEVENTS FORCE
=Assert3('19-TRIGGER 2 (cDataAct) executat fara eroare', IIF(llTrigger2Ok,1,0), 1)
DO DumpIntrodc WITH 'DUMP dupa TRIGGER 2 (cDataAct.Valid, pointer pe T-DVI)'
GO 1 IN introdc
pnAsserts = pnAsserts + 1
IF introdc.dataact == {^2026-07-20}
pnPass = pnPass + 1
DO EeLog WITH ' PASS 20-randul B (dataact) NESCHIMBAT dupa TRIGGER 2 (=' + DTOC(introdc.dataact) + ')'
ELSE
DO EeLog WITH ' FAIL 20-randul B (dataact) a devenit ' + DTOC(introdc.dataact) + ' dupa TRIGGER 2 (asteptat 20.07.2026)'
ENDIF
*========================= ASSERT-URI DUPA TRIGGER: nract pe B trebuie sa RAMANA 15000 =========================
LOCAL llBugG, llBugS, lnCntSVerif
llBugG = .F.
llBugS = .F.
SELECT introdc
LOCATE FOR tip_rand == 'B' AND Nvl(rand_dvi,0) <> 1
IF FOUND()
pnAsserts = pnAsserts + 1
IF nract == 15000
pnPass = pnPass + 1
DO EeLog WITH ' PASS 20-B.nract ramane 15000 dupa trigger (=' + TRANSFORM(nract) + ')'
ELSE
llBugG = .T.
DO EeLog WITH ' FAIL 20-B.nract dupa trigger = ' + TRANSFORM(nract) + ' (asteptat 15000) -> BUG'
ENDIF
ELSE
pnAsserts = pnAsserts + 1
DO EeLog WITH ' FAIL 20: randul B negasit dupa trigger'
ENDIF
*-- randul T-DVI insusi trebuie sa ramana 101 (sursa neschimbata de propriul apel)
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
=Assert3('22-T-DVI.nract ramane 101 (randul sursa neschimbat)', IIF(FOUND(), nract, -1), 101)
*-- doc_key: NU trebuie regenerat (llSursaProtejata blocheaza si regenerarea de doc_key)
LOCAL lcDocKeyB, lcDocKeyT
SELECT introdc
LOCATE FOR tip_rand == 'B'
lcDocKeyB = ALLTRIM(NVL(doc_key,''))
LOCATE FOR Nvl(rand_dvi,0) = 1
lcDocKeyT = ALLTRIM(NVL(doc_key,''))
pnAsserts = pnAsserts + 1
IF lcDocKeyB == lcDocKeyT
pnPass = pnPass + 1
DO EeLog WITH ' PASS 25-doc_key B si T-DVI raman identice dupa trigger ([' + lcDocKeyB + '])'
ELSE
DO EeLog WITH ' FAIL 25-doc_key B=[' + lcDocKeyB + '] <> doc_key T-DVI=[' + lcDocKeyT + '] dupa trigger'
ENDIF
LOCAL llBugSDupaSync2
llBugSDupaSync2 = .F.
DO HarnessStep WITH 2, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
DO EeLog WITH '========================================================='
IF llBugG OR llBugS OR llBugSDupaSync2
DO EeLog WITH 'BUG CONFIRMAT: nract-ul randului T-DVI (101) s-a propagat peste nract-ul' + ;
' randurilor B/G/S ale facturii principale (asteptat 15000) dupa ce Valid()/' + ;
'copiaza_valoare() a rulat cu pointerul pe randul T-DVI.'
ELSE
DO EeLog WITH 'BUG NECONFIRMAT: nract-ul randurilor B/G/S a ramas 15000 dupa trigger si dupa re-sincronizare.'
ENDIF
DO EeLog WITH '========================================================='
DO EeLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
IF pnPass = pnAsserts
DO EeLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
ELSE
DO EeLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
ENDIF
DO HarnessDone WITH 'done'
CATCH TO loExc
DO EeLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
DO HarnessDone WITH 'done-error'
ENDTRY
QUIT
*==================================================================================
PROCEDURE DumpIntrodc
LPARAMETERS tcTitlu
LOCAL lcSelAnt, lnRecAnt
lcSelAnt = SELECT()
lnRecAnt = IIF(USED('introdc'), IIF(EOF('introdc') OR BOF('introdc'), 0, RECNO('introdc')), 0)
DO EeLog WITH tcTitlu
IF !USED('introdc')
DO EeLog WITH ' (introdc neinstantiat)'
RETURN
ENDIF
SELECT introdc
SCAN
DO EeLog WITH ' tip_rand=' + ALLTRIM(NVL(tip_rand,'?')) + ' nract=' + TRANSFORM(NVL(nract,0)) + ;
' doc_key=[' + ALLTRIM(NVL(doc_key,'')) + '] rand_dvi=' + TRANSFORM(NVL(rand_dvi,0)) + ;
' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ' suma=' + TRANSFORM(NVL(suma,0))
ENDSCAN
IF lnRecAnt > 0
TRY
GO lnRecAnt
CATCH
GO TOP
ENDTRY
ENDIF
SELECT (lcSelAnt)
ENDPROC
PROCEDURE CreeazaIntrodc
*-- coloane rand_dvi N(1), valuta_proprie N(1) (rand_dvi = randul T-DVI)
LPARAMETERS tcAlias
IF USED(tcAlias)
USE IN (tcAlias)
ENDIF
CREATE CURSOR (tcAlias) ( ;
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
ENDPROC
PROCEDURE CreeazaRulTemp
IF USED('rul_temp')
USE IN ('rul_temp')
ENDIF
CREATE CURSOR rul_temp ( ;
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
, fdoc C(30), id_fdoc N(18,4);
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
ENDPROC
FUNCTION RECCOUNT_ACTIVE
LPARAMETERS tcAlias
LOCAL lnSel, lnCnt
lnSel = SELECT()
SELECT (tcAlias)
COUNT TO lnCnt FOR !DELETED()
SELECT (lnSel)
RETURN lnCnt
ENDFUNC
PROCEDURE Assert3
LPARAMETERS tcLabel, tuActual, tuExpected
pnAsserts = pnAsserts + 1
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
pnPass = pnPass + 1
DO EeLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
ELSE
DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
ENDIF
ENDPROC
PROCEDURE AssertStr
LPARAMETERS tcLabel, tcActual, tcExpected
pnAsserts = pnAsserts + 1
IF tcActual == tcExpected
pnPass = pnPass + 1
DO EeLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])'
ELSE
DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])'
ENDIF
ENDPROC
PROCEDURE EeErr
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
DO EeLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
ENDPROC
PROCEDURE EeLog
LPARAMETERS tcMsg
SET SAFETY OFF
LOCAL lcL
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
ENDPROC
DEFINE CLASS dummyapp AS Custom
PROCEDURE ReadIni
LPARAMETERS tcSection, tcKey
RETURN ''
ENDPROC
PROCEDURE WriteIni
LPARAMETERS tcSection, tcKey, tcValue
RETURN .T.
ENDPROC
ENDDEFINE
DEFINE CLASS dummyexecutor AS Custom
cEroare = ''
PROCEDURE oExecute
LPARAMETERS tcSql, tcCursor
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
DO CreeazaJtvaColoaneView WITH m.tcCursor
RETURN 1
ENDIF
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
RETURN 1
ENDIF
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
INSERT INTO (m.tcCursor) VALUES ('', '')
RETURN 1
ENDIF
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (acont C(20))
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
RETURN 1
ENDIF
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
RETURN 1
ENDIF
IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ;
explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1))
INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0)
RETURN 1
ENDIF
CREATE CURSOR (m.tcCursor) (id_temp N(1))
RETURN 1
ENDPROC
PROCEDURE oExecuta
LPARAMETERS tcSql, tcCursor
IF !EMPTY(m.tcCursor)
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
ELSE
CREATE CURSOR (m.tcCursor) (id_temp N(1))
ENDIF
ENDIF
RETURN .T.
ENDPROC
PROCEDURE oSelect2Value
LPARAMETERS tcSql, toValue
toValue = ''
RETURN 1
ENDPROC
PROCEDURE oReset
ENDPROC
ENDDEFINE
PROCEDURE CreeazaJtvaColoaneView
LPARAMETERS tcCursor
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 3, 301204)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 4, 301204)
ENDPROC

View File

@@ -0,0 +1,15 @@
# test_diag_controlsource_calificat.ps1 - DIAGNOSTIC: izoleaza copiaza_valoare() de dialog/
# sparge_document, ca sa demonstreze ca garda noua (rand-sursa protejat, adaugata in fix)
# functioneaza CORECT cand tcCamp e literalul 'nract', dar e OCOLITA cand tcCamp vine din
# This.Parent.ControlSource al coloanei Grid1.cNract, pentru ca la runtime ControlSource
# devine "introdc.nract" (calificat cu alias-ul), nu "nract" (asa cum apare la design-time
# in .vcx) - vezi test_diag_controlsource_calificat_log.txt.
$ErrorActionPreference = 'Stop'
$Teste = $PSScriptRoot
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
-TestPrg (Join-Path $Teste 'test_diag_controlsource_calificat.prg') `
-Steps @('nota_goala','randuri_inserate','final') `
-ShotsDir (Join-Path $Teste 'screenshots_diag_controlsource_calificat') `
-SyncDir (Join-Path $Teste 'uisync_diag_controlsource_calificat') `
-StepTimeoutSec 180 `
-ReadyTimeoutSec 180

View File

@@ -0,0 +1,853 @@
* test_repro_bug_nract_dvi_propagat.prg
* Test de REPRODUCERE (nu modifica NIMIC din codul aplicatiei). Ipoteza de verificat:
* Grid1.cNract.Text1.Valid (COMUN\clase\ointroduceri.vcx) apeleaza neconditionat
* Thisform.copiaza_valoare('nract'). copiaza_valoare propaga valoarea campului pe tot
* grupul doc_key, sarind DOAR randurile-TINTA cu rand_dvi=1 - dar NU protejeaza cazul in
* care randul-SURSA (pozitia curenta la apel) e chiar randul T al DVI-ului. Randul T al
* DVI-ului pastreaza doc_key-ul facturii-mama (vezi do_adauga_factura, cazul cTipTva='D':
* "doc_key ramane al documentului-mama, desi randul poarta partener/conturi de vama"),
* deci daca Valid se declanseaza cu pointerul din introdc pe randul DVI, numarul DVI-ului
* (101) s-ar scrie peste nract-ul randurilor B/G/S ale facturii principale (15000).
*
* Model de test (structura harness, capcane, toDlg inline): test_e2e_dvi_ron_discount.prg.
* Scenariu: factura import EUR (curs 5.23), discount financiar (doar baza), TVA pe DVI
* platit in RON, DVI cu nract/partener propriu (vama). Flux REAL: import_adauga_factura
* (dialog) + do_adauga_articol() + sincronizeaza() reale, NU insert direct in cursoare.
*
* Rulare:
* powershell -ExecutionPolicy Bypass -File test_repro_bug_nract_dvi_propagat.ps1
SET SAFETY OFF
SET TALK OFF
SET DELETED ON
SET EXACT ON
SET CENTURY ON
SET DATE DMY
SET DECIMALS TO 4
SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcUILog, gcSyncDir
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_repro_bug_nract_dvi_propagat_log.txt"
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_repro_bug_nract_dvi\"
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
ON ERROR DO EeErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
TRY
LOCAL gcAppPath, lcPath
gcAppPath = "D:\ROA\ROAGEST\"
SET DEFAULT TO (gcAppPath)
lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ;
gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
SET PATH TO &lcPath ADDITIVE
DO EeLog WITH 'SET PATH OK'
*----- CLASE -----
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
SET CLASSLIB TO GESTIUNI ADDITIVE
SET CLASSLIB TO CAUT ADDITIVE
SET CLASSLIB TO BAZA ADDITIVE
SET CLASSLIB TO comun ADDITIVE
SET CLASSLIB TO accessibility.vcx ADDITIVE
SET CLASSLIB TO messagebox ADDITIVE
SET CLASSLIB TO registry ADDITIVE
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
SET CLASSLIB TO DECABAZA ADDITIVE
SET CLASSLIB TO onomenclatoare ADDITIVE
SET CLASSLIB TO stocuri.vcx ADDITIVE
SET CLASSLIB TO rulaje.vcx ADDITIVE
SET CLASSLIB TO ointroduceri ADDITIVE
SET CLASSLIB TO ointroduceri_web ADDITIVE
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
SET CLASSLIB TO overificari ADDITIVE
SET CLASSLIB TO ferestre_oracle ADDITIVE
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
SET CLASSLIB TO configurare.vcx ADDITIVE
SET CLASSLIB TO serii_numere.vcx ADDITIVE
SET CLASSLIB TO omodificari.vcx ADDITIVE
SET CLASSLIB TO ocompensari.vcx ADDITIVE
SET CLASSLIB TO caut_ora ADDITIVE
SET CLASSLIB TO onote_contabile ADDITIVE
SET CLASSLIB TO otoolbar ADDITIVE
SET CLASSLIB TO bon_fisc ADDITIVE
SET CLASSLIB TO onom_articole ADDITIVE
SET CLASSLIB TO onom_retete ADDITIVE
SET CLASSLIB TO orapoarte ADDITIVE
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
SET CLASSLIB TO orapoarte_parametri ADDITIVE
SET CLASSLIB TO ONOM_CURS ADDITIVE
SET CLASSLIB TO ctl32_statusbar_fals.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 ctl32_balloontip.vcx ADDITIVE
SET CLASSLIB TO ocriterii.vcx ADDITIVE
SET CLASSLIB TO oavize.vcx ADDITIVE
SET CLASSLIB TO onomenclatoare2 ADDITIVE
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
SET CLASSLIB TO oimportxml.vcx ADDITIVE
SET CLASSLIB TO excelxml.vcx ADDITIVE
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
DO EeLog WITH 'SET CLASSLIB OK'
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
SET PROCEDURE TO PROCEDURI
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.prg" ADDITIVE
SET PROCEDURE TO acces_meniu ADDITIVE
SET PROCEDURE TO cauta_alfa ADDITIVE
SET PROCEDURE TO pmenu ADDITIVE
SET PROCEDURE TO proceduri_comune ADDITIVE
SET PROCEDURE TO quitapp ADDITIVE
SET PROCEDURE TO init_program ADDITIVE
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
SET PROCEDURE TO orapoarte.prg ADDITIVE
SET PROCEDURE TO mesaje ADDITIVE
SET PROCEDURE TO oserii_numere.prg ADDITIVE
SET PROCEDURE TO oexport.prg ADDITIVE
SET PROCEDURE TO wwConfig.prg ADDITIVE
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
SET PROCEDURE TO validare.prg ADDITIVE
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
SET PROCEDURE TO updateserver.prg ADDITIVE
SET PROCEDURE TO oinainte_de.prg ADDITIVE
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
SET PROCEDURE TO OINTRODUCERI ADDITIVE
SET PROCEDURE TO oHeader.prg ADDITIVE
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
SET PROCEDURE TO osecurity ADDITIVE
SET PROCEDURE TO ocautare ADDITIVE
SET PROCEDURE TO orefaceri ADDITIVE
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
SET PROCEDURE TO ini.prg ADDITIVE
SET PROCEDURE TO odocumente.prg ADDITIVE
SET PROCEDURE TO regex.prg ADDITIVE
SET PROCEDURE TO wwutils.prg ADDITIVE
SET PROCEDURE TO inchidere_k ADDITIVE
SET PROCEDURE TO iniacces.prg ADDITIVE
SET PROCEDURE TO oupdate.prg ADDITIVE
SET PROCEDURE TO procese.prg ADDITIVE
SET PROCEDURE TO version.prg ADDITIVE
SET PROCEDURE TO xmlaccess.prg ADDITIVE
SET PROCEDURE TO xmlparser.prg ADDITIVE
SET PROCEDURE TO filebringer.prg ADDITIVE
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
SET PROCEDURE TO wwhttp.prg ADDITIVE
SET PROCEDURE TO xdate.prg ADDITIVE
SET PROCEDURE TO ofacturare.prg ADDITIVE
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
SET PROCEDURE TO email.prg ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
DO EeLog WITH 'SET PROCEDURE OK'
*----- Globale -----
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
STORE 2 TO gnPc, gnPval, gnPVal
gnPcant = 3
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
gl406 = .T.
gcS = 'CONTAFIN'
gnAn = YEAR(DATE())
gnLuna = MONTH(DATE())
gnIdFirma = 110
gnIdSucursala = 110
gcAcces = "1;2;3;4;5;6;7;8;"
gcFirma = gcS
PUBLIC nror(65000)
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip, gcMockArtCodmat
gnMockRaspuns = 6
gcMockUltimMesaj = ''
gnMockUltimTip = 0
PUBLIC gnButon
gnButon = 1
gcMockArtCodmat = ''
PUBLIC goExecutor, goApp
goExecutor = CREATEOBJECT('dummyexecutor')
goApp = CREATEOBJECT('dummyapp')
*----- poAct: antetul notei (factura import EUR, curs 5.23) -----
PUBLIC poAct
poAct = CREATEOBJECT('Custom')
poAct.AddProperty('nume_val', 'EUR')
poAct.AddProperty('curs', 5.23)
poAct.AddProperty('proc_tva', 1.21)
poAct.AddProperty('nnir', 0)
poAct.AddProperty('id_valuta', 978)
poAct.AddProperty('id_fdoc', 1)
poAct.AddProperty('fdoc', 'Factura')
poAct.AddProperty('id_partc', 601)
poAct.AddProperty('partc', 'FURNIZOR EXTERN GMBH')
poAct.AddProperty('serie_act', '')
poAct.AddProperty('dataact', DATE())
poAct.AddProperty('tva_incasare', 0)
poAct.AddProperty('id_set', 1)
poAct.AddProperty('id_gestin', 1)
*----- jtva_coloane2 / saft_taxtable: perechi reale 21% (achizitii interne + import) -----
IF USED('jtva_coloane2')
USE IN ('jtva_coloane2')
ENDIF
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
INSERT INTO jtva_coloane2 VALUES (3, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
INSERT INTO jtva_coloane2 VALUES (4, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
IF USED('saft_taxtable')
USE IN ('saft_taxtable')
ENDIF
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
INDEX ON taxcode TAG taxcode
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('', 0, '', 0, 1, 1, 1, 1)
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
DO CreeazaIntrodc WITH 'introdc'
DO CreeazaIntrodc WITH 'introdc_sablon'
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
id_jtva_coloana, ptva, explicatie_tva) ;
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
id_jtva_coloana, ptva, explicatie_tva) ;
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
GO TOP IN introdc_sablon
DO CreeazaRulTemp
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
*-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md)
SELECT introdc
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
SET ORDER TO ord_doc
*-- vezi antetul test_e2e_dvi_ron_discount.prg: tlIntern BARA, aceeasi valoare ca la CREATEOBJECT
PRIVATE tlIntern
tlIntern = .F.
PUBLIC gcTempPath
gcTempPath = ADDBS(SYS(2023))
PUBLIC gnHandle
gnHandle = -1
PUBLIC gnTipGest
gnTipGest = 0
PUBLIC gcCondSucursala
gcCondSucursala = ''
DO EeLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F. - mod import)'
PUBLIC goObj
goObj = CREATEOBJECT('IMPORT_nota', .F.)
IF VARTYPE(goObj) <> 'O'
DO EeLog WITH 'FAIL: instantiere import_nota'
DO HarnessDone WITH 'done-error'
QUIT
ENDIF
goObj.lDialogAratat = .T.
goObj.oact = poAct
goObj.lSpargeSecundare = .F.
goObj.WindowType = 0
goObj.Visible = .T.
goObj.Show()
goObj.WindowState = 2
DOEVENTS FORCE
SELECT rul_temp
ZAP
goObj.gridart.Refresh()
DOEVENTS FORCE
PRIVATE pnAsserts, pnPass
STORE 0 TO pnAsserts, pnPass
DO HarnessStep WITH 0, 'nota goala afisata, mod import (.F.)'
*========================= DIALOG: factura EUR 15000 + TVA DVI (nract 101) in RON + discount =========================
PUBLIC goDlg
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
goDlg.cFelDoc = 'Factura'
goDlg.nIdFdoc = 1
goDlg.nNract = 15000
goDlg.dDataAct = DATE()
goDlg.nIdPartener = 601
goDlg.cPartener = 'FURNIZOR EXTERN GMBH'
goDlg.cExplicatia = 'Repro bug propagare nract DVI'
goDlg.nSuma = 1000
goDlg.nSumaLei = 0
goDlg.nCurs = 5.23
goDlg.nIdValuta = 978
goDlg.cValuta = 'EUR'
goDlg.chkInValutaCont.Value = 1
goDlg.chkParticipaValuta.Value = 1
goDlg.nIdExplicatieTva = 220
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
goDlg.nProcentTva = 21
*-- DVI: identitate proprie (document vamal, partener vamal, nract 101)
goDlg.cSerieDvi = ''
goDlg.nNractDvi = 101
goDlg.dDviData = DATE()
goDlg.nIdFdocDVI = 2
goDlg.cFelDocDvi = 'DVI'
goDlg.nDviIdPartener = 900
goDlg.cDviPartener = 'DIRECTIA VAMALA'
*-- comuta pe mod TVA DVI (radio "TVA in vama") - flux real, InteractiveChange
goDlg.optTipTva.Value = 2
goDlg.optTipTva.InteractiveChange()
*-- alegere RON pe blocul DVI, prin picker-ul REAL (mock_caut_valuta, coada FIFO cu 1 pick)
PUBLIC goMockValuta, goMockValutaCoada
goMockValuta = CREATEOBJECT('Custom')
goMockValuta.AddProperty('id_valuta', 1)
goMockValuta.AddProperty('nume_val', 'RON')
goMockValutaCoada = CREATEOBJECT('Collection')
LOCAL loValRon
loValRon = CREATEOBJECT('Custom')
loValRon.AddProperty('id_valuta', 1)
loValRon.AddProperty('nume_val', 'RON')
goMockValutaCoada.Add(loValRon)
goDlg.cmdDviValuta.Click()
=AssertStr('1-DVI valuta aleasa RON', ALLTRIM(goDlg.cDviValuta), 'RON')
=Assert3('2-DVI curs fixat la 1 (RON)', goDlg.nDviCurs, 1)
*-- discount financiar (doar baza, fara bifa) - Valid() reface TVA DVI pe baza NETA
goDlg.txtDiscBaza.Value = 100
goDlg.txtDiscBaza.Valid()
goDlg.WindowType = 0
goDlg.Visible = .T.
goDlg.Show()
DOEVENTS FORCE
DO HarnessStep WITH 1, 'dialog completat: factura EUR nract=15000, DVI nract=101, discount baza 100'
*-- valideaza() REAL de pe dialog (buton Termin apeleaza mereu asta primul)
LOCAL llOkValid
llOkValid = goDlg.valideaza()
=Assert3('3-dialog valideaza() reuseste', IIF(llOkValid,1,0), 1)
*-- toDlg construit INLINE in programul PRINCIPAL (capcana l, vezi antetul mock_caut_valuta.prg)
PUBLIC goT
goT = CREATEOBJECT('Empty')
=ADDPROPERTY(goT,'serie_act',ALLTRIM(NVL(goDlg.cSerieAct,'')))
=ADDPROPERTY(goT,'nract',goDlg.nNract)
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
=ADDPROPERTY(goT,'suma',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,IIF(goDlg.nSumaLei<>0,goDlg.nSumaLei,ROUND(goDlg.nSuma*goDlg.nCurs,gnPC)),goDlg.nSuma))
=ADDPROPERTY(goT,'suma_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nSuma,0))
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
=ADDPROPERTY(goT,'participa_valuta',(goDlg.chkParticipaValuta.Value=1))
=ADDPROPERTY(goT,'id_valuta',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nIdValuta,0))
=ADDPROPERTY(goT,'curs',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nCurs,0))
=ADDPROPERTY(goT,'nume_val',IIF(goDlg.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg.cValuta,'')),''))
=ADDPROPERTY(goT,'cTipTva',IIF(goDlg.optTipTva.Value=1,'F',IIF(goDlg.optTipTva.Value=2,'D','N')))
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
IF goDlg.optTipTva.Value = 2
=ADDPROPERTY(goT,'dvi_serie',CHRTRAN(ALLTRIM(NVL(goDlg.cSerieDvi,'')),CHR(34),''))
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
=ADDPROPERTY(goT,'dvi_dataact',goDlg.dDviData)
=ADDPROPERTY(goT,'dvi_id_fdoc',goDlg.nIdFdocDVI)
=ADDPROPERTY(goT,'dvi_fdoc',goDlg.cFelDocDvi)
=ADDPROPERTY(goT,'dvi_id_partc',goDlg.nDviIdPartener)
=ADDPROPERTY(goT,'dvi_partc',goDlg.cDviPartener)
=ADDPROPERTY(goT,'dvi_scc','401')
=ADDPROPERTY(goT,'dvi_tva_lei',goDlg.nDviTvaLei)
=ADDPROPERTY(goT,'dvi_tva_val',goDlg.nDviTvaVal)
=ADDPROPERTY(goT,'dvi_in_valuta',!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON'))
=ADDPROPERTY(goT,'dvi_id_valuta',goDlg.nDviIdValuta)
=ADDPROPERTY(goT,'dvi_curs',goDlg.nDviCurs)
=ADDPROPERTY(goT,'dvi_nume_val',ALLTRIM(NVL(goDlg.cDviValuta,'')))
=ADDPROPERTY(goT,'dvi_valuta_proprie',IIF(!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON') OR !(EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(goDlg.cValuta))=='RON'),IIF(goDlg.nDviIdValuta<>goDlg.nIdValuta OR goDlg.nDviCurs<>goDlg.nCurs,1,0),0))
ENDIF
=ADDPROPERTY(goT,'disc_baza_lei',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,ROUND(goDlg.nDiscBaza*goDlg.nCurs,gnPC),goDlg.nDiscBaza))
=ADDPROPERTY(goT,'disc_baza_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nDiscBaza,0))
*-- "Termin" REAL: oParinte.do_adauga_factura() cu toDlg-ul construit mai sus
LOCAL llOkAdauga
llOkAdauga = goObj.do_adauga_factura(goT)
=Assert3('4-do_adauga_factura(goT) reuseste (Termin)', IIF(llOkAdauga,1,0), 1)
goDlg.Hide()
DOEVENTS FORCE
DO HarnessStep WITH 2, 'dupa Termin pe dialog: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
DO DumpIntrodc WITH 'DUMP dupa Termin (inainte de articol/sincronizare)'
*========================= BASELINE: B/T-DVI/G create corect =========================
SELECT introdc
LOCATE FOR nract = 15000 AND tip_rand == 'B'
=Assert3('5-randul B (baza factura) gasit', IIF(FOUND(),1,0), 1)
IF FOUND()
=Assert3('6-BASELINE B.nract=15000', nract, 15000)
=AssertStr('7-B.scd=371', ALLTRIM(scd), '371')
ELSE
pnAsserts = pnAsserts + 2
DO EeLog WITH ' FAIL 6-7: randul B negasit'
ENDIF
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
=Assert3('8-randul T-DVI (rand_dvi=1) gasit', IIF(FOUND(),1,0), 1)
IF FOUND()
=Assert3('9-BASELINE T-DVI.nract=101', nract, 101)
=AssertStr('10-T-DVI.scd=4426', ALLTRIM(scd), '4426')
ELSE
pnAsserts = pnAsserts + 2
DO EeLog WITH ' FAIL 9-10: randul T-DVI negasit'
ENDIF
SELECT introdc
LOCATE FOR nract = 15000 AND tip_rand == 'G'
=Assert3('11-randul G (discount) gasit', IIF(FOUND(),1,0), 1)
IF FOUND()
=Assert3('12-BASELINE G.nract=15000', nract, 15000)
ELSE
pnAsserts = pnAsserts + 1
DO EeLog WITH ' FAIL 12: randul G negasit'
ENDIF
*========================= ARTICOL prin do_adauga_articol() REAL =========================
gcMockArtCodmat = 'ART-BULD-212'
LOCAL llEroareArt
llEroareArt = .F.
TRY
goObj.do_adauga_articol()
CATCH TO loExcArt
llEroareArt = .T.
DO EeLog WITH 'EROARE do_adauga_articol ' + TRANSFORM(loExcArt.ErrorNo) + ' [' + loExcArt.Message + ']'
ENDTRY
DOEVENTS FORCE
=Assert3('13-do_adauga_articol() fara eroare', IIF(llEroareArt,0,1), 1)
SELECT rul_temp
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
=Assert3('14-articolul adaugat in rul_temp', IIF(FOUND(),1,0), 1)
IF FOUND()
REPLACE cant WITH 1, pret_val WITH 800, pretd WITH 800, pret WITH ROUND(800*5.23,4), ;
pret_lei WITH ROUND(800*5.23,4), cota_tva WITH 21
ELSE
pnAsserts = pnAsserts + 1
DO EeLog WITH ' FAIL 14: articolul nu a fost adaugat'
ENDIF
goObj.gridart.Refresh()
DOEVENTS FORCE
DO HarnessStep WITH 3, 'articol adaugat (BULDOEXCAVATOR, 800 EUR)'
*========================= sincronizeaza() REAL (creeaza randurile S) =========================
LOCAL llEroareSync
llEroareSync = .F.
TRY
goObj.sincronizeaza()
CATCH TO loExcSync
llEroareSync = .T.
DO EeLog WITH 'EROARE sincronizeaza() ' + TRANSFORM(loExcSync.ErrorNo) + ' [' + loExcSync.Message + '] in ' + loExcSync.Procedure + ':' + TRANSFORM(loExcSync.LineNo)
ENDTRY
DOEVENTS FORCE
=Assert3('15-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1)
DO DumpIntrodc WITH 'DUMP dupa sincronizeaza() (inainte de TRIGGER)'
LOCAL lnCntSDoc1
lnCntSDoc1 = 0
SELECT introdc
SCAN FOR nract = 15000 AND tip_rand == 'S'
lnCntSDoc1 = lnCntSDoc1 + 1
ENDSCAN
=Assert3('16-cel putin un rand S creat de sincronizeaza()', IIF(lnCntSDoc1 >= 1, 1, 0), 1)
DO HarnessStep WITH 4, 'sincronizat: ' + TRANSFORM(lnCntSDoc1) + ' rand(uri) S, nract=15000 pe B/G/S (baseline)'
*========================= TRIGGER: pointerul pe randul T-DVI, Valid() pe coloana Nr =========================
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
=Assert3('17-pozitionare pe randul T-DVI reusita (inainte de trigger)', IIF(FOUND(),1,0), 1)
LOCAL llTriggerOk, lcVarianta
llTriggerOk = .F.
lcVarianta = ''
IF FOUND()
TRY
goObj.Grid1.cNract.Text1.Valid()
llTriggerOk = .T.
lcVarianta = 'Grid1.cNract.Text1.Valid() (apel direct pe coloana din grid)'
CATCH TO loExcTrig1
DO EeLog WITH 'INFO Grid1.cNract.Text1.Valid() a esuat (' + TRANSFORM(loExcTrig1.ErrorNo) + ' ' + loExcTrig1.Message + '), incerc fallback copiaza_valoare()'
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
TRY
goObj.copiaza_valoare('nract')
llTriggerOk = .T.
lcVarianta = 'copiaza_valoare(''nract'') (fallback, apel direct pe metoda)'
CATCH TO loExcTrig2
DO EeLog WITH 'EROARE si fallback copiaza_valoare(''nract'') a esuat: ' + TRANSFORM(loExcTrig2.ErrorNo) + ' ' + loExcTrig2.Message
ENDTRY
ENDTRY
ENDIF
DOEVENTS FORCE
=Assert3('18-TRIGGER executat fara eroare', IIF(llTriggerOk,1,0), 1)
DO EeLog WITH 'TRIGGER folosit: ' + lcVarianta
DO DumpIntrodc WITH 'DUMP dupa TRIGGER (Valid()/copiaza_valoare pe randul T-DVI)'
*========================= ASSERT-URI DUPA TRIGGER: nract pe G/S trebuie sa RAMANA 15000 =========================
*-- randul B NU mai exista in acest punct (sincronizeaza() de mai sus l-a transformat in S -
*-- comportament normal, nu are rost sa-l cautam aici; verificarea lui se face doar S mai jos).
LOCAL llBugG, llBugS, lnCntSVerif
llBugG = .F.
llBugS = .F.
SELECT introdc
LOCATE FOR tip_rand == 'G' AND Nvl(rand_dvi,0) <> 1
IF FOUND()
pnAsserts = pnAsserts + 1
IF nract == 15000
pnPass = pnPass + 1
DO EeLog WITH ' PASS 20-G.nract ramane 15000 dupa trigger (=' + TRANSFORM(nract) + ')'
ELSE
llBugG = .T.
DO EeLog WITH ' FAIL 20-G.nract dupa trigger = ' + TRANSFORM(nract) + ' (asteptat 15000) -> BUG'
ENDIF
ELSE
pnAsserts = pnAsserts + 1
DO EeLog WITH ' FAIL 20: randul G negasit dupa trigger'
ENDIF
lnCntSVerif = 0
SELECT introdc
SCAN FOR tip_rand == 'S' AND Nvl(rand_dvi,0) <> 1
lnCntSVerif = lnCntSVerif + 1
pnAsserts = pnAsserts + 1
IF nract == 15000
pnPass = pnPass + 1
DO EeLog WITH ' PASS 21.' + TRANSFORM(lnCntSVerif) + '-S.nract ramane 15000 dupa trigger (=' + TRANSFORM(nract) + ')'
ELSE
llBugS = .T.
DO EeLog WITH ' FAIL 21.' + TRANSFORM(lnCntSVerif) + '-S.nract dupa trigger = ' + TRANSFORM(nract) + ' (asteptat 15000) -> BUG'
ENDIF
ENDSCAN
*-- randul T-DVI insusi trebuie sa ramana 101 (sursa neschimbata de propriul Valid)
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
=Assert3('22-T-DVI.nract ramane 101 (randul sursa neschimbat)', IIF(FOUND(), nract, -1), 101)
*========================= dupa un NOU sincronizeaza(): randurile S refac starea =========================
LOCAL llEroareSync2
llEroareSync2 = .F.
TRY
goObj.sincronizeaza()
CATCH TO loExcSync2
llEroareSync2 = .T.
DO EeLog WITH 'EROARE al doilea sincronizeaza() ' + TRANSFORM(loExcSync2.ErrorNo) + ' [' + loExcSync2.Message + ']'
ENDTRY
DOEVENTS FORCE
=Assert3('23-al doilea sincronizeaza() fara eroare', IIF(llEroareSync2,0,1), 1)
DO DumpIntrodc WITH 'DUMP dupa AL DOILEA sincronizeaza() (post-trigger)'
LOCAL llBugSDupaSync2
llBugSDupaSync2 = .F.
lnCntSVerif = 0
SELECT introdc
SCAN FOR tip_rand == 'S' AND Nvl(rand_dvi,0) <> 1
lnCntSVerif = lnCntSVerif + 1
pnAsserts = pnAsserts + 1
IF nract == 15000
pnPass = pnPass + 1
DO EeLog WITH ' PASS 24.' + TRANSFORM(lnCntSVerif) + '-dupa al 2-lea sync: S.nract=15000 (=' + TRANSFORM(nract) + ')'
ELSE
llBugSDupaSync2 = .T.
DO EeLog WITH ' FAIL 24.' + TRANSFORM(lnCntSVerif) + '-dupa al 2-lea sync: S.nract=' + TRANSFORM(nract) + ' (asteptat 15000) -> BUG persista dupa sincronizare'
ENDIF
ENDSCAN
DO HarnessStep WITH 5, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
DO EeLog WITH '========================================================='
IF llBugG OR llBugS OR llBugSDupaSync2
DO EeLog WITH 'BUG CONFIRMAT: nract-ul randului T-DVI (101) s-a propagat peste nract-ul' + ;
' randurilor B/G/S ale facturii principale (asteptat 15000) dupa ce Valid()/' + ;
'copiaza_valoare() a rulat cu pointerul pe randul T-DVI.'
ELSE
DO EeLog WITH 'BUG NECONFIRMAT: nract-ul randurilor B/G/S a ramas 15000 dupa trigger si dupa re-sincronizare.'
ENDIF
DO EeLog WITH '========================================================='
DO EeLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
IF pnPass = pnAsserts
DO EeLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
ELSE
DO EeLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
ENDIF
DO HarnessDone WITH 'done'
CATCH TO loExc
DO EeLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
DO HarnessDone WITH 'done-error'
ENDTRY
QUIT
*==================================================================================
PROCEDURE DumpIntrodc
LPARAMETERS tcTitlu
LOCAL lcSelAnt, lnRecAnt
lcSelAnt = SELECT()
lnRecAnt = IIF(USED('introdc'), IIF(EOF('introdc') OR BOF('introdc'), 0, RECNO('introdc')), 0)
DO EeLog WITH tcTitlu
IF !USED('introdc')
DO EeLog WITH ' (introdc neinstantiat)'
RETURN
ENDIF
SELECT introdc
SCAN
DO EeLog WITH ' tip_rand=' + ALLTRIM(NVL(tip_rand,'?')) + ' nract=' + TRANSFORM(NVL(nract,0)) + ;
' doc_key=[' + ALLTRIM(NVL(doc_key,'')) + '] rand_dvi=' + TRANSFORM(NVL(rand_dvi,0)) + ;
' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ' suma=' + TRANSFORM(NVL(suma,0))
ENDSCAN
IF lnRecAnt > 0
TRY
GO lnRecAnt
CATCH
GO TOP
ENDTRY
ENDIF
SELECT (lcSelAnt)
ENDPROC
PROCEDURE CreeazaIntrodc
*-- coloane rand_dvi N(1), valuta_proprie N(1) (rand_dvi = randul T-DVI)
LPARAMETERS tcAlias
IF USED(tcAlias)
USE IN (tcAlias)
ENDIF
CREATE CURSOR (tcAlias) ( ;
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
ENDPROC
PROCEDURE CreeazaRulTemp
IF USED('rul_temp')
USE IN ('rul_temp')
ENDIF
CREATE CURSOR rul_temp ( ;
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
, fdoc C(30), id_fdoc N(18,4);
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
ENDPROC
FUNCTION RECCOUNT_ACTIVE
LPARAMETERS tcAlias
LOCAL lnSel, lnCnt
lnSel = SELECT()
SELECT (tcAlias)
COUNT TO lnCnt FOR !DELETED()
SELECT (lnSel)
RETURN lnCnt
ENDFUNC
PROCEDURE Assert3
LPARAMETERS tcLabel, tuActual, tuExpected
pnAsserts = pnAsserts + 1
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
pnPass = pnPass + 1
DO EeLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
ELSE
DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
ENDIF
ENDPROC
PROCEDURE AssertStr
LPARAMETERS tcLabel, tcActual, tcExpected
pnAsserts = pnAsserts + 1
IF tcActual == tcExpected
pnPass = pnPass + 1
DO EeLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])'
ELSE
DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])'
ENDIF
ENDPROC
PROCEDURE EeErr
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
DO EeLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
ENDPROC
PROCEDURE EeLog
LPARAMETERS tcMsg
SET SAFETY OFF
LOCAL lcL
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
ENDPROC
DEFINE CLASS dummyapp AS Custom
PROCEDURE ReadIni
LPARAMETERS tcSection, tcKey
RETURN ''
ENDPROC
PROCEDURE WriteIni
LPARAMETERS tcSection, tcKey, tcValue
RETURN .T.
ENDPROC
ENDDEFINE
DEFINE CLASS dummyexecutor AS Custom
cEroare = ''
PROCEDURE oExecute
LPARAMETERS tcSql, tcCursor
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
DO CreeazaJtvaColoaneView WITH m.tcCursor
RETURN 1
ENDIF
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
RETURN 1
ENDIF
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
INSERT INTO (m.tcCursor) VALUES ('', '')
RETURN 1
ENDIF
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (acont C(20))
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
RETURN 1
ENDIF
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
RETURN 1
ENDIF
IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ;
explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1))
INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0)
RETURN 1
ENDIF
CREATE CURSOR (m.tcCursor) (id_temp N(1))
RETURN 1
ENDPROC
PROCEDURE oExecuta
LPARAMETERS tcSql, tcCursor
IF !EMPTY(m.tcCursor)
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
ELSE
CREATE CURSOR (m.tcCursor) (id_temp N(1))
ENDIF
ENDIF
RETURN .T.
ENDPROC
PROCEDURE oSelect2Value
LPARAMETERS tcSql, toValue
toValue = ''
RETURN 1
ENDPROC
PROCEDURE oReset
ENDPROC
ENDDEFINE
PROCEDURE CreeazaJtvaColoaneView
LPARAMETERS tcCursor
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 3, 301204)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 4, 301204)
ENDPROC

View File

@@ -0,0 +1,12 @@
# test_repro_bug_nract_dvi_propagat.ps1 - wrapper peste harness-ul generic pentru testul de
# REPRODUCERE a propagarii nract-ului DVI peste randurile B/G/S ale facturii principale.
# Rulare: powershell -ExecutionPolicy Bypass -File test_repro_bug_nract_dvi_propagat.ps1
$ErrorActionPreference = 'Stop'
$Teste = $PSScriptRoot
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
-TestPrg (Join-Path $Teste 'test_repro_bug_nract_dvi_propagat.prg') `
-Steps @('nota_goala','dialog_completat','dupa_termin','articol_adaugat','sincronizat','final') `
-ShotsDir (Join-Path $Teste 'screenshots_repro_bug_nract_dvi') `
-SyncDir (Join-Path $Teste 'uisync_repro_bug_nract_dvi') `
-StepTimeoutSec 180 `
-ReadyTimeoutSec 180

View File

@@ -0,0 +1,927 @@
* test_repro_flux_curat_doc_dublu.prg
* Test de REPRODUCERE - FLUX CURAT, FARA nicio interactiune de grila (nu se cheama
* Grid1.cNract.Text1.Valid() si nu se cheama copiaza_valoare() manual din test). Raspunde la
* intrebarea: se strica SINGUR nract-ul facturii principale (DOC1) in timpul fluxului real -
* dialog import_adauga_factura (x2 documente) + do_adauga_articol() + sincronizeaza() +
* inainte_de_do_termin() - sau ramane corect pana la Terminat, asa cum a raportat Marius?
*
* Scenariu (date reale, act.cod=1140856):
* DOC1 - factura principala: nract=15000, id_fdoc=42 (Factura), id_partc=463 (RAJA), in
* valuta EUR (curs 5.23), suma=1000 EUR=5230 lei, discount financiar 100 EUR=523 lei;
* TVA pe DVI (nract=101, id_fdoc=39 'DVI', id_partc=1398 'BIROUL VAMAL'), DVI FARA valuta
* proprie (bifa scoasa - alegere RON prin picker-ul real, normalizata "fara valuta").
* DOC2 - taxe vamale: nract=101, id_fdoc=39 (DVI), id_partc=1398 (BIROUL VAMAL), FARA
* valuta, suma=500 lei, TVA la FURNIZOR (nu pe DVI) cota 11%, participa la pret.
* ARTICOLE (2, ale DOC1): cont 371 analitic 816, un articol cota 11% (baza 100 EUR/523 lei)
* si unul cota 21% (baza 900 EUR/4707 lei) - proportie 100:900, ca sa se exercite
* sparge_tva_protejat() (randul T-DVI e "protejat" - valuta_proprie=1 - pentru ca factura
* e in valuta straina, chiar daca DVI-ul insusi nu are valuta proprie).
*
* ATENTIE: DOC2 are ACELASI nract/id_fdoc/id_partc (101/39/1398) ca randul T-DVI al DOC1 (dupa
* ce acesta preia identitatea vamala) - testul verifica explicit ca doc_key nu se suprapune
* intre cele doua (calc_doc_key :8799 include nr_doc, care difera - vezi assert-urile finale).
*
* Dump complet introdc dupa fiecare pas (tip_rand, nr_doc, doc_key, nract, id_fdoc, id_partc,
* scd, scc, suma, suma_val, rand_dvi, valuta_proprie, mod_manual) + actactan dupa Terminat.
* Asserturile de identitate se fac dupa nr_doc (nu dupa nract, care e tocmai ce se verifica).
*
* Rulare:
* powershell -ExecutionPolicy Bypass -File test_repro_flux_curat_doc_dublu.ps1
SET SAFETY OFF
SET TALK OFF
SET DELETED ON
SET EXACT ON
SET CENTURY ON
SET DATE DMY
SET DECIMALS TO 4
SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcUILog, gcSyncDir
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_repro_flux_curat_doc_dublu_log.txt"
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_repro_flux_curat\"
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
ON ERROR DO EeErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
TRY
LOCAL gcAppPath, lcPath
gcAppPath = "D:\ROA\ROAGEST\"
SET DEFAULT TO (gcAppPath)
lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ;
gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
SET PATH TO &lcPath ADDITIVE
DO EeLog WITH 'SET PATH OK'
*----- CLASE -----
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
SET CLASSLIB TO GESTIUNI ADDITIVE
SET CLASSLIB TO CAUT ADDITIVE
SET CLASSLIB TO BAZA ADDITIVE
SET CLASSLIB TO comun ADDITIVE
SET CLASSLIB TO accessibility.vcx ADDITIVE
SET CLASSLIB TO messagebox ADDITIVE
SET CLASSLIB TO registry ADDITIVE
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
SET CLASSLIB TO DECABAZA ADDITIVE
SET CLASSLIB TO onomenclatoare ADDITIVE
SET CLASSLIB TO stocuri.vcx ADDITIVE
SET CLASSLIB TO rulaje.vcx ADDITIVE
SET CLASSLIB TO ointroduceri ADDITIVE
SET CLASSLIB TO ointroduceri_web ADDITIVE
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
SET CLASSLIB TO overificari ADDITIVE
SET CLASSLIB TO ferestre_oracle ADDITIVE
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
SET CLASSLIB TO configurare.vcx ADDITIVE
SET CLASSLIB TO serii_numere.vcx ADDITIVE
SET CLASSLIB TO omodificari.vcx ADDITIVE
SET CLASSLIB TO ocompensari.vcx ADDITIVE
SET CLASSLIB TO caut_ora ADDITIVE
SET CLASSLIB TO onote_contabile ADDITIVE
SET CLASSLIB TO otoolbar ADDITIVE
SET CLASSLIB TO bon_fisc ADDITIVE
SET CLASSLIB TO onom_articole ADDITIVE
SET CLASSLIB TO onom_retete ADDITIVE
SET CLASSLIB TO orapoarte ADDITIVE
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
SET CLASSLIB TO orapoarte_parametri ADDITIVE
SET CLASSLIB TO ONOM_CURS ADDITIVE
SET CLASSLIB TO ctl32_statusbar_fals.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 ctl32_balloontip.vcx ADDITIVE
SET CLASSLIB TO ocriterii.vcx ADDITIVE
SET CLASSLIB TO oavize.vcx ADDITIVE
SET CLASSLIB TO onomenclatoare2 ADDITIVE
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
SET CLASSLIB TO oimportxml.vcx ADDITIVE
SET CLASSLIB TO excelxml.vcx ADDITIVE
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
DO EeLog WITH 'SET CLASSLIB OK'
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
SET PROCEDURE TO PROCEDURI
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.prg" ADDITIVE
SET PROCEDURE TO acces_meniu ADDITIVE
SET PROCEDURE TO cauta_alfa ADDITIVE
SET PROCEDURE TO pmenu ADDITIVE
SET PROCEDURE TO proceduri_comune ADDITIVE
SET PROCEDURE TO quitapp ADDITIVE
SET PROCEDURE TO init_program ADDITIVE
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
SET PROCEDURE TO orapoarte.prg ADDITIVE
SET PROCEDURE TO mesaje ADDITIVE
SET PROCEDURE TO oserii_numere.prg ADDITIVE
SET PROCEDURE TO oexport.prg ADDITIVE
SET PROCEDURE TO wwConfig.prg ADDITIVE
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
SET PROCEDURE TO validare.prg ADDITIVE
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
SET PROCEDURE TO updateserver.prg ADDITIVE
SET PROCEDURE TO oinainte_de.prg ADDITIVE
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
SET PROCEDURE TO OINTRODUCERI ADDITIVE
SET PROCEDURE TO oHeader.prg ADDITIVE
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
SET PROCEDURE TO osecurity ADDITIVE
SET PROCEDURE TO ocautare ADDITIVE
SET PROCEDURE TO orefaceri ADDITIVE
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
SET PROCEDURE TO ini.prg ADDITIVE
SET PROCEDURE TO odocumente.prg ADDITIVE
SET PROCEDURE TO regex.prg ADDITIVE
SET PROCEDURE TO wwutils.prg ADDITIVE
SET PROCEDURE TO inchidere_k ADDITIVE
SET PROCEDURE TO iniacces.prg ADDITIVE
SET PROCEDURE TO oupdate.prg ADDITIVE
SET PROCEDURE TO procese.prg ADDITIVE
SET PROCEDURE TO version.prg ADDITIVE
SET PROCEDURE TO xmlaccess.prg ADDITIVE
SET PROCEDURE TO xmlparser.prg ADDITIVE
SET PROCEDURE TO filebringer.prg ADDITIVE
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
SET PROCEDURE TO wwhttp.prg ADDITIVE
SET PROCEDURE TO xdate.prg ADDITIVE
SET PROCEDURE TO ofacturare.prg ADDITIVE
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
SET PROCEDURE TO email.prg ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
DO EeLog WITH 'SET PROCEDURE OK'
*----- Globale -----
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
STORE 2 TO gnPc, gnPval, gnPVal
gnPcant = 3
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
gl406 = .T.
gcS = 'CONTAFIN'
gnAn = YEAR(DATE())
gnLuna = MONTH(DATE())
gnIdFirma = 110
gnIdSucursala = 110
gcAcces = "1;2;3;4;5;6;7;8;"
gcFirma = gcS
PUBLIC nror(65000)
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip, gcMockArtCodmat
gnMockRaspuns = 6
gcMockUltimMesaj = ''
gnMockUltimTip = 0
PUBLIC gnButon
gnButon = 1
gcMockArtCodmat = ''
PUBLIC goExecutor, goApp
goExecutor = CREATEOBJECT('dummyexecutor')
goApp = CREATEOBJECT('dummyapp')
*----- poAct: antetul notei (factura import EUR, curs 5.23) -----
PUBLIC poAct
poAct = CREATEOBJECT('Custom')
poAct.AddProperty('nume_val', 'EUR')
poAct.AddProperty('curs', 5.23)
poAct.AddProperty('proc_tva', 1.21)
poAct.AddProperty('nnir', 0)
poAct.AddProperty('id_valuta', 978)
poAct.AddProperty('id_fdoc', 42)
poAct.AddProperty('fdoc', 'Factura')
poAct.AddProperty('id_partc', 463)
poAct.AddProperty('partc', 'RAJA')
poAct.AddProperty('serie_act', '')
poAct.AddProperty('dataact', DATE())
poAct.AddProperty('tva_incasare', 0)
poAct.AddProperty('id_set', 1)
poAct.AddProperty('id_gestin', 1)
*----- jtva_coloane2 / saft_taxtable: perechi 11% + 21%, achizitii interne + import -----
IF USED('jtva_coloane2')
USE IN ('jtva_coloane2')
ENDIF
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
INSERT INTO jtva_coloane2 VALUES (3, 210, 'ACH. INT. 11%', 1, 0, 1, 'RO11B', 'RO11T', 11, 211)
INSERT INTO jtva_coloane2 VALUES (4, 211, 'TVA ACH. INT. 11%', 1, 0, 1, 'RO11T', '', 11, 0)
INSERT INTO jtva_coloane2 VALUES (5, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
INSERT INTO jtva_coloane2 VALUES (6, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
INSERT INTO jtva_coloane2 VALUES (7, 222, 'ACH. IMP. 11%', 1, 0, 1, 'FO11B', 'FO11T', 11, 223)
INSERT INTO jtva_coloane2 VALUES (8, 223, 'TVA ACH. IMP. 11%', 1, 0, 1, 'FO11T', '', 11, 0)
IF USED('saft_taxtable')
USE IN ('saft_taxtable')
ENDIF
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
INDEX ON taxcode TAG taxcode
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('', 0, '', 0, 1, 1, 1, 1)
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('301104-Achizitii interne cota 11%', 301104, '', 11, 1, 0, 1, 0)
DO CreeazaIntrodc WITH 'introdc'
DO CreeazaIntrodc WITH 'introdc_sablon'
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
id_jtva_coloana, ptva, explicatie_tva) ;
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
id_jtva_coloana, ptva, explicatie_tva) ;
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
GO TOP IN introdc_sablon
DO CreeazaRulTemp
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
*-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md)
SELECT introdc
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
SET ORDER TO ord_doc
*-- vezi antetul test_e2e_dvi_ron_discount.prg: tlIntern BARA, aceeasi valoare ca la CREATEOBJECT
PRIVATE tlIntern
tlIntern = .F.
PUBLIC gcTempPath
gcTempPath = ADDBS(SYS(2023))
PUBLIC gnHandle
gnHandle = -1
PUBLIC gnTipGest
gnTipGest = 0
PUBLIC gcCondSucursala
gcCondSucursala = ''
DO EeLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F. - mod import)'
PUBLIC goObj
goObj = CREATEOBJECT('IMPORT_nota', .F.)
IF VARTYPE(goObj) <> 'O'
DO EeLog WITH 'FAIL: instantiere import_nota'
DO HarnessDone WITH 'done-error'
QUIT
ENDIF
goObj.lDialogAratat = .T.
goObj.oact = poAct
*-- lSpargeSecundare ramane la valoarea implicita a clasei (.T., "spargere secundare activa")
*-- - NU se suprascrie, ca sa reflecte comportamentul implicit real, nu setarea din alte teste.
goObj.WindowType = 0
goObj.Visible = .T.
goObj.Show()
goObj.WindowState = 2
DOEVENTS FORCE
SELECT rul_temp
ZAP
goObj.gridart.Refresh()
DOEVENTS FORCE
PRIVATE pnAsserts, pnPass
STORE 0 TO pnAsserts, pnPass
DO HarnessStep WITH 0, 'nota goala afisata, mod import (.F.)'
*========================= DOC1: factura EUR (RAJA) + TVA DVI fara valuta proprie + discount =========================
PUBLIC goDlg
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
goDlg.cFelDoc = 'Factura'
goDlg.nIdFdoc = 42
goDlg.nNract = 15000
goDlg.dDataAct = DATE()
goDlg.nIdPartener = 463
goDlg.cPartener = 'RAJA'
goDlg.cExplicatia = 'Factura import RAJA'
goDlg.nSuma = 1000
goDlg.nSumaLei = 0
goDlg.nCurs = 5.23
goDlg.nIdValuta = 978
goDlg.cValuta = 'EUR'
goDlg.chkInValutaCont.Value = 1
goDlg.chkParticipaValuta.Value = 1
goDlg.nIdExplicatieTva = 220
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
goDlg.nProcentTva = 21
*-- DVI: identitate proprie (document vamal, partener vamal, nract 101), FARA valuta proprie
goDlg.cSerieDvi = ''
goDlg.nNractDvi = 101
goDlg.dDviData = DATE()
goDlg.nIdFdocDVI = 39
goDlg.cFelDocDvi = 'DVI'
goDlg.nDviIdPartener = 1398
goDlg.cDviPartener = 'BIROUL VAMAL'
goDlg.optTipTva.Value = 2
goDlg.optTipTva.InteractiveChange()
*-- alegere RON pe blocul DVI (picker real, mock_caut_valuta) - normalizare "fara valuta proprie"
PUBLIC goMockValuta, goMockValutaCoada
goMockValuta = CREATEOBJECT('Custom')
goMockValuta.AddProperty('id_valuta', 1)
goMockValuta.AddProperty('nume_val', 'RON')
goMockValutaCoada = CREATEOBJECT('Collection')
LOCAL loValRon
loValRon = CREATEOBJECT('Custom')
loValRon.AddProperty('id_valuta', 1)
loValRon.AddProperty('nume_val', 'RON')
goMockValutaCoada.Add(loValRon)
goDlg.cmdDviValuta.Click()
=AssertStr('1-DVI valuta aleasa RON (fara valuta proprie)', ALLTRIM(goDlg.cDviValuta), 'RON')
*-- discount financiar (doar baza)
goDlg.txtDiscBaza.Value = 100
goDlg.txtDiscBaza.Valid()
goDlg.WindowType = 0
goDlg.Visible = .T.
goDlg.Show()
DOEVENTS FORCE
DO HarnessStep WITH 1, 'DOC1 completat: RAJA nract=15000, DVI nract=101 fara valuta, discount 100 EUR'
LOCAL llOkValid1
llOkValid1 = goDlg.valideaza()
=Assert3('2-DOC1 dialog valideaza() reuseste', IIF(llOkValid1,1,0), 1)
*-- toDlg DOC1 construit INLINE in programul PRINCIPAL (capcana l, mock_caut_valuta.prg)
PUBLIC goT
goT = CREATEOBJECT('Empty')
=ADDPROPERTY(goT,'serie_act',ALLTRIM(NVL(goDlg.cSerieAct,'')))
=ADDPROPERTY(goT,'nract',goDlg.nNract)
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
=ADDPROPERTY(goT,'suma',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,IIF(goDlg.nSumaLei<>0,goDlg.nSumaLei,ROUND(goDlg.nSuma*goDlg.nCurs,gnPC)),goDlg.nSuma))
=ADDPROPERTY(goT,'suma_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nSuma,0))
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
=ADDPROPERTY(goT,'participa_valuta',(goDlg.chkParticipaValuta.Value=1))
=ADDPROPERTY(goT,'id_valuta',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nIdValuta,0))
=ADDPROPERTY(goT,'curs',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nCurs,0))
=ADDPROPERTY(goT,'nume_val',IIF(goDlg.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg.cValuta,'')),''))
=ADDPROPERTY(goT,'cTipTva',IIF(goDlg.optTipTva.Value=1,'F',IIF(goDlg.optTipTva.Value=2,'D','N')))
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
IF goDlg.optTipTva.Value = 2
=ADDPROPERTY(goT,'dvi_serie',CHRTRAN(ALLTRIM(NVL(goDlg.cSerieDvi,'')),CHR(34),''))
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
=ADDPROPERTY(goT,'dvi_dataact',goDlg.dDviData)
=ADDPROPERTY(goT,'dvi_id_fdoc',goDlg.nIdFdocDVI)
=ADDPROPERTY(goT,'dvi_fdoc',goDlg.cFelDocDvi)
=ADDPROPERTY(goT,'dvi_id_partc',goDlg.nDviIdPartener)
=ADDPROPERTY(goT,'dvi_partc',goDlg.cDviPartener)
=ADDPROPERTY(goT,'dvi_scc','401')
=ADDPROPERTY(goT,'dvi_tva_lei',goDlg.nDviTvaLei)
=ADDPROPERTY(goT,'dvi_tva_val',goDlg.nDviTvaVal)
=ADDPROPERTY(goT,'dvi_in_valuta',!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON'))
=ADDPROPERTY(goT,'dvi_id_valuta',goDlg.nDviIdValuta)
=ADDPROPERTY(goT,'dvi_curs',goDlg.nDviCurs)
=ADDPROPERTY(goT,'dvi_nume_val',ALLTRIM(NVL(goDlg.cDviValuta,'')))
=ADDPROPERTY(goT,'dvi_valuta_proprie',IIF(!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON') OR !(EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(goDlg.cValuta))=='RON'),IIF(goDlg.nDviIdValuta<>goDlg.nIdValuta OR goDlg.nDviCurs<>goDlg.nCurs,1,0),0))
ENDIF
=ADDPROPERTY(goT,'disc_baza_lei',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,ROUND(goDlg.nDiscBaza*goDlg.nCurs,gnPC),goDlg.nDiscBaza))
=ADDPROPERTY(goT,'disc_baza_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nDiscBaza,0))
LOCAL llOkAdauga1
llOkAdauga1 = goObj.do_adauga_factura(goT)
=Assert3('3-DOC1 do_adauga_factura(goT) reuseste (Termin)', IIF(llOkAdauga1,1,0), 1)
goDlg.Hide()
DOEVENTS FORCE
DO HarnessStep WITH 2, 'DOC1 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
DO DumpIntrodc WITH 'DUMP dupa DOC1 (RAJA, nract=15000)'
*========================= DOC2: taxe vamale (BIROUL VAMAL) - TVA la furnizor, cota 11%, FARA valuta =========================
PUBLIC goDlg2
goDlg2 = CREATEOBJECT('import_adauga_factura', goObj)
goDlg2.cFelDoc = 'DVI'
goDlg2.nIdFdoc = 39
goDlg2.nNract = 101
goDlg2.dDataAct = DATE()
goDlg2.nIdPartener = 1398
goDlg2.cPartener = 'BIROUL VAMAL'
goDlg2.cExplicatia = 'Taxe vamale'
goDlg2.nSuma = 500
goDlg2.nSumaLei = 0
goDlg2.nCurs = 0
goDlg2.nIdValuta = 0
goDlg2.cValuta = ''
goDlg2.chkInValutaCont.Value = 0
goDlg2.chkParticipaValuta.Value = 1
goDlg2.nIdExplicatieTva = 210
goDlg2.cExplicatieTva = 'ACH. INT. 11%'
goDlg2.nProcentTva = 11
goDlg2.optTipTva.Value = 1
goDlg2.optTipTva.InteractiveChange()
goDlg2.WindowType = 0
goDlg2.Visible = .T.
goDlg2.Show()
DOEVENTS FORCE
DO HarnessStep WITH 3, 'DOC2 completat: BIROUL VAMAL nract=101, TVA furnizor 11%, fara valuta'
LOCAL llOkValid2
llOkValid2 = goDlg2.valideaza()
=Assert3('4-DOC2 dialog valideaza() reuseste', IIF(llOkValid2,1,0), 1)
*-- toDlg DOC2 construit INLINE in programul PRINCIPAL (aceeasi capcana l)
PUBLIC goT2
goT2 = CREATEOBJECT('Empty')
=ADDPROPERTY(goT2,'serie_act',ALLTRIM(NVL(goDlg2.cSerieAct,'')))
=ADDPROPERTY(goT2,'nract',goDlg2.nNract)
=ADDPROPERTY(goT2,'dataact',goDlg2.dDataAct)
=ADDPROPERTY(goT2,'fdoc',goDlg2.cFelDoc)
=ADDPROPERTY(goT2,'id_fdoc',goDlg2.nIdFdoc)
=ADDPROPERTY(goT2,'id_partc',goDlg2.nIdPartener)
=ADDPROPERTY(goT2,'partc',goDlg2.cPartener)
=ADDPROPERTY(goT2,'explicatia',ALLTRIM(NVL(goDlg2.cExplicatia,'')))
=ADDPROPERTY(goT2,'suma',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,IIF(goDlg2.nSumaLei<>0,goDlg2.nSumaLei,ROUND(goDlg2.nSuma*goDlg2.nCurs,gnPC)),goDlg2.nSuma))
=ADDPROPERTY(goT2,'suma_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nSuma,0))
=ADDPROPERTY(goT2,'in_valuta',goDlg2.chkInValutaCont.Value)
=ADDPROPERTY(goT2,'participa_valuta',(goDlg2.chkParticipaValuta.Value=1))
=ADDPROPERTY(goT2,'id_valuta',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nIdValuta,0))
=ADDPROPERTY(goT2,'curs',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nCurs,0))
=ADDPROPERTY(goT2,'nume_val',IIF(goDlg2.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg2.cValuta,'')),''))
=ADDPROPERTY(goT2,'cTipTva',IIF(goDlg2.optTipTva.Value=1,'F',IIF(goDlg2.optTipTva.Value=2,'D','N')))
=ADDPROPERTY(goT2,'id_jtva_coloana',goDlg2.nIdExplicatieTva)
=ADDPROPERTY(goT2,'disc_baza_lei',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,ROUND(goDlg2.nDiscBaza*goDlg2.nCurs,gnPC),goDlg2.nDiscBaza))
=ADDPROPERTY(goT2,'disc_baza_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nDiscBaza,0))
LOCAL llOkAdauga2
llOkAdauga2 = goObj.do_adauga_factura(goT2)
=Assert3('5-DOC2 do_adauga_factura(goT2) reuseste (Termin)', IIF(llOkAdauga2,1,0), 1)
goDlg2.Hide()
DOEVENTS FORCE
DO HarnessStep WITH 4, 'DOC2 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
DO DumpIntrodc WITH 'DUMP dupa DOC2 (BIROUL VAMAL, nract=101)'
*========================= verificare doc_key: T-DVI (DOC1) vs B (DOC2) nu se suprapun =========================
LOCAL lcDocKeyTDvi, lcDocKeyDoc2B
lcDocKeyTDvi = ''
lcDocKeyDoc2B = ''
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
IF FOUND()
lcDocKeyTDvi = ALLTRIM(NVL(doc_key,''))
ENDIF
LOCATE FOR nract = 101 AND id_fdoc = 39 AND tip_rand == 'B'
IF FOUND()
lcDocKeyDoc2B = ALLTRIM(NVL(doc_key,''))
ENDIF
=Assert3('6-ambele doc_key gasite (T-DVI si B-DOC2)', IIF(!EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B),1,0), 1)
pnAsserts = pnAsserts + 1
IF !EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B) AND lcDocKeyTDvi <> lcDocKeyDoc2B
pnPass = pnPass + 1
DO EeLog WITH ' PASS 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] <> doc_key B(DOC2)=[' + lcDocKeyDoc2B + '] (fara suprapunere)'
ELSE
DO EeLog WITH ' FAIL 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] SE SUPRAPUNE cu B(DOC2)=[' + lcDocKeyDoc2B + '] -> pista doc_key CONFIRMATA'
ENDIF
*========================= ARTICOLE (2, ale DOC1): cont 371 analitic 816, cote 11%/21% =========================
gcMockArtCodmat = 'ART-A8-371'
LOCAL llEroareArt1
llEroareArt1 = .F.
TRY
goObj.do_adauga_articol()
CATCH TO loExcArt1
llEroareArt1 = .T.
DO EeLog WITH 'EROARE do_adauga_articol (art1) ' + TRANSFORM(loExcArt1.ErrorNo) + ' [' + loExcArt1.Message + ']'
ENDTRY
=Assert3('8-do_adauga_articol() art1 (cota 11%) fara eroare', IIF(llEroareArt1,0,1), 1)
SELECT rul_temp
LOCATE FOR ALLTRIM(codmat) == 'ART-A8-371'
IF FOUND()
REPLACE cant WITH 1, pret_val WITH 100, pretd WITH 100, pret WITH ROUND(100*5.23,4), ;
pret_lei WITH ROUND(100*5.23,4), cont WITH '371', cota_tva WITH 11
ELSE
pnAsserts = pnAsserts + 1
DO EeLog WITH ' FAIL 8b: articolul cota 11% nu a fost adaugat'
ENDIF
gcMockArtCodmat = 'ART-BULD-212'
LOCAL llEroareArt2
llEroareArt2 = .F.
TRY
goObj.do_adauga_articol()
CATCH TO loExcArt2
llEroareArt2 = .T.
DO EeLog WITH 'EROARE do_adauga_articol (art2) ' + TRANSFORM(loExcArt2.ErrorNo) + ' [' + loExcArt2.Message + ']'
ENDTRY
=Assert3('9-do_adauga_articol() art2 (cota 21%) fara eroare', IIF(llEroareArt2,0,1), 1)
SELECT rul_temp
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
IF FOUND()
REPLACE cant WITH 1, pret_val WITH 900, pretd WITH 900, pret WITH ROUND(900*5.23,4), ;
pret_lei WITH ROUND(900*5.23,4), cont WITH '371', cota_tva WITH 21
ELSE
pnAsserts = pnAsserts + 1
DO EeLog WITH ' FAIL 9b: articolul cota 21% nu a fost adaugat'
ENDIF
goObj.gridart.Refresh()
DOEVENTS FORCE
DO HarnessStep WITH 5, 'articole adaugate (cont 371/816, cote 11% si 21%)'
DO DumpIntrodc WITH 'DUMP dupa ARTICOLE (inainte de sincronizare)'
*========================= sincronizeaza() REAL =========================
LOCAL llEroareSync
llEroareSync = .F.
TRY
goObj.sincronizeaza()
CATCH TO loExcSync
llEroareSync = .T.
DO EeLog WITH 'EROARE sincronizeaza() ' + TRANSFORM(loExcSync.ErrorNo) + ' [' + loExcSync.Message + '] in ' + loExcSync.Procedure + ':' + TRANSFORM(loExcSync.LineNo)
ENDTRY
DOEVENTS FORCE
=Assert3('10-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1)
DO HarnessStep WITH 6, 'sincronizat'
DO DumpIntrodc WITH 'DUMP dupa sincronizeaza() (flux curat, fara nicio interactiune de grila)'
*========================= ASSERT-URI DE INTEGRITATE nract - identitate dupa nr_doc, NU dupa nract =========================
LOCAL lnNrDocRaja, llBugFluxCurat
lnNrDocRaja = 0
llBugFluxCurat = .F.
SELECT introdc
LOCATE FOR id_partc = 463 AND tip_rand <> 'T'
IF FOUND()
lnNrDocRaja = nr_doc
ENDIF
IF lnNrDocRaja = 0
*-- RAJA nu mai apare dupa id_partc (posibil deja corupt) - incerc dupa nr_doc minim
SELECT introdc
CALCULATE MIN(nr_doc) TO lnNrDocRaja
ENDIF
DO EeLog WITH 'nr_doc identificat pentru DOC1 (RAJA): ' + TRANSFORM(lnNrDocRaja)
LOCAL lnCntVerifCurat
lnCntVerifCurat = 0
SELECT introdc
SCAN FOR nr_doc = lnNrDocRaja AND Nvl(rand_dvi,0) <> 1
lnCntVerifCurat = lnCntVerifCurat + 1
pnAsserts = pnAsserts + 1
IF nract == 15000
pnPass = pnPass + 1
DO EeLog WITH ' PASS 11.' + TRANSFORM(lnCntVerifCurat) + '-tip_rand=' + tip_rand + ' nract=15000 (flux curat, =' + TRANSFORM(nract) + ')'
ELSE
llBugFluxCurat = .T.
DO EeLog WITH ' FAIL 11.' + TRANSFORM(lnCntVerifCurat) + '-tip_rand=' + tip_rand + ' nract=' + TRANSFORM(nract) + ' (asteptat 15000) -> SE STRICA SINGUR, FARA TRIGGER'
ENDIF
ENDSCAN
DO HarnessStep WITH 7, 'verificat flux curat: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
*========================= imediat inainte de Terminat: ultim DUMP introdc =========================
DO DumpIntrodc WITH 'DUMP imediat inainte de Terminat (introdc, dupa sincronizare, fara trigger)'
*========================= Terminat (stub verificare.scx) =========================
DO CreeazaActactan
LOCAL llEroareTermin
llEroareTermin = .F.
TRY
goObj.inainte_de_do_termin()
CATCH TO loExcTermin
llEroareTermin = .T.
DO EeLog WITH 'EROARE inainte_de_do_termin() ' + TRANSFORM(loExcTermin.ErrorNo) + ' [' + loExcTermin.Message + '] in ' + loExcTermin.Procedure + ':' + TRANSFORM(loExcTermin.LineNo)
ENDTRY
=Assert3('12-inainte_de_do_termin() fara eroare (Terminat)', IIF(llEroareTermin,0,1), 1)
IF USED('actactan')
DO EeLog WITH 'DUMP actactan dupa Terminat:'
SELECT actactan
SCAN
DO EeLog WITH ' recno=' + TRANSFORM(RECNO()) + ' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ;
' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' partc=[' + ALLTRIM(NVL(partc,'')) + ']' + ;
' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ' suma=' + TRANSFORM(NVL(suma,0))
ENDSCAN
LOCAL lnCntVerifActactan
lnCntVerifActactan = 0
SELECT actactan
SCAN FOR id_partc = 463
lnCntVerifActactan = lnCntVerifActactan + 1
pnAsserts = pnAsserts + 1
IF nract == 15000
pnPass = pnPass + 1
DO EeLog WITH ' PASS 13.' + TRANSFORM(lnCntVerifActactan) + '-actactan randul partener 463 (RAJA): nract=15000 (=' + TRANSFORM(nract) + ')'
ELSE
llBugFluxCurat = .T.
DO EeLog WITH ' FAIL 13.' + TRANSFORM(lnCntVerifActactan) + '-actactan randul partener 463 (RAJA): nract=' + TRANSFORM(nract) + ' (asteptat 15000) -> BUG in actactan, flux curat'
ENDIF
ENDSCAN
IF lnCntVerifActactan = 0
DO EeLog WITH ' INFO: niciun rand cu id_partc=463 in actactan (poate fi corupt catre 1398 - vezi dump)'
ENDIF
ELSE
DO EeLog WITH 'INFO: actactan neinstantiat dupa inainte_de_do_termin() (posibil eroare de validare mai devreme in flux)'
ENDIF
DO HarnessStep WITH 8, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
DO EeLog WITH '========================================================='
IF llBugFluxCurat
DO EeLog WITH 'BUG CONFIRMAT: nract-ul DOC1 (RAJA, 15000) SE STRICA SINGUR in fluxul curat ' + ;
'(fara nicio interactiune de grila / Valid() / copiaza_valoare() apelate din test).'
ELSE
DO EeLog WITH 'BUG NECONFIRMAT in flux curat: nract-ul DOC1 (RAJA, 15000) a ramas corect pe toate ' + ;
'randurile lui (B/G/S) pe tot parcursul fluxului real - dialog x2 + articole + sincronizare + Terminat - ' + ;
'FARA nicio interactiune de grila. Corupt bug-ul necesita un declansator suplimentar (vezi test separat).'
ENDIF
DO EeLog WITH '========================================================='
DO EeLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
IF pnPass = pnAsserts
DO EeLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
ELSE
DO EeLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
ENDIF
DO HarnessDone WITH 'done'
CATCH TO loExc
DO EeLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
DO HarnessDone WITH 'done-error'
ENDTRY
QUIT
*==================================================================================
PROCEDURE DumpIntrodc
LPARAMETERS tcTitlu
LOCAL lcSelAnt, lnRecAnt
lcSelAnt = SELECT()
lnRecAnt = IIF(USED('introdc'), IIF(EOF('introdc') OR BOF('introdc'), 0, RECNO('introdc')), 0)
DO EeLog WITH tcTitlu
IF !USED('introdc')
DO EeLog WITH ' (introdc neinstantiat)'
RETURN
ENDIF
SELECT introdc
SCAN
DO EeLog WITH ' tip_rand=' + ALLTRIM(NVL(tip_rand,'?')) + ' nr_doc=' + TRANSFORM(NVL(nr_doc,0)) + ;
' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ;
' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' doc_key=[' + ALLTRIM(NVL(doc_key,'')) + ']' + ;
' rand_dvi=' + TRANSFORM(NVL(rand_dvi,0)) + ' valuta_proprie=' + TRANSFORM(NVL(valuta_proprie,0)) + ;
' mod_manual=' + TRANSFORM(NVL(mod_manual,0)) + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ;
' suma=' + TRANSFORM(NVL(suma,0)) + ' suma_val=' + TRANSFORM(NVL(suma_val,0))
ENDSCAN
IF lnRecAnt > 0
TRY
GO lnRecAnt
CATCH
GO TOP
ENDTRY
ENDIF
SELECT (lcSelAnt)
ENDPROC
PROCEDURE CreeazaIntrodc
LPARAMETERS tcAlias
IF USED(tcAlias)
USE IN (tcAlias)
ENDIF
CREATE CURSOR (tcAlias) ( ;
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
ENDPROC
PROCEDURE CreeazaRulTemp
IF USED('rul_temp')
USE IN ('rul_temp')
ENDIF
CREATE CURSOR rul_temp ( ;
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
, fdoc C(30), id_fdoc N(18,4);
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
ENDPROC
PROCEDURE CreeazaActactan
IF USED('actactan')
USE IN ('actactan')
ENDIF
CREATE CURSOR actactan ( ;
id_fdoc N(14), fdoc C(50), dataact D, serie_act C(10), nract N(14), ;
partc C(100), id_partc N(14), partd C(100), id_partd N(14), ;
suma N(18,4), suma_val N(18,4), explicatia C(100), explicatia4 C(50), explicatia5 C(50), ;
scd C(10), ascd C(20), scc C(10), ascc C(20), id_jtva_coloana N(14) NULL, taxcode N(6), ;
id_valuta N(14), curs N(14,4), nume_val C(10), proc_tva N(8,4), nnir N(14), ;
tva_incasare N(1), id_set N(14), id_gestin N(14))
ENDPROC
FUNCTION RECCOUNT_ACTIVE
LPARAMETERS tcAlias
LOCAL lnSel, lnCnt
lnSel = SELECT()
SELECT (tcAlias)
COUNT TO lnCnt FOR !DELETED()
SELECT (lnSel)
RETURN lnCnt
ENDFUNC
PROCEDURE Assert3
LPARAMETERS tcLabel, tuActual, tuExpected
pnAsserts = pnAsserts + 1
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
pnPass = pnPass + 1
DO EeLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
ELSE
DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
ENDIF
ENDPROC
PROCEDURE AssertStr
LPARAMETERS tcLabel, tcActual, tcExpected
pnAsserts = pnAsserts + 1
IF tcActual == tcExpected
pnPass = pnPass + 1
DO EeLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])'
ELSE
DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])'
ENDIF
ENDPROC
PROCEDURE EeErr
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
DO EeLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
ENDPROC
PROCEDURE EeLog
LPARAMETERS tcMsg
SET SAFETY OFF
LOCAL lcL
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
ENDPROC
DEFINE CLASS dummyapp AS Custom
PROCEDURE ReadIni
LPARAMETERS tcSection, tcKey
RETURN ''
ENDPROC
PROCEDURE WriteIni
LPARAMETERS tcSection, tcKey, tcValue
RETURN .T.
ENDPROC
ENDDEFINE
DEFINE CLASS dummyexecutor AS Custom
cEroare = ''
PROCEDURE oExecute
LPARAMETERS tcSql, tcCursor
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
DO CreeazaJtvaColoaneView WITH m.tcCursor
RETURN 1
ENDIF
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
RETURN 1
ENDIF
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
INSERT INTO (m.tcCursor) VALUES ('', '')
RETURN 1
ENDIF
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (acont C(20))
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
RETURN 1
ENDIF
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
RETURN 1
ENDIF
IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ;
explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1))
INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0)
RETURN 1
ENDIF
CREATE CURSOR (m.tcCursor) (id_temp N(1))
RETURN 1
ENDPROC
PROCEDURE oExecuta
LPARAMETERS tcSql, tcCursor
IF !EMPTY(m.tcCursor)
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
ELSE
CREATE CURSOR (m.tcCursor) (id_temp N(1))
ENDIF
ENDIF
RETURN .T.
ENDPROC
PROCEDURE oSelect2Value
LPARAMETERS tcSql, toValue
toValue = ''
RETURN 1
ENDPROC
PROCEDURE oReset
ENDPROC
ENDDEFINE
PROCEDURE CreeazaJtvaColoaneView
LPARAMETERS tcCursor
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (210, 'ACH. INT. 11%', 1, 0, 'RO11B', 11, 211, 1, 3, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (211, 'TVA ACH. INT. 11%', 1, 0, 'RO11T', 11, 1, 4, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 5, 301204)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 6, 301204)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (222, 'ACH. IMP. 11%', 1, 0, 'FO11B', 11, 223, 1, 7, 301204)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (223, 'TVA ACH. IMP. 11%', 1, 0, 'FO11T', 11, 1, 8, 301204)
ENDPROC

View File

@@ -0,0 +1,13 @@
# test_repro_flux_curat_doc_dublu.ps1 - wrapper peste harness-ul generic pentru testul de
# REPRODUCERE cu flux CURAT (fara nicio interactiune de grila) - doua documente (factura +
# taxe vamale) prin dialogul real, articole, sincronizare, Terminat.
# Rulare: powershell -ExecutionPolicy Bypass -File test_repro_flux_curat_doc_dublu.ps1
$ErrorActionPreference = 'Stop'
$Teste = $PSScriptRoot
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
-TestPrg (Join-Path $Teste 'test_repro_flux_curat_doc_dublu.prg') `
-Steps @('nota_goala','doc1_completat','doc1_adaugat','doc2_completat','doc2_adaugat','articole_adaugate','sincronizat','verificat_flux_curat','final') `
-ShotsDir (Join-Path $Teste 'screenshots_repro_flux_curat') `
-SyncDir (Join-Path $Teste 'uisync_repro_flux_curat') `
-StepTimeoutSec 180 `
-ReadyTimeoutSec 180

View File

@@ -0,0 +1,963 @@
* test_repro_trigger_data.prg
* Test de REPRODUCERE - acelasi flux CURAT ca test_repro_flux_curat_doc_dublu.prg, plus
* declansatorul cerut pe coloana "Data": Grid1.cDataAct.Text1.Valid(), cu pointerul pe randul
* T-DVI. Factura are dataact=20.07.2026, DVI dataact=25.07.2026 (DIFERITE - cerinta explicita).
* Asteptat: dupa trigger, dataact pe randurile B/G/S ale facturii ramane 20.07.2026, iar randul
* T-DVI isi pastreaza data lui (25.07.2026).
* ATENTIE: Grid1.cDataAct.Text1.Valid foloseste ACELASI tipar ca Grid1.cNract.Text1.Valid -
* Thisform.copiaza_valoare(This.Parent.ControlSource) - deci e afectat de ACEEASI problema
* gasita la declansatorul pe coloana Nr: la runtime This.Parent.ControlSource devine
* "introdc.dataact" (calificat cu alias-ul), nu "dataact" ca la design-time, iar garda din
* copiaza_valoare (Inlist(Lower(tcCamp), 'dataact', ...)) nu se potriveste niciodata - vezi
* test_diag_controlsource_calificat.prg pentru dovada izolata pe campul nract (identic
* mecanism). Asteptare realista: acest test va arata BUG CONFIRMAT, din acelasi motiv.
*
* Scenariu (date reale, act.cod=1140856) - identic cu test_repro_flux_curat_doc_dublu.prg:
* DOC1 - factura principala: nract=15000, id_fdoc=42 (Factura), id_partc=463 (RAJA), in
* valuta EUR (curs 5.23), suma=1000 EUR=5230 lei, discount financiar 100 EUR=523 lei;
* TVA pe DVI (nract=101, id_fdoc=39 'DVI', id_partc=1398 'BIROUL VAMAL'), DVI FARA valuta
* proprie (bifa scoasa - alegere RON prin picker-ul real, normalizata "fara valuta").
* DOC2 - taxe vamale: nract=101, id_fdoc=39 (DVI), id_partc=1398 (BIROUL VAMAL), FARA
* valuta, suma=500 lei, TVA la FURNIZOR (nu pe DVI) cota 11%, participa la pret.
* ARTICOLE (2, ale DOC1): cont 371 analitic 816, un articol cota 11% (baza 100 EUR/523 lei)
* si unul cota 21% (baza 900 EUR/4707 lei) - proportie 100:900, ca sa se exercite
* sparge_tva_protejat() (randul T-DVI e "protejat" - valuta_proprie=1 - pentru ca factura
* e in valuta straina, chiar daca DVI-ul insusi nu are valuta proprie).
*
* ATENTIE: DOC2 are ACELASI nract/id_fdoc/id_partc (101/39/1398) ca randul T-DVI al DOC1 (dupa
* ce acesta preia identitatea vamala) - testul verifica explicit ca doc_key nu se suprapune
* intre cele doua (calc_doc_key :8799 include nr_doc, care difera - vezi assert-urile finale).
*
* Dump complet introdc dupa fiecare pas (tip_rand, nr_doc, doc_key, nract, id_fdoc, id_partc,
* scd, scc, suma, suma_val, rand_dvi, valuta_proprie, mod_manual) + actactan dupa Terminat.
* Asserturile de identitate se fac dupa nr_doc (nu dupa nract, care e tocmai ce se verifica).
*
* Rulare:
* powershell -ExecutionPolicy Bypass -File test_repro_trigger_data.ps1
SET SAFETY OFF
SET TALK OFF
SET DELETED ON
SET EXACT ON
SET CENTURY ON
SET DATE DMY
SET DECIMALS TO 4
SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcUILog, gcSyncDir
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_repro_trigger_data_log.txt"
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_repro_trigger_data\"
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
ON ERROR DO EeErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
TRY
LOCAL gcAppPath, lcPath
gcAppPath = "D:\ROA\ROAGEST\"
SET DEFAULT TO (gcAppPath)
lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ;
gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
SET PATH TO &lcPath ADDITIVE
DO EeLog WITH 'SET PATH OK'
*----- CLASE -----
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
SET CLASSLIB TO GESTIUNI ADDITIVE
SET CLASSLIB TO CAUT ADDITIVE
SET CLASSLIB TO BAZA ADDITIVE
SET CLASSLIB TO comun ADDITIVE
SET CLASSLIB TO accessibility.vcx ADDITIVE
SET CLASSLIB TO messagebox ADDITIVE
SET CLASSLIB TO registry ADDITIVE
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
SET CLASSLIB TO DECABAZA ADDITIVE
SET CLASSLIB TO onomenclatoare ADDITIVE
SET CLASSLIB TO stocuri.vcx ADDITIVE
SET CLASSLIB TO rulaje.vcx ADDITIVE
SET CLASSLIB TO ointroduceri ADDITIVE
SET CLASSLIB TO ointroduceri_web ADDITIVE
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
SET CLASSLIB TO overificari ADDITIVE
SET CLASSLIB TO ferestre_oracle ADDITIVE
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
SET CLASSLIB TO configurare.vcx ADDITIVE
SET CLASSLIB TO serii_numere.vcx ADDITIVE
SET CLASSLIB TO omodificari.vcx ADDITIVE
SET CLASSLIB TO ocompensari.vcx ADDITIVE
SET CLASSLIB TO caut_ora ADDITIVE
SET CLASSLIB TO onote_contabile ADDITIVE
SET CLASSLIB TO otoolbar ADDITIVE
SET CLASSLIB TO bon_fisc ADDITIVE
SET CLASSLIB TO onom_articole ADDITIVE
SET CLASSLIB TO onom_retete ADDITIVE
SET CLASSLIB TO orapoarte ADDITIVE
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
SET CLASSLIB TO orapoarte_parametri ADDITIVE
SET CLASSLIB TO ONOM_CURS ADDITIVE
SET CLASSLIB TO ctl32_statusbar_fals.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 ctl32_balloontip.vcx ADDITIVE
SET CLASSLIB TO ocriterii.vcx ADDITIVE
SET CLASSLIB TO oavize.vcx ADDITIVE
SET CLASSLIB TO onomenclatoare2 ADDITIVE
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
SET CLASSLIB TO oimportxml.vcx ADDITIVE
SET CLASSLIB TO excelxml.vcx ADDITIVE
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
DO EeLog WITH 'SET CLASSLIB OK'
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
SET PROCEDURE TO PROCEDURI
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.prg" ADDITIVE
SET PROCEDURE TO acces_meniu ADDITIVE
SET PROCEDURE TO cauta_alfa ADDITIVE
SET PROCEDURE TO pmenu ADDITIVE
SET PROCEDURE TO proceduri_comune ADDITIVE
SET PROCEDURE TO quitapp ADDITIVE
SET PROCEDURE TO init_program ADDITIVE
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
SET PROCEDURE TO orapoarte.prg ADDITIVE
SET PROCEDURE TO mesaje ADDITIVE
SET PROCEDURE TO oserii_numere.prg ADDITIVE
SET PROCEDURE TO oexport.prg ADDITIVE
SET PROCEDURE TO wwConfig.prg ADDITIVE
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
SET PROCEDURE TO validare.prg ADDITIVE
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
SET PROCEDURE TO updateserver.prg ADDITIVE
SET PROCEDURE TO oinainte_de.prg ADDITIVE
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
SET PROCEDURE TO OINTRODUCERI ADDITIVE
SET PROCEDURE TO oHeader.prg ADDITIVE
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
SET PROCEDURE TO osecurity ADDITIVE
SET PROCEDURE TO ocautare ADDITIVE
SET PROCEDURE TO orefaceri ADDITIVE
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
SET PROCEDURE TO ini.prg ADDITIVE
SET PROCEDURE TO odocumente.prg ADDITIVE
SET PROCEDURE TO regex.prg ADDITIVE
SET PROCEDURE TO wwutils.prg ADDITIVE
SET PROCEDURE TO inchidere_k ADDITIVE
SET PROCEDURE TO iniacces.prg ADDITIVE
SET PROCEDURE TO oupdate.prg ADDITIVE
SET PROCEDURE TO procese.prg ADDITIVE
SET PROCEDURE TO version.prg ADDITIVE
SET PROCEDURE TO xmlaccess.prg ADDITIVE
SET PROCEDURE TO xmlparser.prg ADDITIVE
SET PROCEDURE TO filebringer.prg ADDITIVE
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
SET PROCEDURE TO wwhttp.prg ADDITIVE
SET PROCEDURE TO xdate.prg ADDITIVE
SET PROCEDURE TO ofacturare.prg ADDITIVE
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
SET PROCEDURE TO email.prg ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
DO EeLog WITH 'SET PROCEDURE OK'
*----- Globale -----
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
STORE 2 TO gnPc, gnPval, gnPVal
gnPcant = 3
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
gl406 = .T.
gcS = 'CONTAFIN'
*-- perioada de lucru fixata pe luna documentelor de test (iulie 2026, vezi datele DOC1/DVI
*-- mai jos, diferite intentionat) - nu pe luna curenta a sistemului, ca sa nu pice
*-- valideaza() cu "Data documentului nu este in perioada de lucru"
gnAn = 2026
gnLuna = 7
gnIdFirma = 110
gnIdSucursala = 110
gcAcces = "1;2;3;4;5;6;7;8;"
gcFirma = gcS
PUBLIC nror(65000)
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip, gcMockArtCodmat
gnMockRaspuns = 6
gcMockUltimMesaj = ''
gnMockUltimTip = 0
PUBLIC gnButon
gnButon = 1
gcMockArtCodmat = ''
PUBLIC goExecutor, goApp
goExecutor = CREATEOBJECT('dummyexecutor')
goApp = CREATEOBJECT('dummyapp')
*----- poAct: antetul notei (factura import EUR, curs 5.23) -----
PUBLIC poAct
poAct = CREATEOBJECT('Custom')
poAct.AddProperty('nume_val', 'EUR')
poAct.AddProperty('curs', 5.23)
poAct.AddProperty('proc_tva', 1.21)
poAct.AddProperty('nnir', 0)
poAct.AddProperty('id_valuta', 978)
poAct.AddProperty('id_fdoc', 42)
poAct.AddProperty('fdoc', 'Factura')
poAct.AddProperty('id_partc', 463)
poAct.AddProperty('partc', 'RAJA')
poAct.AddProperty('serie_act', '')
poAct.AddProperty('dataact', DATE())
poAct.AddProperty('tva_incasare', 0)
poAct.AddProperty('id_set', 1)
poAct.AddProperty('id_gestin', 1)
*----- jtva_coloane2 / saft_taxtable: perechi 11% + 21%, achizitii interne + import -----
IF USED('jtva_coloane2')
USE IN ('jtva_coloane2')
ENDIF
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
INSERT INTO jtva_coloane2 VALUES (3, 210, 'ACH. INT. 11%', 1, 0, 1, 'RO11B', 'RO11T', 11, 211)
INSERT INTO jtva_coloane2 VALUES (4, 211, 'TVA ACH. INT. 11%', 1, 0, 1, 'RO11T', '', 11, 0)
INSERT INTO jtva_coloane2 VALUES (5, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
INSERT INTO jtva_coloane2 VALUES (6, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
INSERT INTO jtva_coloane2 VALUES (7, 222, 'ACH. IMP. 11%', 1, 0, 1, 'FO11B', 'FO11T', 11, 223)
INSERT INTO jtva_coloane2 VALUES (8, 223, 'TVA ACH. IMP. 11%', 1, 0, 1, 'FO11T', '', 11, 0)
IF USED('saft_taxtable')
USE IN ('saft_taxtable')
ENDIF
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
INDEX ON taxcode TAG taxcode
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('', 0, '', 0, 1, 1, 1, 1)
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('301104-Achizitii interne cota 11%', 301104, '', 11, 1, 0, 1, 0)
DO CreeazaIntrodc WITH 'introdc'
DO CreeazaIntrodc WITH 'introdc_sablon'
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
id_jtva_coloana, ptva, explicatie_tva) ;
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
id_jtva_coloana, ptva, explicatie_tva) ;
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
GO TOP IN introdc_sablon
DO CreeazaRulTemp
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
*-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md)
SELECT introdc
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
SET ORDER TO ord_doc
*-- vezi antetul test_e2e_dvi_ron_discount.prg: tlIntern BARA, aceeasi valoare ca la CREATEOBJECT
PRIVATE tlIntern
tlIntern = .F.
PUBLIC gcTempPath
gcTempPath = ADDBS(SYS(2023))
PUBLIC gnHandle
gnHandle = -1
PUBLIC gnTipGest
gnTipGest = 0
PUBLIC gcCondSucursala
gcCondSucursala = ''
DO EeLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F. - mod import)'
PUBLIC goObj
goObj = CREATEOBJECT('IMPORT_nota', .F.)
IF VARTYPE(goObj) <> 'O'
DO EeLog WITH 'FAIL: instantiere import_nota'
DO HarnessDone WITH 'done-error'
QUIT
ENDIF
goObj.lDialogAratat = .T.
goObj.oact = poAct
*-- lSpargeSecundare ramane la valoarea implicita a clasei (.T., "spargere secundare activa")
*-- - NU se suprascrie, ca sa reflecte comportamentul implicit real, nu setarea din alte teste.
goObj.WindowType = 0
goObj.Visible = .T.
goObj.Show()
goObj.WindowState = 2
DOEVENTS FORCE
SELECT rul_temp
ZAP
goObj.gridart.Refresh()
DOEVENTS FORCE
PRIVATE pnAsserts, pnPass
STORE 0 TO pnAsserts, pnPass
DO HarnessStep WITH 0, 'nota goala afisata, mod import (.F.)'
*========================= DOC1: factura EUR (RAJA) + TVA DVI fara valuta proprie + discount =========================
PUBLIC goDlg
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
goDlg.cFelDoc = 'Factura'
goDlg.nIdFdoc = 42
goDlg.nNract = 15000
goDlg.dDataAct = {^2026-07-20}
goDlg.nIdPartener = 463
goDlg.cPartener = 'RAJA'
goDlg.cExplicatia = 'Factura import RAJA'
goDlg.nSuma = 1000
goDlg.nSumaLei = 0
goDlg.nCurs = 5.23
goDlg.nIdValuta = 978
goDlg.cValuta = 'EUR'
goDlg.chkInValutaCont.Value = 1
goDlg.chkParticipaValuta.Value = 1
goDlg.nIdExplicatieTva = 220
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
goDlg.nProcentTva = 21
*-- DVI: identitate proprie (document vamal, partener vamal, nract 101), FARA valuta proprie
goDlg.cSerieDvi = ''
goDlg.nNractDvi = 101
goDlg.dDviData = {^2026-07-25}
goDlg.nIdFdocDVI = 39
goDlg.cFelDocDvi = 'DVI'
goDlg.nDviIdPartener = 1398
goDlg.cDviPartener = 'BIROUL VAMAL'
goDlg.optTipTva.Value = 2
goDlg.optTipTva.InteractiveChange()
*-- alegere RON pe blocul DVI (picker real, mock_caut_valuta) - normalizare "fara valuta proprie"
PUBLIC goMockValuta, goMockValutaCoada
goMockValuta = CREATEOBJECT('Custom')
goMockValuta.AddProperty('id_valuta', 1)
goMockValuta.AddProperty('nume_val', 'RON')
goMockValutaCoada = CREATEOBJECT('Collection')
LOCAL loValRon
loValRon = CREATEOBJECT('Custom')
loValRon.AddProperty('id_valuta', 1)
loValRon.AddProperty('nume_val', 'RON')
goMockValutaCoada.Add(loValRon)
goDlg.cmdDviValuta.Click()
=AssertStr('1-DVI valuta aleasa RON (fara valuta proprie)', ALLTRIM(goDlg.cDviValuta), 'RON')
*-- discount financiar (doar baza)
goDlg.txtDiscBaza.Value = 100
goDlg.txtDiscBaza.Valid()
goDlg.WindowType = 0
goDlg.Visible = .T.
goDlg.Show()
DOEVENTS FORCE
DO HarnessStep WITH 1, 'DOC1 completat: RAJA nract=15000, DVI nract=101 fara valuta, discount 100 EUR'
LOCAL llOkValid1
llOkValid1 = goDlg.valideaza()
=Assert3('2-DOC1 dialog valideaza() reuseste', IIF(llOkValid1,1,0), 1)
*-- toDlg DOC1 construit INLINE in programul PRINCIPAL (capcana l, mock_caut_valuta.prg)
PUBLIC goT
goT = CREATEOBJECT('Empty')
=ADDPROPERTY(goT,'serie_act',ALLTRIM(NVL(goDlg.cSerieAct,'')))
=ADDPROPERTY(goT,'nract',goDlg.nNract)
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
=ADDPROPERTY(goT,'suma',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,IIF(goDlg.nSumaLei<>0,goDlg.nSumaLei,ROUND(goDlg.nSuma*goDlg.nCurs,gnPC)),goDlg.nSuma))
=ADDPROPERTY(goT,'suma_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nSuma,0))
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
=ADDPROPERTY(goT,'participa_valuta',(goDlg.chkParticipaValuta.Value=1))
=ADDPROPERTY(goT,'id_valuta',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nIdValuta,0))
=ADDPROPERTY(goT,'curs',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nCurs,0))
=ADDPROPERTY(goT,'nume_val',IIF(goDlg.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg.cValuta,'')),''))
=ADDPROPERTY(goT,'cTipTva',IIF(goDlg.optTipTva.Value=1,'F',IIF(goDlg.optTipTva.Value=2,'D','N')))
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
IF goDlg.optTipTva.Value = 2
=ADDPROPERTY(goT,'dvi_serie',CHRTRAN(ALLTRIM(NVL(goDlg.cSerieDvi,'')),CHR(34),''))
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
=ADDPROPERTY(goT,'dvi_dataact',goDlg.dDviData)
=ADDPROPERTY(goT,'dvi_id_fdoc',goDlg.nIdFdocDVI)
=ADDPROPERTY(goT,'dvi_fdoc',goDlg.cFelDocDvi)
=ADDPROPERTY(goT,'dvi_id_partc',goDlg.nDviIdPartener)
=ADDPROPERTY(goT,'dvi_partc',goDlg.cDviPartener)
=ADDPROPERTY(goT,'dvi_scc','401')
=ADDPROPERTY(goT,'dvi_tva_lei',goDlg.nDviTvaLei)
=ADDPROPERTY(goT,'dvi_tva_val',goDlg.nDviTvaVal)
=ADDPROPERTY(goT,'dvi_in_valuta',!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON'))
=ADDPROPERTY(goT,'dvi_id_valuta',goDlg.nDviIdValuta)
=ADDPROPERTY(goT,'dvi_curs',goDlg.nDviCurs)
=ADDPROPERTY(goT,'dvi_nume_val',ALLTRIM(NVL(goDlg.cDviValuta,'')))
=ADDPROPERTY(goT,'dvi_valuta_proprie',IIF(!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON') OR !(EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(goDlg.cValuta))=='RON'),IIF(goDlg.nDviIdValuta<>goDlg.nIdValuta OR goDlg.nDviCurs<>goDlg.nCurs,1,0),0))
ENDIF
=ADDPROPERTY(goT,'disc_baza_lei',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,ROUND(goDlg.nDiscBaza*goDlg.nCurs,gnPC),goDlg.nDiscBaza))
=ADDPROPERTY(goT,'disc_baza_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nDiscBaza,0))
LOCAL llOkAdauga1
llOkAdauga1 = goObj.do_adauga_factura(goT)
=Assert3('3-DOC1 do_adauga_factura(goT) reuseste (Termin)', IIF(llOkAdauga1,1,0), 1)
goDlg.Hide()
DOEVENTS FORCE
DO HarnessStep WITH 2, 'DOC1 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
DO DumpIntrodc WITH 'DUMP dupa DOC1 (RAJA, nract=15000)'
*========================= DOC2: taxe vamale (BIROUL VAMAL) - TVA la furnizor, cota 11%, FARA valuta =========================
PUBLIC goDlg2
goDlg2 = CREATEOBJECT('import_adauga_factura', goObj)
goDlg2.cFelDoc = 'DVI'
goDlg2.nIdFdoc = 39
goDlg2.nNract = 101
goDlg2.dDataAct = {^2026-07-20}
goDlg2.nIdPartener = 1398
goDlg2.cPartener = 'BIROUL VAMAL'
goDlg2.cExplicatia = 'Taxe vamale'
goDlg2.nSuma = 500
goDlg2.nSumaLei = 0
goDlg2.nCurs = 0
goDlg2.nIdValuta = 0
goDlg2.cValuta = ''
goDlg2.chkInValutaCont.Value = 0
goDlg2.chkParticipaValuta.Value = 1
goDlg2.nIdExplicatieTva = 210
goDlg2.cExplicatieTva = 'ACH. INT. 11%'
goDlg2.nProcentTva = 11
goDlg2.optTipTva.Value = 1
goDlg2.optTipTva.InteractiveChange()
goDlg2.WindowType = 0
goDlg2.Visible = .T.
goDlg2.Show()
DOEVENTS FORCE
DO HarnessStep WITH 3, 'DOC2 completat: BIROUL VAMAL nract=101, TVA furnizor 11%, fara valuta'
LOCAL llOkValid2
llOkValid2 = goDlg2.valideaza()
=Assert3('4-DOC2 dialog valideaza() reuseste', IIF(llOkValid2,1,0), 1)
*-- toDlg DOC2 construit INLINE in programul PRINCIPAL (aceeasi capcana l)
PUBLIC goT2
goT2 = CREATEOBJECT('Empty')
=ADDPROPERTY(goT2,'serie_act',ALLTRIM(NVL(goDlg2.cSerieAct,'')))
=ADDPROPERTY(goT2,'nract',goDlg2.nNract)
=ADDPROPERTY(goT2,'dataact',goDlg2.dDataAct)
=ADDPROPERTY(goT2,'fdoc',goDlg2.cFelDoc)
=ADDPROPERTY(goT2,'id_fdoc',goDlg2.nIdFdoc)
=ADDPROPERTY(goT2,'id_partc',goDlg2.nIdPartener)
=ADDPROPERTY(goT2,'partc',goDlg2.cPartener)
=ADDPROPERTY(goT2,'explicatia',ALLTRIM(NVL(goDlg2.cExplicatia,'')))
=ADDPROPERTY(goT2,'suma',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,IIF(goDlg2.nSumaLei<>0,goDlg2.nSumaLei,ROUND(goDlg2.nSuma*goDlg2.nCurs,gnPC)),goDlg2.nSuma))
=ADDPROPERTY(goT2,'suma_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nSuma,0))
=ADDPROPERTY(goT2,'in_valuta',goDlg2.chkInValutaCont.Value)
=ADDPROPERTY(goT2,'participa_valuta',(goDlg2.chkParticipaValuta.Value=1))
=ADDPROPERTY(goT2,'id_valuta',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nIdValuta,0))
=ADDPROPERTY(goT2,'curs',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nCurs,0))
=ADDPROPERTY(goT2,'nume_val',IIF(goDlg2.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg2.cValuta,'')),''))
=ADDPROPERTY(goT2,'cTipTva',IIF(goDlg2.optTipTva.Value=1,'F',IIF(goDlg2.optTipTva.Value=2,'D','N')))
=ADDPROPERTY(goT2,'id_jtva_coloana',goDlg2.nIdExplicatieTva)
=ADDPROPERTY(goT2,'disc_baza_lei',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,ROUND(goDlg2.nDiscBaza*goDlg2.nCurs,gnPC),goDlg2.nDiscBaza))
=ADDPROPERTY(goT2,'disc_baza_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nDiscBaza,0))
LOCAL llOkAdauga2
llOkAdauga2 = goObj.do_adauga_factura(goT2)
=Assert3('5-DOC2 do_adauga_factura(goT2) reuseste (Termin)', IIF(llOkAdauga2,1,0), 1)
goDlg2.Hide()
DOEVENTS FORCE
DO HarnessStep WITH 4, 'DOC2 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
DO DumpIntrodc WITH 'DUMP dupa DOC2 (BIROUL VAMAL, nract=101)'
*========================= verificare doc_key: T-DVI (DOC1) vs B (DOC2) nu se suprapun =========================
LOCAL lcDocKeyTDvi, lcDocKeyDoc2B
lcDocKeyTDvi = ''
lcDocKeyDoc2B = ''
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
IF FOUND()
lcDocKeyTDvi = ALLTRIM(NVL(doc_key,''))
ENDIF
LOCATE FOR nract = 101 AND id_fdoc = 39 AND tip_rand == 'B'
IF FOUND()
lcDocKeyDoc2B = ALLTRIM(NVL(doc_key,''))
ENDIF
=Assert3('6-ambele doc_key gasite (T-DVI si B-DOC2)', IIF(!EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B),1,0), 1)
pnAsserts = pnAsserts + 1
IF !EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B) AND lcDocKeyTDvi <> lcDocKeyDoc2B
pnPass = pnPass + 1
DO EeLog WITH ' PASS 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] <> doc_key B(DOC2)=[' + lcDocKeyDoc2B + '] (fara suprapunere)'
ELSE
DO EeLog WITH ' FAIL 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] SE SUPRAPUNE cu B(DOC2)=[' + lcDocKeyDoc2B + '] -> pista doc_key CONFIRMATA'
ENDIF
*========================= ARTICOLE (2, ale DOC1): cont 371 analitic 816, cote 11%/21% =========================
gcMockArtCodmat = 'ART-A8-371'
LOCAL llEroareArt1
llEroareArt1 = .F.
TRY
goObj.do_adauga_articol()
CATCH TO loExcArt1
llEroareArt1 = .T.
DO EeLog WITH 'EROARE do_adauga_articol (art1) ' + TRANSFORM(loExcArt1.ErrorNo) + ' [' + loExcArt1.Message + ']'
ENDTRY
=Assert3('8-do_adauga_articol() art1 (cota 11%) fara eroare', IIF(llEroareArt1,0,1), 1)
SELECT rul_temp
LOCATE FOR ALLTRIM(codmat) == 'ART-A8-371'
IF FOUND()
REPLACE cant WITH 1, pret_val WITH 100, pretd WITH 100, pret WITH ROUND(100*5.23,4), ;
pret_lei WITH ROUND(100*5.23,4), cont WITH '371', cota_tva WITH 11
ELSE
pnAsserts = pnAsserts + 1
DO EeLog WITH ' FAIL 8b: articolul cota 11% nu a fost adaugat'
ENDIF
gcMockArtCodmat = 'ART-BULD-212'
LOCAL llEroareArt2
llEroareArt2 = .F.
TRY
goObj.do_adauga_articol()
CATCH TO loExcArt2
llEroareArt2 = .T.
DO EeLog WITH 'EROARE do_adauga_articol (art2) ' + TRANSFORM(loExcArt2.ErrorNo) + ' [' + loExcArt2.Message + ']'
ENDTRY
=Assert3('9-do_adauga_articol() art2 (cota 21%) fara eroare', IIF(llEroareArt2,0,1), 1)
SELECT rul_temp
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
IF FOUND()
REPLACE cant WITH 1, pret_val WITH 900, pretd WITH 900, pret WITH ROUND(900*5.23,4), ;
pret_lei WITH ROUND(900*5.23,4), cont WITH '371', cota_tva WITH 21
ELSE
pnAsserts = pnAsserts + 1
DO EeLog WITH ' FAIL 9b: articolul cota 21% nu a fost adaugat'
ENDIF
goObj.gridart.Refresh()
DOEVENTS FORCE
DO HarnessStep WITH 5, 'articole adaugate (cont 371/816, cote 11% si 21%)'
DO DumpIntrodc WITH 'DUMP dupa ARTICOLE (inainte de sincronizare)'
*========================= sincronizeaza() REAL =========================
LOCAL llEroareSync
llEroareSync = .F.
TRY
goObj.sincronizeaza()
CATCH TO loExcSync
llEroareSync = .T.
DO EeLog WITH 'EROARE sincronizeaza() ' + TRANSFORM(loExcSync.ErrorNo) + ' [' + loExcSync.Message + '] in ' + loExcSync.Procedure + ':' + TRANSFORM(loExcSync.LineNo)
ENDTRY
DOEVENTS FORCE
=Assert3('10-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1)
DO HarnessStep WITH 6, 'sincronizat'
DO DumpIntrodc WITH 'DUMP dupa sincronizeaza() (flux curat, fara nicio interactiune de grila)'
*========================= BASELINE inainte de trigger: dataact corect pe fiecare rand =========================
LOCAL llBugDeclansator
llBugDeclansator = .F.
SELECT introdc
LOCATE FOR tip_rand == 'S' AND Nvl(rand_dvi,0) <> 1
=Assert3('11-BASELINE: rand S (DOC1) are dataact=20.07.2026', IIF(FOUND(), dataact, {}), {^2026-07-20})
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
=Assert3('11b-BASELINE: randul T-DVI are dataact=25.07.2026', IIF(FOUND(), dataact, {}), {^2026-07-25})
DO HarnessStep WITH 7, 'verificat baseline dataact: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
*========================= imediat inainte de Terminat: ultim DUMP introdc =========================
DO DumpIntrodc WITH 'DUMP inainte de declansatorul pe Data'
*========================= DECLANSATOR: pointer pe randul T-DVI, Grid1.cDataAct.Text1.Valid() =========================
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
=Assert3('12-pozitionare pe randul T-DVI reusita (declansator)', IIF(FOUND(),1,0), 1)
LOCAL llTriggerOk
llTriggerOk = .F.
IF FOUND()
goObj.Grid1.cDataAct.Text1.Valid()
llTriggerOk = .T.
ENDIF
DOEVENTS FORCE
=Assert3('13-declansator (pointer pe T-DVI, cDataAct.Valid) executat fara eroare', IIF(llTriggerOk,1,0), 1)
DO DumpIntrodc WITH 'DUMP dupa declansator (pointer pe T-DVI, cDataAct.Valid)'
LOCAL lnCntVerifData
lnCntVerifData = 0
SELECT introdc
SCAN FOR nr_doc = 1 AND Nvl(rand_dvi,0) <> 1
lnCntVerifData = lnCntVerifData + 1
pnAsserts = pnAsserts + 1
IF dataact == {^2026-07-20}
pnPass = pnPass + 1
DO EeLog WITH ' PASS 14.' + TRANSFORM(lnCntVerifData) + '-tip_rand=' + tip_rand + ' dataact ramane 20.07.2026 dupa trigger (=' + DTOC(dataact) + ')'
ELSE
llBugDeclansator = .T.
DO EeLog WITH ' FAIL 14.' + TRANSFORM(lnCntVerifData) + '-tip_rand=' + tip_rand + ' dataact=' + DTOC(dataact) + ' (asteptat 20.07.2026) dupa trigger -> BUG'
ENDIF
ENDSCAN
*-- randul T-DVI insusi trebuie sa ramana pe data lui (25.07.2026, sursa neschimbata)
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
=Assert3('15-T-DVI.dataact ramane 25.07.2026 (randul sursa neschimbat)', IIF(FOUND(), dataact, {}), {^2026-07-25})
*========================= Terminat (stub verificare.scx) =========================
DO CreeazaActactan
LOCAL llEroareTermin
llEroareTermin = .F.
TRY
goObj.inainte_de_do_termin()
CATCH TO loExcTermin
llEroareTermin = .T.
DO EeLog WITH 'EROARE inainte_de_do_termin() ' + TRANSFORM(loExcTermin.ErrorNo) + ' [' + loExcTermin.Message + '] in ' + loExcTermin.Procedure + ':' + TRANSFORM(loExcTermin.LineNo)
ENDTRY
=Assert3('12-inainte_de_do_termin() fara eroare (Terminat)', IIF(llEroareTermin,0,1), 1)
IF USED('actactan')
DO EeLog WITH 'DUMP actactan dupa Terminat:'
SELECT actactan
SCAN
DO EeLog WITH ' recno=' + TRANSFORM(RECNO()) + ' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ;
' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' partc=[' + ALLTRIM(NVL(partc,'')) + ']' + ;
' dataact=' + DTOC(NVL(dataact,{})) + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ' suma=' + TRANSFORM(NVL(suma,0))
ENDSCAN
LOCAL lnCntVerifRaja, lnCntVerifVamal
lnCntVerifRaja = 0
lnCntVerifVamal = 0
SELECT actactan
SCAN FOR ALLTRIM(NVL(partc,'')) == 'RAJA'
lnCntVerifRaja = lnCntVerifRaja + 1
pnAsserts = pnAsserts + 1
IF dataact == {^2026-07-20}
pnPass = pnPass + 1
DO EeLog WITH ' PASS 18.' + TRANSFORM(lnCntVerifRaja) + '-actactan randul RAJA: dataact=20.07.2026 (=' + DTOC(dataact) + ')'
ELSE
llBugDeclansator = .T.
DO EeLog WITH ' FAIL 18.' + TRANSFORM(lnCntVerifRaja) + '-actactan randul RAJA: dataact=' + DTOC(dataact) + ' (asteptat 20.07.2026) -> BUG'
ENDIF
ENDSCAN
*-- NU verific randurile BIROUL VAMAL in actactan: DOC2 (taxe vamale, propriu, dataact=20.07.2026)
*-- si randul T-DVI al DOC1 (dataact=25.07.2026) au ACEEASI identitate (nract/id_fdoc/id_partc/
*-- partc), iar actactan nu pastreaza nr_doc/doc_key - nu se pot distinge fiabil aici; verificarea
*-- neambigua a randului T-DVI s-a facut deja mai sus, la nivel de introdc (assert 15).
lnCntVerifVamal = -1
IF lnCntVerifRaja = 0
DO EeLog WITH ' INFO: niciun rand RAJA in actactan'
ENDIF
IF lnCntVerifVamal = 0
DO EeLog WITH ' INFO: niciun rand BIROUL VAMAL in actactan'
ENDIF
ELSE
DO EeLog WITH 'INFO: actactan neinstantiat dupa inainte_de_do_termin() (posibil eroare de validare mai devreme in flux)'
ENDIF
DO HarnessStep WITH 8, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
DO EeLog WITH '========================================================='
IF llBugDeclansator
DO EeLog WITH 'BUG CONFIRMAT pe declansatorul Data: dataact-ul randului T-DVI (25.07.2026) s-a ' + ;
'propagat peste dataact-ul randurilor facturii (asteptat 20.07.2026) dupa ce ' + ;
'Grid1.cDataAct.Text1.Valid() a rulat cu pointerul pe randul T-DVI - acelasi mecanism ' + ;
'(ControlSource calificat la runtime) ca la declansatorul pe coloana Nr.'
ELSE
DO EeLog WITH 'BUG NECONFIRMAT pe declansatorul Data: dataact-ul facturii a ramas 20.07.2026 pe ' + ;
'toate randurile ei dupa trigger, iar randul T-DVI si-a pastrat data lui (25.07.2026).'
ENDIF
DO EeLog WITH '========================================================='
DO EeLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
IF pnPass = pnAsserts
DO EeLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
ELSE
DO EeLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
ENDIF
DO HarnessDone WITH 'done'
CATCH TO loExc
DO EeLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
DO HarnessDone WITH 'done-error'
ENDTRY
QUIT
*==================================================================================
PROCEDURE DumpIntrodc
LPARAMETERS tcTitlu
LOCAL lcSelAnt, lnRecAnt
lcSelAnt = SELECT()
lnRecAnt = IIF(USED('introdc'), IIF(EOF('introdc') OR BOF('introdc'), 0, RECNO('introdc')), 0)
DO EeLog WITH tcTitlu
IF !USED('introdc')
DO EeLog WITH ' (introdc neinstantiat)'
RETURN
ENDIF
SELECT introdc
SCAN
DO EeLog WITH ' tip_rand=' + ALLTRIM(NVL(tip_rand,'?')) + ' nr_doc=' + TRANSFORM(NVL(nr_doc,0)) + ;
' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ;
' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' doc_key=[' + ALLTRIM(NVL(doc_key,'')) + ']' + ;
' rand_dvi=' + TRANSFORM(NVL(rand_dvi,0)) + ' valuta_proprie=' + TRANSFORM(NVL(valuta_proprie,0)) + ;
' mod_manual=' + TRANSFORM(NVL(mod_manual,0)) + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ;
' suma=' + TRANSFORM(NVL(suma,0)) + ' suma_val=' + TRANSFORM(NVL(suma_val,0))
ENDSCAN
IF lnRecAnt > 0
TRY
GO lnRecAnt
CATCH
GO TOP
ENDTRY
ENDIF
SELECT (lcSelAnt)
ENDPROC
PROCEDURE CreeazaIntrodc
LPARAMETERS tcAlias
IF USED(tcAlias)
USE IN (tcAlias)
ENDIF
CREATE CURSOR (tcAlias) ( ;
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
ENDPROC
PROCEDURE CreeazaRulTemp
IF USED('rul_temp')
USE IN ('rul_temp')
ENDIF
CREATE CURSOR rul_temp ( ;
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
, fdoc C(30), id_fdoc N(18,4);
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
ENDPROC
PROCEDURE CreeazaActactan
IF USED('actactan')
USE IN ('actactan')
ENDIF
CREATE CURSOR actactan ( ;
id_fdoc N(14), fdoc C(50), dataact D, serie_act C(10), nract N(14), ;
partc C(100), id_partc N(14), partd C(100), id_partd N(14), ;
suma N(18,4), suma_val N(18,4), explicatia C(100), explicatia4 C(50), explicatia5 C(50), ;
scd C(10), ascd C(20), scc C(10), ascc C(20), id_jtva_coloana N(14) NULL, taxcode N(6), ;
id_valuta N(14), curs N(14,4), nume_val C(10), proc_tva N(8,4), nnir N(14), ;
tva_incasare N(1), id_set N(14), id_gestin N(14))
ENDPROC
FUNCTION RECCOUNT_ACTIVE
LPARAMETERS tcAlias
LOCAL lnSel, lnCnt
lnSel = SELECT()
SELECT (tcAlias)
COUNT TO lnCnt FOR !DELETED()
SELECT (lnSel)
RETURN lnCnt
ENDFUNC
PROCEDURE Assert3
LPARAMETERS tcLabel, tuActual, tuExpected
pnAsserts = pnAsserts + 1
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
pnPass = pnPass + 1
DO EeLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
ELSE
DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
ENDIF
ENDPROC
PROCEDURE AssertStr
LPARAMETERS tcLabel, tcActual, tcExpected
pnAsserts = pnAsserts + 1
IF tcActual == tcExpected
pnPass = pnPass + 1
DO EeLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])'
ELSE
DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])'
ENDIF
ENDPROC
PROCEDURE EeErr
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
DO EeLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
ENDPROC
PROCEDURE EeLog
LPARAMETERS tcMsg
SET SAFETY OFF
LOCAL lcL
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
ENDPROC
DEFINE CLASS dummyapp AS Custom
PROCEDURE ReadIni
LPARAMETERS tcSection, tcKey
RETURN ''
ENDPROC
PROCEDURE WriteIni
LPARAMETERS tcSection, tcKey, tcValue
RETURN .T.
ENDPROC
ENDDEFINE
DEFINE CLASS dummyexecutor AS Custom
cEroare = ''
PROCEDURE oExecute
LPARAMETERS tcSql, tcCursor
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
DO CreeazaJtvaColoaneView WITH m.tcCursor
RETURN 1
ENDIF
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
RETURN 1
ENDIF
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
INSERT INTO (m.tcCursor) VALUES ('', '')
RETURN 1
ENDIF
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (acont C(20))
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
RETURN 1
ENDIF
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
RETURN 1
ENDIF
IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ;
explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1))
INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0)
RETURN 1
ENDIF
CREATE CURSOR (m.tcCursor) (id_temp N(1))
RETURN 1
ENDPROC
PROCEDURE oExecuta
LPARAMETERS tcSql, tcCursor
IF !EMPTY(m.tcCursor)
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
ELSE
CREATE CURSOR (m.tcCursor) (id_temp N(1))
ENDIF
ENDIF
RETURN .T.
ENDPROC
PROCEDURE oSelect2Value
LPARAMETERS tcSql, toValue
toValue = ''
RETURN 1
ENDPROC
PROCEDURE oReset
ENDPROC
ENDDEFINE
PROCEDURE CreeazaJtvaColoaneView
LPARAMETERS tcCursor
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (210, 'ACH. INT. 11%', 1, 0, 'RO11B', 11, 211, 1, 3, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (211, 'TVA ACH. INT. 11%', 1, 0, 'RO11T', 11, 1, 4, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 5, 301204)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 6, 301204)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (222, 'ACH. IMP. 11%', 1, 0, 'FO11B', 11, 223, 1, 7, 301204)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (223, 'TVA ACH. IMP. 11%', 1, 0, 'FO11T', 11, 1, 8, 301204)
ENDPROC

View File

@@ -0,0 +1,12 @@
# test_repro_trigger_data.ps1 - wrapper peste harness-ul generic pentru testul de REPRODUCERE
# cu declansatorul pe coloana Data (Grid1.cDataAct.Text1.Valid), pointer pe randul T-DVI.
# Rulare: powershell -ExecutionPolicy Bypass -File test_repro_trigger_data.ps1
$ErrorActionPreference = 'Stop'
$Teste = $PSScriptRoot
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
-TestPrg (Join-Path $Teste 'test_repro_trigger_data.prg') `
-Steps @('nota_goala','doc1_completat','doc1_adaugat','doc2_completat','doc2_adaugat','articole_adaugate','sincronizat','verificat_flux_curat','final') `
-ShotsDir (Join-Path $Teste 'screenshots_repro_trigger_data') `
-SyncDir (Join-Path $Teste 'uisync_repro_trigger_data') `
-StepTimeoutSec 180 `
-ReadyTimeoutSec 180

View File

@@ -0,0 +1,978 @@
* test_repro_trigger_focus_terminat.prg
* Test de REPRODUCERE - acelasi flux CURAT ca test_repro_flux_curat_doc_dublu.prg (confirmat
* NECONFIRMAT: nract nu se strica singur), plus UN SINGUR declansator suplimentar, realist:
* declansatorul (a) din lista Mariusm - "pointerul pe randul T-DVI + apasarea butonului
* Terminat (focus pierdut din grila)". In VFP, Valid() pe coloana activa a grid-ului se
* declanseaza la PIERDEREA focusului (click pe alt control, ex. butonul Terminat), INDIFERENT
* daca utilizatorul a tastat ceva - nu doar la Tab/Enter in aceeasi coloana. Daca ultimul rand
* pe care a stat grid-ul (navigare/revizuire inainte de Terminat) e randul T-DVI, simplul click
* pe Terminat ar declansa Grid1.cNract.Text1.Valid() -> Thisform.copiaza_valoare('nract') CU
* POINTERUL PE RANDUL T-DVI - exact ipoteza bug-ului din COMUN\clase\ointroduceri.vcx.
*
* Headless nu poate reproduce evenimentul de pierdere-a-focusului la nivel de GDI/mesaje
* Windows; surogatul cel mai fidel e sa apelam EXPLICIT Grid1.cNract.Text1.Valid() cu
* pointerul din introdc pozitionat pe randul T-DVI, IMEDIAT inainte de goObj.inainte_de_do_termin()
* (Terminat) - adica exact starea in care s-ar afla cursorul daca utilizatorul a lasat grid-ul
* cu celula activa pe coloana "Nr" a randului DVI si a dat click pe Terminat fara sa mai
* navigheze in alta parte. Diferenta fata de testul respins de Marius: acolo se apela Valid()
* IZOLAT, fara sa se continue cu Terminat - aici trigger-ul e verificat EXACT in secventa
* "focus pe DVI -> Terminat", ca sa vedem daca simptomul ajunge in actactan.
*
* Scenariu (date reale, act.cod=1140856) - identic cu test_repro_flux_curat_doc_dublu.prg:
* DOC1 - factura principala: nract=15000, id_fdoc=42 (Factura), id_partc=463 (RAJA), in
* valuta EUR (curs 5.23), suma=1000 EUR=5230 lei, discount financiar 100 EUR=523 lei;
* TVA pe DVI (nract=101, id_fdoc=39 'DVI', id_partc=1398 'BIROUL VAMAL'), DVI FARA valuta
* proprie (bifa scoasa - alegere RON prin picker-ul real, normalizata "fara valuta").
* DOC2 - taxe vamale: nract=101, id_fdoc=39 (DVI), id_partc=1398 (BIROUL VAMAL), FARA
* valuta, suma=500 lei, TVA la FURNIZOR (nu pe DVI) cota 11%, participa la pret.
* ARTICOLE (2, ale DOC1): cont 371 analitic 816, un articol cota 11% (baza 100 EUR/523 lei)
* si unul cota 21% (baza 900 EUR/4707 lei) - proportie 100:900, ca sa se exercite
* sparge_tva_protejat() (randul T-DVI e "protejat" - valuta_proprie=1 - pentru ca factura
* e in valuta straina, chiar daca DVI-ul insusi nu are valuta proprie).
*
* ATENTIE: DOC2 are ACELASI nract/id_fdoc/id_partc (101/39/1398) ca randul T-DVI al DOC1 (dupa
* ce acesta preia identitatea vamala) - testul verifica explicit ca doc_key nu se suprapune
* intre cele doua (calc_doc_key :8799 include nr_doc, care difera - vezi assert-urile finale).
*
* Dump complet introdc dupa fiecare pas (tip_rand, nr_doc, doc_key, nract, id_fdoc, id_partc,
* scd, scc, suma, suma_val, rand_dvi, valuta_proprie, mod_manual) + actactan dupa Terminat.
* Asserturile de identitate se fac dupa nr_doc (nu dupa nract, care e tocmai ce se verifica).
*
* Rulare:
* powershell -ExecutionPolicy Bypass -File test_repro_trigger_focus_terminat.ps1
SET SAFETY OFF
SET TALK OFF
SET DELETED ON
SET EXACT ON
SET CENTURY ON
SET DATE DMY
SET DECIMALS TO 4
SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcUILog, gcSyncDir
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_repro_trigger_focus_terminat_log.txt"
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_repro_trigger_focus_terminat\"
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
ON ERROR DO EeErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
TRY
LOCAL gcAppPath, lcPath
gcAppPath = "D:\ROA\ROAGEST\"
SET DEFAULT TO (gcAppPath)
lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ;
gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
SET PATH TO &lcPath ADDITIVE
DO EeLog WITH 'SET PATH OK'
*----- CLASE -----
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
SET CLASSLIB TO GESTIUNI ADDITIVE
SET CLASSLIB TO CAUT ADDITIVE
SET CLASSLIB TO BAZA ADDITIVE
SET CLASSLIB TO comun ADDITIVE
SET CLASSLIB TO accessibility.vcx ADDITIVE
SET CLASSLIB TO messagebox ADDITIVE
SET CLASSLIB TO registry ADDITIVE
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
SET CLASSLIB TO DECABAZA ADDITIVE
SET CLASSLIB TO onomenclatoare ADDITIVE
SET CLASSLIB TO stocuri.vcx ADDITIVE
SET CLASSLIB TO rulaje.vcx ADDITIVE
SET CLASSLIB TO ointroduceri ADDITIVE
SET CLASSLIB TO ointroduceri_web ADDITIVE
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
SET CLASSLIB TO overificari ADDITIVE
SET CLASSLIB TO ferestre_oracle ADDITIVE
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
SET CLASSLIB TO configurare.vcx ADDITIVE
SET CLASSLIB TO serii_numere.vcx ADDITIVE
SET CLASSLIB TO omodificari.vcx ADDITIVE
SET CLASSLIB TO ocompensari.vcx ADDITIVE
SET CLASSLIB TO caut_ora ADDITIVE
SET CLASSLIB TO onote_contabile ADDITIVE
SET CLASSLIB TO otoolbar ADDITIVE
SET CLASSLIB TO bon_fisc ADDITIVE
SET CLASSLIB TO onom_articole ADDITIVE
SET CLASSLIB TO onom_retete ADDITIVE
SET CLASSLIB TO orapoarte ADDITIVE
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
SET CLASSLIB TO orapoarte_parametri ADDITIVE
SET CLASSLIB TO ONOM_CURS ADDITIVE
SET CLASSLIB TO ctl32_statusbar_fals.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 ctl32_balloontip.vcx ADDITIVE
SET CLASSLIB TO ocriterii.vcx ADDITIVE
SET CLASSLIB TO oavize.vcx ADDITIVE
SET CLASSLIB TO onomenclatoare2 ADDITIVE
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
SET CLASSLIB TO oimportxml.vcx ADDITIVE
SET CLASSLIB TO excelxml.vcx ADDITIVE
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
DO EeLog WITH 'SET CLASSLIB OK'
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
SET PROCEDURE TO PROCEDURI
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.prg" ADDITIVE
SET PROCEDURE TO acces_meniu ADDITIVE
SET PROCEDURE TO cauta_alfa ADDITIVE
SET PROCEDURE TO pmenu ADDITIVE
SET PROCEDURE TO proceduri_comune ADDITIVE
SET PROCEDURE TO quitapp ADDITIVE
SET PROCEDURE TO init_program ADDITIVE
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
SET PROCEDURE TO orapoarte.prg ADDITIVE
SET PROCEDURE TO mesaje ADDITIVE
SET PROCEDURE TO oserii_numere.prg ADDITIVE
SET PROCEDURE TO oexport.prg ADDITIVE
SET PROCEDURE TO wwConfig.prg ADDITIVE
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
SET PROCEDURE TO validare.prg ADDITIVE
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
SET PROCEDURE TO updateserver.prg ADDITIVE
SET PROCEDURE TO oinainte_de.prg ADDITIVE
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
SET PROCEDURE TO OINTRODUCERI ADDITIVE
SET PROCEDURE TO oHeader.prg ADDITIVE
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
SET PROCEDURE TO osecurity ADDITIVE
SET PROCEDURE TO ocautare ADDITIVE
SET PROCEDURE TO orefaceri ADDITIVE
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
SET PROCEDURE TO ini.prg ADDITIVE
SET PROCEDURE TO odocumente.prg ADDITIVE
SET PROCEDURE TO regex.prg ADDITIVE
SET PROCEDURE TO wwutils.prg ADDITIVE
SET PROCEDURE TO inchidere_k ADDITIVE
SET PROCEDURE TO iniacces.prg ADDITIVE
SET PROCEDURE TO oupdate.prg ADDITIVE
SET PROCEDURE TO procese.prg ADDITIVE
SET PROCEDURE TO version.prg ADDITIVE
SET PROCEDURE TO xmlaccess.prg ADDITIVE
SET PROCEDURE TO xmlparser.prg ADDITIVE
SET PROCEDURE TO filebringer.prg ADDITIVE
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
SET PROCEDURE TO wwhttp.prg ADDITIVE
SET PROCEDURE TO xdate.prg ADDITIVE
SET PROCEDURE TO ofacturare.prg ADDITIVE
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
SET PROCEDURE TO email.prg ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
DO EeLog WITH 'SET PROCEDURE OK'
*----- Globale -----
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
STORE 2 TO gnPc, gnPval, gnPVal
gnPcant = 3
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
gl406 = .T.
gcS = 'CONTAFIN'
gnAn = YEAR(DATE())
gnLuna = MONTH(DATE())
gnIdFirma = 110
gnIdSucursala = 110
gcAcces = "1;2;3;4;5;6;7;8;"
gcFirma = gcS
PUBLIC nror(65000)
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip, gcMockArtCodmat
gnMockRaspuns = 6
gcMockUltimMesaj = ''
gnMockUltimTip = 0
PUBLIC gnButon
gnButon = 1
gcMockArtCodmat = ''
PUBLIC goExecutor, goApp
goExecutor = CREATEOBJECT('dummyexecutor')
goApp = CREATEOBJECT('dummyapp')
*----- poAct: antetul notei (factura import EUR, curs 5.23) -----
PUBLIC poAct
poAct = CREATEOBJECT('Custom')
poAct.AddProperty('nume_val', 'EUR')
poAct.AddProperty('curs', 5.23)
poAct.AddProperty('proc_tva', 1.21)
poAct.AddProperty('nnir', 0)
poAct.AddProperty('id_valuta', 978)
poAct.AddProperty('id_fdoc', 42)
poAct.AddProperty('fdoc', 'Factura')
poAct.AddProperty('id_partc', 463)
poAct.AddProperty('partc', 'RAJA')
poAct.AddProperty('serie_act', '')
poAct.AddProperty('dataact', DATE())
poAct.AddProperty('tva_incasare', 0)
poAct.AddProperty('id_set', 1)
poAct.AddProperty('id_gestin', 1)
*----- jtva_coloane2 / saft_taxtable: perechi 11% + 21%, achizitii interne + import -----
IF USED('jtva_coloane2')
USE IN ('jtva_coloane2')
ENDIF
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
INSERT INTO jtva_coloane2 VALUES (3, 210, 'ACH. INT. 11%', 1, 0, 1, 'RO11B', 'RO11T', 11, 211)
INSERT INTO jtva_coloane2 VALUES (4, 211, 'TVA ACH. INT. 11%', 1, 0, 1, 'RO11T', '', 11, 0)
INSERT INTO jtva_coloane2 VALUES (5, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
INSERT INTO jtva_coloane2 VALUES (6, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
INSERT INTO jtva_coloane2 VALUES (7, 222, 'ACH. IMP. 11%', 1, 0, 1, 'FO11B', 'FO11T', 11, 223)
INSERT INTO jtva_coloane2 VALUES (8, 223, 'TVA ACH. IMP. 11%', 1, 0, 1, 'FO11T', '', 11, 0)
IF USED('saft_taxtable')
USE IN ('saft_taxtable')
ENDIF
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
INDEX ON taxcode TAG taxcode
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('', 0, '', 0, 1, 1, 1, 1)
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('301104-Achizitii interne cota 11%', 301104, '', 11, 1, 0, 1, 0)
DO CreeazaIntrodc WITH 'introdc'
DO CreeazaIntrodc WITH 'introdc_sablon'
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
id_jtva_coloana, ptva, explicatie_tva) ;
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
id_jtva_coloana, ptva, explicatie_tva) ;
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
GO TOP IN introdc_sablon
DO CreeazaRulTemp
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
*-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md)
SELECT introdc
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
SET ORDER TO ord_doc
*-- vezi antetul test_e2e_dvi_ron_discount.prg: tlIntern BARA, aceeasi valoare ca la CREATEOBJECT
PRIVATE tlIntern
tlIntern = .F.
PUBLIC gcTempPath
gcTempPath = ADDBS(SYS(2023))
PUBLIC gnHandle
gnHandle = -1
PUBLIC gnTipGest
gnTipGest = 0
PUBLIC gcCondSucursala
gcCondSucursala = ''
DO EeLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F. - mod import)'
PUBLIC goObj
goObj = CREATEOBJECT('IMPORT_nota', .F.)
IF VARTYPE(goObj) <> 'O'
DO EeLog WITH 'FAIL: instantiere import_nota'
DO HarnessDone WITH 'done-error'
QUIT
ENDIF
goObj.lDialogAratat = .T.
goObj.oact = poAct
*-- lSpargeSecundare ramane la valoarea implicita a clasei (.T., "spargere secundare activa")
*-- - NU se suprascrie, ca sa reflecte comportamentul implicit real, nu setarea din alte teste.
goObj.WindowType = 0
goObj.Visible = .T.
goObj.Show()
goObj.WindowState = 2
DOEVENTS FORCE
SELECT rul_temp
ZAP
goObj.gridart.Refresh()
DOEVENTS FORCE
PRIVATE pnAsserts, pnPass
STORE 0 TO pnAsserts, pnPass
DO HarnessStep WITH 0, 'nota goala afisata, mod import (.F.)'
*========================= DOC1: factura EUR (RAJA) + TVA DVI fara valuta proprie + discount =========================
PUBLIC goDlg
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
goDlg.cFelDoc = 'Factura'
goDlg.nIdFdoc = 42
goDlg.nNract = 15000
goDlg.dDataAct = DATE()
goDlg.nIdPartener = 463
goDlg.cPartener = 'RAJA'
goDlg.cExplicatia = 'Factura import RAJA'
goDlg.nSuma = 1000
goDlg.nSumaLei = 0
goDlg.nCurs = 5.23
goDlg.nIdValuta = 978
goDlg.cValuta = 'EUR'
goDlg.chkInValutaCont.Value = 1
goDlg.chkParticipaValuta.Value = 1
goDlg.nIdExplicatieTva = 220
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
goDlg.nProcentTva = 21
*-- DVI: identitate proprie (document vamal, partener vamal, nract 101), FARA valuta proprie
goDlg.cSerieDvi = ''
goDlg.nNractDvi = 101
goDlg.dDviData = DATE()
goDlg.nIdFdocDVI = 39
goDlg.cFelDocDvi = 'DVI'
goDlg.nDviIdPartener = 1398
goDlg.cDviPartener = 'BIROUL VAMAL'
goDlg.optTipTva.Value = 2
goDlg.optTipTva.InteractiveChange()
*-- alegere RON pe blocul DVI (picker real, mock_caut_valuta) - normalizare "fara valuta proprie"
PUBLIC goMockValuta, goMockValutaCoada
goMockValuta = CREATEOBJECT('Custom')
goMockValuta.AddProperty('id_valuta', 1)
goMockValuta.AddProperty('nume_val', 'RON')
goMockValutaCoada = CREATEOBJECT('Collection')
LOCAL loValRon
loValRon = CREATEOBJECT('Custom')
loValRon.AddProperty('id_valuta', 1)
loValRon.AddProperty('nume_val', 'RON')
goMockValutaCoada.Add(loValRon)
goDlg.cmdDviValuta.Click()
=AssertStr('1-DVI valuta aleasa RON (fara valuta proprie)', ALLTRIM(goDlg.cDviValuta), 'RON')
*-- discount financiar (doar baza)
goDlg.txtDiscBaza.Value = 100
goDlg.txtDiscBaza.Valid()
goDlg.WindowType = 0
goDlg.Visible = .T.
goDlg.Show()
DOEVENTS FORCE
DO HarnessStep WITH 1, 'DOC1 completat: RAJA nract=15000, DVI nract=101 fara valuta, discount 100 EUR'
LOCAL llOkValid1
llOkValid1 = goDlg.valideaza()
=Assert3('2-DOC1 dialog valideaza() reuseste', IIF(llOkValid1,1,0), 1)
*-- toDlg DOC1 construit INLINE in programul PRINCIPAL (capcana l, mock_caut_valuta.prg)
PUBLIC goT
goT = CREATEOBJECT('Empty')
=ADDPROPERTY(goT,'serie_act',ALLTRIM(NVL(goDlg.cSerieAct,'')))
=ADDPROPERTY(goT,'nract',goDlg.nNract)
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
=ADDPROPERTY(goT,'suma',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,IIF(goDlg.nSumaLei<>0,goDlg.nSumaLei,ROUND(goDlg.nSuma*goDlg.nCurs,gnPC)),goDlg.nSuma))
=ADDPROPERTY(goT,'suma_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nSuma,0))
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
=ADDPROPERTY(goT,'participa_valuta',(goDlg.chkParticipaValuta.Value=1))
=ADDPROPERTY(goT,'id_valuta',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nIdValuta,0))
=ADDPROPERTY(goT,'curs',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nCurs,0))
=ADDPROPERTY(goT,'nume_val',IIF(goDlg.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg.cValuta,'')),''))
=ADDPROPERTY(goT,'cTipTva',IIF(goDlg.optTipTva.Value=1,'F',IIF(goDlg.optTipTva.Value=2,'D','N')))
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
IF goDlg.optTipTva.Value = 2
=ADDPROPERTY(goT,'dvi_serie',CHRTRAN(ALLTRIM(NVL(goDlg.cSerieDvi,'')),CHR(34),''))
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
=ADDPROPERTY(goT,'dvi_dataact',goDlg.dDviData)
=ADDPROPERTY(goT,'dvi_id_fdoc',goDlg.nIdFdocDVI)
=ADDPROPERTY(goT,'dvi_fdoc',goDlg.cFelDocDvi)
=ADDPROPERTY(goT,'dvi_id_partc',goDlg.nDviIdPartener)
=ADDPROPERTY(goT,'dvi_partc',goDlg.cDviPartener)
=ADDPROPERTY(goT,'dvi_scc','401')
=ADDPROPERTY(goT,'dvi_tva_lei',goDlg.nDviTvaLei)
=ADDPROPERTY(goT,'dvi_tva_val',goDlg.nDviTvaVal)
=ADDPROPERTY(goT,'dvi_in_valuta',!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON'))
=ADDPROPERTY(goT,'dvi_id_valuta',goDlg.nDviIdValuta)
=ADDPROPERTY(goT,'dvi_curs',goDlg.nDviCurs)
=ADDPROPERTY(goT,'dvi_nume_val',ALLTRIM(NVL(goDlg.cDviValuta,'')))
=ADDPROPERTY(goT,'dvi_valuta_proprie',IIF(!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON') OR !(EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(goDlg.cValuta))=='RON'),IIF(goDlg.nDviIdValuta<>goDlg.nIdValuta OR goDlg.nDviCurs<>goDlg.nCurs,1,0),0))
ENDIF
=ADDPROPERTY(goT,'disc_baza_lei',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,ROUND(goDlg.nDiscBaza*goDlg.nCurs,gnPC),goDlg.nDiscBaza))
=ADDPROPERTY(goT,'disc_baza_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nDiscBaza,0))
LOCAL llOkAdauga1
llOkAdauga1 = goObj.do_adauga_factura(goT)
=Assert3('3-DOC1 do_adauga_factura(goT) reuseste (Termin)', IIF(llOkAdauga1,1,0), 1)
goDlg.Hide()
DOEVENTS FORCE
DO HarnessStep WITH 2, 'DOC1 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
DO DumpIntrodc WITH 'DUMP dupa DOC1 (RAJA, nract=15000)'
*========================= DOC2: taxe vamale (BIROUL VAMAL) - TVA la furnizor, cota 11%, FARA valuta =========================
PUBLIC goDlg2
goDlg2 = CREATEOBJECT('import_adauga_factura', goObj)
goDlg2.cFelDoc = 'DVI'
goDlg2.nIdFdoc = 39
goDlg2.nNract = 101
goDlg2.dDataAct = DATE()
goDlg2.nIdPartener = 1398
goDlg2.cPartener = 'BIROUL VAMAL'
goDlg2.cExplicatia = 'Taxe vamale'
goDlg2.nSuma = 500
goDlg2.nSumaLei = 0
goDlg2.nCurs = 0
goDlg2.nIdValuta = 0
goDlg2.cValuta = ''
goDlg2.chkInValutaCont.Value = 0
goDlg2.chkParticipaValuta.Value = 1
goDlg2.nIdExplicatieTva = 210
goDlg2.cExplicatieTva = 'ACH. INT. 11%'
goDlg2.nProcentTva = 11
goDlg2.optTipTva.Value = 1
goDlg2.optTipTva.InteractiveChange()
goDlg2.WindowType = 0
goDlg2.Visible = .T.
goDlg2.Show()
DOEVENTS FORCE
DO HarnessStep WITH 3, 'DOC2 completat: BIROUL VAMAL nract=101, TVA furnizor 11%, fara valuta'
LOCAL llOkValid2
llOkValid2 = goDlg2.valideaza()
=Assert3('4-DOC2 dialog valideaza() reuseste', IIF(llOkValid2,1,0), 1)
*-- toDlg DOC2 construit INLINE in programul PRINCIPAL (aceeasi capcana l)
PUBLIC goT2
goT2 = CREATEOBJECT('Empty')
=ADDPROPERTY(goT2,'serie_act',ALLTRIM(NVL(goDlg2.cSerieAct,'')))
=ADDPROPERTY(goT2,'nract',goDlg2.nNract)
=ADDPROPERTY(goT2,'dataact',goDlg2.dDataAct)
=ADDPROPERTY(goT2,'fdoc',goDlg2.cFelDoc)
=ADDPROPERTY(goT2,'id_fdoc',goDlg2.nIdFdoc)
=ADDPROPERTY(goT2,'id_partc',goDlg2.nIdPartener)
=ADDPROPERTY(goT2,'partc',goDlg2.cPartener)
=ADDPROPERTY(goT2,'explicatia',ALLTRIM(NVL(goDlg2.cExplicatia,'')))
=ADDPROPERTY(goT2,'suma',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,IIF(goDlg2.nSumaLei<>0,goDlg2.nSumaLei,ROUND(goDlg2.nSuma*goDlg2.nCurs,gnPC)),goDlg2.nSuma))
=ADDPROPERTY(goT2,'suma_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nSuma,0))
=ADDPROPERTY(goT2,'in_valuta',goDlg2.chkInValutaCont.Value)
=ADDPROPERTY(goT2,'participa_valuta',(goDlg2.chkParticipaValuta.Value=1))
=ADDPROPERTY(goT2,'id_valuta',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nIdValuta,0))
=ADDPROPERTY(goT2,'curs',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nCurs,0))
=ADDPROPERTY(goT2,'nume_val',IIF(goDlg2.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg2.cValuta,'')),''))
=ADDPROPERTY(goT2,'cTipTva',IIF(goDlg2.optTipTva.Value=1,'F',IIF(goDlg2.optTipTva.Value=2,'D','N')))
=ADDPROPERTY(goT2,'id_jtva_coloana',goDlg2.nIdExplicatieTva)
=ADDPROPERTY(goT2,'disc_baza_lei',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,ROUND(goDlg2.nDiscBaza*goDlg2.nCurs,gnPC),goDlg2.nDiscBaza))
=ADDPROPERTY(goT2,'disc_baza_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nDiscBaza,0))
LOCAL llOkAdauga2
llOkAdauga2 = goObj.do_adauga_factura(goT2)
=Assert3('5-DOC2 do_adauga_factura(goT2) reuseste (Termin)', IIF(llOkAdauga2,1,0), 1)
goDlg2.Hide()
DOEVENTS FORCE
DO HarnessStep WITH 4, 'DOC2 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
DO DumpIntrodc WITH 'DUMP dupa DOC2 (BIROUL VAMAL, nract=101)'
*========================= verificare doc_key: T-DVI (DOC1) vs B (DOC2) nu se suprapun =========================
LOCAL lcDocKeyTDvi, lcDocKeyDoc2B
lcDocKeyTDvi = ''
lcDocKeyDoc2B = ''
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
IF FOUND()
lcDocKeyTDvi = ALLTRIM(NVL(doc_key,''))
ENDIF
LOCATE FOR nract = 101 AND id_fdoc = 39 AND tip_rand == 'B'
IF FOUND()
lcDocKeyDoc2B = ALLTRIM(NVL(doc_key,''))
ENDIF
=Assert3('6-ambele doc_key gasite (T-DVI si B-DOC2)', IIF(!EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B),1,0), 1)
pnAsserts = pnAsserts + 1
IF !EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B) AND lcDocKeyTDvi <> lcDocKeyDoc2B
pnPass = pnPass + 1
DO EeLog WITH ' PASS 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] <> doc_key B(DOC2)=[' + lcDocKeyDoc2B + '] (fara suprapunere)'
ELSE
DO EeLog WITH ' FAIL 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] SE SUPRAPUNE cu B(DOC2)=[' + lcDocKeyDoc2B + '] -> pista doc_key CONFIRMATA'
ENDIF
*========================= ARTICOLE (2, ale DOC1): cont 371 analitic 816, cote 11%/21% =========================
gcMockArtCodmat = 'ART-A8-371'
LOCAL llEroareArt1
llEroareArt1 = .F.
TRY
goObj.do_adauga_articol()
CATCH TO loExcArt1
llEroareArt1 = .T.
DO EeLog WITH 'EROARE do_adauga_articol (art1) ' + TRANSFORM(loExcArt1.ErrorNo) + ' [' + loExcArt1.Message + ']'
ENDTRY
=Assert3('8-do_adauga_articol() art1 (cota 11%) fara eroare', IIF(llEroareArt1,0,1), 1)
SELECT rul_temp
LOCATE FOR ALLTRIM(codmat) == 'ART-A8-371'
IF FOUND()
REPLACE cant WITH 1, pret_val WITH 100, pretd WITH 100, pret WITH ROUND(100*5.23,4), ;
pret_lei WITH ROUND(100*5.23,4), cont WITH '371', cota_tva WITH 11
ELSE
pnAsserts = pnAsserts + 1
DO EeLog WITH ' FAIL 8b: articolul cota 11% nu a fost adaugat'
ENDIF
gcMockArtCodmat = 'ART-BULD-212'
LOCAL llEroareArt2
llEroareArt2 = .F.
TRY
goObj.do_adauga_articol()
CATCH TO loExcArt2
llEroareArt2 = .T.
DO EeLog WITH 'EROARE do_adauga_articol (art2) ' + TRANSFORM(loExcArt2.ErrorNo) + ' [' + loExcArt2.Message + ']'
ENDTRY
=Assert3('9-do_adauga_articol() art2 (cota 21%) fara eroare', IIF(llEroareArt2,0,1), 1)
SELECT rul_temp
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
IF FOUND()
REPLACE cant WITH 1, pret_val WITH 900, pretd WITH 900, pret WITH ROUND(900*5.23,4), ;
pret_lei WITH ROUND(900*5.23,4), cont WITH '371', cota_tva WITH 21
ELSE
pnAsserts = pnAsserts + 1
DO EeLog WITH ' FAIL 9b: articolul cota 21% nu a fost adaugat'
ENDIF
goObj.gridart.Refresh()
DOEVENTS FORCE
DO HarnessStep WITH 5, 'articole adaugate (cont 371/816, cote 11% si 21%)'
DO DumpIntrodc WITH 'DUMP dupa ARTICOLE (inainte de sincronizare)'
*========================= sincronizeaza() REAL =========================
LOCAL llEroareSync
llEroareSync = .F.
TRY
goObj.sincronizeaza()
CATCH TO loExcSync
llEroareSync = .T.
DO EeLog WITH 'EROARE sincronizeaza() ' + TRANSFORM(loExcSync.ErrorNo) + ' [' + loExcSync.Message + '] in ' + loExcSync.Procedure + ':' + TRANSFORM(loExcSync.LineNo)
ENDTRY
DOEVENTS FORCE
=Assert3('10-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1)
DO HarnessStep WITH 6, 'sincronizat'
DO DumpIntrodc WITH 'DUMP dupa sincronizeaza() (flux curat, fara nicio interactiune de grila)'
*========================= ASSERT-URI DE INTEGRITATE nract - identitate dupa nr_doc, NU dupa nract =========================
LOCAL lnNrDocRaja, llBugDeclansator
lnNrDocRaja = 0
llBugDeclansator = .F.
SELECT introdc
LOCATE FOR id_partc = 463 AND tip_rand <> 'T'
IF FOUND()
lnNrDocRaja = nr_doc
ENDIF
IF lnNrDocRaja = 0
*-- RAJA nu mai apare dupa id_partc (posibil deja corupt) - incerc dupa nr_doc minim
SELECT introdc
CALCULATE MIN(nr_doc) TO lnNrDocRaja
ENDIF
DO EeLog WITH 'nr_doc identificat pentru DOC1 (RAJA): ' + TRANSFORM(lnNrDocRaja)
LOCAL lnCntVerifCurat
lnCntVerifCurat = 0
SELECT introdc
SCAN FOR nr_doc = lnNrDocRaja AND Nvl(rand_dvi,0) <> 1
lnCntVerifCurat = lnCntVerifCurat + 1
pnAsserts = pnAsserts + 1
IF nract == 15000
pnPass = pnPass + 1
DO EeLog WITH ' PASS 11.' + TRANSFORM(lnCntVerifCurat) + '-tip_rand=' + tip_rand + ' nract=15000 (flux curat, =' + TRANSFORM(nract) + ')'
ELSE
llBugDeclansator = .T.
DO EeLog WITH ' FAIL 11.' + TRANSFORM(lnCntVerifCurat) + '-tip_rand=' + tip_rand + ' nract=' + TRANSFORM(nract) + ' (asteptat 15000) -> SE STRICA SINGUR, FARA TRIGGER'
ENDIF
ENDSCAN
DO HarnessStep WITH 7, 'verificat flux curat: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
*========================= imediat inainte de Terminat: ultim DUMP introdc =========================
DO DumpIntrodc WITH 'DUMP imediat inainte de Terminat (introdc, dupa sincronizare, INAINTE de trigger)'
*========================= DECLANSATOR (a): focus pe randul T-DVI, apoi Terminat =========================
*-- surogatul cel mai fidel headless pentru "utilizatorul a lasat celula Nr activa pe randul
*-- T-DVI si a dat click pe Terminat" (VFP declanseaza Valid() la pierderea focusului,
*-- INDIFERENT daca s-a tastat ceva) - pozitionam pointerul pe randul T-DVI si apelam
*-- Grid1.cNract.Text1.Valid() chiar inainte de Terminat, NU izolat.
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
=Assert3('11b-pozitionare pe randul T-DVI reusita (inainte de declansator)', IIF(FOUND(),1,0), 1)
LOCAL llTriggerOk, lcVarianta
llTriggerOk = .F.
lcVarianta = ''
IF FOUND()
TRY
goObj.Grid1.cNract.Text1.Valid()
llTriggerOk = .T.
lcVarianta = 'Grid1.cNract.Text1.Valid() (surogat pentru focus pierdut la click pe Terminat)'
CATCH TO loExcTrig1
DO EeLog WITH 'INFO Grid1.cNract.Text1.Valid() a esuat (' + TRANSFORM(loExcTrig1.ErrorNo) + ' ' + loExcTrig1.Message + '), incerc fallback copiaza_valoare()'
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
TRY
goObj.copiaza_valoare('nract')
llTriggerOk = .T.
lcVarianta = 'copiaza_valoare(''nract'') (fallback, apel direct pe metoda)'
CATCH TO loExcTrig2
DO EeLog WITH 'EROARE si fallback copiaza_valoare(''nract'') a esuat: ' + TRANSFORM(loExcTrig2.ErrorNo) + ' ' + loExcTrig2.Message
ENDTRY
ENDTRY
ENDIF
DOEVENTS FORCE
=Assert3('11c-declansator (a) executat fara eroare', IIF(llTriggerOk,1,0), 1)
DO EeLog WITH 'DECLANSATOR (a) folosit: ' + lcVarianta
DO DumpIntrodc WITH 'DUMP dupa declansatorul (a) (focus pe T-DVI), INAINTE de Terminat'
*========================= Terminat (stub verificare.scx) =========================
DO CreeazaActactan
LOCAL llEroareTermin
llEroareTermin = .F.
TRY
goObj.inainte_de_do_termin()
CATCH TO loExcTermin
llEroareTermin = .T.
DO EeLog WITH 'EROARE inainte_de_do_termin() ' + TRANSFORM(loExcTermin.ErrorNo) + ' [' + loExcTermin.Message + '] in ' + loExcTermin.Procedure + ':' + TRANSFORM(loExcTermin.LineNo)
ENDTRY
=Assert3('12-inainte_de_do_termin() fara eroare (Terminat)', IIF(llEroareTermin,0,1), 1)
IF USED('actactan')
DO EeLog WITH 'DUMP actactan dupa Terminat:'
SELECT actactan
SCAN
DO EeLog WITH ' recno=' + TRANSFORM(RECNO()) + ' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ;
' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' partc=[' + ALLTRIM(NVL(partc,'')) + ']' + ;
' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ' suma=' + TRANSFORM(NVL(suma,0))
ENDSCAN
LOCAL lnCntVerifActactan
lnCntVerifActactan = 0
SELECT actactan
SCAN FOR id_partc = 463
lnCntVerifActactan = lnCntVerifActactan + 1
pnAsserts = pnAsserts + 1
IF nract == 15000
pnPass = pnPass + 1
DO EeLog WITH ' PASS 13.' + TRANSFORM(lnCntVerifActactan) + '-actactan randul partener 463 (RAJA): nract=15000 (=' + TRANSFORM(nract) + ')'
ELSE
llBugDeclansator = .T.
DO EeLog WITH ' FAIL 13.' + TRANSFORM(lnCntVerifActactan) + '-actactan randul partener 463 (RAJA): nract=' + TRANSFORM(nract) + ' (asteptat 15000) -> BUG in actactan, flux curat'
ENDIF
ENDSCAN
IF lnCntVerifActactan = 0
DO EeLog WITH ' INFO: niciun rand cu id_partc=463 in actactan (poate fi corupt catre 1398 - vezi dump)'
ENDIF
ELSE
DO EeLog WITH 'INFO: actactan neinstantiat dupa inainte_de_do_termin() (posibil eroare de validare mai devreme in flux)'
ENDIF
DO HarnessStep WITH 8, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
DO EeLog WITH '========================================================='
IF llBugDeclansator
DO EeLog WITH 'BUG CONFIRMAT cu declansatorul (a): dupa ce Grid1.cNract.Text1.Valid() ruleaza cu ' + ;
'pointerul pe randul T-DVI (surogat pentru "focus lasat pe coloana Nr a randului DVI, apoi ' + ;
'click pe Terminat"), nract-ul DOC1 (RAJA, 15000) devine 101 pe randurile B/G/S, iar ' + ;
'coruptia ajunge in actactan dupa Terminat.'
ELSE
DO EeLog WITH 'BUG NECONFIRMAT cu declansatorul (a): desi Grid1.cNract.Text1.Valid() a rulat cu ' + ;
'pointerul pe randul T-DVI imediat inainte de Terminat, nract-ul DOC1 (RAJA, 15000) a ramas ' + ;
'corect pe toate randurile.'
ENDIF
DO EeLog WITH '========================================================='
DO EeLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
IF pnPass = pnAsserts
DO EeLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
ELSE
DO EeLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
ENDIF
DO HarnessDone WITH 'done'
CATCH TO loExc
DO EeLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
DO HarnessDone WITH 'done-error'
ENDTRY
QUIT
*==================================================================================
PROCEDURE DumpIntrodc
LPARAMETERS tcTitlu
LOCAL lcSelAnt, lnRecAnt
lcSelAnt = SELECT()
lnRecAnt = IIF(USED('introdc'), IIF(EOF('introdc') OR BOF('introdc'), 0, RECNO('introdc')), 0)
DO EeLog WITH tcTitlu
IF !USED('introdc')
DO EeLog WITH ' (introdc neinstantiat)'
RETURN
ENDIF
SELECT introdc
SCAN
DO EeLog WITH ' tip_rand=' + ALLTRIM(NVL(tip_rand,'?')) + ' nr_doc=' + TRANSFORM(NVL(nr_doc,0)) + ;
' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ;
' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' doc_key=[' + ALLTRIM(NVL(doc_key,'')) + ']' + ;
' rand_dvi=' + TRANSFORM(NVL(rand_dvi,0)) + ' valuta_proprie=' + TRANSFORM(NVL(valuta_proprie,0)) + ;
' mod_manual=' + TRANSFORM(NVL(mod_manual,0)) + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ;
' suma=' + TRANSFORM(NVL(suma,0)) + ' suma_val=' + TRANSFORM(NVL(suma_val,0))
ENDSCAN
IF lnRecAnt > 0
TRY
GO lnRecAnt
CATCH
GO TOP
ENDTRY
ENDIF
SELECT (lcSelAnt)
ENDPROC
PROCEDURE CreeazaIntrodc
LPARAMETERS tcAlias
IF USED(tcAlias)
USE IN (tcAlias)
ENDIF
CREATE CURSOR (tcAlias) ( ;
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
ENDPROC
PROCEDURE CreeazaRulTemp
IF USED('rul_temp')
USE IN ('rul_temp')
ENDIF
CREATE CURSOR rul_temp ( ;
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
, fdoc C(30), id_fdoc N(18,4);
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
ENDPROC
PROCEDURE CreeazaActactan
IF USED('actactan')
USE IN ('actactan')
ENDIF
CREATE CURSOR actactan ( ;
id_fdoc N(14), fdoc C(50), dataact D, serie_act C(10), nract N(14), ;
partc C(100), id_partc N(14), partd C(100), id_partd N(14), ;
suma N(18,4), suma_val N(18,4), explicatia C(100), explicatia4 C(50), explicatia5 C(50), ;
scd C(10), ascd C(20), scc C(10), ascc C(20), id_jtva_coloana N(14) NULL, taxcode N(6), ;
id_valuta N(14), curs N(14,4), nume_val C(10), proc_tva N(8,4), nnir N(14), ;
tva_incasare N(1), id_set N(14), id_gestin N(14))
ENDPROC
FUNCTION RECCOUNT_ACTIVE
LPARAMETERS tcAlias
LOCAL lnSel, lnCnt
lnSel = SELECT()
SELECT (tcAlias)
COUNT TO lnCnt FOR !DELETED()
SELECT (lnSel)
RETURN lnCnt
ENDFUNC
PROCEDURE Assert3
LPARAMETERS tcLabel, tuActual, tuExpected
pnAsserts = pnAsserts + 1
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
pnPass = pnPass + 1
DO EeLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
ELSE
DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
ENDIF
ENDPROC
PROCEDURE AssertStr
LPARAMETERS tcLabel, tcActual, tcExpected
pnAsserts = pnAsserts + 1
IF tcActual == tcExpected
pnPass = pnPass + 1
DO EeLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])'
ELSE
DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])'
ENDIF
ENDPROC
PROCEDURE EeErr
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
DO EeLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
ENDPROC
PROCEDURE EeLog
LPARAMETERS tcMsg
SET SAFETY OFF
LOCAL lcL
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
ENDPROC
DEFINE CLASS dummyapp AS Custom
PROCEDURE ReadIni
LPARAMETERS tcSection, tcKey
RETURN ''
ENDPROC
PROCEDURE WriteIni
LPARAMETERS tcSection, tcKey, tcValue
RETURN .T.
ENDPROC
ENDDEFINE
DEFINE CLASS dummyexecutor AS Custom
cEroare = ''
PROCEDURE oExecute
LPARAMETERS tcSql, tcCursor
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
DO CreeazaJtvaColoaneView WITH m.tcCursor
RETURN 1
ENDIF
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
RETURN 1
ENDIF
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
INSERT INTO (m.tcCursor) VALUES ('', '')
RETURN 1
ENDIF
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (acont C(20))
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
RETURN 1
ENDIF
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
RETURN 1
ENDIF
IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ;
explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1))
INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0)
RETURN 1
ENDIF
CREATE CURSOR (m.tcCursor) (id_temp N(1))
RETURN 1
ENDPROC
PROCEDURE oExecuta
LPARAMETERS tcSql, tcCursor
IF !EMPTY(m.tcCursor)
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
ELSE
CREATE CURSOR (m.tcCursor) (id_temp N(1))
ENDIF
ENDIF
RETURN .T.
ENDPROC
PROCEDURE oSelect2Value
LPARAMETERS tcSql, toValue
toValue = ''
RETURN 1
ENDPROC
PROCEDURE oReset
ENDPROC
ENDDEFINE
PROCEDURE CreeazaJtvaColoaneView
LPARAMETERS tcCursor
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (210, 'ACH. INT. 11%', 1, 0, 'RO11B', 11, 211, 1, 3, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (211, 'TVA ACH. INT. 11%', 1, 0, 'RO11T', 11, 1, 4, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 5, 301204)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 6, 301204)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (222, 'ACH. IMP. 11%', 1, 0, 'FO11B', 11, 223, 1, 7, 301204)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (223, 'TVA ACH. IMP. 11%', 1, 0, 'FO11T', 11, 1, 8, 301204)
ENDPROC

View File

@@ -0,0 +1,12 @@
# test_repro_trigger_focus_terminat.ps1 - wrapper peste harness-ul generic pentru testul de
# REPRODUCERE cu declansatorul (a): focus pe randul T-DVI + Terminat.
# Rulare: powershell -ExecutionPolicy Bypass -File test_repro_trigger_focus_terminat.ps1
$ErrorActionPreference = 'Stop'
$Teste = $PSScriptRoot
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
-TestPrg (Join-Path $Teste 'test_repro_trigger_focus_terminat.prg') `
-Steps @('nota_goala','doc1_completat','doc1_adaugat','doc2_completat','doc2_adaugat','articole_adaugate','sincronizat','verificat_flux_curat','final') `
-ShotsDir (Join-Path $Teste 'screenshots_repro_trigger_focus_terminat') `
-SyncDir (Join-Path $Teste 'uisync_repro_trigger_focus_terminat') `
-StepTimeoutSec 180 `
-ReadyTimeoutSec 180

View File

@@ -0,0 +1,994 @@
* test_repro_trigger_partener.prg
* Test de REPRODUCERE - acelasi flux CURAT ca test_repro_flux_curat_doc_dublu.prg, plus
* declansatorul cerut pe coloana "Partener": Grid1.cPartC.Text1.Valid(), in AMBELE directii:
* (1) pointerul pe randul T-DVI (sursa) -> partenerul vamal (Biroul Vamal) NU trebuie sa
* ajunga pe niciun rand al facturii principale;
* (2) pointerul pe randul B (sursa, factura) -> partenerul facturii (RAJA) NU trebuie sa
* ajunga pe randul DVI.
* Spre deosebire de copiaza_valoare('nract'), Grid1.cPartC.Text1.Valid NU foloseste
* This.Parent.ControlSource/copiaza_valoare - are logica proprie (rescrisa in fix): "early
* return cand randul curent e DVI" (cazul 1, mai sus) + "LOOP pe randurile-tinta DVI" in
* Scan-ul de propagare (cazul 2) - deci neafectata de problema de calificare gasita la
* declansatorul pe coloana Nr (vezi test_diag_controlsource_calificat.prg).
*
* Scenariu (date reale, act.cod=1140856) - identic cu test_repro_flux_curat_doc_dublu.prg:
* DOC1 - factura principala: nract=15000, id_fdoc=42 (Factura), id_partc=463 (RAJA), in
* valuta EUR (curs 5.23), suma=1000 EUR=5230 lei, discount financiar 100 EUR=523 lei;
* TVA pe DVI (nract=101, id_fdoc=39 'DVI', id_partc=1398 'BIROUL VAMAL'), DVI FARA valuta
* proprie (bifa scoasa - alegere RON prin picker-ul real, normalizata "fara valuta").
* DOC2 - taxe vamale: nract=101, id_fdoc=39 (DVI), id_partc=1398 (BIROUL VAMAL), FARA
* valuta, suma=500 lei, TVA la FURNIZOR (nu pe DVI) cota 11%, participa la pret.
* ARTICOLE (2, ale DOC1): cont 371 analitic 816, un articol cota 11% (baza 100 EUR/523 lei)
* si unul cota 21% (baza 900 EUR/4707 lei) - proportie 100:900, ca sa se exercite
* sparge_tva_protejat() (randul T-DVI e "protejat" - valuta_proprie=1 - pentru ca factura
* e in valuta straina, chiar daca DVI-ul insusi nu are valuta proprie).
*
* ATENTIE: DOC2 are ACELASI nract/id_fdoc/id_partc (101/39/1398) ca randul T-DVI al DOC1 (dupa
* ce acesta preia identitatea vamala) - testul verifica explicit ca doc_key nu se suprapune
* intre cele doua (calc_doc_key :8799 include nr_doc, care difera - vezi assert-urile finale).
*
* Dump complet introdc dupa fiecare pas (tip_rand, nr_doc, doc_key, nract, id_fdoc, id_partc,
* scd, scc, suma, suma_val, rand_dvi, valuta_proprie, mod_manual) + actactan dupa Terminat.
* Asserturile de identitate se fac dupa nr_doc (nu dupa nract, care e tocmai ce se verifica).
*
* Rulare:
* powershell -ExecutionPolicy Bypass -File test_repro_trigger_partener.ps1
SET SAFETY OFF
SET TALK OFF
SET DELETED ON
SET EXACT ON
SET CENTURY ON
SET DATE DMY
SET DECIMALS TO 4
SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcUILog, gcSyncDir
gcUILog = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\test_repro_trigger_partener_log.txt"
gcSyncDir = "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\uisync_repro_trigger_partener\"
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13)+CHR(10), gcUILog)
ON ERROR DO EeErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
TRY
LOCAL gcAppPath, lcPath
gcAppPath = "D:\ROA\ROAGEST\"
SET DEFAULT TO (gcAppPath)
lcPath = gcAppPath + 'COMUN\Utile\Teste\achizitie_import\stub_verificare;' + ;
gcAppPath + 'Date;' + gcAppPath + 'Include;' + gcAppPath + 'FERESTRE;' + ;
gcAppPath + 'GRAFICE;' + gcAppPath + 'CLASE;' + gcAppPath + 'MENIURI;' + ;
gcAppPath + 'PROGRAME;' + gcAppPath + 'RAPOARTE;' + gcAppPath + 'COMUN;' + ;
gcAppPath + 'COMUN\CLASE;' + gcAppPath + 'COMUN\FERESTRE;' + gcAppPath + 'COMUN\PROGRAME;' + ;
gcAppPath + 'COMUN\GRAFICE;' + gcAppPath + 'COMUN\RAPOARTE;' + gcAppPath + 'COMUN\MENIURI;' + ;
gcAppPath + 'COMUN\UTILE\GRIDEXTRAS;' + gcAppPath + 'COMUN\UTILE\CTL32;' + ;
gcAppPath + 'COMUN\UTILE\HPDF;' + gcAppPath + 'COMUN\UTILE\HPDF\REPORTOUTPUT;' + ;
gcAppPath + 'COMUN\UTILE\WEB;' + gcAppPath + 'COMUN\UTILE\EXCEL;' + ;
ADDBS(SUBSTR(gcAppPath,1,RAT([\],gcAppPath,2)))+[COMUNROA\]
SET PATH TO &lcPath ADDITIVE
DO EeLog WITH 'SET PATH OK'
*----- CLASE -----
SET CLASSLIB TO (gcAppPath + "comun\clase\appwiz") ADDITIVE
SET CLASSLIB TO GESTIUNI ADDITIVE
SET CLASSLIB TO CAUT ADDITIVE
SET CLASSLIB TO BAZA ADDITIVE
SET CLASSLIB TO comun ADDITIVE
SET CLASSLIB TO accessibility.vcx ADDITIVE
SET CLASSLIB TO messagebox ADDITIVE
SET CLASSLIB TO registry ADDITIVE
SET CLASSLIB TO cauta_alfa_forms.vcx ADDITIVE
SET CLASSLIB TO DECABAZA ADDITIVE
SET CLASSLIB TO onomenclatoare ADDITIVE
SET CLASSLIB TO stocuri.vcx ADDITIVE
SET CLASSLIB TO rulaje.vcx ADDITIVE
SET CLASSLIB TO ointroduceri ADDITIVE
SET CLASSLIB TO ointroduceri_web ADDITIVE
SET CLASSLIB TO ointroduceri_depozit ADDITIVE
SET CLASSLIB TO overificari ADDITIVE
SET CLASSLIB TO ferestre_oracle ADDITIVE
SET CLASSLIB TO ferestre_cere_date.vcx ADDITIVE
SET CLASSLIB TO configurare.vcx ADDITIVE
SET CLASSLIB TO serii_numere.vcx ADDITIVE
SET CLASSLIB TO omodificari.vcx ADDITIVE
SET CLASSLIB TO ocompensari.vcx ADDITIVE
SET CLASSLIB TO caut_ora ADDITIVE
SET CLASSLIB TO onote_contabile ADDITIVE
SET CLASSLIB TO otoolbar ADDITIVE
SET CLASSLIB TO bon_fisc ADDITIVE
SET CLASSLIB TO onom_articole ADDITIVE
SET CLASSLIB TO onom_retete ADDITIVE
SET CLASSLIB TO orapoarte ADDITIVE
SET CLASSLIB TO orapoarte_gestiuni ADDITIVE
SET CLASSLIB TO orapoarte_parametri ADDITIVE
SET CLASSLIB TO ONOM_CURS ADDITIVE
SET CLASSLIB TO ctl32_statusbar_fals.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 ctl32_balloontip.vcx ADDITIVE
SET CLASSLIB TO ocriterii.vcx ADDITIVE
SET CLASSLIB TO oavize.vcx ADDITIVE
SET CLASSLIB TO onomenclatoare2 ADDITIVE
SET CLASSLIB TO wwdialogs.vcx ADDITIVE
SET CLASSLIB TO oimportxml.vcx ADDITIVE
SET CLASSLIB TO excelxml.vcx ADDITIVE
SET CLASSLIB TO orapoarte_obinv.vcx ADDITIVE
DO EeLog WITH 'SET CLASSLIB OK'
*----- PROCEDURI (mock-uri PRIMELE, ui_harness la final) -----
SET PROCEDURE TO PROCEDURI
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_amessagebox.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_caut_valuta.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\mock_cauta_nom_articole.prg" ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\achizitie_import\mock_oscrie_in_fisiere.prg" ADDITIVE
SET PROCEDURE TO acces_meniu ADDITIVE
SET PROCEDURE TO cauta_alfa ADDITIVE
SET PROCEDURE TO pmenu ADDITIVE
SET PROCEDURE TO proceduri_comune ADDITIVE
SET PROCEDURE TO quitapp ADDITIVE
SET PROCEDURE TO init_program ADDITIVE
SET PROCEDURE TO oproceduri_listari.prg ADDITIVE
SET PROCEDURE TO oproceduri_configurare.prg ADDITIVE
SET PROCEDURE TO oproceduri_articole.prg ADDITIVE
SET PROCEDURE TO oproceduri_retete.prg ADDITIVE
SET PROCEDURE TO orapoarte.prg ADDITIVE
SET PROCEDURE TO mesaje ADDITIVE
SET PROCEDURE TO oserii_numere.prg ADDITIVE
SET PROCEDURE TO oexport.prg ADDITIVE
SET PROCEDURE TO wwConfig.prg ADDITIVE
SET PROCEDURE TO proceduri_rapoarte.prg ADDITIVE
SET PROCEDURE TO OPROCEDURI_CURS.PRG ADDITIVE
SET PROCEDURE TO validare.prg ADDITIVE
SET PROCEDURE TO GENCURSOR.PRG ADDITIVE
SET PROCEDURE TO OPROCEDURI_COMUNE.PRG ADDITIVE
SET PROCEDURE TO OINIT_OPTIUNI.PRG ADDITIVE
SET PROCEDURE TO updateserver.prg ADDITIVE
SET PROCEDURE TO oinainte_de.prg ADDITIVE
SET PROCEDURE TO ooperatii_comune.prg ADDITIVE
SET PROCEDURE TO Ocompensari.PRG ADDITIVE
SET PROCEDURE TO OPROCEDURI_aMS.PRG ADDITIVE
SET PROCEDURE TO oproceduri_rulaje ADDITIVE
SET PROCEDURE TO oproceduri_stocuri ADDITIVE
SET PROCEDURE TO OINTRODUCERI ADDITIVE
SET PROCEDURE TO oHeader.prg ADDITIVE
SET PROCEDURE TO proceduri_excel.PRG ADDITIVE
SET PROCEDURE TO onomenclatoare.PRG ADDITIVE
SET PROCEDURE TO osecurity ADDITIVE
SET PROCEDURE TO ocautare ADDITIVE
SET PROCEDURE TO orefaceri ADDITIVE
SET PROCEDURE TO ofacturare_comun.PRG ADDITIVE
SET PROCEDURE TO ofacturare_stoc.PRG ADDITIVE
SET PROCEDURE TO oproceduri_casademarcat ADDITIVE
SET PROCEDURE TO oproceduri_casa_marcat_e500 ADDITIVE
SET PROCEDURE TO oproceduri_casa_marcat_mp500 ADDITIVE
SET PROCEDURE TO oproceduri_util.prg ADDITIVE
SET PROCEDURE TO wwxmlhttp.prg ADDITIVE
SET PROCEDURE TO ini.prg ADDITIVE
SET PROCEDURE TO odocumente.prg ADDITIVE
SET PROCEDURE TO regex.prg ADDITIVE
SET PROCEDURE TO wwutils.prg ADDITIVE
SET PROCEDURE TO inchidere_k ADDITIVE
SET PROCEDURE TO iniacces.prg ADDITIVE
SET PROCEDURE TO oupdate.prg ADDITIVE
SET PROCEDURE TO procese.prg ADDITIVE
SET PROCEDURE TO version.prg ADDITIVE
SET PROCEDURE TO xmlaccess.prg ADDITIVE
SET PROCEDURE TO xmlparser.prg ADDITIVE
SET PROCEDURE TO filebringer.prg ADDITIVE
SET PROCEDURE TO wwcodeupdate.prg ADDITIVE
SET PROCEDURE TO wwhttp.prg ADDITIVE
SET PROCEDURE TO xdate.prg ADDITIVE
SET PROCEDURE TO ofacturare.prg ADDITIVE
SET PROCEDURE TO oproceduri_obinv.prg ADDITIVE
SET PROCEDURE TO oproceduri_facturare.prg ADDITIVE
SET PROCEDURE TO email.prg ADDITIVE
SET PROCEDURE TO "D:\ROA\ROAGEST\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
DO EeLog WITH 'SET PROCEDURE OK'
*----- Globale -----
PUBLIC gnPc, gnPval, gnPcant, gnPpret, gnPPretval, gnPCurs, gnPVal, gnPPretV, gnPPretVal
STORE 2 TO gnPc, gnPval, gnPVal
gnPcant = 3
STORE 4 TO gnPpret, gnPPretval, gnPPretVal, gnPPretV, gnPCurs
PUBLIC gl406, gcS, gnAn, gnLuna, gnIdFirma, gnIdSucursala, gcAcces, gcFirma
gl406 = .T.
gcS = 'CONTAFIN'
gnAn = YEAR(DATE())
gnLuna = MONTH(DATE())
gnIdFirma = 110
gnIdSucursala = 110
gcAcces = "1;2;3;4;5;6;7;8;"
gcFirma = gcS
PUBLIC nror(65000)
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip, gcMockArtCodmat
gnMockRaspuns = 6
gcMockUltimMesaj = ''
gnMockUltimTip = 0
PUBLIC gnButon
gnButon = 1
gcMockArtCodmat = ''
PUBLIC goExecutor, goApp
goExecutor = CREATEOBJECT('dummyexecutor')
goApp = CREATEOBJECT('dummyapp')
*----- poAct: antetul notei (factura import EUR, curs 5.23) -----
PUBLIC poAct
poAct = CREATEOBJECT('Custom')
poAct.AddProperty('nume_val', 'EUR')
poAct.AddProperty('curs', 5.23)
poAct.AddProperty('proc_tva', 1.21)
poAct.AddProperty('nnir', 0)
poAct.AddProperty('id_valuta', 978)
poAct.AddProperty('id_fdoc', 42)
poAct.AddProperty('fdoc', 'Factura')
poAct.AddProperty('id_partc', 463)
poAct.AddProperty('partc', 'RAJA')
poAct.AddProperty('serie_act', '')
poAct.AddProperty('dataact', DATE())
poAct.AddProperty('tva_incasare', 0)
poAct.AddProperty('id_set', 1)
poAct.AddProperty('id_gestin', 1)
*----- jtva_coloane2 / saft_taxtable: perechi 11% + 21%, achizitii interne + import -----
IF USED('jtva_coloane2')
USE IN ('jtva_coloane2')
ENDIF
CREATE CURSOR jtva_coloane2 (ordine N(8), id_jtva_coloana N(14), denumire C(100), ;
jc N(1), jv N(1), afisat N(1), coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14))
INSERT INTO jtva_coloane2 VALUES (0, 0, '', 0, 0, 1, '', '', 0, 0)
INSERT INTO jtva_coloane2 VALUES (1, 208, 'ACH. INT. 21%', 1, 0, 1, 'RO21B', 'RO21T', 21, 209)
INSERT INTO jtva_coloane2 VALUES (2, 209, 'TVA ACH. INT. 21%', 1, 0, 1, 'RO21T', '', 21, 0)
INSERT INTO jtva_coloane2 VALUES (3, 210, 'ACH. INT. 11%', 1, 0, 1, 'RO11B', 'RO11T', 11, 211)
INSERT INTO jtva_coloane2 VALUES (4, 211, 'TVA ACH. INT. 11%', 1, 0, 1, 'RO11T', '', 11, 0)
INSERT INTO jtva_coloane2 VALUES (5, 220, 'ACH. IMP. 21%', 1, 0, 1, 'FO21B', 'FO21T', 21, 221)
INSERT INTO jtva_coloane2 VALUES (6, 221, 'TVA ACH. IMP. 21%', 1, 0, 1, 'FO21T', '', 21, 0)
INSERT INTO jtva_coloane2 VALUES (7, 222, 'ACH. IMP. 11%', 1, 0, 1, 'FO11B', 'FO11T', 11, 223)
INSERT INTO jtva_coloane2 VALUES (8, 223, 'TVA ACH. IMP. 11%', 1, 0, 1, 'FO11T', '', 11, 0)
IF USED('saft_taxtable')
USE IN ('saft_taxtable')
ENDIF
CREATE CURSOR saft_taxtable (taxname C(250) NULL, typename C(250) NULL, taxcode N(6) NULL, ;
taxtype N(3) NULL, descriere C(250) NULL, tip C(100) NULL, descriere_tip C(250) NULL, ;
procent_taxa N(7,2) NULL, procent_prorata N(7,2) NULL, inactiv N(1) NULL, tva N(1) NULL, ;
wht N(1) NULL, tva_achizitii N(1) NULL, tva_livrari N(1) NULL)
INDEX ON taxcode TAG taxcode
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('', 0, '', 0, 1, 1, 1, 1)
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('301204-Import de bunuri cota 21%', 301204, '', 21, 1, 0, 1, 0)
INSERT INTO saft_taxtable (taxname, taxcode, descriere, procent_taxa, tva, wht, tva_achizitii, tva_livrari) ;
VALUES ('301104-Achizitii interne cota 11%', 301104, '', 11, 1, 0, 1, 0)
DO CreeazaIntrodc WITH 'introdc'
DO CreeazaIntrodc WITH 'introdc_sablon'
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
id_jtva_coloana, ptva, explicatie_tva) ;
VALUES ('371', '401', 1, 1, 1, .T., 'B', 208, 21, 'ACH. INT. 21%')
INSERT INTO introdc_sablon (scd, scc, cu_tva, ordine, id_set, participa_valuta, tip_rand, ;
id_jtva_coloana, ptva, explicatie_tva) ;
VALUES ('4426', '401', 1, 2, 1, .T., 'T', 209, 21, 'TVA ACH. INT. 21%')
GO TOP IN introdc_sablon
DO CreeazaRulTemp
INSERT INTO rul_temp (denumire, codmat, cant, pret, pret_lei, cont, cota_tva) ;
VALUES ('PLACEHOLDER', 'PH', 1, 1, 1, '371', 21)
*-- index ord_doc INAINTE de CREATEOBJECT (capcana p, docs/testare-ui-vfp.md)
SELECT introdc
INDEX ON Str(Nvl(nr_doc,0),8) + Icase(tip_rand='B','1', tip_rand='S','2', tip_rand='G','3', tip_rand='T','4', tip_rand='D','5', '6') + Padr(Nvl(scd,''),10) TAG ord_doc
SET ORDER TO ord_doc
*-- vezi antetul test_e2e_dvi_ron_discount.prg: tlIntern BARA, aceeasi valoare ca la CREATEOBJECT
PRIVATE tlIntern
tlIntern = .F.
PUBLIC gcTempPath
gcTempPath = ADDBS(SYS(2023))
PUBLIC gnHandle
gnHandle = -1
PUBLIC gnTipGest
gnTipGest = 0
PUBLIC gcCondSucursala
gcCondSucursala = ''
DO EeLog WITH 'cursoare pregatite, CREATEOBJECT(import_nota, .F. - mod import)'
PUBLIC goObj
goObj = CREATEOBJECT('IMPORT_nota', .F.)
IF VARTYPE(goObj) <> 'O'
DO EeLog WITH 'FAIL: instantiere import_nota'
DO HarnessDone WITH 'done-error'
QUIT
ENDIF
goObj.lDialogAratat = .T.
goObj.oact = poAct
*-- lSpargeSecundare ramane la valoarea implicita a clasei (.T., "spargere secundare activa")
*-- - NU se suprascrie, ca sa reflecte comportamentul implicit real, nu setarea din alte teste.
goObj.WindowType = 0
goObj.Visible = .T.
goObj.Show()
goObj.WindowState = 2
DOEVENTS FORCE
SELECT rul_temp
ZAP
goObj.gridart.Refresh()
DOEVENTS FORCE
PRIVATE pnAsserts, pnPass
STORE 0 TO pnAsserts, pnPass
DO HarnessStep WITH 0, 'nota goala afisata, mod import (.F.)'
*========================= DOC1: factura EUR (RAJA) + TVA DVI fara valuta proprie + discount =========================
PUBLIC goDlg
goDlg = CREATEOBJECT('import_adauga_factura', goObj)
goDlg.cFelDoc = 'Factura'
goDlg.nIdFdoc = 42
goDlg.nNract = 15000
goDlg.dDataAct = DATE()
goDlg.nIdPartener = 463
goDlg.cPartener = 'RAJA'
goDlg.cExplicatia = 'Factura import RAJA'
goDlg.nSuma = 1000
goDlg.nSumaLei = 0
goDlg.nCurs = 5.23
goDlg.nIdValuta = 978
goDlg.cValuta = 'EUR'
goDlg.chkInValutaCont.Value = 1
goDlg.chkParticipaValuta.Value = 1
goDlg.nIdExplicatieTva = 220
goDlg.cExplicatieTva = 'ACH. IMP. 21%'
goDlg.nProcentTva = 21
*-- DVI: identitate proprie (document vamal, partener vamal, nract 101), FARA valuta proprie
goDlg.cSerieDvi = ''
goDlg.nNractDvi = 101
goDlg.dDviData = DATE()
goDlg.nIdFdocDVI = 39
goDlg.cFelDocDvi = 'DVI'
goDlg.nDviIdPartener = 1398
goDlg.cDviPartener = 'BIROUL VAMAL'
goDlg.optTipTva.Value = 2
goDlg.optTipTva.InteractiveChange()
*-- alegere RON pe blocul DVI (picker real, mock_caut_valuta) - normalizare "fara valuta proprie"
PUBLIC goMockValuta, goMockValutaCoada
goMockValuta = CREATEOBJECT('Custom')
goMockValuta.AddProperty('id_valuta', 1)
goMockValuta.AddProperty('nume_val', 'RON')
goMockValutaCoada = CREATEOBJECT('Collection')
LOCAL loValRon
loValRon = CREATEOBJECT('Custom')
loValRon.AddProperty('id_valuta', 1)
loValRon.AddProperty('nume_val', 'RON')
goMockValutaCoada.Add(loValRon)
goDlg.cmdDviValuta.Click()
=AssertStr('1-DVI valuta aleasa RON (fara valuta proprie)', ALLTRIM(goDlg.cDviValuta), 'RON')
*-- discount financiar (doar baza)
goDlg.txtDiscBaza.Value = 100
goDlg.txtDiscBaza.Valid()
goDlg.WindowType = 0
goDlg.Visible = .T.
goDlg.Show()
DOEVENTS FORCE
DO HarnessStep WITH 1, 'DOC1 completat: RAJA nract=15000, DVI nract=101 fara valuta, discount 100 EUR'
LOCAL llOkValid1
llOkValid1 = goDlg.valideaza()
=Assert3('2-DOC1 dialog valideaza() reuseste', IIF(llOkValid1,1,0), 1)
*-- toDlg DOC1 construit INLINE in programul PRINCIPAL (capcana l, mock_caut_valuta.prg)
PUBLIC goT
goT = CREATEOBJECT('Empty')
=ADDPROPERTY(goT,'serie_act',ALLTRIM(NVL(goDlg.cSerieAct,'')))
=ADDPROPERTY(goT,'nract',goDlg.nNract)
=ADDPROPERTY(goT,'dataact',goDlg.dDataAct)
=ADDPROPERTY(goT,'fdoc',goDlg.cFelDoc)
=ADDPROPERTY(goT,'id_fdoc',goDlg.nIdFdoc)
=ADDPROPERTY(goT,'id_partc',goDlg.nIdPartener)
=ADDPROPERTY(goT,'partc',goDlg.cPartener)
=ADDPROPERTY(goT,'explicatia',ALLTRIM(NVL(goDlg.cExplicatia,'')))
=ADDPROPERTY(goT,'suma',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,IIF(goDlg.nSumaLei<>0,goDlg.nSumaLei,ROUND(goDlg.nSuma*goDlg.nCurs,gnPC)),goDlg.nSuma))
=ADDPROPERTY(goT,'suma_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nSuma,0))
=ADDPROPERTY(goT,'in_valuta',goDlg.chkInValutaCont.Value)
=ADDPROPERTY(goT,'participa_valuta',(goDlg.chkParticipaValuta.Value=1))
=ADDPROPERTY(goT,'id_valuta',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nIdValuta,0))
=ADDPROPERTY(goT,'curs',IIF(goDlg.chkInValutaCont.Value=1,goDlg.nCurs,0))
=ADDPROPERTY(goT,'nume_val',IIF(goDlg.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg.cValuta,'')),''))
=ADDPROPERTY(goT,'cTipTva',IIF(goDlg.optTipTva.Value=1,'F',IIF(goDlg.optTipTva.Value=2,'D','N')))
=ADDPROPERTY(goT,'id_jtva_coloana',goDlg.nIdExplicatieTva)
IF goDlg.optTipTva.Value = 2
=ADDPROPERTY(goT,'dvi_serie',CHRTRAN(ALLTRIM(NVL(goDlg.cSerieDvi,'')),CHR(34),''))
=ADDPROPERTY(goT,'dvi_nract',goDlg.nNractDvi)
=ADDPROPERTY(goT,'dvi_dataact',goDlg.dDviData)
=ADDPROPERTY(goT,'dvi_id_fdoc',goDlg.nIdFdocDVI)
=ADDPROPERTY(goT,'dvi_fdoc',goDlg.cFelDocDvi)
=ADDPROPERTY(goT,'dvi_id_partc',goDlg.nDviIdPartener)
=ADDPROPERTY(goT,'dvi_partc',goDlg.cDviPartener)
=ADDPROPERTY(goT,'dvi_scc','401')
=ADDPROPERTY(goT,'dvi_tva_lei',goDlg.nDviTvaLei)
=ADDPROPERTY(goT,'dvi_tva_val',goDlg.nDviTvaVal)
=ADDPROPERTY(goT,'dvi_in_valuta',!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON'))
=ADDPROPERTY(goT,'dvi_id_valuta',goDlg.nDviIdValuta)
=ADDPROPERTY(goT,'dvi_curs',goDlg.nDviCurs)
=ADDPROPERTY(goT,'dvi_nume_val',ALLTRIM(NVL(goDlg.cDviValuta,'')))
=ADDPROPERTY(goT,'dvi_valuta_proprie',IIF(!(EMPTY(goDlg.cDviValuta) OR UPPER(ALLTRIM(goDlg.cDviValuta))=='RON') OR !(EMPTY(goDlg.cValuta) OR UPPER(ALLTRIM(goDlg.cValuta))=='RON'),IIF(goDlg.nDviIdValuta<>goDlg.nIdValuta OR goDlg.nDviCurs<>goDlg.nCurs,1,0),0))
ENDIF
=ADDPROPERTY(goT,'disc_baza_lei',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,ROUND(goDlg.nDiscBaza*goDlg.nCurs,gnPC),goDlg.nDiscBaza))
=ADDPROPERTY(goT,'disc_baza_val',IIF(goDlg.chkInValutaCont.Value=1 AND goDlg.nCurs<>0,goDlg.nDiscBaza,0))
LOCAL llOkAdauga1
llOkAdauga1 = goObj.do_adauga_factura(goT)
=Assert3('3-DOC1 do_adauga_factura(goT) reuseste (Termin)', IIF(llOkAdauga1,1,0), 1)
goDlg.Hide()
DOEVENTS FORCE
DO HarnessStep WITH 2, 'DOC1 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
DO DumpIntrodc WITH 'DUMP dupa DOC1 (RAJA, nract=15000)'
*========================= DOC2: taxe vamale (BIROUL VAMAL) - TVA la furnizor, cota 11%, FARA valuta =========================
PUBLIC goDlg2
goDlg2 = CREATEOBJECT('import_adauga_factura', goObj)
goDlg2.cFelDoc = 'DVI'
goDlg2.nIdFdoc = 39
goDlg2.nNract = 101
goDlg2.dDataAct = DATE()
goDlg2.nIdPartener = 1398
goDlg2.cPartener = 'BIROUL VAMAL'
goDlg2.cExplicatia = 'Taxe vamale'
goDlg2.nSuma = 500
goDlg2.nSumaLei = 0
goDlg2.nCurs = 0
goDlg2.nIdValuta = 0
goDlg2.cValuta = ''
goDlg2.chkInValutaCont.Value = 0
goDlg2.chkParticipaValuta.Value = 1
goDlg2.nIdExplicatieTva = 210
goDlg2.cExplicatieTva = 'ACH. INT. 11%'
goDlg2.nProcentTva = 11
goDlg2.optTipTva.Value = 1
goDlg2.optTipTva.InteractiveChange()
goDlg2.WindowType = 0
goDlg2.Visible = .T.
goDlg2.Show()
DOEVENTS FORCE
DO HarnessStep WITH 3, 'DOC2 completat: BIROUL VAMAL nract=101, TVA furnizor 11%, fara valuta'
LOCAL llOkValid2
llOkValid2 = goDlg2.valideaza()
=Assert3('4-DOC2 dialog valideaza() reuseste', IIF(llOkValid2,1,0), 1)
*-- toDlg DOC2 construit INLINE in programul PRINCIPAL (aceeasi capcana l)
PUBLIC goT2
goT2 = CREATEOBJECT('Empty')
=ADDPROPERTY(goT2,'serie_act',ALLTRIM(NVL(goDlg2.cSerieAct,'')))
=ADDPROPERTY(goT2,'nract',goDlg2.nNract)
=ADDPROPERTY(goT2,'dataact',goDlg2.dDataAct)
=ADDPROPERTY(goT2,'fdoc',goDlg2.cFelDoc)
=ADDPROPERTY(goT2,'id_fdoc',goDlg2.nIdFdoc)
=ADDPROPERTY(goT2,'id_partc',goDlg2.nIdPartener)
=ADDPROPERTY(goT2,'partc',goDlg2.cPartener)
=ADDPROPERTY(goT2,'explicatia',ALLTRIM(NVL(goDlg2.cExplicatia,'')))
=ADDPROPERTY(goT2,'suma',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,IIF(goDlg2.nSumaLei<>0,goDlg2.nSumaLei,ROUND(goDlg2.nSuma*goDlg2.nCurs,gnPC)),goDlg2.nSuma))
=ADDPROPERTY(goT2,'suma_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nSuma,0))
=ADDPROPERTY(goT2,'in_valuta',goDlg2.chkInValutaCont.Value)
=ADDPROPERTY(goT2,'participa_valuta',(goDlg2.chkParticipaValuta.Value=1))
=ADDPROPERTY(goT2,'id_valuta',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nIdValuta,0))
=ADDPROPERTY(goT2,'curs',IIF(goDlg2.chkInValutaCont.Value=1,goDlg2.nCurs,0))
=ADDPROPERTY(goT2,'nume_val',IIF(goDlg2.chkInValutaCont.Value=1,ALLTRIM(NVL(goDlg2.cValuta,'')),''))
=ADDPROPERTY(goT2,'cTipTva',IIF(goDlg2.optTipTva.Value=1,'F',IIF(goDlg2.optTipTva.Value=2,'D','N')))
=ADDPROPERTY(goT2,'id_jtva_coloana',goDlg2.nIdExplicatieTva)
=ADDPROPERTY(goT2,'disc_baza_lei',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,ROUND(goDlg2.nDiscBaza*goDlg2.nCurs,gnPC),goDlg2.nDiscBaza))
=ADDPROPERTY(goT2,'disc_baza_val',IIF(goDlg2.chkInValutaCont.Value=1 AND goDlg2.nCurs<>0,goDlg2.nDiscBaza,0))
LOCAL llOkAdauga2
llOkAdauga2 = goObj.do_adauga_factura(goT2)
=Assert3('5-DOC2 do_adauga_factura(goT2) reuseste (Termin)', IIF(llOkAdauga2,1,0), 1)
goDlg2.Hide()
DOEVENTS FORCE
DO HarnessStep WITH 4, 'DOC2 adaugat: introdc=' + TRANSFORM(RECCOUNT_ACTIVE('introdc')) + ' randuri'
DO DumpIntrodc WITH 'DUMP dupa DOC2 (BIROUL VAMAL, nract=101)'
*========================= verificare doc_key: T-DVI (DOC1) vs B (DOC2) nu se suprapun =========================
LOCAL lcDocKeyTDvi, lcDocKeyDoc2B
lcDocKeyTDvi = ''
lcDocKeyDoc2B = ''
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
IF FOUND()
lcDocKeyTDvi = ALLTRIM(NVL(doc_key,''))
ENDIF
LOCATE FOR nract = 101 AND id_fdoc = 39 AND tip_rand == 'B'
IF FOUND()
lcDocKeyDoc2B = ALLTRIM(NVL(doc_key,''))
ENDIF
=Assert3('6-ambele doc_key gasite (T-DVI si B-DOC2)', IIF(!EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B),1,0), 1)
pnAsserts = pnAsserts + 1
IF !EMPTY(lcDocKeyTDvi) AND !EMPTY(lcDocKeyDoc2B) AND lcDocKeyTDvi <> lcDocKeyDoc2B
pnPass = pnPass + 1
DO EeLog WITH ' PASS 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] <> doc_key B(DOC2)=[' + lcDocKeyDoc2B + '] (fara suprapunere)'
ELSE
DO EeLog WITH ' FAIL 7-doc_key T-DVI(DOC1)=[' + lcDocKeyTDvi + '] SE SUPRAPUNE cu B(DOC2)=[' + lcDocKeyDoc2B + '] -> pista doc_key CONFIRMATA'
ENDIF
*========================= ARTICOLE (2, ale DOC1): cont 371 analitic 816, cote 11%/21% =========================
gcMockArtCodmat = 'ART-A8-371'
LOCAL llEroareArt1
llEroareArt1 = .F.
TRY
goObj.do_adauga_articol()
CATCH TO loExcArt1
llEroareArt1 = .T.
DO EeLog WITH 'EROARE do_adauga_articol (art1) ' + TRANSFORM(loExcArt1.ErrorNo) + ' [' + loExcArt1.Message + ']'
ENDTRY
=Assert3('8-do_adauga_articol() art1 (cota 11%) fara eroare', IIF(llEroareArt1,0,1), 1)
SELECT rul_temp
LOCATE FOR ALLTRIM(codmat) == 'ART-A8-371'
IF FOUND()
REPLACE cant WITH 1, pret_val WITH 100, pretd WITH 100, pret WITH ROUND(100*5.23,4), ;
pret_lei WITH ROUND(100*5.23,4), cont WITH '371', cota_tva WITH 11
ELSE
pnAsserts = pnAsserts + 1
DO EeLog WITH ' FAIL 8b: articolul cota 11% nu a fost adaugat'
ENDIF
gcMockArtCodmat = 'ART-BULD-212'
LOCAL llEroareArt2
llEroareArt2 = .F.
TRY
goObj.do_adauga_articol()
CATCH TO loExcArt2
llEroareArt2 = .T.
DO EeLog WITH 'EROARE do_adauga_articol (art2) ' + TRANSFORM(loExcArt2.ErrorNo) + ' [' + loExcArt2.Message + ']'
ENDTRY
=Assert3('9-do_adauga_articol() art2 (cota 21%) fara eroare', IIF(llEroareArt2,0,1), 1)
SELECT rul_temp
LOCATE FOR ALLTRIM(codmat) == 'ART-BULD-212'
IF FOUND()
REPLACE cant WITH 1, pret_val WITH 900, pretd WITH 900, pret WITH ROUND(900*5.23,4), ;
pret_lei WITH ROUND(900*5.23,4), cont WITH '371', cota_tva WITH 21
ELSE
pnAsserts = pnAsserts + 1
DO EeLog WITH ' FAIL 9b: articolul cota 21% nu a fost adaugat'
ENDIF
goObj.gridart.Refresh()
DOEVENTS FORCE
DO HarnessStep WITH 5, 'articole adaugate (cont 371/816, cote 11% si 21%)'
DO DumpIntrodc WITH 'DUMP dupa ARTICOLE (inainte de sincronizare)'
*========================= sincronizeaza() REAL =========================
LOCAL llEroareSync
llEroareSync = .F.
TRY
goObj.sincronizeaza()
CATCH TO loExcSync
llEroareSync = .T.
DO EeLog WITH 'EROARE sincronizeaza() ' + TRANSFORM(loExcSync.ErrorNo) + ' [' + loExcSync.Message + '] in ' + loExcSync.Procedure + ':' + TRANSFORM(loExcSync.LineNo)
ENDTRY
DOEVENTS FORCE
=Assert3('10-sincronizeaza() fara eroare', IIF(llEroareSync,0,1), 1)
DO HarnessStep WITH 6, 'sincronizat'
DO DumpIntrodc WITH 'DUMP dupa sincronizeaza() (flux curat, fara nicio interactiune de grila)'
*========================= BASELINE inainte de trigger: id_partc corect pe fiecare rand =========================
LOCAL llBugDeclansator
llBugDeclansator = .F.
SELECT introdc
LOCATE FOR tip_rand == 'S' AND Nvl(rand_dvi,0) <> 1
=Assert3('11-BASELINE: rand S (DOC1) are id_partc=463 (RAJA)', IIF(FOUND(), id_partc, -1), 463)
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
=Assert3('11b-BASELINE: randul T-DVI are id_partc=1398 (Biroul Vamal)', IIF(FOUND(), id_partc, -1), 1398)
DO HarnessStep WITH 7, 'verificat baseline id_partc: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
*========================= imediat inainte de Terminat: ultim DUMP introdc =========================
DO DumpIntrodc WITH 'DUMP inainte de declansatoarele pe Partener'
*========================= DECLANSATOR 1: pointer pe randul T-DVI, Grid1.cPartC.Text1.Valid() =========================
*-- asteptat: early return imediat (randul curent e DVI) - partenerul vamal NU trebuie
*-- sa ajunga pe niciun rand al facturii principale (nu ar avea nici cum, oricum, din moment
*-- ce metoda iese fara sa faca nimic cand randul sursa e DVI).
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
=Assert3('12-pozitionare pe randul T-DVI reusita (declansator 1)', IIF(FOUND(),1,0), 1)
LOCAL llTrigger1Ok
llTrigger1Ok = .F.
IF FOUND()
goObj.Grid1.cPartC.Text1.Valid()
llTrigger1Ok = .T.
ENDIF
DOEVENTS FORCE
=Assert3('13-declansator 1 (pointer pe T-DVI) executat fara eroare', IIF(llTrigger1Ok,1,0), 1)
DO DumpIntrodc WITH 'DUMP dupa declansatorul 1 (pointer pe T-DVI, cPartC.Valid)'
LOCAL lnCntVerifD1
lnCntVerifD1 = 0
SELECT introdc
SCAN FOR nr_doc = 1 AND Nvl(rand_dvi,0) <> 1
lnCntVerifD1 = lnCntVerifD1 + 1
pnAsserts = pnAsserts + 1
IF NVL(id_partc,0) <> 1398
pnPass = pnPass + 1
DO EeLog WITH ' PASS 14.' + TRANSFORM(lnCntVerifD1) + '-tip_rand=' + tip_rand + ' id_partc<>1398 dupa declansator 1 (=' + TRANSFORM(NVL(id_partc,0)) + ')'
ELSE
llBugDeclansator = .T.
DO EeLog WITH ' FAIL 14.' + TRANSFORM(lnCntVerifD1) + '-tip_rand=' + tip_rand + ' id_partc=1398 (Biroul Vamal a ajuns pe factura) dupa declansator 1 -> BUG'
ENDIF
ENDSCAN
*========================= DECLANSATOR 2: pointer pe randul B (factura), Grid1.cPartC.Text1.Valid() =========================
*-- asteptat: partenerul facturii (RAJA, 463) NU trebuie sa ajunga pe randul T-DVI, chiar
*-- daca T-DVI ar avea acelasi cont creditor (scc) si id_partc gol (nu e cazul aici, dar
*-- LOOP-ul explicit pe randurile-tinta cu rand_dvi=1 blocheaza oricum propagarea).
SELECT introdc
LOCATE FOR tip_rand == 'S' AND Nvl(rand_dvi,0) <> 1
=Assert3('15-pozitionare pe randul S/B (factura) reusita (declansator 2)', IIF(FOUND(),1,0), 1)
LOCAL llTrigger2Ok
llTrigger2Ok = .F.
IF FOUND()
goObj.Grid1.cPartC.Text1.Valid()
llTrigger2Ok = .T.
ENDIF
DOEVENTS FORCE
=Assert3('16-declansator 2 (pointer pe factura) executat fara eroare', IIF(llTrigger2Ok,1,0), 1)
DO DumpIntrodc WITH 'DUMP dupa declansatorul 2 (pointer pe factura, cPartC.Valid)'
SELECT introdc
LOCATE FOR Nvl(rand_dvi,0) = 1
pnAsserts = pnAsserts + 1
IF FOUND() AND NVL(id_partc,0) == 1398
pnPass = pnPass + 1
DO EeLog WITH ' PASS 17-T-DVI.id_partc ramane 1398 dupa declansator 2 (partenerul facturii NU a ajuns pe DVI)'
ELSE
llBugDeclansator = .T.
DO EeLog WITH ' FAIL 17-T-DVI.id_partc = ' + TRANSFORM(IIF(FOUND(),NVL(id_partc,0),-1)) + ' (asteptat 1398) dupa declansator 2 -> BUG'
ENDIF
*========================= Terminat (stub verificare.scx) =========================
DO CreeazaActactan
LOCAL llEroareTermin
llEroareTermin = .F.
TRY
goObj.inainte_de_do_termin()
CATCH TO loExcTermin
llEroareTermin = .T.
DO EeLog WITH 'EROARE inainte_de_do_termin() ' + TRANSFORM(loExcTermin.ErrorNo) + ' [' + loExcTermin.Message + '] in ' + loExcTermin.Procedure + ':' + TRANSFORM(loExcTermin.LineNo)
ENDTRY
=Assert3('12-inainte_de_do_termin() fara eroare (Terminat)', IIF(llEroareTermin,0,1), 1)
IF USED('actactan')
DO EeLog WITH 'DUMP actactan dupa Terminat:'
SELECT actactan
SCAN
DO EeLog WITH ' recno=' + TRANSFORM(RECNO()) + ' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ;
' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' partc=[' + ALLTRIM(NVL(partc,'')) + ']' + ;
' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ' suma=' + TRANSFORM(NVL(suma,0))
ENDSCAN
LOCAL lnCntVerifRaja, lnCntVerifVamal
lnCntVerifRaja = 0
lnCntVerifVamal = 0
SELECT actactan
SCAN FOR ALLTRIM(NVL(partc,'')) == 'RAJA'
lnCntVerifRaja = lnCntVerifRaja + 1
pnAsserts = pnAsserts + 1
IF NVL(id_partc,0) == 463
pnPass = pnPass + 1
DO EeLog WITH ' PASS 18.' + TRANSFORM(lnCntVerifRaja) + '-actactan randul RAJA: id_partc=463 (=' + TRANSFORM(NVL(id_partc,0)) + ')'
ELSE
llBugDeclansator = .T.
DO EeLog WITH ' FAIL 18.' + TRANSFORM(lnCntVerifRaja) + '-actactan randul RAJA: id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' (asteptat 463) -> BUG'
ENDIF
ENDSCAN
SELECT actactan
SCAN FOR ALLTRIM(NVL(partc,'')) == 'BIROUL VAMAL'
lnCntVerifVamal = lnCntVerifVamal + 1
pnAsserts = pnAsserts + 1
IF NVL(id_partc,0) == 1398
pnPass = pnPass + 1
DO EeLog WITH ' PASS 19.' + TRANSFORM(lnCntVerifVamal) + '-actactan randul BIROUL VAMAL: id_partc=1398 (=' + TRANSFORM(NVL(id_partc,0)) + ')'
ELSE
llBugDeclansator = .T.
DO EeLog WITH ' FAIL 19.' + TRANSFORM(lnCntVerifVamal) + '-actactan randul BIROUL VAMAL: id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' (asteptat 1398) -> BUG'
ENDIF
ENDSCAN
IF lnCntVerifRaja = 0
DO EeLog WITH ' INFO: niciun rand RAJA in actactan'
ENDIF
IF lnCntVerifVamal = 0
DO EeLog WITH ' INFO: niciun rand BIROUL VAMAL in actactan'
ENDIF
ELSE
DO EeLog WITH 'INFO: actactan neinstantiat dupa inainte_de_do_termin() (posibil eroare de validare mai devreme in flux)'
ENDIF
DO HarnessStep WITH 8, 'final: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' PASS'
DO EeLog WITH '========================================================='
IF llBugDeclansator
DO EeLog WITH 'BUG CONFIRMAT pe declansatorul Partener: id_partc s-a propagat intre randurile ' + ;
'facturii si randul T-DVI dupa ce Grid1.cPartC.Text1.Valid() a rulat cu pointerul pe randul ' + ;
'sursa (T-DVI sau factura).'
ELSE
DO EeLog WITH 'BUG NECONFIRMAT pe declansatorul Partener: partenerul vamal (Biroul Vamal) NU a ' + ;
'ajuns pe randurile facturii, iar partenerul facturii (RAJA) NU a ajuns pe randul T-DVI, ' + ;
'in niciuna din cele doua directii testate (pointer pe DVI, respectiv pointer pe factura).'
ENDIF
DO EeLog WITH '========================================================='
DO EeLog WITH 'REZULTAT: ' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS'
IF pnPass = pnAsserts
DO EeLog WITH 'REZULTAT: PASS (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ')'
ELSE
DO EeLog WITH 'REZULTAT: FAIL (' + TRANSFORM(pnPass) + '/' + TRANSFORM(pnAsserts) + ' assert-uri PASS)'
ENDIF
DO HarnessDone WITH 'done'
CATCH TO loExc
DO EeLog WITH 'CATCH ErrorNo=' + TRANSFORM(loExc.ErrorNo) + ' Message=' + loExc.Message + ' Proc=' + loExc.Procedure + ' Line=' + TRANSFORM(loExc.LineNo) + ' [' + loExc.LineContents + ']'
DO HarnessDone WITH 'done-error'
ENDTRY
QUIT
*==================================================================================
PROCEDURE DumpIntrodc
LPARAMETERS tcTitlu
LOCAL lcSelAnt, lnRecAnt
lcSelAnt = SELECT()
lnRecAnt = IIF(USED('introdc'), IIF(EOF('introdc') OR BOF('introdc'), 0, RECNO('introdc')), 0)
DO EeLog WITH tcTitlu
IF !USED('introdc')
DO EeLog WITH ' (introdc neinstantiat)'
RETURN
ENDIF
SELECT introdc
SCAN
DO EeLog WITH ' tip_rand=' + ALLTRIM(NVL(tip_rand,'?')) + ' nr_doc=' + TRANSFORM(NVL(nr_doc,0)) + ;
' nract=' + TRANSFORM(NVL(nract,0)) + ' id_fdoc=' + TRANSFORM(NVL(id_fdoc,0)) + ;
' id_partc=' + TRANSFORM(NVL(id_partc,0)) + ' doc_key=[' + ALLTRIM(NVL(doc_key,'')) + ']' + ;
' rand_dvi=' + TRANSFORM(NVL(rand_dvi,0)) + ' valuta_proprie=' + TRANSFORM(NVL(valuta_proprie,0)) + ;
' mod_manual=' + TRANSFORM(NVL(mod_manual,0)) + ' scd=' + ALLTRIM(NVL(scd,'')) + ' scc=' + ALLTRIM(NVL(scc,'')) + ;
' suma=' + TRANSFORM(NVL(suma,0)) + ' suma_val=' + TRANSFORM(NVL(suma_val,0))
ENDSCAN
IF lnRecAnt > 0
TRY
GO lnRecAnt
CATCH
GO TOP
ENDTRY
ENDIF
SELECT (lcSelAnt)
ENDPROC
PROCEDURE CreeazaIntrodc
LPARAMETERS tcAlias
IF USED(tcAlias)
USE IN (tcAlias)
ENDIF
CREATE CURSOR (tcAlias) ( ;
id_note N(14), explicatia C(100), scd C(10), ascd C(20), scc C(10), ascc C(20), ;
cu_tva N(1), id_set N(14), ordine N(8), in_valuta N(1), id_jtva_coloana N(14) NULL, ;
ptva N(6,2), explicatie_tva C(50), tipjurnal C(2), taxcode N(6), paymentcode C(9), ;
suma N(18,4), suma_val N(18,4), id_partd N(14), id_partc N(14), partd C(100), partc C(100), ;
id_fact N(14), id_factd N(14), id_factc N(14), pereched N(14), perechec N(14), ;
nract N(14), serie_act C(10), explicatia4 C(50), explicatia5 C(50), participa_valuta L, ;
id_valuta N(14), curs N(14,4), nume_val C(10), dataact D, fdoc C(50), id_fdoc N(14), ;
se_scrie N(1), tva_incasare N(1), doc_color N(10), doc_label C(10), tip_rand C(1), ;
doc_key C(80), nr_doc N(8), suma_doc N(18,4), suma_doc_val N(18,4), mod_manual N(1), expl_manual N(1), ;
scd_orig C(20), ascd_orig C(20), rand_dvi N(1), valuta_proprie N(1))
ENDPROC
PROCEDURE CreeazaRulTemp
IF USED('rul_temp')
USE IN ('rul_temp')
ENDIF
CREATE CURSOR rul_temp ( ;
id_rul N(20,0), an N(4,0), luna N(2,0), cod N(20,0);
, serie C(100), nnir N(20,0), id_articol N(10,0), denumire C(100);
, codmat C(50), codmatf C(50), codbare C(50), um C(20);
, id_gestiune N(5,0), nume_gestiune C(50), cgest C(20), nr_pag N(2,0);
, gestionar C(50), comisie_receptie1 C(50), comisie_receptie2 C(50), comisie_receptie3 C(50);
, cant N(14,3), cante N(14,3), cont C(10), acont C(20);
, pret N(18,4), tva N(18,4), valoare N(18,4), valtva N(18,4);
, proc_tva N(5,2), pretv N(18,4), pretvtva N(18,4), tvav N(18,4);
, valoarev N(18,4), valtvav N(18,4), proc_tvav N(5,2), adaos N(18,4);
, adaos_tva N(18,4), valoare_adaos N(18,4), valtva_adaos N(18,4), procent N(10,3);
, discunitar N(18,4), discount_tva N(18,4), valoare_discount N(18,4), valtva_discount N(18,4);
, proc_disc N(7,3), pretd N(14,4), curs N(18,4), id_valuta N(10,0);
, nume_val C(20), id_lucrare N(20,0), nrord C(100), id_responsabil N(10,0);
, nresp C(100), resp_marca N(18,4), dataact T, id_util N(5,0);
, util C(30), dataora T, id_sectie N(5,0), sectie C(50);
, csectie C(10), alcooltutun N(1,0), datain T, dataout T;
, id_fact N(20,0), id_gestiunec N(10,0), nume_gestiunec C(50), cgestc C(20);
, id_responsabilc N(5,0), id_reteta N(10,0), reteta C(50), nrespc C(100);
, respc_marca N(18,4), id_set N(20,0), id_tip_rulaj N(10,0), tip_rulaj C(50);
, id_obiect_depozit N(10,0), id_rul_aux N(10,0), nract N(20,0), serie_act C(10);
, dataoras T, id_utils N(10,0), lot C(30), adata_expirare T;
, id_sucursala N(5,0), sucursala C(250), id_part_rez N(10,0), part_rez C(100);
, id_lucrare_rez N(10,0), nrord_rez C(100), subgrupa C(100), grupa C(100);
, id_subgrupa N(5,0), id_grupa N(5,0), in_stoc N(1,0), in_crm N(1,0);
, id_furnizor N(10,0), furnizor C(100), id_jtva_coloana N(4,0), explicatie_tva C(100);
, taxcode N(6,0), taxname C(254), saft_procent N(18,4), codnc8 C(20);
, id_tara_origine N(4,0), cod_tara_origine C(5), tara_origine C(50), greutate N(12,4);
, fdoc C(30), id_fdoc N(18,4);
, pret_lei N(18,4), pret_val N(14,4), cota_tva N(6,2))
ENDPROC
PROCEDURE CreeazaActactan
IF USED('actactan')
USE IN ('actactan')
ENDIF
CREATE CURSOR actactan ( ;
id_fdoc N(14), fdoc C(50), dataact D, serie_act C(10), nract N(14), ;
partc C(100), id_partc N(14), partd C(100), id_partd N(14), ;
suma N(18,4), suma_val N(18,4), explicatia C(100), explicatia4 C(50), explicatia5 C(50), ;
scd C(10), ascd C(20), scc C(10), ascc C(20), id_jtva_coloana N(14) NULL, taxcode N(6), ;
id_valuta N(14), curs N(14,4), nume_val C(10), proc_tva N(8,4), nnir N(14), ;
tva_incasare N(1), id_set N(14), id_gestin N(14))
ENDPROC
FUNCTION RECCOUNT_ACTIVE
LPARAMETERS tcAlias
LOCAL lnSel, lnCnt
lnSel = SELECT()
SELECT (tcAlias)
COUNT TO lnCnt FOR !DELETED()
SELECT (lnSel)
RETURN lnCnt
ENDFUNC
PROCEDURE Assert3
LPARAMETERS tcLabel, tuActual, tuExpected
pnAsserts = pnAsserts + 1
IF ABS(NVL(tuActual,0) - tuExpected) < 0.02
pnPass = pnPass + 1
DO EeLog WITH ' PASS ' + tcLabel + ' (=' + TRANSFORM(tuActual) + ')'
ELSE
DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=' + TRANSFORM(tuActual) + ' asteptat=' + TRANSFORM(tuExpected) + ')'
ENDIF
ENDPROC
PROCEDURE AssertStr
LPARAMETERS tcLabel, tcActual, tcExpected
pnAsserts = pnAsserts + 1
IF tcActual == tcExpected
pnPass = pnPass + 1
DO EeLog WITH ' PASS ' + tcLabel + ' (=[' + tcActual + '])'
ELSE
DO EeLog WITH ' FAIL ' + tcLabel + ' (actual=[' + tcActual + '] asteptat=[' + tcExpected + '])'
ENDIF
ENDPROC
PROCEDURE EeErr
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
DO EeLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
ENDPROC
PROCEDURE EeLog
LPARAMETERS tcMsg
SET SAFETY OFF
LOCAL lcL
lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcUILog)
ENDPROC
DEFINE CLASS dummyapp AS Custom
PROCEDURE ReadIni
LPARAMETERS tcSection, tcKey
RETURN ''
ENDPROC
PROCEDURE WriteIni
LPARAMETERS tcSection, tcKey, tcValue
RETURN .T.
ENDPROC
ENDDEFINE
DEFINE CLASS dummyexecutor AS Custom
cEroare = ''
PROCEDURE oExecute
LPARAMETERS tcSql, tcCursor
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
IF 'VJTVA_COLOANE' $ UPPER(m.tcSql)
DO CreeazaJtvaColoaneView WITH m.tcCursor
RETURN 1
ENDIF
IF UPPER(ALLTRIM(m.tcCursor)) == 'RUL_TEMP'
CREATE CURSOR (m.tcCursor) (denumire C(100), codmat C(30), cant N(14,3), ;
pret_val N(18,4), pretd N(18,4), pret N(18,4), pret_lei N(18,4), cont C(10), ;
acont C(20), serie C(30), lot C(30), adata_expirare C(10), proc_disc N(6,2), cota_tva N(6,2))
RETURN 1
ENDIF
IF 'CONFIG_ANALITICE' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (camp_leg_prefix C(30), camp_leg_sufix C(30))
INSERT INTO (m.tcCursor) VALUES ('', '')
RETURN 1
ENDIF
IF 'FCONTURI_ANALITICE' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (acont C(20))
INSERT INTO (m.tcCursor) VALUES (IIF(TYPE('gcMockAcontCrt') = 'C', gcMockAcontCrt, ''))
RETURN 1
ENDIF
IF 'VPLCONT_ANALITIC' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (cont C(10), acont C(20))
RETURN 1
ENDIF
IF 'VCONFIG_CONT_IREG' $ UPPER(m.tcSql)
CREATE CURSOR (m.tcCursor) (contpart C(10), fel_cont N(1), cu_inregistrari N(1), ;
explic_cont C(100), exceptie C(10), pozitie N(1), invers N(1), gasit N(1))
INSERT INTO (m.tcCursor) VALUES ('401', 0, 0, 'Furnizori', '', 0, 0, 0)
RETURN 1
ENDIF
CREATE CURSOR (m.tcCursor) (id_temp N(1))
RETURN 1
ENDPROC
PROCEDURE oExecuta
LPARAMETERS tcSql, tcCursor
IF !EMPTY(m.tcCursor)
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
IF UPPER(m.tcCursor) == 'CJTVACOL4427'
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14))
ELSE
CREATE CURSOR (m.tcCursor) (id_temp N(1))
ENDIF
ENDIF
RETURN .T.
ENDPROC
PROCEDURE oSelect2Value
LPARAMETERS tcSql, toValue
toValue = ''
RETURN 1
ENDPROC
PROCEDURE oReset
ENDPROC
ENDDEFINE
PROCEDURE CreeazaJtvaColoaneView
LPARAMETERS tcCursor
IF USED(m.tcCursor)
USE IN (m.tcCursor)
ENDIF
CREATE CURSOR (m.tcCursor) (id_jtva_coloana N(14), denumire C(100), jc N(1), jv N(1), ;
coloana_jc C(20), coloana_jv C(20), cota_tva N(6,2), id_tva N(14) NULL, afisat N(1), ;
id_jtva_ex N(14) NULL, id_jtva_neex N(14) NULL, ordine N(8), ;
taxcode N(6) NULL, taxcode_neexigibil N(6) NULL, taxcode_n50 N(6) NULL, ;
taxcode_n50_tvai N(6) NULL, taxcode_n100 N(6) NULL, taxcode_regularizare N(6) NULL, taxcode_tvai N(6) NULL)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, afisat, ordine, cota_tva) VALUES (0, '', 0, 0, 1, 0, 0)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (208, 'ACH. INT. 21%', 1, 0, 'RO21B', 21, 209, 1, 1, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (209, 'TVA ACH. INT. 21%', 1, 0, 'RO21T', 21, 1, 2, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (210, 'ACH. INT. 11%', 1, 0, 'RO11B', 11, 211, 1, 3, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (211, 'TVA ACH. INT. 11%', 1, 0, 'RO11T', 11, 1, 4, 301104)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (220, 'ACH. IMP. 21%', 1, 0, 'FO21B', 21, 221, 1, 5, 301204)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (221, 'TVA ACH. IMP. 21%', 1, 0, 'FO21T', 21, 1, 6, 301204)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, id_tva, afisat, ordine, taxcode) ;
VALUES (222, 'ACH. IMP. 11%', 1, 0, 'FO11B', 11, 223, 1, 7, 301204)
INSERT INTO (m.tcCursor) (id_jtva_coloana, denumire, jc, jv, coloana_jc, cota_tva, afisat, ordine, taxcode) ;
VALUES (223, 'TVA ACH. IMP. 11%', 1, 0, 'FO11T', 11, 1, 8, 301204)
ENDPROC

View File

@@ -0,0 +1,12 @@
# test_repro_trigger_partener.ps1 - wrapper peste harness-ul generic pentru testul de
# REPRODUCERE cu declansatorul pe coloana Partener (Grid1.cPartC.Text1.Valid), ambele directii.
# Rulare: powershell -ExecutionPolicy Bypass -File test_repro_trigger_partener.ps1
$ErrorActionPreference = 'Stop'
$Teste = $PSScriptRoot
& (Join-Path (Split-Path $Teste -Parent) 'vfp_ui_harness.ps1') `
-TestPrg (Join-Path $Teste 'test_repro_trigger_partener.prg') `
-Steps @('nota_goala','doc1_completat','doc1_adaugat','doc2_completat','doc2_adaugat','articole_adaugate','sincronizat','verificat_flux_curat','final') `
-ShotsDir (Join-Path $Teste 'screenshots_repro_trigger_partener') `
-SyncDir (Join-Path $Teste 'uisync_repro_trigger_partener') `
-StepTimeoutSec 180 `
-ReadyTimeoutSec 180