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
408 lines
17 KiB
Plaintext
408 lines
17 KiB
Plaintext
* probe_s13_toomanycolumns.prg
|
|
* Diagnostic pentru "Too many columns." pe documentul 360 (CONTRACT-B, rularea 6 din
|
|
* test_s9_8_flux.prg, perioada fortata 2009/4). Repeta EXACT scenariul rularii 6, dar cu
|
|
* goExecutor inlocuit de o SUBCLASA a lui oexecutor care logheaza fiecare statement inainte de
|
|
* executie si prinde exceptia exact la statement-ul care cade (numar de eroare + mesaj + procedura
|
|
* + linie), apoi intoarce -1 in loc sa o propage - ca fluxul sa cada pe ramura normala de eroare
|
|
* (do_inchide_tranzactie(2) = ROLLBACK), nu pe CATCH-ul din do_scrie_factura.
|
|
*
|
|
* Nu modifica niciun fisier de productie. Nu face COMMIT. La final verifica cascada de 6 randuri
|
|
* a documentului 360 (VANZARI, VANZARI_DETALII, DOCUMENTE, ACT x2, CTR_RATE_FACTURI).
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
|
|
PUBLIC gcErrLog, gnPass, gnFail
|
|
PUBLIC poDate, poSnapshotEditare, goFormReemitere
|
|
|
|
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_toomanycolumns_log_' + ;
|
|
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
|
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-TMC doc=360 perioada=2009/4' + CHR(13) + CHR(10), gcErrLog)
|
|
|
|
ON ERROR DO test_error_handler WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
ON SHUTDOWN QUIT
|
|
|
|
DO ('D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2009, 4, 0
|
|
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
|
|
SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_rutare_scriere.prg ADDITIVE
|
|
|
|
*!* la nume duplicat de procedura castiga PRIMUL fisier din lista SET PROCEDURE, nu ultimul
|
|
LOCAL lcProcExistent
|
|
lcProcExistent = SET("PROCEDURE")
|
|
SET PROCEDURE TO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\mock_amessagebox.prg", &lcProcExistent
|
|
|
|
LOCAL lcPathVechi, lcPathNou
|
|
lcPathVechi = SET("PATH")
|
|
lcPathNou = 'D:\ROA\ROAFACTURARE\COMUN\Utile\Teste\achizitie_import\stub_verificare;' + lcPathVechi
|
|
SET PATH TO &lcPathNou
|
|
|
|
PUBLIC gnMockRaspuns, gcMockUltimMesaj, gnMockUltimTip
|
|
gnMockRaspuns = 7
|
|
gcMockUltimMesaj = ''
|
|
gnMockUltimTip = 0
|
|
gnPass = 0
|
|
gnFail = 0
|
|
|
|
STRTOFILE('perioada activa gnAn/gnLuna = ' + TRANSFORM(gnAn) + '/' + TRANSFORM(gnLuna) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
|
|
DO Probeaza
|
|
|
|
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
QUIT
|
|
|
|
|
|
*==============================================================================================
|
|
PROCEDURE Probeaza
|
|
LOCAL loForm, lnDiscRon, lnDiscVal, lnIdV, lnRuta, llRez, loSpy, loReal
|
|
lnIdV = 360
|
|
|
|
DO bat WITH 'intrat in Probeaza'
|
|
DO StareCascada WITH 'INAINTE'
|
|
DO bat WITH 'dupa StareCascada INAINTE'
|
|
|
|
lnDiscRon = 0
|
|
lnDiscVal = 0
|
|
poDate = IncarcaAntetFacturaEditare(lnIdV, @lnDiscRon, @lnDiscVal)
|
|
IF VARTYPE(poDate) <> 'O'
|
|
STRTOFILE('EROARE: antetul nu s-a incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
RETURN
|
|
ENDIF
|
|
IncarcaLiniiFacturaEditare(poDate, lnIdV)
|
|
IF !USED('crsfactura') OR RECCOUNT('crsfactura') = 0
|
|
STRTOFILE('EROARE: liniile nu s-au incarcat' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
RETURN
|
|
ENDIF
|
|
|
|
DO DescrieCursorFactura
|
|
|
|
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
|
|
|
|
loForm = CREATEOBJECT('frm_facturare_articole2')
|
|
loForm.ndiscfactron = lnDiscRon
|
|
loForm.ndiscfactval = lnDiscVal
|
|
loForm.do_calculeaza_totaluri()
|
|
poSnapshotEditare = CreeazaSnapshotEditare(poDate, loForm.ndiscfactron, loForm.ndiscfactval, ;
|
|
lnIdV, Val1([select nvl(id_fact,0) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV)), ;
|
|
Val1([select nvl(cod,0) as v from vanzari where id_vanzare = ] + TRANSFORM(lnIdV)), gnAn, gnLuna)
|
|
IF VARTYPE(poSnapshotEditare) <> 'O'
|
|
STRTOFILE('EROARE: instantaneul nu s-a creat' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
RETURN
|
|
ENDIF
|
|
|
|
SELECT crsfactura
|
|
GO TOP
|
|
REPLACE cantitate WITH cantitate + 1 IN crsfactura
|
|
loForm.do_calculeaza_totaluri()
|
|
|
|
lnRuta = AlegeRutaScriereEditare(poSnapshotEditare, poDate, loForm.ndiscfactron, loForm.ndiscfactval, 'crsfactura')
|
|
STRTOFILE('ruta aleasa = ' + TRANSFORM(lnRuta) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
|
|
loReal = goExecutor
|
|
loSpy = CREATEOBJECT('SpyS13')
|
|
loSpy.nHandle = gnHandle
|
|
goExecutor = loSpy
|
|
|
|
STRTOFILE('--- INCEPE do_scrie_factura, statementele urmeaza in ordine ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
llRez = loForm.do_scrie_factura()
|
|
STRTOFILE('--- do_scrie_factura a intors ' + TRANSFORM(llRez) + ' ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
|
|
goExecutor = loReal
|
|
STRTOFILE('statemente capturate: ' + TRANSFORM(loSpy.nIdx) + ' esecuri: ' + TRANSFORM(loSpy.nEsecuri) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
STRTOFILE('ultimul mesaj prin mock: [' + gcMockUltimMesaj + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
|
|
SQLROLLBACK(gnHandle)
|
|
SQLSetProp(gnHandle, 'Transactions', 1)
|
|
|
|
DO StareCascada WITH 'DUPA'
|
|
ENDPROC
|
|
|
|
|
|
*==============================================================================================
|
|
* DescrieCursorFactura: structura si continutul crsfactura (campurile NULL + opt_facturare, care
|
|
* decide branch-ul adauga_rata_factura vs adauga_articol_factura).
|
|
*==============================================================================================
|
|
PROCEDURE DescrieCursorFactura
|
|
LOCAL laF[1], lnF, lnI, lcNule
|
|
lnF = AFIELDS(laF, 'crsfactura')
|
|
STRTOFILE('--- crsfactura: ' + TRANSFORM(RECCOUNT('crsfactura')) + ' randuri, ' + TRANSFORM(lnF) + ' campuri ---' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
SELECT crsfactura
|
|
SCAN
|
|
lcNule = ''
|
|
FOR lnI = 1 TO lnF
|
|
IF ISNULL(EVALUATE('crsfactura.' + laF[lnI,1]))
|
|
lcNule = lcNule + laF[lnI,1] + ' '
|
|
ENDIF
|
|
ENDFOR
|
|
STRTOFILE(' rand ' + TRANSFORM(RECNO()) + ': opt_facturare=' + TRANSFORM(crsfactura.opt_facturare) + ;
|
|
' id_rata=' + TRANSFORM(NVL(crsfactura.id_rata,-1)) + ' denumire=[' + TRANSFORM(NVL(crsfactura.denumire,'<NULL>')) + ']' + ;
|
|
' NULL pe -> ' + IIF(EMPTY(lcNule), '(niciun camp)', lcNule) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ENDSCAN
|
|
GO TOP IN crsfactura
|
|
ENDPROC
|
|
|
|
|
|
*==============================================================================================
|
|
PROCEDURE StareCascada
|
|
LPARAMETERS tcEticheta
|
|
LOCAL lnIdFact
|
|
lnIdFact = Val1([select nvl(id_fact,0) as v from vanzari where id_vanzare = 360])
|
|
STRTOFILE(tcEticheta + ' GLOBAL: max_id_vanzare=' + TRANSFORM(Val1([select nvl(max(id_vanzare),0) as v from vanzari])) + ;
|
|
' count_vanzari=' + TRANSFORM(Val1([select count(*) as v from vanzari])) + ;
|
|
' max_numar_act_SSS=' + TRANSFORM(Val1([select nvl(max(numar_act),0) as v from vanzari where serie_act = 'SSS'])) + ;
|
|
' max_numar_act_serie360=' + TRANSFORM(Val1([select nvl(max(numar_act),0) as v from vanzari where nvl(serie_act,'@') = (select nvl(serie_act,'@') from vanzari where id_vanzare = 360)])) + ;
|
|
CHR(13) + CHR(10), gcErrLog, 1)
|
|
STRTOFILE(tcEticheta + ' CASCADA 360: vanzari.sters=' + TRANSFORM(Val1([select nvl(sters,-9) as v from vanzari where id_vanzare = 360])) + ;
|
|
' id_fact=' + TRANSFORM(lnIdFact) + ;
|
|
' vanzari_detalii_vii=' + TRANSFORM(Val1([select count(*) as v from vanzari_detalii where id_vanzare = 360 and sters = 0])) + ;
|
|
' documente.sters=' + TRANSFORM(Val1([select nvl(sters,-9) as v from documente where id_doc = ] + TRANSFORM(lnIdFact))) + ;
|
|
' act_vii=' + TRANSFORM(Val1([select count(*) as v from act where id_fact = ] + TRANSFORM(lnIdFact) + [ and sters = 0])) + ;
|
|
' ctr_rate_facturi_vii=' + TRANSFORM(Val1([select count(*) as v from ctr_rate_facturi where id_fact = ] + TRANSFORM(lnIdFact) + [ and sters = 0])) + ;
|
|
CHR(13) + CHR(10), gcErrLog, 1)
|
|
ENDPROC
|
|
|
|
|
|
*==============================================================================================
|
|
*==============================================================================================
|
|
* MasoaraResultSets: ruleaza statement-ul care cade cu BatchMode = .F., ca sa vada result set-urile
|
|
* unul cate unul (cate coloane are fiecare), si logheaza integral AERROR() daca tot cade.
|
|
*==============================================================================================
|
|
PROCEDURE MasoaraResultSets
|
|
LPARAMETERS tcSql, tcCursor
|
|
LOCAL lnR, lnM, lnPas, loEx, laE[1], lnI, lnJ, lcN, laF[1], lnF, lnLat
|
|
|
|
STRTOFILE(' *** masurare separata, BatchMode=.F. ***' + CHR(13) + CHR(10) + ;
|
|
' BatchMode initial = ' + TRANSFORM(SQLGetProp(gnHandle, 'BatchMode')) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
|
|
*!* diagnostice in ACEEASI stare de sesiune, inainte de statement-ul care cade
|
|
PUBLIC pnDummyS13
|
|
pnDummyS13 = 0
|
|
LOCAL laM[1], lnM2
|
|
lnM2 = AMEMBERS(laM, poDate, 0)
|
|
STRTOFILE(' poDate: ' + TRANSFORM(lnM2) + ' membri, TYPE(poDate.nid_vanzare)=' + TYPE('poDate.nid_vanzare') + ;
|
|
' valoare=' + TRANSFORM(poDate.nid_vanzare) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
DO Diag WITH 'D1 {call cursor_avize} cu ?@poDate.nid_vanzare', [{call pack_facturare.cursor_avize('',8,?@poDate.nid_vanzare)}], 'c_dg1'
|
|
DO Diag WITH 'D2 {call cursor_avize} cu ?@pnDummyS13 (PUBLIC)', [{call pack_facturare.cursor_avize('',8,?@pnDummyS13)}], 'c_dg2'
|
|
DO Diag WITH 'D3 select * from vact where 1 = 2', [select * from vact where 1 = 2], 'c_dg3'
|
|
DO Diag WITH 'D4 {call cursor_verificare}', [{call pack_facturare.cursor_verificare}], 'c_dg4'
|
|
|
|
STRTOFILE(' USED(crsact) inainte de apel = ' + TRANSFORM(USED('crsact')) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
DO LogCursoare WITH 'crsact', 'inainte de apel'
|
|
|
|
*!* Acelasi apel, aceeasi stare de sesiune, dar prin bloc anonim cu REF CURSOR-ul intr-o
|
|
*!* variabila LOCALA PL/SQL - deci nu se mai intoarce niciun result set catre VFP. Daca asa
|
|
*!* trece, atunci esecul e strict la materializarea REF CURSOR-ului, nu la executia procedurii.
|
|
LOCAL lcArg, lnP1, lcBloc
|
|
lnP1 = AT('(', tcSql)
|
|
lcArg = SUBSTR(tcSql, lnP1 + 1, RAT(')', tcSql) - lnP1 - 1)
|
|
lcArg = STRTRAN(lcArg, '?@poDate.nid_vanzare', '?@pnDummyS13')
|
|
lcBloc = 'begin declare c pack_facturare.cursor_facturare; begin pack_facturare.scrie_factura2(' + ;
|
|
lcArg + ',c); end; end;'
|
|
DO Diag WITH 'D5 acelasi apel, REF CURSOR in variabila locala PL/SQL', lcBloc, 'c_real'
|
|
STRTOFILE(' pnDummyS13 dupa D5 = ' + TRANSFORM(pnDummyS13) + ' ISNULL=' + TRANSFORM(ISNULL(pnDummyS13)) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
*!* ce ramura a luat scrie_factura2 la linia 5112: verifica_note_contabile(1) > 0 -> cursor_verificare
|
|
DO Diag WITH 'D6 verifica_note_contabile(1) dupa D5', [select pack_contafin.verifica_note_contabile(1) as v from dual], 'c_ver'
|
|
IF USED('c_ver')
|
|
USE IN c_ver
|
|
ENDIF
|
|
IF SQLExec(gnHandle, [select pack_contafin.verifica_note_contabile(1) as v from dual], 'c_ver') >= 0 AND USED('c_ver')
|
|
SELECT c_ver
|
|
GO TOP
|
|
STRTOFILE(' verifica_note_contabile(1) = ' + TRANSFORM(NVL(c_ver.v, -1)) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
USE IN c_ver
|
|
ENDIF
|
|
DO Diag WITH 'D7 {call cursor_verificare} dupa D5', [{call pack_facturare.cursor_verificare}], 'c_dg7'
|
|
|
|
SQLSetProp(gnHandle, 'BatchMode', .F.)
|
|
lnPas = 0
|
|
TRY
|
|
lnR = SQLExec(gnHandle, tcSql, tcCursor)
|
|
STRTOFILE(' SQLExec ret=' + TRANSFORM(lnR) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
DO LogCursoare WITH tcCursor, 'dupa SQLExec'
|
|
DO WHILE lnPas < 10
|
|
lnPas = lnPas + 1
|
|
lnM = SQLMoreResults(gnHandle, tcCursor)
|
|
STRTOFILE(' SQLMoreResults #' + TRANSFORM(lnPas) + ' ret=' + TRANSFORM(lnM) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
DO LogCursoare WITH tcCursor, 'dupa SQLMoreResults #' + TRANSFORM(lnPas)
|
|
IF lnM <> 1
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
CATCH TO loEx
|
|
STRTOFILE(' EXCEPTIE la masurare (pas ' + TRANSFORM(lnPas) + '): ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ;
|
|
' Message=[' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
lnI = AERROR(laE)
|
|
IF lnI > 0
|
|
FOR lnJ = 1 TO ALEN(laE, 2)
|
|
STRTOFILE(' AERROR[1,' + TRANSFORM(lnJ) + '] = ' + TRANSFORM(laE[1, lnJ]) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ENDFOR
|
|
ENDIF
|
|
DO LogCursoare WITH tcCursor, 'dupa exceptie'
|
|
ENDTRY
|
|
SQLSetProp(gnHandle, 'BatchMode', .T.)
|
|
ENDPROC
|
|
|
|
|
|
PROCEDURE Diag
|
|
LPARAMETERS tcEticheta, tcSql, tcCursor
|
|
LOCAL lnR, loEx
|
|
IF USED(tcCursor)
|
|
USE IN (tcCursor)
|
|
ENDIF
|
|
TRY
|
|
lnR = SQLExec(gnHandle, tcSql, tcCursor)
|
|
STRTOFILE(' ' + tcEticheta + ' -> ret=' + TRANSFORM(lnR) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
DO LogCursoare WITH tcCursor, tcEticheta
|
|
IF USED(tcCursor)
|
|
USE IN (tcCursor)
|
|
ENDIF
|
|
CATCH TO loEx
|
|
STRTOFILE(' ' + tcEticheta + ' -> EXCEPTIE ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ' [' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ENDTRY
|
|
ENDPROC
|
|
|
|
|
|
PROCEDURE LogCursoare
|
|
LPARAMETERS tcCursor, tcMoment
|
|
LOCAL lnJ, lcN, laF[1], lnF, lnI, lnLat
|
|
FOR lnJ = 0 TO 4
|
|
lcN = tcCursor + IIF(lnJ = 0, '', TRANSFORM(lnJ))
|
|
IF USED(lcN)
|
|
lnF = AFIELDS(laF, lcN)
|
|
lnLat = 0
|
|
FOR lnI = 1 TO lnF
|
|
lnLat = lnLat + laF[lnI, 3]
|
|
ENDFOR
|
|
STRTOFILE(' [' + tcMoment + '] cursor ' + lcN + ': ' + TRANSFORM(lnF) + ' coloane, latime ' + ;
|
|
TRANSFORM(lnLat) + ', ' + TRANSFORM(RECCOUNT(lcN)) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ENDIF
|
|
ENDFOR
|
|
ENDPROC
|
|
|
|
|
|
PROCEDURE bat
|
|
LPARAMETERS tcPas
|
|
STRTOFILE('BAT ' + TTOC(DATETIME()) + ' ' + m.tcPas + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ENDPROC
|
|
|
|
|
|
FUNCTION Val1
|
|
LPARAMETERS tcSql
|
|
LOCAL lnRet
|
|
lnRet = -1
|
|
DO bat WITH 'Val1 intra: ' + m.tcSql
|
|
IF USED('v_val97')
|
|
USE IN v_val97
|
|
ENDIF
|
|
IF goExecutor.oExecuta(tcSql, 'v_val97')
|
|
SELECT v_val97
|
|
IF RECCOUNT('v_val97') > 0
|
|
GO TOP
|
|
lnRet = NVL(v_val97.v, -1)
|
|
ENDIF
|
|
USE IN v_val97
|
|
ENDIF
|
|
DO bat WITH 'Val1 iese: ' + TRANSFORM(lnRet)
|
|
RETURN lnRet
|
|
ENDFUNC
|
|
|
|
|
|
PROCEDURE test_error_handler
|
|
LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
|
|
|
|
STRTOFILE('EROARE NEPRINSA ' + TRANSFORM(tnError) + ' [' + tcProgram + ':' + TRANSFORM(tnLineNo) + '] ' + tcMessage + CHR(13) + CHR(10), gcErrLog, 1)
|
|
IF TYPE('gnHandle') = 'N' AND gnHandle > 0
|
|
SQLROLLBACK(gnHandle)
|
|
SQLSetProp(gnHandle, 'Transactions', 1)
|
|
ENDIF
|
|
STRTOFILE('end (eroare) ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
QUIT
|
|
ENDPROC
|
|
|
|
|
|
*==============================================================================================
|
|
* SpyS13: subclasa a lui oexecutor. Logheaza fiecare statement INAINTE de executie, il executa
|
|
* prin DODEFAULT (comportament identic cu al clasei de baza, acelasi PCOUNT), si daca SQLExec
|
|
* arunca o exceptie o logheaza integral (ErrorNo/Message/Procedure/LineNo) si intoarce -1 in loc
|
|
* sa o propage - fluxul cade atunci pe ramura normala de eroare, care face ROLLBACK.
|
|
*==============================================================================================
|
|
DEFINE CLASS SpyS13 AS oexecutor
|
|
nIdx = 0
|
|
nEsecuri = 0
|
|
|
|
PROCEDURE oExecute(tcSql, tcCursor, tlProgress, tcTitluProgress, tnHandle, tlShowError, tlQuitOnError, tlReconnect)
|
|
LOCAL lnI, lnRet, loEx, lcS, lcC, lnPc
|
|
THIS.nIdx = THIS.nIdx + 1
|
|
lnI = THIS.nIdx
|
|
lnPc = PCOUNT()
|
|
lcS = IIF(VARTYPE(m.tcSql) = 'C', m.tcSql, '<NU E SIR>')
|
|
lcC = IIF(VARTYPE(m.tcCursor) = 'C', m.tcCursor, '')
|
|
|
|
STRTOFILE('#' + TRANSFORM(lnI) + ' pcount=' + TRANSFORM(lnPc) + ' cursor=[' + lcC + ']' + ;
|
|
' vartype=' + VARTYPE(m.tcSql) + ' len=' + TRANSFORM(LEN(lcS)) + ;
|
|
' semne_intrebare=' + TRANSFORM(OCCURS('?', lcS)) + CHR(13) + CHR(10) + ;
|
|
' SQL=[' + lcS + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
|
|
IF 'scrie_factura2' $ lcS
|
|
DO MasoaraResultSets WITH lcS, lcC
|
|
THIS.nEsecuri = THIS.nEsecuri + 1
|
|
THIS.cEroare = 'SpyS13: statement masurat separat, nu se mai executa'
|
|
RETURN -1
|
|
ENDIF
|
|
|
|
lnRet = -1
|
|
TRY
|
|
DO CASE
|
|
CASE lnPc <= 1
|
|
lnRet = DODEFAULT(m.tcSql)
|
|
CASE lnPc = 2
|
|
lnRet = DODEFAULT(m.tcSql, m.tcCursor)
|
|
CASE lnPc = 3
|
|
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress)
|
|
CASE lnPc = 4
|
|
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress)
|
|
CASE lnPc = 5
|
|
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle)
|
|
CASE lnPc = 6
|
|
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError)
|
|
CASE lnPc = 7
|
|
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError)
|
|
OTHERWISE
|
|
lnRet = DODEFAULT(m.tcSql, m.tcCursor, m.tlProgress, m.tcTitluProgress, m.tnHandle, m.tlShowError, m.tlQuitOnError, m.tlReconnect)
|
|
ENDCASE
|
|
STRTOFILE(' -> ret=' + TRANSFORM(lnRet) + IIF(lnRet < 0, ' EROARE=[' + THIS.cEroare + ']', '') + CHR(13) + CHR(10), gcErrLog, 1)
|
|
CATCH TO loEx
|
|
THIS.nEsecuri = THIS.nEsecuri + 1
|
|
STRTOFILE(' -> EXCEPTIE VFP la statement #' + TRANSFORM(lnI) + ;
|
|
': ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ;
|
|
' Message=[' + TRANSFORM(loEx.Message) + ']' + ;
|
|
' Details=[' + TRANSFORM(loEx.Details) + ']' + ;
|
|
' Procedure=' + TRANSFORM(loEx.Procedure) + ;
|
|
' LineNo=' + TRANSFORM(loEx.Lineno) + ;
|
|
' LineContents=[' + TRANSFORM(loEx.LineContents) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
lnRet = -1
|
|
THIS.cEroare = 'SpyS13: ' + TRANSFORM(loEx.Message)
|
|
ENDTRY
|
|
|
|
RETURN lnRet
|
|
ENDPROC
|
|
|
|
FUNCTION oPrelucrareEroare
|
|
RETURN 'SpyS13: ' + TRANSFORM(THIS.cEroare)
|
|
ENDFUNC
|
|
ENDDEFINE
|