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
4.5 KiB
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 dupaEndif, 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):
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, nu0, la esec — garda de commit eIif(lnSucces<0,2,1).- Garda pe
"OFACTURARE_EDITARE" $ Upper(Set("Procedure"))pusa si inofacturare_comun.vc2(desi acoloofacturare_editare.prge mereu inregistrat, ROAFACTURARE fiind singurul consumator), pentru simetrie cucomun.vc2, unde e obligatorie (fisierul nu exista inSET PROCEDUREpe ROACONT/ROAGEST). Used('tvanz') And Reccount('tvanz') = 1inainte de a cititvanz.id_vanzare— formularul e dejaRelease-uit la acest punct, dar cursorul supravietuieste; fara garda,tvanz.id_vanzarear arunca eroare de alias daca pagina de articole n-a fost activa.- Un singur
IffaraElse: cand oricare conditie e falsa, blocul se sare complet silnSuccesramane 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->SELECTde verificare -> rollback/commit) — nu face parte din aceasta livrare, ramane la pasul de aplicare inMARIUSM_AUTO(nepornit inca, perdocs\handoff_s5.md). - Fluxul UI complet (click real pe butonul de editare,
frm_modific2024deschis modal) — testele de regresie folosesc harnessul headless existent, care nu exercita interactiunea reala de grid (limitare documentata, nu introdusa aici).