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
116 lines
4.6 KiB
Plaintext
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
|