Files
comun/utile/Teste/editare_factura/test_s8_pas1_cardinalitate.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

116 lines
4.6 KiB
Plaintext

* test_s8_pas1_cardinalitate.prg
* S8 pas 1 - continuare investigare read-only: verifica daca (id_vanzare, id_valuta) e unic in
* VANZARI_CURSURI (altfel un join pe aceasta cheie ar multiplica randurile view-ului), cauta un
* exemplu cu pretd nenul, si numara randurile INAINTE pe cateva id_vanzare suplimentare
* (1055, 1040, 1125) care vor fi folosite ca proba de continut real (contract / valuta).
* Nu scrie nimic in Oracle. QUIT la final.
SET SAFETY OFF
SET TALK OFF
PUBLIC gcErrLog
gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s8_pas1_cardinalitate_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.prg') WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT', 2026, 8
IF gnHandle <= 0
STRTOFILE('EROARE: conectare esuata' + CHR(13) + CHR(10), gcErrLog, 1)
QUIT
ENDIF
LOCAL lcOut, lcSql
lcOut = ''
*!* --- 1. dubluri pe (id_vanzare, id_valuta) in VANZARI_CURSURI - risc de multiplicare la join ---
lcSql = [select max(nr) as maxnr, count(*) as grupuri from (select id_vanzare, id_valuta, count(*) as nr from vanzari_cursuri group by id_vanzare, id_valuta having count(*) > 1)]
IF Used('crsdup')
Use In crsdup
ENDIF
IF goExecutor.oExecute(m.lcSql, [crsdup]) < 0
lcOut = lcOut + 'EROARE dubluri: ' + goExecutor.cEroare + CHR(13) + CHR(10)
ELSE
lcOut = lcOut + '--- dubluri (id_vanzare,id_valuta) in VANZARI_CURSURI ---' + CHR(13) + CHR(10)
lcOut = lcOut + 'grupuri cu >1 rand: ' + TRANSFORM(NVL(crsdup.grupuri,0)) + ', max randuri intr-un grup: ' + TRANSFORM(NVL(crsdup.maxnr,0)) + CHR(13) + CHR(10)
USE IN crsdup
ENDIF
goExecutor.oReset()
STRTOFILE(m.lcOut, gcErrLog, 1)
lcOut = ''
*!* --- 2. exemplu cu pretd nenul ---
lcSql = [select * from (select id_vanzare, id_vanzare_det, id_valutad, pretd from vanzari_detalii where nvl(pretd,0) <> 0 and sters = 0 order by id_vanzare_det desc) where rownum <= 5]
IF Used('crspretd')
Use In crspretd
ENDIF
IF goExecutor.oExecute(m.lcSql, [crspretd]) < 0
lcOut = lcOut + 'EROARE pretd nenul: ' + goExecutor.cEroare + CHR(13) + CHR(10)
ELSE
lcOut = lcOut + CHR(13) + CHR(10) + '--- exemple cu pretd <> 0 (max 5) ---' + CHR(13) + CHR(10)
IF RECCOUNT('crspretd') = 0
lcOut = lcOut + '(niciun rand cu pretd <> 0 in toata VANZARI_DETALII)' + CHR(13) + CHR(10)
ELSE
SELECT crspretd
SCAN
lcOut = lcOut + 'id_vanzare=' + TRANSFORM(id_vanzare) + ' det=' + TRANSFORM(id_vanzare_det) + ' id_valutad=' + TRANSFORM(NVL(id_valutad,-1)) + ' pretd=' + TRANSFORM(pretd) + CHR(13) + CHR(10)
ENDSCAN
ENDIF
USE IN crspretd
ENDIF
goExecutor.oReset()
STRTOFILE(m.lcOut, gcErrLog, 1)
lcOut = ''
*!* --- 3. randuri INAINTE pe id_vanzare suplimentare (1055 contract, 1040 contract, 1125 valuta) ---
lcSql = [select id_vanzare, count(*) as nr from vvanzari_articole where id_vanzare in (1055,1040,1125) and sters = 0 group by id_vanzare order by id_vanzare]
IF Used('crscnt2')
Use In crscnt2
ENDIF
IF goExecutor.oExecute(m.lcSql, [crscnt2]) < 0
lcOut = lcOut + 'EROARE numarare suplimentara: ' + goExecutor.cEroare + CHR(13) + CHR(10)
ELSE
lcOut = lcOut + CHR(13) + CHR(10) + '--- randuri sters=0 pe id_vanzare 1055/1040/1125 (INAINTE) ---' + CHR(13) + CHR(10)
SELECT crscnt2
SCAN
lcOut = lcOut + 'id_vanzare=' + TRANSFORM(id_vanzare) + ' -> ' + TRANSFORM(nr) + ' randuri' + CHR(13) + CHR(10)
ENDSCAN
USE IN crscnt2
ENDIF
goExecutor.oReset()
STRTOFILE(m.lcOut, gcErrLog, 1)
lcOut = ''
*!* --- 4. VANZARI_CURSURI pentru id_vanzare 1055/1040/1125, ca sa vedem daca exista randuri de curs pentru ele ---
lcSql = [select id_vanzare, id_valuta, curs, multiplicator from vanzari_cursuri where id_vanzare in (1055,1040,1125) order by id_vanzare]
IF Used('crscurex')
Use In crscurex
ENDIF
IF goExecutor.oExecute(m.lcSql, [crscurex]) < 0
lcOut = lcOut + 'EROARE vanzari_cursuri exemple: ' + goExecutor.cEroare + CHR(13) + CHR(10)
ELSE
lcOut = lcOut + CHR(13) + CHR(10) + '--- VANZARI_CURSURI pentru 1055/1040/1125 ---' + CHR(13) + CHR(10)
IF RECCOUNT('crscurex') = 0
lcOut = lcOut + '(niciun rand)' + CHR(13) + CHR(10)
ELSE
SELECT crscurex
SCAN
lcOut = lcOut + 'id_vanzare=' + TRANSFORM(id_vanzare) + ' id_valuta=' + TRANSFORM(id_valuta) + ' curs=' + TRANSFORM(curs) + ' multiplicator=' + TRANSFORM(multiplicator) + CHR(13) + CHR(10)
ENDSCAN
ENDIF
USE IN crscurex
ENDIF
goExecutor.oReset()
STRTOFILE(m.lcOut, gcErrLog, 1)
lcOut = ''
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