Pagina Articole din frm_modific2024: - DblClick pe cele cinci coloane cu nomenclator (articol, gestiune, taxcode, valuta, explicatie TVA). Explicatia TVA are ControlSource expresie, deci tastarea nu putea declansa niciodata InteractiveChange; DblClick se sprijina pe pccontrol si acopera uniform toate cele cinci. - Pret si Pret cu TVA folosesc gnPPretV (precizie pret vanzare) in loc de gnPPret (precizie achizitie). Coloana de pret achizitie ramane pe gnPPret. - Culori dupa conventia de pe pagina Rulaje: verde pe coloanele care se editeaza prin dialog, alb pe cele care se tasteaza direct. - Serie, lot si explicatie devin editabile in celula. Garda .When ramane si blocheaza in continuare liniile din seturi si facturile din e-Factura. frm_facturi: textul optiunii de editare factura din meniul contextual devine "Editare factura (note, rulaje, articole)". Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013gYCNE26G1G7UoGu2ju7aS
249 lines
10 KiB
Plaintext
249 lines
10 KiB
Plaintext
* test_efactura_readonly.prg
|
|
* Verifica frm_modific2024 (omodificari.vc2) cand documentul de vanzare a fost trimis in eFactura:
|
|
* articolele raman VIZIBILE pe pgfArticole.PAGE3 (pagina se pregateste normal, PageCount=3, tvd plin),
|
|
* dar editarea lor se opreste - grid needitabil (.When pe fiecare coloana), butoanele de adaugare/
|
|
* stergere linie dezactivate, marcaj vizual afisat. Verifica de asemenea ca notele/rulajele nu sunt
|
|
* afectate si ca documentele NEtrimise in eFactura raman complet editabile (regresie).
|
|
* Conditia se determina prin EsteInEFactura(tvanz.id_fact) - id_fact e distinct de id_vanzare
|
|
* (VANZARI.ID_FACT), acelasi camp folosit deja de ofacturare_comun.vc2:3764.
|
|
* Documente reale, gasite prin interogare (nu inventate): un document deja trimis in eFactura
|
|
* (VANZARI.ID_FACT populat, prezent in ANAF_EFACTURA) si un document obisnuit, descoperit prin
|
|
* proprietate (descopera_caz_test.prg). Nu scrie in Oracle - doar SELECT-uri si cursoare in
|
|
* memorie (tvd/tvanz/tact raman locale, Show() nu salveaza). QUIT la final.
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
|
|
PUBLIC gcErrLog
|
|
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_efactura_readonly_log.txt'
|
|
STRTOFILE('start' + CHR(13) + CHR(10), gcErrLog)
|
|
|
|
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
|
|
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
|
IF gnHandle <= 0
|
|
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
QUIT
|
|
ENDIF
|
|
|
|
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
|
|
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\descopera_caz_test.prg ADDITIVE
|
|
|
|
*!* test_init_env_auto incarca clasa omodificari din working copy-ul ROACONT (alt SET PATH) -
|
|
*!* o eliberam si o reincarcam pe cea de sub test, cu cale completa
|
|
RELEASE CLASSLIB omodificari
|
|
SET CLASSLIB TO D:\ROA\ROAFACTURARE\COMUN\clase\omodificari.vcx ADDITIVE
|
|
|
|
PUBLIC gnPass, gnFail
|
|
gnPass = 0
|
|
gnFail = 0
|
|
|
|
*!* --- control direct pe functia EsteInEFactura, fara formular ---
|
|
DO asserteaza WITH 'EsteInEFactura(0) = .F. (niciun id_fact real e 0)', !EsteInEFactura(0), ''
|
|
|
|
LOCAL lnEfactCnt
|
|
lnEfactCnt = 0
|
|
=goExecutor.oSelecteaza2Value([select count(*) as c from anaf_efactura where id_fact = 8008013], @lnEfactCnt)
|
|
IF Nvl(m.lnEfactCnt,0) > 0
|
|
DO asserteaza WITH 'EsteInEFactura(8008013) = .T. (document real, cunoscut ca trimis)', EsteInEFactura(8008013), ''
|
|
ELSE
|
|
STRTOFILE('AVERTISMENT: documentul id_fact=8008013 nu mai e in anaf_efactura, sarit controlul direct' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ENDIF
|
|
|
|
*!* ===================== CAZ A: document trimis in eFactura (id_vanzare=1013, id_fact=8008013) =====================
|
|
LOCAL llOkA, loFormA
|
|
llOkA = IncarcaCursoareModificareNota(1140509, 2025, 8, .F.)
|
|
IF !llOkA OR !Used('tact') OR Reccount('tact') = 0
|
|
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat pe cazul A (cod=1140509)' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
QUIT
|
|
ENDIF
|
|
|
|
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
|
Go Top In tact
|
|
LOCAL lnIdSetA
|
|
lnIdSetA = tact.id_set
|
|
|
|
IF !Used('crsJtvaTemp')
|
|
update_jtva_coloane("", "crsJtvaTemp", 6)
|
|
ENDIF
|
|
|
|
IF Used('tvd')
|
|
Use In tvd
|
|
ENDIF
|
|
IF Used('tvanz')
|
|
Use In tvanz
|
|
ENDIF
|
|
|
|
Select tact
|
|
loFormA = Createobject([frm_modific2024], lnIdSetA)
|
|
loFormA.WindowType = 0
|
|
loFormA.Show()
|
|
|
|
DO asserteaza WITH 'caz A: formularul are articole (lAreArticoleVanzari)', loFormA.lAreArticoleVanzari, TRANSFORM(loFormA.lAreArticoleVanzari)
|
|
DO asserteaza WITH 'caz A: nIdVanzare = 1013 (descoperit prin IncarcaVanzareDinNota)', loFormA.nIdVanzare == 1013, TRANSFORM(loFormA.nIdVanzare)
|
|
DO asserteaza WITH 'caz A: tvanz.id_fact = 8008013 (coloana noua incarcata de IncarcaVanzareNota)', Used('tvanz') AND Reccount('tvanz') = 1 AND tvanz.id_fact == 8008013, IIF(Used('tvanz') AND Reccount('tvanz')=1, TRANSFORM(tvanz.id_fact), 'tvanz lipsa')
|
|
DO asserteaza WITH 'caz A: lArticoleReadOnly = .T. (documentul e in eFactura)', loFormA.lArticoleReadOnly, TRANSFORM(loFormA.lArticoleReadOnly)
|
|
|
|
*!* --- articolele raman VIZIBILE: pagina se pregateste normal, nu se suprima ---
|
|
DO asserteaza WITH 'caz A: PAGE3 (articole) NU e suprimata - pgfArticole.PageCount = 3', loFormA.pgfArticole.PageCount == 3, TRANSFORM(loFormA.pgfArticole.PageCount)
|
|
DO asserteaza WITH 'caz A: gridul ramane legat pe tvd (RecordSource neschimbat)', loFormA.pgfArticole.PAGE3.grdArticoleFactura.RecordSource == 'tvd', loFormA.pgfArticole.PAGE3.grdArticoleFactura.RecordSource
|
|
DO asserteaza WITH 'caz A: tvd are cel putin o linie vizibila (articolele nu au fost golite)', Used('tvd') AND Reccount('tvd') > 0, IIF(Used('tvd'), TRANSFORM(Reccount('tvd')), 'tvd lipsa')
|
|
|
|
*!* --- doar EDITAREA se opreste: butoanele si celulele needitabile ---
|
|
DO asserteaza WITH 'caz A: but_nouR.Enabled = .F.', !loFormA.but_nouR.Enabled, TRANSFORM(loFormA.but_nouR.Enabled)
|
|
DO asserteaza WITH 'caz A: marcajul vizual (lblArticoleReadOnly) e vizibil', loFormA.pgfArticole.PAGE3.lblArticoleReadOnly.Visible, TRANSFORM(loFormA.pgfArticole.PAGE3.lblArticoleReadOnly.Visible)
|
|
DO asserteaza WITH 'caz A: txtDiscountArt.ReadOnly = .T.', loFormA.pgfArticole.PAGE3.txtDiscountArt.ReadOnly, TRANSFORM(loFormA.pgfArticole.PAGE3.txtDiscountArt.ReadOnly)
|
|
|
|
*!* coloanele gridului nu se materializeaza sub -A -T (ColumnCount=0) - editabilitatea celulei
|
|
*!* (.When pe cCantitateArt/cPretArt/cPretAchizitieArt/cPretCuTvaArt) se verifica separat, cu
|
|
*!* harnessul UI vizibil, in test_ui_efactura_readonly.prg
|
|
|
|
*!* --- stergerea de linie (Click direct, fara dialog modal) e blocata de garda ---
|
|
LOCAL lnStersInainte
|
|
lnStersInainte = Nvl(tvd.sters, 0)
|
|
loFormA.pgfArticole.ActivePage = 3
|
|
loFormA.but_stergeR.Click()
|
|
DO asserteaza WITH 'caz A: but_stergeR.Click() nu modifica linia (garda eFactura)', Nvl(tvd.sters,0) == m.lnStersInainte, TRANSFORM(Nvl(tvd.sters,0))
|
|
|
|
*!* --- notele/rulajele raman neafectate de garda (grid1, pe notele contabile) ---
|
|
DO asserteaza WITH 'caz A: Grid1 (nota contabila) ramane editabil - garda nu atinge nota', !loFormA.Grid1.ReadOnly, TRANSFORM(loFormA.Grid1.ReadOnly)
|
|
|
|
loFormA.Release()
|
|
IF Used('tvd')
|
|
Use In tvd
|
|
ENDIF
|
|
IF Used('tvanz')
|
|
Use In tvanz
|
|
ENDIF
|
|
IF Used('actactan')
|
|
Use In actactan
|
|
ENDIF
|
|
IF Used('tact')
|
|
Use In tact
|
|
ENDIF
|
|
IF Used('rul_temp')
|
|
Use In rul_temp
|
|
ENDIF
|
|
IF Used('trul')
|
|
Use In trul
|
|
ENDIF
|
|
IF Used('rul_temp_obinv')
|
|
Use In rul_temp_obinv
|
|
ENDIF
|
|
IF Used('trul_obinv')
|
|
Use In trul_obinv
|
|
ENDIF
|
|
|
|
*!* ===================== CAZ B: document obisnuit, NEtrimis in eFactura (regresie) =====================
|
|
LOCAL llCazB
|
|
llCazB = DescoperaCazTest('FACTURA_ARTICOLE', 'crscaz_b')
|
|
IF !llCazB
|
|
STRTOFILE('EROARE: cazul FACTURA_ARTICOLE nu a fost gasit' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
QUIT
|
|
ENDIF
|
|
STRTOFILE('caz B: cod=' + TRANSFORM(crscaz_b.cod) + ' an=' + TRANSFORM(crscaz_b.an) + ' luna=' + TRANSFORM(crscaz_b.luna) + ;
|
|
' id_vanzare=' + TRANSFORM(crscaz_b.id_vanzare) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
|
|
LOCAL llOkB, loFormB
|
|
llOkB = IncarcaCursoareModificareNota(crscaz_b.cod, crscaz_b.an, crscaz_b.luna, .F.)
|
|
IF !llOkB OR !Used('tact') OR Reccount('tact') = 0
|
|
STRTOFILE('EROARE: IncarcaCursoareModificareNota a esuat pe cazul B' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
QUIT
|
|
ENDIF
|
|
|
|
Select a.*, Iif(Nvl(id_jtva_coloana,0)=0,0,1) As cu_Tva From tact a Into Cursor tact Readwrite
|
|
Go Top In tact
|
|
LOCAL lnIdSetB
|
|
lnIdSetB = tact.id_set
|
|
|
|
IF !Used('crsJtvaTemp')
|
|
update_jtva_coloane("", "crsJtvaTemp", 6)
|
|
ENDIF
|
|
|
|
IF Used('tvd')
|
|
Use In tvd
|
|
ENDIF
|
|
IF Used('tvanz')
|
|
Use In tvanz
|
|
ENDIF
|
|
|
|
Select tact
|
|
loFormB = Createobject([frm_modific2024], lnIdSetB)
|
|
loFormB.WindowType = 0
|
|
loFormB.Show()
|
|
|
|
DO asserteaza WITH 'caz B: formularul are articole (lAreArticoleVanzari)', loFormB.lAreArticoleVanzari, TRANSFORM(loFormB.lAreArticoleVanzari)
|
|
DO asserteaza WITH 'caz B: lArticoleReadOnly = .F. (documentul NU e in eFactura)', !loFormB.lArticoleReadOnly, TRANSFORM(loFormB.lArticoleReadOnly)
|
|
DO asserteaza WITH 'caz B: PAGE3 pregatita normal', loFormB.pgfArticole.PageCount == 3, TRANSFORM(loFormB.pgfArticole.PageCount)
|
|
DO asserteaza WITH 'caz B: but_nouR.Enabled = .T. (neregresat)', loFormB.but_nouR.Enabled, TRANSFORM(loFormB.but_nouR.Enabled)
|
|
DO asserteaza WITH 'caz B: marcajul vizual NU e afisat', !loFormB.pgfArticole.PAGE3.lblArticoleReadOnly.Visible, TRANSFORM(loFormB.pgfArticole.PAGE3.lblArticoleReadOnly.Visible)
|
|
DO asserteaza WITH 'caz B: txtDiscountArt.ReadOnly = .F. (neregresat)', !loFormB.pgfArticole.PAGE3.txtDiscountArt.ReadOnly, TRANSFORM(loFormB.pgfArticole.PAGE3.txtDiscountArt.ReadOnly)
|
|
|
|
*!* editabilitatea celulei (.When) se verifica separat, cu harnessul UI vizibil - vezi
|
|
*!* test_ui_efactura_readonly.prg
|
|
IF Used('tvd') AND Reccount('tvd') > 0
|
|
LOCAL lnStersInainteB
|
|
lnStersInainteB = Nvl(tvd.sters, 0)
|
|
loFormB.pgfArticole.ActivePage = 3
|
|
loFormB.but_stergeR.Click()
|
|
DO asserteaza WITH 'caz B: but_stergeR.Click() comuta flagul sters (neregresat)', Nvl(tvd.sters,0) <> m.lnStersInainteB, TRANSFORM(Nvl(tvd.sters,0))
|
|
*!* restaureaza starea locala a cursorului (memorie, nesalvat in Oracle)
|
|
REPLACE sters WITH m.lnStersInainteB IN tvd
|
|
ENDIF
|
|
|
|
STRTOFILE('REZULTAT: ' + TRANSFORM(gnPass) + ' PASS / ' + TRANSFORM(gnFail) + ' FAIL' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
|
|
loFormB.Release()
|
|
IF Used('actactan')
|
|
Use In actactan
|
|
ENDIF
|
|
IF Used('tact')
|
|
Use In tact
|
|
ENDIF
|
|
IF Used('rul_temp')
|
|
Use In rul_temp
|
|
ENDIF
|
|
IF Used('trul')
|
|
Use In trul
|
|
ENDIF
|
|
IF Used('rul_temp_obinv')
|
|
Use In rul_temp_obinv
|
|
ENDIF
|
|
IF Used('trul_obinv')
|
|
Use In trul_obinv
|
|
ENDIF
|
|
IF Used('tvanz')
|
|
Use In tvanz
|
|
ENDIF
|
|
IF Used('tvd')
|
|
Use In tvd
|
|
ENDIF
|
|
IF Used('crscaz_b')
|
|
Use In crscaz_b
|
|
ENDIF
|
|
|
|
QUIT
|
|
|
|
|
|
PROCEDURE asserteaza
|
|
LPARAMETERS tcNume, tlConditie, tcValoare
|
|
|
|
IF m.tlConditie
|
|
gnPass = gnPass + 1
|
|
STRTOFILE('PASS ' + m.tcNume + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ELSE
|
|
gnFail = gnFail + 1
|
|
STRTOFILE('FAIL ' + m.tcNume + ' (valoare: ' + m.tcValoare + ')' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROCEDURE test_error_handler
|
|
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
|
|
|
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ENDPROC
|