# Cercetare pe date: `cantitate < 0` / `cantitate = 0` pe articole de vânzări (validarea de la `omodificari.vc2:14386`) Schema verificată: `MARIUSM_AUTO`@`ROA_CENTRAL` (schema de dezvoltare, folosită și pentru rulări de teste automate — vezi caveat la final). Toate interogările: `SET TRANSACTION READ ONLY`, încheiate cu `ROLLBACK` (confirmat: „Rollback complete." la fiecare rulare, zero scrieri). Sursă date: view-ul `vvanzari_articole` (JOIN `VANZARI_DETALII`+articol, expune deja `denumire`, `pret_achizitie`), filtrat `sters = 0` (= liniile active), înjumătățit cu `VANZARI` pe `id_vanzare` pentru `tip`/`cod`/`data_act`. Nu trag concluzii de produs — doar cifre și exemple, cerute punct cu punct. ## 1. Câte linii, pe `VANZARI.TIP` **`cantitate < 0`** (linii active, sparte pe tip): | TIP | linii | documente | etichetă (dacă am confirmat-o în cod) | |---|---|---|---| | -13 | 1 | 1 | necunoscută — vezi caveat | | -12 | 9 | 8 | necunoscută — vezi caveat | | -8 | 1 | 1 | necunoscută — vezi caveat | | -7 | 1 | 1 | necunoscută — vezi caveat | | -6 | 25 | 24 | necunoscută — vezi caveat | | -4 | 1 | 1 | necunoscută — vezi caveat | | -2 | 1 | 1 | necunoscută — vezi caveat | | -1 | 3 | 2 | necunoscută — vezi caveat | | 1 | 3 | 2 | lista de preturi (confirmat de team-lead) | | 3 | 10 | 4 | necunoscută — nu am verificat-o în cod | | 8 | 2 | 1 | necunoscută — nu am verificat-o în cod | | 24 | 1 | 1 | necunoscută — nu am verificat-o în cod | | 41 | 4 | 4 | necunoscută — nu am verificat-o în cod | | 51 | 3 | 1 | ROAACNPRO / import (menționat în `omodificari.vc2:13125-13127`, cercetarea `rec_s8_rulaje_tip4.md`) | Total: **65 linii active cu `cantitate < 0`, pe 52 documente distincte.** **`cantitate = 0`** (linii active, sparte pe tip): | TIP | linii | documente | etichetă | |---|---|---|---| | -6 | 2 | 2 | necunoscută — vezi caveat | | 2 | 1 | 1 | contract (confirmat de team-lead) | | 22 | 5 | 5 | aviz (confirmat în cod, `oproceduri_facturare.prg` etc.) | Total: **8 linii active cu `cantitate = 0`, pe 8 documente distincte.** Tabelele de mai sus conțin `TIP = -6`, nu `TIP = 6` — sunt valori distincte, nu le-am confundat. > **CORECTIE a sesiunii principale, 12.08.2026 — afirmatia „doar `TIP = 4` trece prin validarea de la > `:14386`" era GRESITA si a fost stearsa de aici si din §6.** Contaminare din misiunea anterioara a > aceluiasi agent, care era chiar despre tip 4. > > Pagina de articole **nu e conditionata de tip**. `omodificari.vc2:14842`: > `IF "OFACTURARE_EDITARE" $ Upper(Set("Procedure")) AND Reccount('tact') > 0`, apoi > `IF Reccount('tvanz') = 1` -> `lAreArticoleVanzari = .T.`. `nTipVanzare` e doar **retinut** > (`:14841`), niciodata folosit ca poarta. Deci **orice document cu rand in `VANZARI`** primeste `tvd` > si trece prin `:14386`. > > Dovedit si empiric de matricea S8 (`rec_s8_matrice.md`): asertia „tvd incarcat cu liniile active > reale" a trecut pe `1048` (tip 1), `1055` (tip 2), `1052` (tip 22) **si** `1054` (tip 4). > > **Consecinta**: absenta lui `TIP = 4` din tabele **nu e o veste buna** si nu arata ca validarea n-a > respins nimic real. Cele 52 de documente cu `cantitate < 0` sunt exact populatia pe care validarea o > blocheaza. Tipurile `-6` si `41` sunt **retur-transfer** (`docs\progres.md`, sectiunea #8/S8), adica > fix cazul semnalat de Marius. ## 2. Exemple concrete (3 + 3, cele mai recente după `data_act`) **`cantitate < 0`:** | id_vanzare | tip | cod | data_act | denumire | cantitate | pret | id_articol | pret_achizitie | |---|---|---|---|---|---|---|---|---| | 1035 | 3 | 1140727 | 26-MAR-26 | DISCOUNT | -3 | 4.8 | 4294507213 | 0 | | 1035 | 3 | 1140727 | 26-MAR-26 | DISCOUNT | -1 | 3.15 | 4294507213 | 0 | | 1035 | 3 | 1140727 | 26-MAR-26 | DISCOUNT | -3 | 3.3 | 4294507213 | 0 | **`cantitate = 0`:** | id_vanzare | tip | cod | data_act | denumire | cantitate | pret | id_articol | pret_achizitie | |---|---|---|---|---|---|---|---|---| | 1051 | 22 | 1140907 | 10-AUG-26 | SERVICII PER BUC | 0 | 0 | 4294507490 | 0 | | 1057 | 2 | 1140913 | 10-AUG-26 | SERVICII PER BUC | 0 | 0 | 4294507490 | 0 | | 1056 | 22 | 1140912 | 10-AUG-26 | SERVICII PER BUC | 0 | 0 | 4294507490 | 0 | (Toate cele 3 exemple de `cantitate=0` provin sunt pe `id_articol` completat, `pret = 0`.) ## 3. Recență | categorie | `MAX(data_act)` | linii în ultimele 12 luni | |---|---|---| | `cantitate < 0` | 26-MAR-26 | 10 din 65 | | `cantitate = 0` | 10-AUG-26 | 6 din 8 | ## 4. `pret = 0` pe linii active **19 linii, pe 17 documente distincte**, `MAX(data_act) = 10-AUG-26`. Toate cele 19 au `id_articol` completat (`linii_cu_articol = 19` din `19` — deci nu sunt rânduri-rest fără articol). ## 5. `pret IS NULL` pe linii active **0 linii.** Confirmă structural ce ați bănuit: `VANZARI_DETALII.PRET` e `NOT NULL` (verificat cu `DESC vanzari_detalii` — coloana `PRET NUMBER(22,6) NOT NULL`), deci interogarea pe `pret IS NULL` nu putea da altceva decât 0. ## 6. `cantitate < 0` pe documente cu pagină de articole (validarea `:14386`) Agentul a raportat aici ca „doar `TIP = 4` trece prin validare" si ca `TIP = 4` lipsind din date ar insemna ca validarea n-a respins nimic real. **Ambele sunt gresite** — vezi caseta de corectie din §1. Raspunsul corect, stabilit de sesiunea principala din cod: pagina de articole **nu are filtru pe tip** (`omodificari.vc2:14842`), deci **toate** cele 52 de documente cu `cantitate < 0` si cele 8 cu `cantitate = 0` trec prin `:14386` la editare, si toate ar fi respinse. ## Caveat pe date - Schema e cea de **dezvoltare** (`MARIUSM_AUTO`), folosită și pentru rulările automate de teste (vezi `docs/cercetare/rec_s8_rulaje_tip4.md` — același `id_vanzare` a fost editat de un test). Recența (`10-AUG-26` = practic azi) poate reflecta rulări de test, nu neapărat uz curent real. - **Valorile negative de `TIP`** (-1, -2, -4, -6, -7, -8, -12, -13) nu corespund niciunui tip de document cunoscut din codul citit până acum — `VANZARI.TIP` e `NUMBER(2) NOT NULL`, dar coloana nu are o constrângere de semn în schema Oracle, deci acceptă tehnic valori negative. N-am cercetat originea lor (ar necesita căutare suplimentară în cod, în afara scopului acestei misiuni) — le raportez ca atare, fără să presupun că sunt date de test sau eroare. ## Fișiere atinse Niciunul (misiune read-only). Interogări Oracle read-only pe `MARIUSM_AUTO`@`ROA_CENTRAL`, cu `ROLLBACK` la final pe toate scripturile.