Files
roafacturare/docs/cercetare/rec_s4_runda1.md
2026-09-09 22:19:22 +03:00

5.3 KiB

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).