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
2.5 KiB
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.