86 lines
5.3 KiB
Markdown
86 lines
5.3 KiB
Markdown
# S4 runda 1 (PAGE3, doar afisare) — raport de inchidere, 08.08.2026
|
|
|
|
Runda 1 din S4 (`plan_06_s4_proiectare.md`) e **inchisa**. Diff-ul de review:
|
|
diff aplicat (sters). Istoricul complet al sesiunii de implementare/depanare:
|
|
`docs\cercetare\handoff_s4_runda1.md`, handoff intermediar (sters),
|
|
handoff intermediar (sters).
|
|
|
|
## Ce s-a implementat
|
|
|
|
- **`COMUN\programe\ofacturare_editare.prg`**, doua functii noi la coada fisierului:
|
|
- `IncarcaVanzareNota(tnCod, tnNract, tcSerieAct, tdDataAct)` — gaseste randul din `VANZARI`
|
|
corespunzator notei curente (filtru compus `cod+nract+serie_act+data_act`, necesar pentru ca
|
|
`VANZARI.COD` nu e unic — vezi `progres.md`), cursor `tvanz`.
|
|
- `IncarcaArticoleFactura(tnIdVanzare)` — liniile active (`sters=0`) din `VANZARI_DETALII`, cu
|
|
denumire articol/gestiune/valuta pentru afisare, cursor `tvd`.
|
|
- **`COMUN\clase\omodificari.vc2`** (`frm_modific2024`):
|
|
- `pgfArticole.PageCount = 3`, `PAGE3.Caption = "Articole factura"`.
|
|
- Grid nou `pgfArticole.PAGE3.grdArticoleFactura` — 13 coloane, `RecordSource="tvd"`, strict
|
|
**readonly** (grid + fiecare `Text1`).
|
|
- Proprietati noi pe clasa: `lAreArticoleVanzari`, `nIdVanzare`, `nTipVanzare`.
|
|
- `Load()`: placeholder `CREATE CURSOR tvd (...)` — evita dialogul nativ "Open" pe `RecordSource`
|
|
inexistent la constructia grid-ului.
|
|
- `Show()`: bloc nou care cheama `IncarcaVanzareNota`/`IncarcaArticoleFactura` si comuta
|
|
`pgfArticole.PageCount` intre 2 si 3 dupa `lAreArticoleVanzari`.
|
|
|
|
Write-back facut, text si binar sincronizate, fidelity-check OK.
|
|
|
|
## Ce s-a testat, si cu ce rezultat
|
|
|
|
Suita `COMUN\utile\Teste\editare_factura\test_page3_articole.prg`, headless sub
|
|
`COMUN\utile\Teste\watchdog_vfp.ps1 -AutoDismiss`, conexiune reala `MARIUSM_AUTO`. Rulare finala
|
|
(dupa curatarea instrumentatiei de depanare): **exit code 0, 0 dialoguri, toate cazurile PASS**
|
|
(`test_page3_articole_log.txt`):
|
|
|
|
| Caz | Verifica | Rezultat |
|
|
|---|---|---|
|
|
| `cod=1140888` (factura, tip=1) | `IncarcaVanzareNota`/`IncarcaArticoleFactura` direct: `id_vanzare=1050`, `tip=1`, 4 linii | PASS |
|
|
| `cod=1140885` (tip=-12, cu rand VANZARI) | idem: `id_vanzare=1047`, `tip=-12` (detectia merge pe orice tip, nu doar facturi) | PASS |
|
|
| `cod=1125486` (nota fara rand VANZARI) | 0 randuri gasite (caz negativ) | PASS |
|
|
| `cod=1139934` (4 randuri VANZARI cu acelasi cod) | filtrul compus gaseste exact `id_vanzare=882` pe `nract=375/SSS`, 0 randuri pe `nract=13` (fara corespondent) | PASS |
|
|
| `cod=1140888`, `frm_modific2024` instantiat (`Createobject`+`Show`, ca in `do_editare_factura`) | `PageCount=3`, `lAreArticoleVanzari=.T.`, `nIdVanzare=1050` | PASS |
|
|
| `cod=1125486`, idem | `PageCount=2`, `lAreArticoleVanzari=.F.` | PASS |
|
|
|
|
Testul nu atinge Oracle in scriere — doar `SELECT`-uri prin `goExecutor`.
|
|
|
|
## Ce NU e acoperit (ramane pentru runde ulterioare)
|
|
|
|
- **Editarea in memorie a liniilor din grid** — runda 2 din S4; grid-ul e strict readonly in
|
|
aceasta runda, prin design (B.2 din plan, marcaje `_modificat`/`sters`/`id_vanzare_det=0`, nu e
|
|
inceput).
|
|
- **Inchiderea prin `do_renunt()`** — netestata, la fel ca in rundele S1-S3 (mediul minimal de
|
|
test are `ControlCount=0` pe formularul principal `frm_facturi`, deci butoanele native nu sunt
|
|
disponibile pentru a conduce fluxul complet prin UI).
|
|
- **Fluxul UI complet prin "Terminat"** — netestat; `verifica_pagecount_form` instantiaza
|
|
`frm_modific2024` direct (`Createobject`+`Show`), la fel ca `do_editare_factura`, dar nu conduce
|
|
formularul pana la inchidere. Validarea din `inainte_de_do_termin` nu e exercitata de aceasta
|
|
suita.
|
|
- Garda **referinte** pe `do_editare_factura` ramane netestata izolat (fara candidat pozitiv in
|
|
datele de test) — mostenit din rundele anterioare, nu specific rundei 1 din S4.
|
|
|
|
## Blocaje rezolvate in aceasta sesiune (istoric, nu de reluat)
|
|
|
|
Trei blocaje separate au impiedicat verificarea live inainte de aceasta runda de inchidere, toate
|
|
documentate pe larg in handoff intermediar (sters) si `COMUN\docs\testare-ui-vfp.md`:
|
|
|
|
1. `DO ... WITH gnAn, gnLuna` pasa prin referinta si umbrea variabilele in procedurile apelate,
|
|
provocand dialogul nativ "View Parameter" pe un `?gnAn` din SQL passthrough — remediat cu
|
|
pasare prin valoare (`DO ... WITH (gnAn), (gnLuna)`).
|
|
2. Harnessul de test (`test_init_env_auto.prg`) incarca implicit clasa `omodificari` din copia de
|
|
lucru **ROACONT**, nu din fisierul editat — remediat cu `RELEASE CLASSLIB` + `SET CLASSLIB TO`
|
|
pe calea completa a fisierului sub test.
|
|
3. Proprietatile custom noi (`lAreArticoleVanzari`, `nIdVanzare`, `nTipVanzare`) lipseau din
|
|
`*<DefinedPropArrayMethod>` (intrarile `*p:`) — regula era documentata doar pentru metode
|
|
(`*m:`); aplicata acum si aici, in `COMUN\docs\flux-editare-vfp-text.md`.
|
|
|
|
## Curatare facuta la inchidere
|
|
|
|
- Scoase liniile de log `[BISECT]` si `[DIAG]` (`ClassLibrary`/`PEMSTATUS`) din
|
|
`test_page3_articole.prg` — erau instrumentatie de depanare, fara rol in suita finala. Corectiile
|
|
de fond (parantezele pe `(gnAn)`/`(gnLuna)`, blocul `RELEASE CLASSLIB`/`SET CLASSLIB TO`) au
|
|
ramas, cu comentariile lor.
|
|
- Sters `test_baseline_isolation.prg` (+ `.FXP` + log) — era temporar prin design; concluzia lui
|
|
("binarul original nu are blocajul") s-a dovedit nula, testa copia ROACONT a clasei, nu fisierul
|
|
editat (vezi capcana #2 de mai sus).
|
|
- Suita rulata din nou dupa curatare — PASS pe toate cazurile (tabelul de mai sus).
|