Files
comun/utile/Teste/grid_albit/test_grid_albit_stack.prg
2026-09-28 16:01:35 +03:00

228 lines
11 KiB
Plaintext

* test_grid_albit_stack.prg - dovada prin rulare (nu analiza statica) a CE declanseaza deschiderea
* cautarii partenerului cand se paraseste celula Partener Credit (Grid1.Column10) goala, in
* frm_modific2024 (COMUN\clase\omodificari.vc2:6375), ecranul de verificare dupa import.
* Instrumentare: mock_cauta_alfa_capture.prg inlocuieste cauta_alfa cu o capturare de stare
* (ASTACKINFO/LockScreen/USED/RECCOUNT/RecordSource), fara sa deschida vreun formular - restul
* lantului (do_cauta/CautPartenerContabilitate/alege_partener/LostFocus/AfterRowColChange) e REAL.
* tact e construit din structura REALA de productie (vact_tot -> ales/Cu_tva/tipnota, exact ca in
* Programe\ocont2003.prg::note_fara_predefinire), cu doua randuri: randul 1 cont 4111 (are
* config_cont_ireg+coresp_tip_cont) cu partener CREDIT gol, randul 2 cu partener deja completat.
*
* Rulare: vfp9.exe -A -T "D:\ROA\ROACONT\COMUN\utile\Teste\grid_albit\test_grid_albit_stack.prg"
* Iesire: D:\ROA\ROACONT\COMUN\utile\Teste\grid_albit\test_grid_albit_stack_log.txt
SET SAFETY OFF
SET TALK OFF
SET DELETED ON
SET EXACT ON
SET CENTURY ON
SET DATE DMY
SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcUILog, gcSyncDir, gnCaptureN, gcCaptureSyncStep, goFormTest
gcSyncDir = 'D:\ROA\ROACONT\COMUN\utile\Teste\grid_albit\uisync\'
gcUILog = 'D:\ROA\ROACONT\COMUN\utile\Teste\grid_albit\test_grid_albit_stack_log.txt'
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
gnCaptureN = 0
gcCaptureSyncStep = 0
ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
*-- cai complete: la lansare vfp9 -A -T directorul curent NU e cel al scriptului, deci nume goale
*-- de PRG nu se gasesc (era cauza dialogului "Program Error: harnesslog.prg does not exist")
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\ui_harness.prg" ADDITIVE
*-- mock-ul cauta_alfa TREBUIE incarcat inaintea test_init_env_auto (care face
*-- SET PROCEDURE TO cauta_alfa ADDITIVE) - la nume duplicat VFP tine fisierul incarcat PRIMUL
SET PROCEDURE TO "D:\ROA\ROACONT\COMUN\utile\Teste\grid_albit\mock_cauta_alfa_capture.prg" ADDITIVE
TRY
DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 9
IF gnHandle <= 0
DO HarnessLog WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
DO HarnessDone WITH 'error'
QUIT
ENDIF
DO HarnessLog WITH 'mediu initializat gnHandle=' + TRANSFORM(gnHandle)
DO BuildTact
DO HarnessLog WITH 'tact construit, reccount=' + TRANSFORM(RECCOUNT('tact')) + ' campuri=' + TRANSFORM(FCOUNT('tact'))
DO HarnessLog WITH ' rand1: scc=' + ALLTRIM(tact.scc) + ' partc=[' + ALLTRIM(NVL(tact.partc,'')) + ']'
GO 2 IN tact
DO HarnessLog WITH ' rand2: scc=' + ALLTRIM(tact.scc) + ' partc=[' + ALLTRIM(NVL(tact.partc,'')) + ']'
GO 1 IN tact
SELECT tact
GO TOP
goFormTest = CREATEOBJECT('frm_modific2024', 90023, .T., NULL)
goFormTest.lActivExtrase = .T.
goFormTest.WindowType = 0
goFormTest.Show()
DO HarnessLog WITH 'form afisat: LockScreen=' + TRANSFORM(goFormTest.LockScreen) + ' Grid1.RecordSource=[' + goFormTest.Grid1.RecordSource + '] Grid1.RecordSourceType=' + TRANSFORM(goFormTest.Grid1.RecordSourceType) + ' Visible=' + TRANSFORM(goFormTest.Visible)
*=====================================================================
* SCENARIU A: parasirea celulei Partener Credit (goala) prin LostFocus, urmat de Click pe
* butonul "Partener Credit" - tiparul exact din log.txt (dubla cautare)
*=====================================================================
DO HarnessLog WITH ''
DO HarnessLog WITH '=== SCENARIU A: Column10.Text1.LostFocus (partc gol) apoi Command2.Click ==='
SELECT tact
GO 1
LOCAL lnCapturiA0, lnCapturiA1
lnCapturiA0 = gnCaptureN
DO HarnessLog WITH 'A: inainte - LockScreen=' + TRANSFORM(goFormTest.LockScreen) + ' recno=' + TRANSFORM(RECNO('tact')) + ' partc=[' + ALLTRIM(NVL(tact.partc,'')) + ']'
*-- incearca intai focus REAL (poate declansa evenimente native suplimentare), apoi apelul direct
*-- garanteaza deterministic reproducerea, indiferent daca SetFocus a functionat headless
TRY
goFormTest.Grid1.SetFocus()
goFormTest.Grid1.Column10.Text1.SetFocus()
DO HarnessLog WITH 'A: SetFocus real pe Column10.Text1 - OK, ActiveColumn=' + TRANSFORM(goFormTest.Grid1.ActiveColumn)
CATCH TO loExFocus
DO HarnessLog WITH 'A: SetFocus real a esuat (' + loExFocus.Message + ') - continui cu apelul direct al metodei'
ENDTRY
goFormTest.Grid1.Column10.Text1.LostFocus()
lnCapturiA1 = gnCaptureN
DO HarnessLog WITH 'A1 (LostFocus): capturi noi=' + TRANSFORM(lnCapturiA1 - lnCapturiA0) + ' LockScreen dupa=' + TRANSFORM(goFormTest.LockScreen) + ' partc=[' + ALLTRIM(NVL(tact.partc,'')) + ']'
goFormTest.Command2.Click()
DO HarnessLog WITH 'A2 (Command2.Click): capturi noi=' + TRANSFORM(gnCaptureN - lnCapturiA1) + ' LockScreen dupa=' + TRANSFORM(goFormTest.LockScreen)
DO HarnessLog WITH 'A: TOTAL capturi scenariu=' + TRANSFORM(gnCaptureN - lnCapturiA0) + ' (asteptat 2 daca ipoteza H1 se confirma: LostFocus + Click deschid ambele cautarea)'
*=====================================================================
* SCENARIU B: schimbare de rand, cu randul PARASIT avand partc gol - testeaza (B1) daca un GO
* brut pe cursorul legat declanseaza singur vreun eveniment, si (B2) dansul LockScreen din
* AfterRowColChange (16083-16097) cand randul recalculat (nRecLipsuri) are partc gol
*=====================================================================
DO HarnessLog WITH ''
DO HarnessLog WITH '=== SCENARIU B: schimbare de rand, randul cu partc gol e cel reverificat de AfterRowColChange ==='
SELECT tact
GO 1
LOCAL lnCapturiB0, lnCapturiB1
lnCapturiB0 = gnCaptureN
TRY
goFormTest.Grid1.Column10.Text1.SetFocus()
CATCH TO loExFocus
ENDTRY
GO 2 IN tact
lnCapturiB1 = gnCaptureN
DO HarnessLog WITH 'B1 (GO 2 brut, fara apel explicit): capturi noi=' + TRANSFORM(lnCapturiB1 - lnCapturiB0) + ' LockScreen=' + TRANSFORM(goFormTest.LockScreen)
goFormTest.nRecLipsuri = 1 && "randul parasit" pe care AfterRowColChange il reverifica e randul 1 (partc gol)
goFormTest.cSemnLipsuri = 'FORTAT-DIFERIT-CA-SA-INTRE-PE-RAMURA'
DO HarnessLog WITH 'B2: inainte de AfterRowColChange - LockScreen=' + TRANSFORM(goFormTest.LockScreen) + ' recno curent=' + TRANSFORM(RECNO('tact')) + ' nRecLipsuri=' + TRANSFORM(goFormTest.nRecLipsuri)
goFormTest.Grid1.AfterRowColChange(10)
DO HarnessLog WITH 'B2 (AfterRowColChange explicit): capturi noi=' + TRANSFORM(gnCaptureN - lnCapturiB1) + ' LockScreen dupa=' + TRANSFORM(goFormTest.LockScreen) + ' recno curent=' + TRANSFORM(RECNO('tact'))
DO HarnessLog WITH 'B: TOTAL capturi scenariu=' + TRANSFORM(gnCaptureN - lnCapturiB0)
*=====================================================================
* SCENARIU C: Click direct pe buton, FARA ca focusul sa fi trecut prin celula (fara LostFocus)
*=====================================================================
DO HarnessLog WITH ''
DO HarnessLog WITH '=== SCENARIU C: Command2.Click direct, focus pe alt control (nu in celula Partener Credit) ==='
SELECT tact
GO 1
LOCAL lnCapturiC0
lnCapturiC0 = gnCaptureN
TRY
goFormTest.but_renunt1.SetFocus()
CATCH TO loExFocus
ENDTRY
goFormTest.Command2.Click()
DO HarnessLog WITH 'C (Command2.Click direct): capturi noi=' + TRANSFORM(gnCaptureN - lnCapturiC0) + ' LockScreen dupa=' + TRANSFORM(goFormTest.LockScreen)
DO HarnessLog WITH ''
DO HarnessLog WITH '=== REZULTAT: total capturi cauta_alfa=' + TRANSFORM(gnCaptureN) + ' ==='
DO HarnessDone WITH 'done'
DO HarnessLog WITH 'TOTAL: test terminat fara exceptie'
CATCH TO loEx
DO HarnessLog WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
DO HarnessDone WITH 'error'
ENDTRY
QUIT
**********************************************************
* tact - structura REALA de productie (vact_tot -> ales/Cu_tva/tipnota), ca in
* Programe\ocont2003.prg::note_fara_predefinire (liniile 1007-1082). Doua randuri: primul cu
* cont 4111 (config_cont_ireg + coresp_tip_cont populate pe schema de test) si partener CREDIT
* gol - tinta bugului; al doilea cu partener deja completat, doar ca sa existe "schimbare de rand".
PROCEDURE BuildTact
LOCAL llSucces
IF USED('tact')
USE IN tact
ENDIF
IF USED('actactan')
USE IN actactan
ENDIF
IF USED('crsJtvaTemp')
USE IN crsJtvaTemp
ENDIF
*-- Init/Load (frm_modific2024) citesc crsJtvaTemp - exact apelul din ocont2003.prg:997
update_jtva_coloane("", "crsJtvaTemp", 1)
llSucces = goExecutor.oExecuta("select * from vact_tot where 1=2", "v_act")
IF !llSucces
DO HarnessLog WITH 'FAIL: vact_tot inaccesibil - ' + goExecutor.cEroare
RETURN .F.
ENDIF
SELECT * FROM v_act INTO CURSOR actactan READWRITE
USE IN v_act
SELECT .F. AS ales, IIF(EMPTY(NVL(a.id_jtva_coloana,0)),0,1) AS Cu_tva, CAST(0 AS N(2)) AS tipnota, a.* FROM actactan a INTO CURSOR tact READWRITE
USE IN actactan
*-- trul/trul_obinv - formularul le foloseste (pgfArticole) chiar daca randurile de tact nu au
*-- rulaje; goale, aceeasi structura ca in ocont2003.prg::note_fara_predefinire (1017-1044)
IF USED('trul')
USE IN trul
ENDIF
llSucces = goExecutor.oExecuta("select * from vrul_tot where 1=2", "v_rul")
IF !llSucces
DO HarnessLog WITH 'FAIL: vrul_tot inaccesibil - ' + goExecutor.cEroare
RETURN .F.
ENDIF
SELECT *, valoare + valtva AS valoarectva, valoarev + valtvav AS valoarevctva FROM v_rul INTO CURSOR trul READWRITE
USE IN v_rul
IF USED('trul_obinv')
USE IN trul_obinv
ENDIF
llSucces = goExecutor.oExecuta("select * from vrul_obinv_tot where 1=2", "v_rul_obinv")
IF !llSucces
DO HarnessLog WITH 'FAIL: vrul_obinv_tot inaccesibil - ' + goExecutor.cEroare
RETURN .F.
ENDIF
SELECT *, valoare + valtva AS valoarectva, valoarev + valtvav AS valoarevctva FROM v_rul_obinv INTO CURSOR trul_obinv READWRITE
USE IN v_rul_obinv
SELECT tact
APPEND BLANK
REPLACE dataireg WITH DATETIME(), dataact WITH DATETIME(), datascad WITH DATETIME() + 30 * 86400
REPLACE id_sucursala WITH NVL(gnIdSucursala, 0), sters WITH 0, an WITH gnAn, luna WITH gnLuna
REPLACE scd WITH '628', scc WITH '4111', partd WITH 'CHELTUIALA TEST', id_partd WITH 0
REPLACE partc WITH '', id_partc WITH 0, suma WITH 100.00, nract WITH 1, cod WITH 1
APPEND BLANK
REPLACE dataireg WITH DATETIME(), dataact WITH DATETIME(), datascad WITH DATETIME() + 30 * 86400
REPLACE id_sucursala WITH NVL(gnIdSucursala, 0), sters WITH 0, an WITH gnAn, luna WITH gnLuna
REPLACE scd WITH '5121', scc WITH '4111', partd WITH '', id_partd WITH 0
REPLACE partc WITH 'PARTENER DEJA ALES', id_partc WITH 1, suma WITH 50.00, nract WITH 2, cod WITH 1
GO TOP
RETURN .T.
ENDPROC
**********************************************************
PROCEDURE PrErrLocal
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
LOCAL lcMsg
lcMsg = 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
IF TYPE('gcUILog') = 'C' AND !EMPTY(gcUILog)
SET SAFETY OFF
STRTOFILE(IIF(FILE(gcUILog), FILETOSTR(gcUILog), '') + lcMsg + CHR(13) + CHR(10), gcUILog)
ENDIF
ENDPROC