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
This commit is contained in:
93
docs/cercetare/rec_s5_agatare.md
Normal file
93
docs/cercetare/rec_s5_agatare.md
Normal file
@@ -0,0 +1,93 @@
|
||||
# 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).
|
||||
Reference in New Issue
Block a user