Files
roaauto/docs/vfp_oracle_pack_sesiune.md
Marius Mutu 395e51e5bb sync SVN r18197
ROAAUTO 2.5.6: Vizualizare comenzi unificata cu Istoric comenzi (filtre si coloane noi), coloane manopera/materiale si total fara/cu TVA in vizualizare comenzi si facturi; versiune_db 2026_09_23_01.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Cfkx1QfeDv987o8x1rAtrr
2026-09-23 22:13:59 +03:00

2.5 KiB
Raw Blame History

Capcană: view-urile ROA depind de PACK_SESIUNE (luna de lucru)

Orice măsurătoare sau verificare făcută din sqlplus / DSN fără inițializarea lunii de lucru întoarce alte date decât aplicația — fără nicio eroare.

Ce se întâmplă

Mai multe view-uri de bază nu sunt „pure": își calculează coloanele în funcție de starea de sesiune ținută în pachetul PACK_SESIUNE, pe care aplicația o setează la login (setluna, setan, setanbal, setlunabal, set_data_init/final, set_id_util, setschema).

Exemplu — AUTO_COMENZI_VALIDATE (baza lui AUTO_ISTORIC_COMENZI):

(case when extract(month from a.dataoravalid) + extract(year from a.dataoravalid) * 12
        <= pack_sesiune.getluna() + pack_sesiune.getan() * 12
      then 1 else 0 end) as validat

Într-o sesiune sqlplus proaspătă, getluna()/getan() nu sunt setate, comparația e falsă pentru toate rândurile, deci validat iese 0 peste tot — și la fel dataoravalid, util_valid, dataorainchis, util_inchis. Același tipar în AUTO_VORDL_FACTURI (alege coloanele RON vs ROL după getan/getluna față de get_anron/get_lunaron) și în omoloagele DEVIZE_*.

Cât de mult minte

Măsurat pe producția AUTOMOTIVE, 23.09.2026, ecranul „Vizualizare comenzi", luna 10/2025:

rânduri întoarse
sqlplus fără pack_sesiune inițializat 32 790 (din 2006 încoace)
cu setluna(10)/setan(2025) 195 (164 cu filtrul implicit „Active")

Diferența e ×168. Motivul: gcCondLuna (Programe/ovariabile_globale.prg:16) păstrează rândurile vechi doar dacă sunt nevalidate sau nefacturate — iar fără luna de lucru totul pare nevalidat. Din cele 33 704 comenzi ale clientului, 32 744 sunt de fapt validate.

Ce se face

Prima comandă din orice script de diagnostic pe o schemă ROA, imediat după conectare:

begin
  <schema>.pack_sesiune.setluna(<luna>);
  <schema>.pack_sesiune.setan(<an>);
end;
/

(setluna/setan sunt setări de sesiune, nu DML — nu încalcă regula „doar SELECT pe producție".)

Verificare rapidă că sesiunea e inițializată corect, înainte de a crede orice cifră:

select nvl(validat,0) validat, count(*) from <schema>.auto_comenzi_validate
 group by nvl(validat,0);

Dacă iese totul pe 0, sesiunea nu e inițializată — nu interpreta rezultatele.

Vezi și: roa-oracle-production-access (lanțul tunel/TNS/DSN), COMUN\docs\conexiuni-tunel-ssh-odbc.md.