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
94 lines
4.5 KiB
Markdown
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).
|