Files
roafacturare/docs/cercetare/rec_s5_agatare.md
Marius Mutu d9f5ca4226 docs: planurile, proiectarile si rapoartele de lucru intra in versionare
Folderul docs\ era pana acum in afara oricarui control de versiuni - nici git,
nici SVN - desi contine planurile pe puncte, proiectarile si rapoartele de
cercetare pe care se sprijina modificarile din cod. O stergere acolo era
definitiva.

Fisierele intermediare (handoff-uri intre sesiuni, diff-uri deja aplicate) au
fost sterse inainte, nu versionate: ce era durabil in ele a intrat in antetele
fisierelor de test la care se refereau.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
2026-08-11 22:17:17 +03:00

94 lines
4.5 KiB
Markdown

# S5 — agatarea scrierii de articole in cele doua puncte de intrare
Implementare, 09.08.2026 seara. Atinse: `COMUN\clase\ofacturare_comun.vc2`,
`COMUN\clase\comun.vc2` (+ write-back in binare). Niciun alt fisier atins, niciun commit.
## Ce s-a facut
In ambele metode, imediat dupa `Endif`-ul care inchide apelul
`pack_contafin.finalizeaza_modificare_nota` si inainte de `do_inchide_tranzactie` (tranzactia
manuala e inca deschisa acolo):
- `frm_facturi.do_editare_factura` — `ofacturare_comun.vc2:3828-3830` (intre vechile `:3827`/`:3828`,
deplasate cu +3 linii de insertie).
- `afisjurcom.do_modifica` — `comun.vc2:2491-2493` (intre vechile `:2490`/`:2538`; inserat imediat
dupa `Endif`, inaintea blocului de cod comentat existent, nedeplasat).
Bloc identic in ambele (o singura conditie, fara `Else`, ca sa nu strice `lnSucces` cand garda nu
trece):
```foxpro
If lnSucces > 0 And "OFACTURARE_EDITARE" $ Upper(Set("Procedure")) And Used('tvanz') And Reccount('tvanz') = 1
lnSucces = Iif(ScrieArticoleFacturaEditate(tvanz.id_vanzare), 1, -1)
Endif
```
`ScrieArticoleFacturaEditate` (definita de alt agent in `COMUN\programe\ofacturare_editare.prg:468`,
verificata la momentul scrierii apelului) intoarce logic si include deja pasul de recalcul
(`pack_facturare.recalculeaza_totaluri_vanzari`) — nu mai e nevoie de un apel separat din VFP, cum
sugera o formulare anterioara a planului.
## De ce asa
- `-1`, nu `0`, la esec — garda de commit e `Iif(lnSucces<0,2,1)`.
- Garda pe `"OFACTURARE_EDITARE" $ Upper(Set("Procedure"))` pusa si in `ofacturare_comun.vc2`
(desi acolo `ofacturare_editare.prg` e mereu inregistrat, ROAFACTURARE fiind singurul consumator),
pentru simetrie cu `comun.vc2`, unde e obligatorie (fisierul nu exista in `SET PROCEDURE` pe
ROACONT/ROAGEST).
- `Used('tvanz') And Reccount('tvanz') = 1` inainte de a citi `tvanz.id_vanzare` — formularul e deja
`Release`-uit la acest punct, dar cursorul supravietuieste; fara garda, `tvanz.id_vanzare` ar arunca
eroare de alias daca pagina de articole n-a fost activa.
- Un singur `If` fara `Else`: cand oricare conditie e falsa, blocul se sare complet si `lnSucces`
ramane neschimbat (comportamentul de dinainte de modificare).
## Cens de octeti (inainte / dupa, identic pe caracterele >=0x80)
| Fisier | octeti >0x7F inainte | octeti >0x7F dupa | `EF BF BD` | LF izolat |
|---|---|---|---|---|
| `ofacturare_comun.vc2` | 12 | 12 | 0 | 0 |
| `comun.vc2` | 1 | 1 | 0 | 0 |
Editare facuta byte-safe (PowerShell, round-trip `GetEncoding(1252)`, text nou strict ASCII) —
niciun octet existent atins.
## Write-back
Ambele `txt2vcx.ps1 -AllowComun` — fidelity-check trecut, binare cu mtime nou:
- `ofacturare_comun.vcx`/`.vct` — OK.
- `comun.vcx`/`.vct` — OK (fisier mare, ~330 KB text; write-back a durat >120s, rulat in fundal,
finalizat cu succes).
## Testare
**Testul de garda** (`test_page3_articole.prg`, ultimul caz din suita: scoate
`ofacturare_editare.prg` din `SET PROCEDURE`, verifica `PageCount=2`): **PASS**. Confirma ca in
ROACONT/ROAGEST, unde fisierul nu e inregistrat, blocul nou e complet inert — nu doar prin gardele
proprii, ci si prin faptul ca `ScrieArticoleFacturaEditate` nici nu ar fi rezolvabila acolo.
**Regresie**, rulata 09.08.2026 ~22:46-22:48, sub watchdog (`-AutoDismiss`, exit 0, zero dialoguri
pe toate):
| Suita | Rezultat | Baseline |
|---|---|---|
| `test_page3_articole` | 14 PASS / 2 FAIL | 14/2 (identic — cele 2 sunt artefactul headless cunoscut pe coloanele de grid) |
| `test_incarca_vanzare_din_nota` | 5/0 | 5/0 |
| `test_adauga_linie_articol` | 20/0 | 20/0 |
| `test_adauga_linie_valuta` | 16/0 | 16/0 |
| `test_ui_sterge_linie` | 8/0 | 8/0 |
| `test_verdict_act_rul` | 26/0 | 26/0 |
Toate cifrele identice cu baseline-ul dat — nicio regresie introdusa, nici de modificarea proprie,
nici de lucrarile paralele pe `omodificari.vc2` la ora rularii.
Cifrele s-au numarat din liniile `REZULTAT: N PASS / M FAIL` din fiecare log (`grep -c "PASS"/"FAIL"`
brut supra-numara cu 1, pentru ca linia `REZULTAT` insasi contine ambele cuvinte).
## Ce nu s-a testat
- Scrierea reala in Oracle prin noul apel (tranzactie -> `ScrieArticoleFacturaEditate` ->
`SELECT` de verificare -> rollback/commit) — nu face parte din aceasta livrare, ramane la pasul
de aplicare in `MARIUSM_AUTO` (nepornit inca, per `docs\handoff_s5.md`).
- Fluxul UI complet (click real pe butonul de editare, `frm_modific2024` deschis modal) — testele de
regresie folosesc harnessul headless existent, care nu exercita interactiunea reala de grid
(limitare documentata, nu introdusa aici).