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

155 lines
7.1 KiB
Plaintext

* 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