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

63 lines
2.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`):
```sql
(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:
```sql
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ă:
```sql
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`.