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
87 lines
3.5 KiB
Plaintext
87 lines
3.5 KiB
Plaintext
* probe_s13_refcursor.prg
|
|
* Ce anume nu poate materializa VFP la statement-ul {call pack_facturare.scrie_factura2(...)}:
|
|
* rezultatul lui este REF CURSOR-ul OUT V_CURSOR_VERIFICARE (parametrul 17, nedat in apel, legat
|
|
* automat de driverul ODBC ca result set). Doua ramuri posibile in pachet (liniile 4877/4881,
|
|
* 5113/5126 din PACKAGE BODY):
|
|
* a) pack_facturare.cursor_verificare(...) - SELECT cu ~75 coloane si 17 JOIN-uri pe ACT_TEMP
|
|
* b) SELECT * FROM ACT_TEMP WHERE 1 = 2 - doar coloanele lui ACT_TEMP
|
|
* Probam ambele forme direct prin SQLExec, in aceeasi sesiune, FARA nicio scriere:
|
|
* cursor_verificare are un singur parametru, OUT REF CURSOR, deci nu modifica nimic.
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
|
|
PUBLIC gcErrLog
|
|
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\probe_s13_refcursor_log_' + ;
|
|
STRTRAN(STRTRAN(STRTRAN(TTOC(DATETIME()), '/', ''), ':', ''), ' ', '_') + '.txt'
|
|
STRTOFILE('start ' + TRANSFORM(DATETIME()) + ' MARCA=S13-REFCURSOR' + CHR(13) + CHR(10), gcErrLog)
|
|
|
|
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
|
|
|
|
DO Incearca WITH 'A. select direct din ACT_TEMP', [select * from act_temp where 1 = 2], 'c_a'
|
|
DO Incearca WITH 'B. {call} cu REF CURSOR OUT (cursor_verificare)', [{call pack_facturare.cursor_verificare}], 'c_b'
|
|
DO Incearca WITH 'C. select cu 300 de coloane din dual', ConstruiesteSelectLarg(300), 'c_c'
|
|
DO Incearca WITH 'D. select cu 254 de coloane din dual', ConstruiesteSelectLarg(254), 'c_d'
|
|
DO Incearca WITH 'E. select cu 255 de coloane din dual', ConstruiesteSelectLarg(255), 'c_e'
|
|
DO Incearca WITH 'F. select cu 256 de coloane din dual', ConstruiesteSelectLarg(256), 'c_f'
|
|
|
|
STRTOFILE('end ' + TRANSFORM(DATETIME()) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
QUIT
|
|
|
|
|
|
*==============================================================================================
|
|
FUNCTION ConstruiesteSelectLarg
|
|
LPARAMETERS tnN
|
|
LOCAL lcS, lnI
|
|
lcS = 'select '
|
|
FOR lnI = 1 TO tnN
|
|
lcS = lcS + IIF(lnI > 1, ',', '') + '1 as c' + TRANSFORM(lnI)
|
|
ENDFOR
|
|
RETURN lcS + ' from dual'
|
|
ENDFUNC
|
|
|
|
|
|
PROCEDURE Incearca
|
|
LPARAMETERS tcEticheta, tcSql, tcCursor
|
|
LOCAL lnRet, loEx, laE[1], lnI, lnLatime, laF[1], lnF
|
|
|
|
IF USED(tcCursor)
|
|
USE IN (tcCursor)
|
|
ENDIF
|
|
|
|
STRTOFILE('--- ' + tcEticheta + ' ---' + CHR(13) + CHR(10) + ;
|
|
' SQL(len=' + TRANSFORM(LEN(tcSql)) + ')=[' + LEFT(tcSql, 400) + IIF(LEN(tcSql) > 400, '...', '') + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
|
|
lnRet = -999
|
|
TRY
|
|
lnRet = SQLExec(gnHandle, tcSql, tcCursor)
|
|
STRTOFILE(' ret=' + TRANSFORM(lnRet) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
IF lnRet < 0
|
|
IF AERROR(laE) > 0
|
|
STRTOFILE(' AERROR: ' + TRANSFORM(laE[1]) + ' | ' + TRANSFORM(laE[2]) + ' | ' + TRANSFORM(laE[3]) + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ENDIF
|
|
ELSE
|
|
IF USED(tcCursor)
|
|
lnF = AFIELDS(laF, tcCursor)
|
|
lnLatime = 0
|
|
FOR lnI = 1 TO lnF
|
|
lnLatime = lnLatime + laF[lnI, 3]
|
|
ENDFOR
|
|
STRTOFILE(' cursor creat: ' + TRANSFORM(lnF) + ' coloane, latime rand = ' + TRANSFORM(lnLatime) + ' octeti, ' + ;
|
|
TRANSFORM(RECCOUNT(tcCursor)) + ' randuri' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
USE IN (tcCursor)
|
|
ELSE
|
|
STRTOFILE(' (niciun cursor creat)' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ENDIF
|
|
ENDIF
|
|
CATCH TO loEx
|
|
STRTOFILE(' EXCEPTIE: ErrorNo=' + TRANSFORM(loEx.ErrorNo) + ' Message=[' + TRANSFORM(loEx.Message) + ']' + CHR(13) + CHR(10), gcErrLog, 1)
|
|
ENDTRY
|
|
ENDPROC
|