Borderoul tine per factura ce mai are de completat si daca are articole de gestiune (camp gest, coloana si filtru), coada contabilizeaza in serie facturile bifate si incheie cu un rezumat, iar contul de furnizor/client se alege din planul de conturi. Cheia normalizata de articol, rezolvarea automata a partenerului si anularea in bloc intra tot aici. Pozitia in lista se pastreaza peste reaplicarea filtrului. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Aroafxp4z8bmM5oVECZRXY
374 lines
22 KiB
Plaintext
374 lines
22 KiB
Plaintext
* test_sursa_cont_ui.prg
|
|
* Verifica vizual runda "sursa_cont" (COMUN\clase\anaf_efactura.vc2):
|
|
* T1 - grila detalii facturii (frm_import_efactura), cu 4 linii de fixtura EXACT/APROX/
|
|
* ISTORIC/fara propunere - culorile pe celulele cCont/cAcont (captura de ecran)
|
|
* T2 - formularul frm_configurare_efactura: controalele noi vizibile/aliniate, citire/
|
|
* scriere optiuni EFACTURA_ART_NORMALIZAT/PREFIX/ISTORIC, garda pe valoare invalida
|
|
* Foloseste factura fixture deja importata de test_import_zip_efactura (acelasi criteriu
|
|
* determinist, fixtura_zip_din_baza.prg); liniile de detaliu adaugate pentru colorare sunt
|
|
* sterse la final.
|
|
*
|
|
* Rulare: powershell -ExecutionPolicy Bypass -File test_sursa_cont_ui.ps1
|
|
|
|
PUBLIC gcUILog, gcSyncDir
|
|
gcUILog = 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\test_sursa_cont_ui_log.txt'
|
|
gcSyncDir = 'D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\uisync_sursacont\'
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
|
|
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
|
|
|
|
ON ERROR DO TErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
ON SHUTDOWN QUIT
|
|
|
|
SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\ui_harness.prg') ADDITIVE
|
|
|
|
DO ('D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 1
|
|
SET PROCEDURE TO import_efactura.prg ADDITIVE
|
|
SET PROCEDURE TO recunoastere_articol_ef.prg ADDITIVE
|
|
SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\efactura_import\fixtura_zip_din_baza.prg') ADDITIVE
|
|
|
|
PUBLIC gnPass, gnFail
|
|
gnPass = 0
|
|
gnFail = 0
|
|
|
|
DO HarnessLog WITH 'INIT gnHandle=' + TRANSFORM(gnHandle) + ' gcS=' + TRANSFORM(gcS)
|
|
|
|
lnFixtIdEF = FixturaIdEFactura()
|
|
DO HarnessLog WITH 'id_efactura fixture=' + TRANSFORM(lnFixtIdEF)
|
|
IF NVL(lnFixtIdEF,0) = 0
|
|
DO TVerdict WITH .F., 'PRECONDITIE fixture', 'lipseste anaf_efactura - ruleaza intai test_import_zip_efactura.prg'
|
|
DO HarnessDone WITH 'done PRECONDITIE LIPSA'
|
|
QUIT
|
|
ENDIF
|
|
|
|
* curatenie preventiva + 4 linii de fixtura: EXACT / APROX / ISTORIC / fara propunere (NULL)
|
|
goExecutor.oExecuta("delete from anaf_efactura_detalii where id_efactura = " + TRANSFORM(m.lnFixtIdEF) + " and nr >= 900")
|
|
lcInsBase = "insert into anaf_efactura_detalii (id_efactura, nr, articol, cantitate, um, pret, proctva, valoarefaratva, discountfaratva, cont, acont, sursa_cont) values (" + TRANSFORM(m.lnFixtIdEF) + ", "
|
|
goExecutor.oExecuta(lcInsBase + "901, 'TEST FIXTURA EXACT', 1, 'BUC', 100, 19, 100, 0, '628', '4426', 'EXACT')")
|
|
goExecutor.oExecuta(lcInsBase + "902, 'TEST FIXTURA APROX', 1, 'BUC', 100, 19, 100, 0, '628', '4426', 'APROX')")
|
|
goExecutor.oExecuta(lcInsBase + "903, 'TEST FIXTURA ISTORIC', 1, 'BUC', 100, 19, 100, 0, '628', '4426', 'ISTORIC')")
|
|
goExecutor.oExecuta(lcInsBase + "904, 'TEST FIXTURA FARA PROPUNERE', 1, 'BUC', 100, 19, 100, 0, '', '', null)")
|
|
DO HarnessLog WITH 'setup: 4 linii fixtura EXACT/APROX/ISTORIC/fara propunere inserate'
|
|
|
|
* ---------- cursoare, copie fidela din vizImportEFactura (import_efactura.prg) ----------
|
|
lcData1 = '01' + Padl(Int(m.gnLuna),2,'0') + Alltrim(Str(m.gnAn))
|
|
ldData1 = GOMONTH(DATE(m.gnAn, m.gnLuna, 1), 1)
|
|
lcData2 = '01' + PADL(MONTH(m.ldData1),2,'0') + ALLTRIM(STR(YEAR(m.ldData1)))
|
|
TEXT To lcSchema Noshow
|
|
ales N(1), id N(20), id_fact N(20), data_act D, data_scad D, numar_act C(30), xfurnizor C(200), xclient C(200), partener C(200), id_incarcare C(36), id_descarcare c(36) null, tip_mesaj_raspuns C(50) null,mesaj_raspuns C(250) null, data_raspuns D null, trimis N(1) null, data_trimis T null, cod_fiscal C(30) null, cod_fiscal_emitent C(30) null, cod_fiscal_beneficiar C(30) null, detalii M null, total_fara_tva N(16,4), total_tva N(16,4), total_tva_ron N(16,4), total_cu_tva N(16,4), discount_fara_tva N(16,4), taxe_fara_tva N(16,4), valoare_fara_tva N(16,4), total_de_plata N(16,4), nume_valuta C(5), test N(1) null, jtotctva N(16,4) null, descriere M null, detalii_plata M null, diferenta N(16,4) null, procesat N(1), SerieActRoa V(10) Null, NrActRoa N(14) Null, IdPartRoa N(10) Null, PartenerRoa V(100) null, codFiscalROA V(20), idValutaROA N(5) null,numeValutaROA V(5) null, cursROA N(16,6) null,Cont c(4) Null,ACont c(4) Null,TVAIncasare N(1),Fdoc V(20) null,Id_Fdoc N(5) Null,Nrord V(100) null,Id_Lucrare I Null,Contract V(100) Null,Id_Ctr I Null,Sectie V(100) null,Id_Sectie I Null,dst_chlt V(100) null, Id_venchelt I NUll, nresp V(100) null, Id_responsabil I NUll , completat N(1), completatdet N(1), creditnote N(1), explicatiaROA V(100) null
|
|
ENDTEXT
|
|
TEXT To lcSelect TEXTMERGE Noshow
|
|
SELECT 0 as ales, id, id_fact, data_act, data_scad, numar_act, xfurnizor, xclient, partener, id_incarcare, id_descarcare, tip_mesaj_raspuns, mesaj_raspuns, data_raspuns, NVL(trimis,0) as trimis, data_trimis, cod_fiscal, cod_fiscal_emitent, cod_fiscal_beneficiar, '' as detalii, total_fara_tva, total_tva, total_tva_ron, total_cu_tva, discount_fara_tva, taxe_fara_tva, valoare_fara_tva, total_de_plata, nume_valuta, test, jtotctva, descriere, detalii_plata, case when jtotctva is null then null when NVL(nume_valuta,'RON') <> 'RON' then null else decode(creditnote,0,1,-1) * NVL(total_cu_tva,0.00) - (NVL(jtotctva,0.00) - NVL(jtva_ti,0.00)) end as diferenta, procesat,
|
|
'' as SerieActRoa, CAST(null as Number(14)) as NrActRoa, CAST(null as Number(20)) as idPartRoa, '' as PartenerRoa, '' as codFiscalROA, CAST(null as Number(10)) as idValutaROA, '' as numeValutaROA, CAST(null as Number(16,6)) as cursROA,
|
|
'' as Cont, '' as acont, 0 as TVAIncasare, '' as Fdoc, CAST(0 as Number(5)) as Id_Fdoc, '' as Nrord, CAST(0 as Number(10)) as id_Lucrare, '' as Contract, CAST(null as Number(10)) as id_ctr,
|
|
'' Sectie, CAST(0 as Number(10)) as id_Sectie, '' as dst_chlt, CAST(0 as Number(10)) as id_Venchelt, '' as nresp, CAST(0 as Number(10)) as id_responsabil, 0 as completat, 0 as completatdet, creditnote, '' as explicatiaROA
|
|
FROM anaf_vefactura_primit
|
|
ENDTEXT
|
|
lcOrder = [data_act,numar_act,data_raspuns]
|
|
lcgroup = []
|
|
lcFiltru = [(data_act >= to_date('] + m.lcData1 + [','ddmmyyyy') and data_act < to_date('] + m.lcData2 + [','ddmmyyyy')) or (data_act is null and data_raspuns >= to_date('] + m.lcData1 + [','ddmmyyyy'))]
|
|
lcFiltruOriginal = []
|
|
llModParam = .T.
|
|
llAfiseaza = .F.
|
|
|
|
PRIVATE poFacturi, poFacturiDetalii
|
|
poFacturi = Null
|
|
poFacturiDetalii = Null
|
|
|
|
gencursor('poFacturi', 'crsFacturi', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
|
|
poFacturi.ca_baza1.afisare()
|
|
SELECT crsFacturi
|
|
LOCATE FOR id = m.lnFixtIdEF
|
|
DO TVerdict WITH FOUND(), 'setup: factura fixtura vizibila in crsFacturi', 'FOUND=' + TRANSFORM(FOUND()) + ' din ' + TRANSFORM(RECCOUNT('crsFacturi')) + ' randuri'
|
|
|
|
TEXT To lcSchema Noshow
|
|
distribuie N(1), id_tip N(10) null, id_articol N(20) null, id_gestiune N(20) null, cont C(4) null, acont C(4) null, sursa_cont V(10) null, id N(20), id_efactura N(20), nr N(5), articol V(250), descriere V(250), detalii M, cantitate N(18,6), um V(20), um_iso V(50), um_roa V(50), pret N(20,6), proctva N(7,2), tiptva V(2), valoarefaratva N(20,6), discountfaratva N(20,6), in_stoc N(1), articol_roa V(250), codmat_roa V(50), codbare V(50), codclient V(100), codfurnizor V(100), codcpv V(50), codnc8 V(50), nume_gestiune V(50), cgest V(20), tva N(20,6), pretv N(20,6), tvav N(20,6), pretvtva N(20,6)
|
|
ENDTEXT
|
|
TEXT To lcSelect Noshow
|
|
select 0 as distribuie, CAST(0 as number(10)) as id_tip, id_articol, id_gestiune, cont, acont, sursa_cont, id, id_efactura, nr, articol, descriere, detalii, cantitate, um, um_iso, um_roa, pret, proctva, tiptva, valoarefaratva, discountfaratva, in_stoc, articol_roa, codmat_roa, codbare, codclient, codfurnizor, codcpv, codnc8, nume_gestiune, cgest, 0 as tva, 0 as pretv, 0 as tvav, 0 as pretvtva from anaf_vefactura_detalii
|
|
ENDTEXT
|
|
lcOrder = [nr]
|
|
lcgroup = []
|
|
lcFiltru = [id_efactura=] + ALLTRIM(STR(m.lnFixtIdEF))
|
|
lcFiltruOriginal = []
|
|
llModParam = .T.
|
|
llAfiseaza = .F.
|
|
|
|
gencursor('poFacturiDetalii', 'crsDetaliiFacturiTemp', lcSelect, lcFiltru, lcSchema, lcOrder, llAfiseaza, lcgroup, llModParam, lcFiltruOriginal)
|
|
poFacturiDetalii.ca_baza1.afisare()
|
|
SELECT * FROM crsDetaliiFacturiTemp INTO CURSOR crsDetaliiFacturi READWRITE
|
|
DO TVerdict WITH RECCOUNT('crsDetaliiFacturi') >= 4, 'setup: crsDetaliiFacturi are cele 4 linii fixtura', TRANSFORM(RECCOUNT('crsDetaliiFacturi')) + ' randuri'
|
|
|
|
* cursoare helper cerute de Init-ul formularului (copie din vizImportEFactura)
|
|
CREATE CURSOR cTipArticoleP (id I, in_stoc N(1), tip V(50), cont V(4), ordine I)
|
|
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0)
|
|
INSERT INTO cTipArticoleP (id, tip, cont, in_stoc, ordine) VALUES (12, 'Terti','628', 0, 12)
|
|
SELECT cTipArticoleP
|
|
GO TOP IN cTipArticoleP
|
|
INDEX on ordine TAG ordine
|
|
|
|
CREATE CURSOR cTipArticoleE (id I, in_stoc N(1), tip V(50), cont V(4), ordine I)
|
|
INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (0, 'Nedefinit','', 0, 0)
|
|
INSERT INTO cTipArticoleE (id, tip, cont, in_stoc, ordine) VALUES (34, 'Servicii vandute','704', 0, 6)
|
|
SELECT cTipArticoleE
|
|
GO TOP IN cTipArticoleE
|
|
INDEX on ordine TAG ordine
|
|
|
|
SELECT id, tip, cont, in_stoc, ordine FROM cTipArticoleP ORDER BY ordine INTO CURSOR cTip
|
|
SELECT cTip
|
|
INDEX on id TAG id
|
|
|
|
llSucces = goExecutor.oExecuta([select distinct nume_gestiune,cgest,id_gestiune,nr_pag,cont from vgest_gestiuni_util where inactiv = 0 and id_util = ] + Alltrim(Str(m.gnIdUtil)), 'cGestiuni')
|
|
SELECT cGestiuni
|
|
APPEND BLANK
|
|
INDEX on id_gestiune TAG id_gest
|
|
select cast(alltrim(nume_gestiune) + '-' + alltrim(nvl(cgest, '')) as V(50)) as nume_gestiune, id_gestiune from cGestiuni order by nume_gestiune into cursor cGestiuni2
|
|
|
|
llSucces = goExecutor.oExecuta("select cod_um_iso, um_iso from syn_vnom_um_iso", 'cUMISO')
|
|
SELECT cUMISO
|
|
INDEX on cod_um_iso TAG cod_um_iso
|
|
|
|
llSucces = goExecutor.oExecuta("select id, um, cod_um_iso, um_iso from vnom_um", 'cUM')
|
|
SELECT cUM
|
|
INDEX on id TAG id
|
|
|
|
* ---------- T1: frm_import_efactura, cu grila reala (Show(1) e hardcodat in vizImportEFactura,
|
|
* aici instantiez formularul direct, ca in test_import_zip_efactura.prg) ----------
|
|
SELECT crsFacturi
|
|
loForm = Createobject("frm_import_efactura", .T.)
|
|
loForm.WindowType = 0
|
|
loForm.Show()
|
|
loForm.WindowState = 2
|
|
DO HarnessLog WITH 'FORM deschis: [' + TRANSFORM(loForm.Caption) + ']'
|
|
DO HarnessLog WITH 'ClassLibrary=' + TRANSFORM(loForm.ClassLibrary)
|
|
|
|
DO TVerdict WITH TYPE('loForm.grdDetaliiFacturi') = 'O', 'T1.0 grid grdDetaliiFacturi exista pe formular', TYPE('loForm.grdDetaliiFacturi')
|
|
|
|
* Formularul isi repozitioneaza singur grila de facturi la deschidere (preferinta
|
|
* utilizator/ultima factura vazuta), care resincronizeaza crsDetaliiFacturi pe ALTA factura
|
|
* prin actualizeaza_grid2() (SET FILTER + fetch daca lipsesc randurile). Pentru verificarea
|
|
* de culori pe cele 4 surse, filtrez direct pe factura fixtura - filtrul e acelasi mecanism
|
|
* (id_efactura=...) folosit de actualizeaza_grid2, doar aplicat direct, fara sa (re)declansez
|
|
* recunoasterea automata de articol pe randul selectat anterior.
|
|
SELECT crsFacturi
|
|
LOCATE FOR id = m.lnFixtIdEF
|
|
DO TVerdict WITH FOUND(), 'T1.1 factura fixtura localizata dupa deschiderea formularului', 'FOUND=' + TRANSFORM(FOUND()) + ' RECNO=' + TRANSFORM(RECNO('crsFacturi'))
|
|
|
|
SELECT crsDetaliiFacturi
|
|
SET FILTER TO
|
|
* elimin liniile altei facturi (auto-selectate de formular la deschidere - preferinta
|
|
* utilizator/ultima factura vazuta), ca grila sa arate strict cele 4 linii fixtura
|
|
DELETE FOR id_efactura <> m.lnFixtIdEF
|
|
* SET DELETED ON e activ (test_init_env_auto) - randurile marse raman ascunse fara PACK
|
|
* (PACK pe acest cursor da eroarea 1115 "Invalid operation for the cursor")
|
|
DO HarnessLog WITH 'DIAGNOSTIC SET(DELETED)=[' + SET('DELETED') + ']'
|
|
SET DELETED OFF
|
|
GO TOP
|
|
SCAN
|
|
DO HarnessLog WITH ' recno=' + TRANSFORM(RECNO()) + ' deleted=' + TRANSFORM(DELETED()) + ' id_efactura=' + TRANSFORM(id_efactura) + ' articol=[' + TRANSFORM(articol) + ']'
|
|
ENDSCAN
|
|
SET DELETED ON
|
|
GO TOP
|
|
LOCATE FOR ALLTRIM(NVL(articol,'')) == 'TEST FIXTURA ISTORIC'
|
|
DO TVerdict WITH FOUND(), 'T1.2 dupa curatarea altei facturi, grila are liniile fixtura corecte', 'FOUND=' + TRANSFORM(FOUND()) + ' din ' + TRANSFORM(RECCOUNT('crsDetaliiFacturi')) + ' randuri'
|
|
GO TOP IN crsDetaliiFacturi
|
|
loForm.grdDetaliiFacturi.Refresh()
|
|
|
|
loForm.Refresh()
|
|
DOEVENTS FORCE
|
|
DO HarnessStep WITH 0, 'grid_4_culori'
|
|
|
|
* ---------- T2: frm_configurare_efactura, standalone (WindowType=0, situatia A) ----------
|
|
lcSql = "select cont, explicatie, tip_sold from vplcont_used where an=?gnAn and tip_cont = 0 order by cont"
|
|
llSucces = goExecutor.oExecuta(m.lcSql, "crsPlCont")
|
|
Select Cont, explicatie, tip_sold From crsPlCont Into Cursor cPlContP Order By Cont
|
|
Select Cont, explicatie, tip_sold From crsPlCont Into Cursor cPlContE Order By Cont
|
|
|
|
lcSql = "select id_gestiune, nume_gestiune, cont, acont, cgest, nume_tip from vnom_gestiuni where inactiv = 0 order by nume_gestiune"
|
|
llSucces = goExecutor.oExecuta(m.lcSql, "crsGestiuni2Cfg")
|
|
SELECT crsGestiuni2Cfg
|
|
APPEND BLANK
|
|
Select id_gestiune, nume_gestiune, Cont From crsGestiuni2Cfg Order By nume_gestiune Into Cursor cGestiuniP NOFILTER
|
|
Select id_gestiune, nume_gestiune, Cont From crsGestiuni2Cfg Order By nume_gestiune Into Cursor cGestiuniE NOFILTER
|
|
|
|
lcSql = "select id_sectie, sectie from vnom_sectii where inactiv = 0 order by sectie"
|
|
llSucces = goExecutor.oExecuta(m.lcSql, "crsSectii")
|
|
SELECT crsSectii
|
|
APPEND BLANK
|
|
Select id_sectie, sectie From crsSectii Into Cursor cSectiiP Order By sectie
|
|
Select id_sectie, sectie From crsSectii Into Cursor cSectiiE Order By sectie
|
|
|
|
lcSql = "select id_venchelt, explicatie as venchelt, decode(tip_venchelt, 1, 'VENIT', 'CHELTUIALA') as tip from vnom_venchel where inactiv = 0 order by explicatie"
|
|
llSucces = goExecutor.oExecuta(m.lcSql, "crsVenChel")
|
|
SELECT crsVenChel
|
|
APPEND BLANK
|
|
Select id_venchelt, venchelt, tip From crsVenChel Into Cursor cVenChelP Order By venchelt
|
|
Select id_venchelt, venchelt, tip From crsVenChel Into Cursor cVenChelE Order By venchelt
|
|
|
|
PUBLIC gcEFACTURA_CONT_ART_E, gcEFACTURA_CONT_ART_P, gnEFACTURA_ID_SECTIE_E, gnEFACTURA_ID_SECTIE_P, ;
|
|
gnEFACTURA_ID_GESTIUNE_E, gnEFACTURA_ID_GESTIUNE_P, gnEFACTURA_ID_VENCHELT_E, gnEFACTURA_ID_VENCHELT_P, ;
|
|
gnEFACTURA_ID_TIPART_E, gnEFACTURA_ID_TIPART_P, gnEFACTURA_CONT_ART_EF, gnEFACTURA_CONT_ART_PF, ;
|
|
gnEFACTURA_GEST_ART_EF, gnEFACTURA_GEST_ART_PF
|
|
gcEFACTURA_CONT_ART_E = ''
|
|
gcEFACTURA_CONT_ART_P = ''
|
|
gnEFACTURA_ID_SECTIE_E = 0
|
|
gnEFACTURA_ID_SECTIE_P = 0
|
|
gnEFACTURA_ID_GESTIUNE_E = 0
|
|
gnEFACTURA_ID_GESTIUNE_P = 0
|
|
gnEFACTURA_ID_VENCHELT_E = 0
|
|
gnEFACTURA_ID_VENCHELT_P = 0
|
|
gnEFACTURA_ID_TIPART_E = 0
|
|
gnEFACTURA_ID_TIPART_P = 0
|
|
gnEFACTURA_CONT_ART_EF = 0
|
|
gnEFACTURA_CONT_ART_PF = 0
|
|
gnEFACTURA_GEST_ART_EF = 0
|
|
gnEFACTURA_GEST_ART_PF = 0
|
|
|
|
SET PROCEDURE TO ('D:\ROA\ROACONT\COMUN\utile\Teste\optiuni_test.prg') ADDITIVE
|
|
SalveazaOptiuni('EFACTURA_ART_NORMALIZAT,EFACTURA_ART_PREFIX,EFACTURA_ART_ISTORIC')
|
|
|
|
* curatenie optiuni ramase de la o rulare intrerupta anterior (test repetabil)
|
|
goExecutor.oExecuta("delete from optiuni where varname in ('EFACTURA_ART_NORMALIZAT','EFACTURA_ART_PREFIX','EFACTURA_ART_ISTORIC')")
|
|
actualizeaza_optiuni()
|
|
|
|
* ---------- citire optiuni, copie fidela din Cmd_executa2.Click (anaf_efactura.vc2) ----------
|
|
PUBLIC gnEFACTURA_ART_NORMALIZAT, gnEFACTURA_ART_PREFIX, gnEFACTURA_ART_ISTORIC
|
|
gnEFACTURA_ART_NORMALIZAT = 1
|
|
gnEFACTURA_ART_PREFIX = 12
|
|
gnEFACTURA_ART_ISTORIC = 1
|
|
Try
|
|
lcValArt = citeste_optiune('EFACTURA_ART_NORMALIZAT')
|
|
If Type('lcValArt') = 'C' And !Empty(Alltrim(m.lcValArt))
|
|
gnEFACTURA_ART_NORMALIZAT = Int(Val(m.lcValArt))
|
|
Endif
|
|
lcValArt = citeste_optiune('EFACTURA_ART_PREFIX')
|
|
If Type('lcValArt') = 'C' And !Empty(Alltrim(m.lcValArt))
|
|
gnEFACTURA_ART_PREFIX = Int(Val(m.lcValArt))
|
|
Endif
|
|
lcValArt = citeste_optiune('EFACTURA_ART_ISTORIC')
|
|
If Type('lcValArt') = 'C' And !Empty(Alltrim(m.lcValArt))
|
|
gnEFACTURA_ART_ISTORIC = Int(Val(m.lcValArt))
|
|
Endif
|
|
Catch
|
|
Endtry
|
|
If gnEFACTURA_ART_PREFIX < 4 Or gnEFACTURA_ART_PREFIX > 40
|
|
gnEFACTURA_ART_PREFIX = 12
|
|
Endif
|
|
DO TVerdict WITH gnEFACTURA_ART_NORMALIZAT = 1 AND gnEFACTURA_ART_PREFIX = 12 AND gnEFACTURA_ART_ISTORIC = 1, 'T2.1 valori implicite (optiuni inca lipsa)', TRANSFORM(gnEFACTURA_ART_NORMALIZAT) + '/' + TRANSFORM(gnEFACTURA_ART_PREFIX) + '/' + TRANSFORM(gnEFACTURA_ART_ISTORIC)
|
|
|
|
* ATENTIE: comun.vcx are si el o clasa numita frm_configurare_efactura (alt formular, orfan -
|
|
* nimeni nu il instantiaza), incarcata INAINTEA anaf_efactura.vcx in SET CLASSLIB ADDITIVE.
|
|
* Createobject neambiguu ("frm_configurare_efactura") rezolva la comun.vcx, nu la clasa
|
|
* patch-uita din anaf_efactura.vcx - se dezambiguizeaza explicit cu modulul.
|
|
loConfAmbiguu = Createobject("frm_configurare_efactura")
|
|
DO HarnessLog WITH 'DIAGNOSTIC ambiguitate clasa: Createobject fara modul => ClassLibrary=' + TRANSFORM(loConfAmbiguu.ClassLibrary)
|
|
DO TVerdict WITH 'COMUN.VCX' $ UPPER(loConfAmbiguu.ClassLibrary), 'T2.0 REPRO ambiguitate: Createobject neambiguu rezolva la comun.vcx (BUG)', TRANSFORM(loConfAmbiguu.ClassLibrary)
|
|
loConfAmbiguu.Release()
|
|
|
|
loConf = Newobject("frm_configurare_efactura", "anaf_efactura.vcx")
|
|
loConf.WindowType = 0
|
|
loConf.Show()
|
|
DO HarnessLog WITH 'CONFIG deschis: [' + TRANSFORM(loConf.Caption) + '] ClassLibrary=' + TRANSFORM(loConf.ClassLibrary)
|
|
|
|
DO TVerdict WITH TYPE('loConf.chkArtNormalizatP') = 'O', 'T2.2 chkArtNormalizatP exista', TYPE('loConf.chkArtNormalizatP')
|
|
DO TVerdict WITH TYPE('loConf.spnArtPrefixP') = 'O', 'T2.3 spnArtPrefixP exista', TYPE('loConf.spnArtPrefixP')
|
|
DO TVerdict WITH TYPE('loConf.chkArtIstoricP') = 'O', 'T2.4 chkArtIstoricP exista', TYPE('loConf.chkArtIstoricP')
|
|
DO TVerdict WITH TYPE('loConf.lblArtPrefixP') = 'O', 'T2.5 lblArtPrefixP exista', TYPE('loConf.lblArtPrefixP')
|
|
|
|
IF TYPE('loConf.chkArtNormalizatP') = 'O'
|
|
DO HarnessLog WITH ' chkArtNormalizatP: Left=' + TRANSFORM(loConf.chkArtNormalizatP.Left) + ' Top=' + TRANSFORM(loConf.chkArtNormalizatP.Top) + ' Value=' + TRANSFORM(loConf.chkArtNormalizatP.Value) + ' Visible=' + TRANSFORM(loConf.chkArtNormalizatP.Visible)
|
|
DO HarnessLog WITH ' spnArtPrefixP: Left=' + TRANSFORM(loConf.spnArtPrefixP.Left) + ' Top=' + TRANSFORM(loConf.spnArtPrefixP.Top) + ' Value=' + TRANSFORM(loConf.spnArtPrefixP.Value) + ' Visible=' + TRANSFORM(loConf.spnArtPrefixP.Visible)
|
|
DO HarnessLog WITH ' chkArtIstoricP: Left=' + TRANSFORM(loConf.chkArtIstoricP.Left) + ' Top=' + TRANSFORM(loConf.chkArtIstoricP.Top) + ' Value=' + TRANSFORM(loConf.chkArtIstoricP.Value) + ' Visible=' + TRANSFORM(loConf.chkArtIstoricP.Visible)
|
|
DO HarnessLog WITH ' lblArtPrefixP: Left=' + TRANSFORM(loConf.lblArtPrefixP.Left) + ' Top=' + TRANSFORM(loConf.lblArtPrefixP.Top) + ' Visible=' + TRANSFORM(loConf.lblArtPrefixP.Visible)
|
|
DO HarnessLog WITH ' form: Height=' + TRANSFORM(loConf.Height) + ' Width=' + TRANSFORM(loConf.Width)
|
|
|
|
DO TVerdict WITH loConf.chkArtNormalizatP.Value = 1 AND loConf.chkArtIstoricP.Value = 1, 'T2.6 checkbox-urile reflecta optiunile citite (1/1)', TRANSFORM(loConf.chkArtNormalizatP.Value) + '/' + TRANSFORM(loConf.chkArtIstoricP.Value)
|
|
DO TVerdict WITH loConf.spnArtPrefixP.Value = 12, 'T2.7 spinner reflecta optiunea citita (12)', TRANSFORM(loConf.spnArtPrefixP.Value)
|
|
DO TVerdict WITH (loConf.chkArtIstoricP.Top + loConf.chkArtIstoricP.Height) <= loConf.Height AND loConf.chkArtIstoricP.Top >= 0, 'T2.8 chkArtIstoricP in interiorul formularului', 'Top=' + TRANSFORM(loConf.chkArtIstoricP.Top) + ' Height form=' + TRANSFORM(loConf.Height)
|
|
ENDIF
|
|
|
|
loConf.Refresh()
|
|
DOEVENTS FORCE
|
|
DO HarnessStep WITH 1, 'config_deschis'
|
|
|
|
* simulez modificarea din UI si Terminarea (gnButon=1)
|
|
IF TYPE('loConf.chkArtNormalizatP') = 'O'
|
|
loConf.chkArtNormalizatP.Value = 0
|
|
loConf.spnArtPrefixP.Value = 20
|
|
loConf.chkArtIstoricP.Value = 0
|
|
DOEVENTS FORCE
|
|
DO TVerdict WITH gnEFACTURA_ART_NORMALIZAT = 0 AND gnEFACTURA_ART_PREFIX = 20 AND gnEFACTURA_ART_ISTORIC = 0, 'T2.9 modificarea din UI actualizeaza memvarii (ControlSource)', TRANSFORM(gnEFACTURA_ART_NORMALIZAT) + '/' + TRANSFORM(gnEFACTURA_ART_PREFIX) + '/' + TRANSFORM(gnEFACTURA_ART_ISTORIC)
|
|
ENDIF
|
|
loConf.Refresh()
|
|
DOEVENTS FORCE
|
|
DO HarnessStep WITH 2, 'config_modificat'
|
|
|
|
gnButon = 0
|
|
loConf.do_termin()
|
|
DOEVENTS FORCE
|
|
DO TVerdict WITH gnButon = 1, 'T2.10 do_termin seteaza gnButon=1', TRANSFORM(gnButon)
|
|
|
|
IF gnButon = 1
|
|
scrie_optiune('EFACTURA_ART_NORMALIZAT', ALLTRIM(STR(INT(m.gnEFACTURA_ART_NORMALIZAT))), 'RECUNOASTERE CONT DUPA CHEIE NORMALIZATA ARTICOL EFACTURA')
|
|
scrie_optiune('EFACTURA_ART_PREFIX', ALLTRIM(STR(INT(m.gnEFACTURA_ART_PREFIX))), 'LUNGIME CHEIE NORMALIZATA ARTICOL EFACTURA')
|
|
scrie_optiune('EFACTURA_ART_ISTORIC', ALLTRIM(STR(INT(m.gnEFACTURA_ART_ISTORIC))), 'RECUNOASTERE CONT DIN ISTORICUL FURNIZORULUI EFACTURA')
|
|
ENDIF
|
|
|
|
lcVerifDb = ''
|
|
goExecutor.oSelecteaza2Value("select varvalue from optiuni where varname = 'EFACTURA_ART_PREFIX'", @lcVerifDb)
|
|
DO TVerdict WITH ALLTRIM(NVL(lcVerifDb,'')) == '20', 'T2.11 optiune scrisa in Oracle (EFACTURA_ART_PREFIX=20)', '[' + TRANSFORM(lcVerifDb) + ']'
|
|
|
|
* ---------- T3: garda pe valoare invalida la citire (scriu direct 999, verific reset la 12) ----------
|
|
scrie_optiune('EFACTURA_ART_PREFIX', '999', 'LUNGIME CHEIE NORMALIZATA ARTICOL EFACTURA')
|
|
gnEFACTURA_ART_PREFIX = 12
|
|
Try
|
|
lcValArt = citeste_optiune('EFACTURA_ART_PREFIX')
|
|
If Type('lcValArt') = 'C' And !Empty(Alltrim(m.lcValArt))
|
|
gnEFACTURA_ART_PREFIX = Int(Val(m.lcValArt))
|
|
Endif
|
|
Catch
|
|
Endtry
|
|
lnCitit999 = gnEFACTURA_ART_PREFIX
|
|
If gnEFACTURA_ART_PREFIX < 4 Or gnEFACTURA_ART_PREFIX > 40
|
|
gnEFACTURA_ART_PREFIX = 12
|
|
Endif
|
|
DO TVerdict WITH lnCitit999 = 999, 'T3.1 valoarea invalida chiar a fost citita din optiuni (999)', TRANSFORM(lnCitit999)
|
|
DO TVerdict WITH gnEFACTURA_ART_PREFIX = 12, 'T3.2 garda reseteaza la 12 cand valoarea e in afara [4,40]', TRANSFORM(gnEFACTURA_ART_PREFIX)
|
|
|
|
DO HarnessStep WITH 3, 'config_invalid_ok'
|
|
|
|
DO HarnessLog WITH 'REZULTAT FINAL: PASS=' + TRANSFORM(gnPass) + ' FAIL=' + TRANSFORM(gnFail)
|
|
DO HarnessDone WITH IIF(gnFail = 0, 'done OK', 'done CU ESECURI')
|
|
|
|
* curatenie
|
|
IF TYPE('loConf') = 'O'
|
|
loConf.Release()
|
|
ENDIF
|
|
IF TYPE('loForm') = 'O'
|
|
loForm.Release()
|
|
ENDIF
|
|
goExecutor.oExecuta("delete from anaf_efactura_detalii where id_efactura = " + TRANSFORM(m.lnFixtIdEF) + " and nr >= 900")
|
|
RestaureazaOptiuni()
|
|
DO HarnessLog WITH 'CURATENIE finala facuta'
|
|
|
|
QUIT
|
|
|
|
***********************
|
|
PROCEDURE TVerdict
|
|
LPARAMETERS tlOk, tcNume, tcDetalii
|
|
IF tlOk
|
|
gnPass = gnPass + 1
|
|
ELSE
|
|
gnFail = gnFail + 1
|
|
ENDIF
|
|
DO HarnessLog WITH IIF(tlOk, 'PASS ', 'FAIL ') + tcNume + ' | ' + TRANSFORM(tcDetalii)
|
|
ENDPROC
|
|
|
|
***********************
|
|
PROCEDURE TErr
|
|
LPARAMETERS tnError, tcMessage, tcProgram, tnLine
|
|
DO HarnessLog WITH 'EROARE ' + TRANSFORM(tnError) + ' [' + TRANSFORM(tcMessage) + '] in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLine)
|
|
ENDPROC
|