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
109 lines
5.0 KiB
Plaintext
109 lines
5.0 KiB
Plaintext
* probe_named_notation_odbc.prg
|
|
* Verifica daca driverul ODBC Oracle folosit de acest produs (prin goExecutor -> SQLExec, acelasi
|
|
* drum ca productia, NU sqlplus) accepta notatia cu nume (param=>valoare) in interiorul escape-ului
|
|
* {call ...}, asa cum e folosita in S4g (COMUN\clase\ofacturare.vc2, docs\raport_s4g_vfp.md) pentru
|
|
* al 29-lea argument V_CONT_VENIT.
|
|
*
|
|
* Metoda: procedura de test proprie, minimala, creata si stearsa in schema MARIUSM_AUTO. Procedura
|
|
* nu scrie nimic - ridica mereu RAISE_APPLICATION_ERROR cu parametrii primiti inclusi in text, asa
|
|
* ca reusita apelului {call} (ajuns pana in PL/SQL) e vizibila direct in mesajul de eroare capturat
|
|
* de goExecutor.cEroare, fara sa fie nevoie de parametri OUT sau de scriere de date. Doua apeluri:
|
|
* unul pur pozitional (control), unul cu ultimul argument in named notation (cazul S4g).
|
|
*
|
|
* Rulare: vfp9.exe -A -T "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\probe_named_notation_odbc.prg"
|
|
* Log: D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\probe_named_notation_odbc.log
|
|
* Mediu: ROA_CENTRAL / MARIUSM_AUTO; gnIdUtil = 8.
|
|
|
|
SET SAFETY OFF
|
|
SET TALK OFF
|
|
SET NOTIFY OFF
|
|
CLOSE DATABASES
|
|
|
|
PUBLIC gcLog, gcCaz
|
|
gcLog = "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out\probe_named_notation_odbc.log"
|
|
IF !DIRECTORY("D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out")
|
|
MD "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\facturare_unificat\out"
|
|
ENDIF
|
|
STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcLog)
|
|
gcCaz = ""
|
|
ON ERROR DO AfErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
|
|
|
|
DO "D:\ROA\ROAFACTURARE\COMUN\utile\Teste\test_init_env_auto_roafacturare.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
|
|
IF TYPE('gnHandle') <> 'N' OR gnHandle <= 0
|
|
DO AfLog WITH "FAIL: conexiune Oracle esuata"
|
|
DO Final
|
|
ENDIF
|
|
gnIdUtil = 8
|
|
DO AfLog WITH "ENV OK"
|
|
|
|
LOCAL lcProc, lnSucces, lcSql
|
|
|
|
lcProc = "wip13_test_named_notation_odbc"
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* setup: procedura de test, minimala, doar ridica eroare cu parametrii primiti - nimic scris
|
|
gcCaz = "[setup] "
|
|
lcSql = "CREATE OR REPLACE PROCEDURE " + lcProc + "(p1 IN NUMBER, p2 IN NUMBER, p3 IN VARCHAR2 DEFAULT 'DEFAULT_VAL') AS" + ;
|
|
" BEGIN RAISE_APPLICATION_ERROR(-20999, 'GOT p1=' || p1 || ' p2=' || p2 || ' p3=' || NVL(p3,'NULL')); END;"
|
|
lnSucces = goExecutor.oExecute(lcSql)
|
|
DO AfLog WITH "CREATE PROCEDURE: lnSucces=" + TRANSFORM(lnSucces) + " eroare=" + goExecutor.cEroare
|
|
IF lnSucces < 0
|
|
DO AfLog WITH "STOP: nu s-a putut crea procedura de test - verdict NECONCLUDENT"
|
|
DO Final
|
|
ENDIF
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* control: apel pur pozitional, acelasi drum (goExecutor -> SQLExec -> ODBC -> Oracle)
|
|
gcCaz = "[pozitional] "
|
|
lcSql = "{call " + lcProc + "(1,2,'posval')}"
|
|
lnSucces = goExecutor.oExecute(lcSql)
|
|
DO AfLog WITH "POZITIONAL sql=[" + lcSql + "] lnSucces=" + TRANSFORM(lnSucces) + " nEroare=" + TRANSFORM(goExecutor.nEroare) + " eroare=[" + goExecutor.cEroare + "]"
|
|
LOCAL llPozitionalOk
|
|
llPozitionalOk = "GOT p1=1 p2=2 p3=posval" $ goExecutor.cEroare
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* cazul S4g: ultimul argument in named notation, dupa argumente pozitionale
|
|
gcCaz = "[named-notation] "
|
|
lcSql = "{call " + lcProc + "(1,2,P3=>'namedval')}"
|
|
lnSucces = goExecutor.oExecute(lcSql)
|
|
DO AfLog WITH "NAMED sql=[" + lcSql + "] lnSucces=" + TRANSFORM(lnSucces) + " nEroare=" + TRANSFORM(goExecutor.nEroare) + " eroare=[" + goExecutor.cEroare + "]"
|
|
LOCAL llNamedOk
|
|
llNamedOk = "GOT p1=1 p2=2 p3=namedval" $ goExecutor.cEroare
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
* teardown: sterge procedura de test, indiferent de rezultat
|
|
gcCaz = "[teardown] "
|
|
lnSucces = goExecutor.oExecute("DROP PROCEDURE " + lcProc)
|
|
DO AfLog WITH "DROP PROCEDURE: lnSucces=" + TRANSFORM(lnSucces) + " eroare=" + goExecutor.cEroare
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
DO AfLog WITH "CONTROL (pozitional) OK=" + TRANSFORM(llPozitionalOk)
|
|
DO AfLog WITH "NAMED NOTATION OK=" + TRANSFORM(llNamedOk)
|
|
IF llPozitionalOk AND llNamedOk
|
|
DO AfLog WITH "VERDICT: MERGE - named notation acceptata de driverul ODBC in interiorul {call ...}"
|
|
ELSE
|
|
IF !llPozitionalOk
|
|
DO AfLog WITH "VERDICT: NECONCLUDENT - nici apelul pur pozitional (control) nu a ajuns curat in PL/SQL"
|
|
ELSE
|
|
DO AfLog WITH "VERDICT: NU MERGE - named notation respinsa/alterata de driverul ODBC (control a mers, named nu)"
|
|
ENDIF
|
|
ENDIF
|
|
|
|
DO Final
|
|
|
|
*----------------------------------------------------------------------------------------
|
|
PROCEDURE AfLog
|
|
LPARAMETERS tcMsg
|
|
STRTOFILE(tcMsg + CHR(13) + CHR(10), gcLog, 1)
|
|
ENDPROC
|
|
|
|
PROCEDURE AfErr
|
|
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
|
|
DO AfLog WITH "ERROR " + TRANSFORM(tnErr) + " [" + gcCaz + tcProg + ":" + TRANSFORM(tnLine) + "] " + tcMsg
|
|
ENDPROC
|
|
|
|
PROCEDURE Final
|
|
DO AfLog WITH "END " + TTOC(DATETIME())
|
|
QUIT
|
|
ENDPROC
|