* 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