* test_s8_pas1_aplica.prg * S8 pas 1 (planul #13) - aplica CREATE OR REPLACE VIEW VVANZARI_ARTICOLE (extensie) pe * MARIUSM_AUTO, apoi verifica in aceeasi rulare: coloanele noi (30 in loc de 23, cele vechi * neschimbate ca pozitie/tip), randurile pe id_vanzare de control - IDENTICE cu inainte * (1047->2, 1050->4, 1040->1, 1055->2, 1125->4) - si continut real (nu NULL) pe coloanele noi * pentru un document cu contract+valuta (1040) si un document cu pretd real (894). * Scrie in Oracle (CREATE OR REPLACE VIEW, comanda idempotenta) - fara DROP, fara atingere de * date. QUIT la final. SET SAFETY OFF SET TALK OFF PUBLIC gcErrLog gcErrLog = 'D:\ROA\ROAFACTURARE\COMUN\utile\Teste\editare_factura\test_s8_pas1_aplica_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, llOk lcOut = '' *!* --- 1. aplica CREATE OR REPLACE VIEW --- lcSql = [create or replace view vvanzari_articole as ] + ; [select vd.id_vanzare, vd.id_vanzare_det, vd.id_articol, vd.cantitate, vd.pret, vd.pret_cu_tva, vd.proc_tvav, ] + ; [vd.discount_unitar, vd.id_gestiune, vd.cont, vd.id_valuta, vd.id_jtva_coloana, vd.serie, vd.explicatie, ] + ; [vd.taxcode, vd.lot, vd.sters, vd.id_vanzare_set, vd.pret_achizitie, na.denumire, na.codmat, ng.nume_gestiune, ] + ; [nv.nume_val, vd.id_pol, vd.id_ctr, vd.diferenta, vd.pretd, vd.id_valutad, vc.curs, vc.multiplicator ] + ; [from vanzari_detalii vd ] + ; [left join nom_articole na on na.id_articol = vd.id_articol ] + ; [left join nom_gestiuni ng on ng.id_gestiune = vd.id_gestiune ] + ; [left join nom_valute nv on nv.id_valuta = vd.id_valuta ] + ; [left join vanzari_cursuri vc on vc.id_vanzare = vd.id_vanzare and vc.id_valuta = vd.id_valuta] llOk = goExecutor.oExecuta(m.lcSql) lcOut = lcOut + '--- CREATE OR REPLACE VIEW ---' + CHR(13) + CHR(10) lcOut = lcOut + 'rezultat: ' + TRANSFORM(m.llOk) + CHR(13) + CHR(10) IF !m.llOk lcOut = lcOut + 'EROARE: ' + goExecutor.cEroare + CHR(13) + CHR(10) ENDIF goExecutor.oReset() STRTOFILE(m.lcOut, gcErrLog, 1) lcOut = '' IF !m.llOk STRTOFILE('OPRIT dupa eroare la CREATE OR REPLACE - nu se mai verifica.' + CHR(13) + CHR(10), gcErrLog, 1) STRTOFILE('done' + CHR(13) + CHR(10), gcErrLog, 1) QUIT ENDIF *!* --- 2. marcheaza versiunea (registru intern Oracle, separat de docs\scripturi_oracle_13.md) --- *!* "exec ..." e sintaxa SQL*Plus, nu SQL valid - prin goExecutor blocheaza rularea headless; *!* forma corecta aici e blocul PL/SQL anonim llOk = goExecutor.oExecuta([begin pack_migrare.UpdateVersiune('wip13_2026_09_02_01_COMUN_VVANZARI_ARTICOLE_EXT'); end;]) lcOut = lcOut + '--- UpdateVersiune ---' + CHR(13) + CHR(10) + 'rezultat: ' + TRANSFORM(m.llOk) + CHR(13) + CHR(10) IF !m.llOk lcOut = lcOut + 'EROARE: ' + goExecutor.cEroare + CHR(13) + CHR(10) ENDIF goExecutor.oReset() STRTOFILE(m.lcOut, gcErrLog, 1) lcOut = '' *!* --- 3. coloanele DUPA - trebuie 30, primele 23 neschimbate ca pozitie/tip --- lcSql = [select column_id, column_name, data_type, data_length, data_precision, data_scale ] + ; [from all_tab_columns where owner = 'MARIUSM_AUTO' and table_name = 'VVANZARI_ARTICOLE' order by column_id] IF Used('crscols') Use In crscols ENDIF IF goExecutor.oExecute(m.lcSql, [crscols]) < 0 lcOut = lcOut + 'EROARE coloane dupa: ' + goExecutor.cEroare + CHR(13) + CHR(10) ELSE lcOut = lcOut + CHR(13) + CHR(10) + '--- coloane DUPA (' + TRANSFORM(RECCOUNT('crscols')) + ', asteptat 30) ---' + CHR(13) + CHR(10) SELECT crscols SCAN lcOut = lcOut + TRANSFORM(column_id) + '. ' + ALLTRIM(column_name) + ' ' + ALLTRIM(data_type) + ; IIF(NVL(data_precision,0) > 0, '(' + TRANSFORM(data_precision) + ',' + TRANSFORM(NVL(data_scale,0)) + ')', ; IIF(NVL(data_length,0) > 0 AND ALLTRIM(data_type) $ 'VARCHAR2,CHAR', '(' + TRANSFORM(data_length) + ')', '')) + CHR(13) + CHR(10) ENDSCAN USE IN crscols ENDIF goExecutor.oReset() STRTOFILE(m.lcOut, gcErrLog, 1) lcOut = '' *!* --- 4. randuri DUPA pe cele 5 id_vanzare de control - trebuie identice cu INAINTE --- lcSql = [select id_vanzare, count(*) as nr from vvanzari_articole where id_vanzare in (1050,1047,1055,1040,1125) and sters = 0 group by id_vanzare order by id_vanzare] IF Used('crscnt') Use In crscnt ENDIF IF goExecutor.oExecute(m.lcSql, [crscnt]) < 0 lcOut = lcOut + 'EROARE numarare dupa: ' + goExecutor.cEroare + CHR(13) + CHR(10) ELSE lcOut = lcOut + CHR(13) + CHR(10) + '--- randuri sters=0 pe id_vanzare de control (DUPA) - asteptat 1040->1,1047->2,1050->4,1055->2,1125->4 ---' + CHR(13) + CHR(10) SELECT crscnt SCAN lcOut = lcOut + 'id_vanzare=' + TRANSFORM(id_vanzare) + ' -> ' + TRANSFORM(nr) + ' randuri' + CHR(13) + CHR(10) ENDSCAN USE IN crscnt ENDIF goExecutor.oReset() STRTOFILE(m.lcOut, gcErrLog, 1) lcOut = '' *!* --- 5. continut real pe coloanele noi: 1040 (contract + valuta), 894 (pretd real) --- lcSql = [select id_vanzare, id_vanzare_det, id_pol, id_ctr, diferenta, pretd, id_valutad, curs, multiplicator ] + ; [from vvanzari_articole where id_vanzare in (1040,894) and sters = 0 order by id_vanzare, id_vanzare_det] IF Used('crscheck') Use In crscheck ENDIF IF goExecutor.oExecute(m.lcSql, [crscheck]) < 0 lcOut = lcOut + 'EROARE continut nou: ' + goExecutor.cEroare + CHR(13) + CHR(10) ELSE lcOut = lcOut + CHR(13) + CHR(10) + '--- continut coloane noi, 1040 (contract+valuta) si 894 (pretd real) ---' + CHR(13) + CHR(10) SELECT crscheck SCAN lcOut = lcOut + 'id_vanzare=' + TRANSFORM(id_vanzare) + ' det=' + TRANSFORM(id_vanzare_det) + ; ' id_pol=' + TRANSFORM(NVL(id_pol,-1)) + ' id_ctr=' + TRANSFORM(NVL(id_ctr,-1)) + ; ' diferenta=' + TRANSFORM(NVL(diferenta,-1)) + ' pretd=' + TRANSFORM(NVL(pretd,-1)) + ; ' id_valutad=' + TRANSFORM(NVL(id_valutad,-1)) + ' curs=' + TRANSFORM(NVL(curs,-1)) + ; ' multiplicator=' + TRANSFORM(NVL(multiplicator,-1)) + CHR(13) + CHR(10) ENDSCAN USE IN crscheck ENDIF goExecutor.oReset() STRTOFILE(m.lcOut, gcErrLog, 1) lcOut = '' *!* --- 6. proba directa a consumatorului real IncarcaArticoleFactura (select v.*) - nu trebuie sa pice --- SET PROCEDURE TO D:\ROA\ROAFACTURARE\COMUN\programe\ofacturare_editare.prg ADDITIVE IncarcaArticoleFactura(1050) lcOut = lcOut + CHR(13) + CHR(10) + '--- IncarcaArticoleFactura(1050) dupa extindere ---' + CHR(13) + CHR(10) lcOut = lcOut + 'Reccount(tvd) = ' + TRANSFORM(RECCOUNT('tvd')) + ' (asteptat 4)' + CHR(13) + CHR(10) lcOut = lcOut + 'Fcount(tvd) = ' + TRANSFORM(FCOUNT('tvd')) + CHR(13) + CHR(10) lcOut = lcOut + 'are id_pol: ' + TRANSFORM(TYPE('tvd.id_pol') <> 'U') + ', are curs: ' + TRANSFORM(TYPE('tvd.curs') <> 'U') + CHR(13) + CHR(10) IF Used('tvd') Use In tvd ENDIF 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