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

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

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