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
This commit is contained in:
2026-09-23 22:13:59 +03:00
parent c047ff339a
commit 395e51e5bb
12 changed files with 1528 additions and 155 deletions

View File

@@ -0,0 +1,62 @@
# 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`.