Cercetarile si propunerile rundelor 4-6 pe editarea facturii emise. Starea rundei 6 si ce s-a stabilit intra in progres.md. Nou: docs/conventii_mediu_oracle.md - pe dev/test se lucreaza numai cu ROA_CENTRAL si schemele CONTAFIN_ORACLE si MARIUSM_AUTO; schema ACN nu se foloseste. Scripturile de pachet sunt necalificate, deci schema tinta o decide sirul de conectare, nu fisierul. roafacturare.pj2 regenerat de git_sync. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013gYCNE26G1G7UoGu2ju7aS
126 lines
6.4 KiB
Markdown
126 lines
6.4 KiB
Markdown
# 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.
|