Files
comun/utile/Teste/editare_factura/probe_defect5_latent.prg
Marius Mutu 8e022d332e #13: formular de facturare unificat - etapa curenta
Squash al branch-ului de lucru plan13-s2.

Clase: ofacturare (nucleul formularului unificat), ofacturare_comun,
ferestre_cere_date, ocomenzi, caut_ora (lista de preturi in combo-urile de
cautare), omodificari.

Programe: ofacturare impartit - ofacturare_antet, ofacturare_rutare_scriere si
ogrid_latimi sunt fisiere noi; oproceduri_facturare primeste discountul pe linie
si cota standard de TVA cand articolul nu are cota pe politica.

Documentatie: capcana SQLExec no_data_found, conventia de encoding, depanarea
testelor VFP si regulile de lucru - conflictele cu modificarile venite din alte
proiecte sunt rezolvate pastrand ambele parti.

Loguri de rulare a testelor scoase din versionare; testele raman.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PkyjGyrV2S7932om4kfSiK
2026-09-09 21:38:25 +03:00

234 lines
8.1 KiB
Plaintext

* probe_defect5_latent.prg
* I1 din mandatul defect5b: simuleaza reparatia golului de incarcare (poDate.incasat nepopulat,
* docs\raport_s8_defect5_incasat.md) FARA sa atinga codul de productie. Repeta pas-cu-pas corpul
* real al frm_facturi.do_editare_unificata (ofacturare_comun.vc2:3890-3975), cu poDate.incasat
* fortat la valoarea reala din baza dupa IncarcaAntetFacturaEditare si inainte de Createobject/Show,
* ca sa arate ce s-ar intampla daca golul de incarcare ar fi reparat. Nu scrie in Oracle (doar
* SELECT prin gencursor/goExecutor), nu modifica niciun .vc2/.vcx.
* Document: id_vanzare=1071 (tip=1, incasat=119, eproforma=0, sters=0), gasit de
* find_defect5_doc.prg. Driver de inchidere modal: acelasi driverS8p7 din test_s8_pas7_cablare.prg.
SET SAFETY OFF
SET TALK OFF
PUBLIC gcErrLog
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_defect5_latent_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_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
IF gnHandle <= 0
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
gnIdUtil = 8
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE
LOCAL lcProcExistent
lcProcExistent = SET("PROCEDURE")
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
PUBLIC gcMockUltimMesaj, gnMockUltimTip, gnMockRaspuns
gcMockUltimMesaj = ''
gnMockUltimTip = 0
gnMockRaspuns = 6
PUBLIC goDriverS8p7
goDriverS8p7 = Createobject('driverS8p7')
_SCREEN.AddObject('tmrS8p7', 'Timer')
_SCREEN.tmrS8p7.Interval = 150
Bindevent(_SCREEN.tmrS8p7, 'Timer', goDriverS8p7, 'Executa')
_SCREEN.tmrS8p7.Enabled = .T.
*!* --- G2: instantaneu vplaje_numere INAINTE ---
LOCAL lnSuccesG2a
lnSuccesG2a = goExecutor.oExecute('select * from vplaje_numere order by 1', 'crsplaje_inainte')
STRTOFILE('vplaje_numere INAINTE: oExecute=' + Transform(lnSuccesG2a) + ' randuri=' + ;
Transform(Iif(Used('crsplaje_inainte'), Reccount('crsplaje_inainte'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
goExecutor.oReset()
LOCAL lnIdVanzare
lnIdVanzare = 1071
*!* --- replica exacta a corpului do_editare_unificata (ofacturare_comun.vc2:3890-3975) ---
Local lnSters, llEProforma, lnTipDoc, loForm, pnDiscountRon, pnDiscountValuta
Private pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzareP, poDate
Store 0 To pnAn, pnLuna, lnCod, lnIdFact, lnIdVanzareP
LOCAL lnSuccesSel
lnSuccesSel = goExecutor.oExecute('select id_vanzare,cod,data_act,sters,id_fact,eproforma,tip,incasat from fact_vfacturi where id_vanzare=' + Transform(lnIdVanzare), 'crsUnic')
IF lnSuccesSel < 0 OR !Used('crsUnic') OR Reccount('crsUnic') <> 1
STRTOFILE('EROARE: documentul 1071 nu a putut fi reincarcat pentru replica' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
SELECT crsUnic
lnIdVanzareP = id_vanzare
lnCod = cod
pnAn = Year(data_act)
pnLuna = Month(data_act)
lnSters = sters
lnIdFact = id_fact
llEProforma = (eproforma = 1)
lnTipDoc = tip
LOCAL lnIncasatReal
lnIncasatReal = incasat
STRTOFILE('replica: id_vanzare=' + Transform(lnIdVanzareP) + ' tip=' + Transform(lnTipDoc) + ;
' eproforma=' + Transform(llEProforma) + ' sters=' + Transform(lnSters) + ' incasat_real=' + Transform(lnIncasatReal) + CHR(13) + CHR(10), gcErrLog, 1)
IF lnSters = 1
STRTOFILE('OPRIT: document sters' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
IF llEProforma
STRTOFILE('OPRIT: proforma' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
IF Inlist(lnTipDoc, 44, 45, 46, 51)
STRTOFILE('OPRIT: tip in afara perimetrului' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
IF (pnAn * 12) + pnLuna <> (gnAn * 12) + gnLuna
STRTOFILE('OPRIT: nu e in luna curenta de lucru' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
IF ReferinteDocumenteNota(pnAn, pnLuna, lnCod)
STRTOFILE('OPRIT: are referinte (incasari/plati)' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
IF EsteInEFactura(lnIdFact)
STRTOFILE('OPRIT: e in eFactura' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
IF DocumentAreUrmasi(lnIdVanzareP)
STRTOFILE('OPRIT: are urmasi' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
poDate = IncarcaAntetFacturaEditare(lnIdVanzareP, @pnDiscountRon, @pnDiscountValuta)
IF Vartype(poDate) <> 'O'
STRTOFILE('OPRIT: IncarcaAntetFacturaEditare a esuat' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
STRTOFILE('poDate.incasat INAINTE de fortare (asa cum e azi, defect infirmat/latent) = ' + Transform(poDate.incasat) + CHR(13) + CHR(10), gcErrLog, 1)
*!* FORTARE - simuleaza reparatia golului de incarcare, fara sa atinga IncarcaAntetFacturaEditare
poDate.incasat = lnIncasatReal
STRTOFILE('poDate.incasat DUPA fortare (simuleaza reparatia) = ' + Transform(poDate.incasat) + CHR(13) + CHR(10), gcErrLog, 1)
IncarcaLiniiFacturaEditare(poDate, lnIdVanzareP)
update_jtva_coloane([JV], [jtva_coloane_temp])
update_saft_taxtable()
IF Used('jtva_coloane')
Use In jtva_coloane
ENDIF
IF poDate.tva_incasare = 0
Select * From jtva_coloane_temp Where Isnull(id_jtva_ex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
ELSE
Select * From jtva_coloane_temp Where Isnull(id_jtva_neex) And !'RORTC'$Upper(coloana_jv) Into Cursor jtva_coloane
ENDIF
STRTOFILE('inainte de Createobject(frm_facturare_articole2)' + CHR(13) + CHR(10), gcErrLog, 1)
goDriverS8p7.Reseteaza()
loForm = Createobject('frm_facturare_articole2')
STRTOFILE('Createobject terminat (Init a rulat deja aici, inclusiv blocul incasat<>0 daca poDate.incasat<>0)' + CHR(13) + CHR(10), gcErrLog, 1)
loForm.ndiscfactron = pnDiscountRon
loForm.ndiscfactval = pnDiscountValuta
loForm.do_calculeaza_totaluri()
STRTOFILE('inainte de Show()' + CHR(13) + CHR(10), gcErrLog, 1)
loForm.Show()
STRTOFILE('dupa Show(), mesaj amessagebox=[' + gcMockUltimMesaj + '] driver.lGasit=' + Transform(goDriverS8p7.lGasit) + CHR(13) + CHR(10), gcErrLog, 1)
_SCREEN.tmrS8p7.Enabled = .F.
Try
_SCREEN.RemoveObject('tmrS8p7')
Catch
Endtry
Try
loForm.Release()
Catch
Endtry
*!* --- G2: instantaneu vplaje_numere DUPA ---
LOCAL lnSuccesG2b
lnSuccesG2b = goExecutor.oExecute('select * from vplaje_numere order by 1', 'crsplaje_dupa')
STRTOFILE('vplaje_numere DUPA: oExecute=' + Transform(lnSuccesG2b) + ' randuri=' + ;
Transform(Iif(Used('crsplaje_dupa'), Reccount('crsplaje_dupa'), -1)) + CHR(13) + CHR(10), gcErrLog, 1)
goExecutor.oReset()
IF Used('crsplaje_inainte') AND Used('crsplaje_dupa')
LOCAL lnDiferente, lnIdPlajaC, lnUrmvalInainte, lnUrmvalDupa
lnDiferente = 0
SELECT crsplaje_inainte
SCAN
lnIdPlajaC = id_plaja
lnUrmvalInainte = urmval
SELECT crsplaje_dupa
LOCATE FOR id_plaja = lnIdPlajaC
IF FOUND()
lnUrmvalDupa = urmval
IF lnUrmvalInainte <> lnUrmvalDupa
lnDiferente = lnDiferente + 1
STRTOFILE('DIFERENTA vplaje_numere: id_plaja=' + Transform(lnIdPlajaC) + ;
' urmval_inainte=' + Transform(lnUrmvalInainte) + ' urmval_dupa=' + Transform(lnUrmvalDupa) + CHR(13) + CHR(10), gcErrLog, 1)
ENDIF
ELSE
lnDiferente = lnDiferente + 1
STRTOFILE('LIPSA in dupa: id_plaja=' + Transform(lnIdPlajaC) + CHR(13) + CHR(10), gcErrLog, 1)
ENDIF
SELECT crsplaje_inainte
ENDSCAN
STRTOFILE('G2 vplaje_numere: total diferente urmval=' + Transform(lnDiferente) + CHR(13) + CHR(10), gcErrLog, 1)
ENDIF
STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
PROCEDURE test_error_handler
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
STRTOFILE('EROARE ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
ENDPROC
DEFINE CLASS driverS8p7 AS Custom
lBusy = .F.
lGasit = .F.
PROCEDURE Reseteaza
This.lGasit = .F.
ENDPROC
PROCEDURE Executa
IF This.lBusy OR This.lGasit
RETURN
ENDIF
This.lBusy = .T.
TRY
LOCAL lnI, loFrm2
FOR lnI = 1 TO _SCREEN.FormCount
IF Upper(_SCREEN.Forms(m.lnI).Class) == 'FRM_FACTURARE_ARTICOLE2'
loFrm2 = _SCREEN.Forms(m.lnI)
This.lGasit = .T.
loFrm2.Release()
EXIT
ENDIF
ENDFOR
CATCH TO loExcS8p7
STRTOFILE('DRIVER EROARE ' + TRANSFORM(loExcS8p7.ErrorNo) + ' ' + loExcS8p7.Message + CHR(13) + CHR(10), gcErrLog, 1)
FINALLY
This.lBusy = .F.
ENDTRY
ENDPROC
ENDDEFINE