docs: cercetarile comune trec in COMUN, reziduul #6 dispare, progres.md la zi

Curatenie ceruta dupa inchiderea lui #6. Folderul cercetare\ NU se putea sterge
in bloc: plan_13 se sprijina pe el cu 85 de trimiteri, deci e baza de dovezi a
planului aflat in lucru. Impartirea:

- 14 cercetari trans-proiect trec in COMUN\docs\cercetare\ - valuta si curs,
  TVA/VANZARI, consumatorii VANZARI din toata suita, integrarile #10/#11/#12,
  watchdog VFP, proiectarea Oracle a lui S5, view-ul VVANZARI_ARTICOLE. Nu sunt
  ale ROAFACTURARE, iar #10/#11/#12 se reiau chiar din ele.
- 20 de rapoarte de executie ale lui #6, nereferite de nimic viu, sterse.
- 91 raman, neatinse.

Trimiterile catre handoff-urile si diff-urile intermediare deja desfiintate au
fost curatate peste tot (39 de fisiere): 50 catre handoff-uri, 37 catre diff-uri
aplicate, plus caile celor mutate in COMUN. Zero trimiteri rupte ramase.

progres.md preia rolul de predare: ce ramane din #6 (cele sase documente
parazite, cele doua esecuri reale din S8 pe factura din aviz), cifrele de test
citite din log, si cele doua capcane de mediu platite - .FXP vechi executat in
locul .prg-ului, si GETFONT() care atarna un formular instantiat fara goApp.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
This commit is contained in:
2026-08-11 22:31:42 +03:00
parent fc9c3780df
commit b5a7108f34
73 changed files with 227 additions and 6757 deletions

View File

@@ -4,33 +4,63 @@
incheie. Planurile (`plan_0*.md`) spun *ce* e de facut; acesta spune *unde s-a ajuns*. Istoricul
sesiunilor nu se pastreaza aici — doar starea la zi, deciziile, faptele stabilite si datoriile.
Ultima actualizare: **10.08.2026, dupa-amiaza**. **S5 e TERMINAT, LIVRAT SI COMIS in git.**
**Decizia 42 (inclusiv discountul de antet) e IMPLEMENTATA si VERIFICATA, necomisa.** **S8 are acum
toate cele patru tipuri de sursa** — mai ramane matricea de editare.
Ultima actualizare: **11.08.2026, seara**. **Punctul #6 e practic terminat: S1-S7 si S9 sunt gata si
comise.** Ramane **S8** — si nu ca lipsa de acoperire, ci cu doua esecuri reale.
**PREDAREA CURENTA, pentru sesiunea noua: `docs\handoff_punct6_10082026_pm.md`** — se citeste
**prima**. Primul lucru de facut de acolo: **stergerea celor sase documente parazite** (`1051`, `1056`,
`1057`, `1058`, `1059`, `1060`) prin aplicatie.
**PREDAREA CURENTA e chiar acest fisier.** Handoff-urile intermediare intre sesiuni au fost
desfiintate (11.08.2026, decizia lui Marius) impreuna cu diff-urile deja aplicate; ce era durabil in
ele a intrat in antetele fisierelor de test sau in mesajele de commit. Nu mai cauta `handoff_*.md`.
Predarea anterioara, tot valabila pe reguli si comenzi: `docs\handoff_punct6_dupa_s5.md`. Dosarul de
livrare al lui S5: `docs\livrare_s5.md`. Jurnalul blocului (decizii 38-41, incidente):
`docs\handoff_s5.md`.
**De facut, in ordine:**
**Comis in git, pe ramura `punct6-s4-runda3`**: `COMUN` `1c42ae0` (13 fisiere), `ROAFACTURARE`
`316b6f7` (changelog **2.11.15** + `versiune_db.txt` pe `2026_08_09_02`). **Nefacute deliberat**:
`git push` si `svn commit` — publicare pe server, decizia lui Marius. Cele doua scripturi Oracle sunt
mutate in `D:\ROA\DATABASE\SCRIPTURI_CLAR\2026\08` cu `svn add` (status `A`, necomis).
1. **Stergerea celor sase documente parazite** (`1051`, `1056`, `1057`, `1058`, `1059`, `1060`) prin
aplicatie — ramasa din blocul de creare documente pentru S8.
2. **S8 — doua esecuri reale.** Pe „factura din aviz" (tip 4), din **ambele** puncte de intrare,
rulajele nu se refac pe nota noua (`Reccount(trul)=0`): `test_s8_matrice_surse.prg` da
**42 PASS / 2 FAIL**. Tot acolo, trei tipuri de sursa au fost sarite la ultima rulare (lista de
preturi `1048`, aviz `1052`, factura din contract `1055`), iar harnessul
`COMUN\utile\Teste\editare_factura\creeaza_documente_s8.prg` **nu a scris inca niciun document** —
capcanele de mediu (plaja de serii care chiar prinde, ordinea lui `mock_amessagebox`) sunt scrise
in antetul lui.
3. **Rebuild `roafacturare.exe`** din IDE si verificarea pe ecran, pe `1140895` / `1140921` — ambele
contin `IV93900901` (`id_articol = 3598545102`), adica exact cazul corectat pe 11.08.
4. **Punctele A si B** din `docs\rec_s4b_etapa2.md` — **deja implementate**, asteapta doar
confirmarea lui Marius. Nu sunt lucru ramas.
5. **`git push` nefacut** in ambele repo-uri (remote `romfast`) — decizia lui Marius.
**Starea la incheierea sesiunii — nimic periculos, verificat nu presupus**: zero procese `vfp9.exe`,
zero tranzactii Oracle deschise, write-back dovedit prin **reconversie si diff** pe toate cele trei
`.vc2` (nu pe mtime — `txt2vcx.ps1:300` il rescrie), `docs\verificare_s5_writeback.md`. Toti agentii
inchisi.
**Comis pe ramura `punct6-s4-runda3`, 11.08.2026**: `COMUN` `40a112a` (S4b etapa 2 — butonul,
dialogul `frm_sincronizare_articole`, `id_articol` de la `I` la `N(20)` in toate cele 6 locuri, si
doua `This.` -> `Thisform.` care faceau butonul „Adauga articol" sa dea eroare la orice click real) si
`93a2718` (harnessul S8 intra in versionare); `ROAFACTURARE` `40933df` (changelog 2.11.15) si
`d9f5ca4` (`docs\` intra in git). In SVN: **r18011** si **r18012**.
**Ce ramane din planul #6**: **S8** (matricea pe tipuri de sursa — se creeaza in dev documentele
lipsa) si **implementarea deciziei 42** (articolele raman vizibile, dar needitabile, cand documentul e
in eFactura). **S4b, S7 si S9 sunt GATA** (10.08.2026 — S4b inchis prin decizia 43, fara enumerarea
vechi -> nou). Plus verificarea pe ecran de Marius.
Detaliu si ordinea recomandata: `docs\handoff_punct6_dupa_s5.md`.
**Cifre de test, citite din log, nu din rapoarte**: `test_s4b_sincronizare` **42/0** (include cazul de
regresie `id_articol = 3598545102`, dovedit cu control negativ — cu campul `I` iese perechea
`Adaugare`+`Semnalare` in loc de `Modificare`), `test_s4b_dialog` **35/0**, `test_s7_rotunjire` **6/0**,
`test_s8_matrice_surse` **42 PASS / 2 FAIL**.
**Doua capcane de mediu platite pe 11.08, valabile pentru orice sesiune viitoare:**
- **`.FXP` vechi.** `vfp9.exe -A -T test.prg` poate executa **bytecode vechi** si „reusi" degeaba — o
rulare a reprodus identic logul dinainte de o editare deja scrisa pe disc. **Sterge `.FXP`-ul suitei
ca parte din comanda de rulare.** `SET PROCEDURE TO ...prg ADDITIVE` recompileaza corect, deci
suspiciunea priveste `.FXP`-ul suitei, nu al modulelor.
- **`GETFONT()`.** Un formular instantiat headless fara `goApp` ajunge in `_frmbase.Init` la
`goApp.ReadIni`; eroarea e doar logata, parametrul cade pe `.F.` si `accessibility` deschide un
dialog modal care atarna procesul si apare pe ecranul lui Marius. Fixul e **in harness**
(`PUBLIC goApp, gcAcces` + `Createobject("wzApplication")`), **nu** in `_frm_base.vc2` — clasa e
partajata de toata suita, iar in productie `goApp` exista mereu. Ruleaza mereu cu garda de timp.
**Documentatia, dupa curatenia din 11.08.2026**: `docs\` e acum versionat in **git si SVN** — era in
afara oricarui control de versiuni. In `docs\cercetare\` au ramas **91** de rapoarte: sunt baza de
dovezi a planului #13 (85 de trimiteri din `plan_13`), **nu le sterge**. Alte **14** cercetari
trans-proiect au trecut in `COMUN\docs\cercetare\` (valuta si curs, TVA/VANZARI, consumatorii
`VANZARI` in suita, integrarile #10/#11/#12, watchdog VFP, proiectarea Oracle a lui S5, view-ul
`VVANZARI_ARTICOLE`), iar 20 de rapoarte de executie ale lui #6 au fost sterse.
**Starea la incheierea sesiunii — verificat, nu presupus**: zero procese `vfp9.exe`, zero tranzactii
Oracle deschise (in acest bloc nu s-a atins Oracle), niciun fisier binar editat fara write-back,
ambii arbori git curati fata de commituri.
## S8 — VERIFICAT PE VENDING PRODUCTIE, 10.08.2026: nu deblocheaza avizul
@@ -173,7 +203,7 @@ Mecanismul de editabilitate per rand exista deja din S5 in `omodificari.vc2` —
conditie la nivel de formular.
**IMPLEMENTATA SI VERIFICATA, 10.08.2026** (agent `d42-efactura`, din alta sesiune; verificata pe disc de
orchestratorul acestei sesiuni). **Necomisa.** Diff: `docs\diff_d42_efactura_readonly.patch`. Raport:
orchestratorul acestei sesiuni). **Necomisa.** Diff: diff aplicat (sters). Raport:
`docs\cercetare\rec_d42_efactura.md`. Forma implementata: flag `lArticoleReadOnly` pus in
`frm_modific2024.Show` (`:14789-14813`), impins peste `.When`-urile existente din S5
(`:16550`, `:16557`, `:16571`, `:16588`), `cmdAdaugaArticol`/`cmdStergeArticol.Enabled` plus garda
@@ -329,7 +359,7 @@ editare factura de vanzare" + 2 puncte in „Implicatii practice". Acopera condi
puncte de intrare cu garzile lor, secventa de scriere in tranzactia manuala unica, cei 4 pasi din
`ScrieArticoleFacturaEditate`, `recalculeaza_totaluri_vanzari`, view-ul `VVANZARI_ARTICOLE` si
comportamentul gridului. Regula deciziei 38 e scrisa **ca regula**, fara numarul deciziei, conform
conventiei de comentarii. Diff: `docs\diff_s9_flux_nota_jurnal.patch`. Raport:
conventiei de comentarii. Diff: diff aplicat (sters). Raport:
`docs\cercetare\rec_s9_documentatie.md`.
**Verificat de orchestrator pe disc**, nu din raport: modificat **doar** fisierul de documentatie
@@ -347,7 +377,7 @@ documentatie e corect. **Tipar de retinut**: constatarea „nu exista X in metod
## #6 / S5 — scrierea sumelor editate in Oracle, TERMINAT SI COMIS 10.08.2026
**Starea completa a blocului e in `docs\handoff_s5.md`** — se citeste inaintea acestei sectiuni.
**Starea completa a blocului e in handoff intermediar (sters)** — se citeste inaintea acestei sectiuni.
Aici doar ce trebuie sa stie o sesiune noua din prima:
- **Codul e scris integral si write-back-ul e facut** pe toate cele patru fisiere atinse:
@@ -359,19 +389,19 @@ Aici doar ce trebuie sa stie o sesiune noua din prima:
(view-ul, cu `ID_VANZARE_SET` si `PRET_ACHIZITIE`). Pachetul e `VALID`, zero erori.
`versiune_db.txt` = **`2026_08_09_02`**. Scripturile sunt in `docs\`, **nu** in `SCRIPTURI_CLAR`.
- **Deciziile 38-41** (ordonarea scrierii, liniile de set, `PRET_ACHIZITIE`, discountul ca parametru)
sunt in `handoff_s5.md`. **Decizia 38 corecteaza planul S5**: recalculul se apeleaza din VFP, nu
sunt in handoff intermediar (sters). **Decizia 38 corecteaza planul S5**: recalculul se apeleaza din VFP, nu
din `finalizeaza_modificare_nota`, altfel ar calcula totalurile pe liniile dinainte de editare.
- **Runda 2 pe grid, INCHISA** (`s5-grid`, 09.08.2026 tarziu): cele trei corectii de code-review sunt
in binar. **Write-back verificat prin reconversie si diff, nu pe mtime** — textul regenerat din
binar e identic octet cu octet cu `.vc2` (`txt2vcx.ps1:300` rescrie mtime-ul textului, deci mtime
nu dovedeste nimic). O a patra constatare s-a dovedit **nerealizabila** pe codul de acum si nu se
repara — detalii si conditia care ar activa-o, in `handoff_s5.md`.
repara — detalii si conditia care ar activa-o, in handoff intermediar (sters).
- **Regresia e la baseline pe toate cele sase suite**, cifre numarate din loguri de orchestrator,
toate rulate **dupa** write-back (binar 23:15:50): `test_page3_articole` **14/2** (23:19:52),
`test_adauga_linie_articol` **20/0**, `test_adauga_linie_valuta` **16/0**, `test_ui_sterge_linie`
**8/0**, `test_verdict_act_rul` **26/0**, `test_incarca_vanzare_din_nota` **5/0** (23:27:52).
- **Acoperirea cu teste, LIVRATA** (`s5-teste`, `docs\cercetare\rec_s5_teste.md`,
`docs\diff_s5_teste.patch`): suita noua headless `test_s5_validari_articole.prg` **35 PASS / 0 FAIL**
diff aplicat (sters)): suita noua headless `test_s5_validari_articole.prg` **35 PASS / 0 FAIL**
(validarile din `inainte_de_do_termin`, garda de no-op, SQL-ul din `ScrieArticoleFacturaEditate` cu
mock pe `goExecutor`, fara Oracle) si suita noua pe formular vizibil
`test_ui_s5_grid_pret_achizitie.prg` **14 PASS / 0 FAIL** (15 coloane, linie de set needitabila cu
@@ -427,7 +457,7 @@ Aici doar ce trebuie sa stie o sesiune noua din prima:
- **Capcana platita, sa nu se repete**: exportul `all_source` cu `linesize` prea mic **rupe linii
lungi prin mijlocul identificatorilor** si corupe tacut orice script construit din el. Un script
de pachet se face de la **ultimul script aplicat din `SCRIPTURI_CLAR`**, nu de la un export.
Detalii in `handoff_s5.md`; `COMUN\docs\oracle_export.md` a fost corectat.
Detalii in handoff intermediar (sters); `COMUN\docs\oracle_export.md` a fost corectat.
## COMIS PE BRANCH `punct6-s4-runda3` — 09.08.2026, NEIMPINS, NEINTRAT IN SVN
@@ -458,7 +488,7 @@ Cand documentul e in valuta (`tvanz.in_valuta = 1`), dialogul `frm_articol_factu
`frm_facturare_articole2` folosesc **activ, in productie**, aceeasi ramura `tip_valuta = 1`, deci
orice atingere a codului dialogului ar fi fost o regresie potentiala pe formularul de compunere.
Premisa initiala a deciziei 35 (ca ar fi nevoie de `poDate.in_valuta`/`zi_curs`/`id_valuta`) era
gresita — vezi corectia de la decizia 35 si `docs\handoff_decizia35_valuta_dialog.md`.
gresita — vezi corectia de la decizia 35 si handoff intermediar (sters).
**Verificat de orchestrator pe disc** (cifre numarate din loguri): `test_adauga_linie_valuta.prg`
extins la **16 PASS / 0 FAIL** — acopera **ambele** ramuri, scenariul A (intrare in RON, conversie la
@@ -470,8 +500,8 @@ headless de la datoria 7), `test_incarca_vanzare_din_nota` **5/0**, `test_adauga
**20/0**, `test_ui_sterge_linie` **8/0**, `test_verdict_act_rul` **26/0**. Rulari 18:57-18:59, toate
**dupa** ultima editare de cod (`omodificari.vc2` 18:53:21, `ofacturare_editare.prg` 18:52:59).
Cens de octeti `2 aa / 2 e3 / 2 fe`, zero `EF BF BD`. Text si binar sincrone, **necomis**.
Diff: `docs\diff_s4_valuta_dialog.patch` + `docs\diff_s4_valuta_dialog_prg.patch` +
`docs\diff_s4_valuta_dialog_test.patch`. Raport: `docs\cercetare\rec_s4_valuta_dialog.md`.
Diff: diff aplicat (sters) + diff aplicat (sters) +
diff aplicat (sters). Raport: `docs\cercetare\rec_s4_valuta_dialog.md`.
**Ramas de verificat pe ecran de Marius** (netestabil headless, dialogul e modal `Show(1)`): tastarea
reala in caseta de pret pe un document in valuta, eticheta de valuta afisata, si interactiunea cu
@@ -508,7 +538,7 @@ aplica", ascundere pe transfer/custodie, alegere cont pe grupa de tip, corectie
nestocata). Cens de octeti: stricat si reparat (acelasi tipar cunoscut), identic cu baseline la
final. **Scris in binar** (write-back OK dupa un fidelity-check picat pe formatarea liniilor goale,
rezolvat prin adoptarea textului regenerat), **necomis**. Diff:
`docs\diff_s4_runda3c2_verdict.patch` + `docs\diff_s4_runda3c2_ofacturare_editare.patch`.
diff aplicat (sters) + diff aplicat (sters).
**Reverificat de orchestrator pe starea de pe disc** (nu din raportul agentului): cifrele numarate
din loguri, nu citite din raport — toate se confirma, inclusiv cele 18/0 ale suitei noi. Rularile
@@ -535,7 +565,7 @@ valoare. Pe `cod=1140895`: `Total ACT` = `Total RUL` = **1924.59**, verdict **si
(asertia veche care astepta "divergent" a fost inversata, cu verificare explicita a cifrei).
Regresie neschimbata + suita dedicata **26 PASS / 0 FAIL** (18 vechi + 8 noi: excludere
`id_tip_rulaj=3`, includere `id_tip_rulaj=0`, cele trei conturi rate/contract). Scris in binar,
necomis. Diff: `docs\diff_s4_runda3c3_decizii_36_37.patch` + `docs\diff_s4_runda3c3_test.patch`.
necomis. Diff: diff aplicat (sters) + diff aplicat (sters).
**Reverificat de orchestrator pe disc**: cifre numarate din loguri (26/0 pe suita dedicata, regresie
`14/2 · 5/0 · 20/0 · 6/0 · 8/0`), rulari 18:40-18:42 **dupa** ultima editare (18:34:03); filtrul din
cod e `SUM (Nvl(cant,0)+Nvl(cante,0))*Nvl(pretvtva,0) FOR Nvl(sters,0)=0 AND Nvl(id_tip_rulaj,0)=0`
@@ -549,7 +579,7 @@ inchide capcana prefixului `411`/`4111` mai bine decat un `==` repetat; (3) exis
**Ce urmeaza** (stabilit de Marius, 09.08.2026): **intrarea directa in valuta in
`frm_articol_factura`** — decizia 35. **Premisa deciziei a fost corectata** intre timp: nu cere
atins `ofacturare.vc2` (vezi decizia 35 mai jos si `docs\handoff_decizia35_valuta_dialog.md`).
atins `ofacturare.vc2` (vezi decizia 35 mai jos si handoff intermediar (sters)).
Ultima actualizare anterioara: **09.08.2026**, dupa **cele doua defecte de pe pagina de articole
(culoare + valuta), REZOLVATE**.
@@ -585,8 +615,8 @@ din log, nu din raport**, si dovada ca rularea a ajuns la capat e linia de `REZU
Raportate dupa livrarea sub-blocului B partea 2 (mai jos). Ambele in `COMUN\clase\omodificari.vc2`
(+ `ofacturare_editare.prg` pentru al doilea). Write-back facut (fidelity check OK), text si binar
sincrone, **necomise**. Backup dinaintea fixului: `omodificari.vc2.pre_fix_culoare.bak`,
`ofacturare_editare.prg.pre_fix_culoare.bak`. Diff: `docs\diff_s4_fix_culoare_valuta.patch` +
`docs\diff_s4_fix_culoare_valuta_ofacturare_editare.patch`.
`ofacturare_editare.prg.pre_fix_culoare.bak`. Diff: diff aplicat (sters) +
diff aplicat (sters).
**Reverificat de orchestrator pe starea finala de pe disc**: `ofacturare_editare.prg` fusese modificat
la 17:08:48, adica **la 40 de secunde dupa ultima rulare de test** (17:08:08), deci starea livrata nu
era acoperita de nicio suita. Rerulat `test_page3_articole.prg` pe starea de pe disc: **14 PASS /
@@ -675,7 +705,7 @@ anterioare** (stergerea logica, sub-blocul B partea 1) — nereparat, predat mai
octeti stricat si reparat de 2 ori in sesiune (acelasi tipar cunoscut), identic cu baseline la
final: `2 aa/2 e3/2 fe`, zero `EF BF BD`. **Scris in binar (write-back OK dupa 2 fidelity-check-uri
picate pe ordine, rezolvate prin adoptarea textului regenerat), necomis.** Diff:
`docs\diff_s4_runda3b2_adaugare.patch` (+ `docs\diff_s4_runda3b2_ofacturare_editare.patch`).
diff aplicat (sters) (+ diff aplicat (sters)).
Raport: `docs\cercetare\rec_s4_runda3b2.md`.
Inaintea acesteia, in aceeasi zi: **sub-blocul C, PARTIAL — bara de totaluri + discount de
@@ -702,7 +732,7 @@ acelasi tipar de infrastructura documentat mai jos, nu problema de cod). Cens de
2 fe`, zero `EF BF BD`, identic inainte/dupa (stricat si reparat de mai multe ori in timpul editarii,
capcana deja cunoscuta). **Scris in binar (write-back OK dupa 3 rulari, fidelity-check picat pe
ordine de fiecare data, rezolvat prin adoptarea textului regenerat), necomis.** Diff:
`docs\diff_s4_runda3c_totaluri.patch` (+ `docs\diff_s4_runda3c_ofacturare_editare.patch`, izolat).
diff aplicat (sters) (+ diff aplicat (sters), izolat).
Raport: `docs\cercetare\rec_s4_runda3c.md`. **Verdictul de corelatie cu `ACT`/`RUL` NU e facut** —
formulele sunt deja stabilite si verificate pe date in `rec_suma_act.md`, predat ca partea 2 a
sub-blocului C (contul pe tip, filtrul `cod+an+luna`, indicatorul cu 3 stari, threading `an`/`luna`
@@ -714,7 +744,7 @@ Inaintea acesteia, in aceeasi zi: **sub-blocul B, PARTIAL — doar stergerea de
e facuta** — sub-blocul s-a dovedit prea mare pentru un context si a fost impartit, cu aprobarea
briefingului. Cercetarea de contract pentru adaugare (proprietati `poArticol`/`poDate` citite de
dialog, cum se ocoleste `gnScadereStoc`, ce lipseste inca — picker de articol) e completa si
predata in `docs\handoff_s4_runda3b_adaugare.md`. Testat: regresie neschimbata (`14/2`, `5/5`),
predata in handoff intermediar (sters). Testat: regresie neschimbata (`14/2`, `5/5`),
plus test UI nou dedicat (`test_ui_sterge_linie.prg`). **Atentie la cifra**: logul are **6 PASS /
0 FAIL**, nu 7/7 cum s-a raportat initial — rularea s-a **taiat la `READY`**, adica exact la
handshake-ul de captura, si n-a ajuns la linia de `REZULTAT`. Dovedit: butonul exista si e vizibil,
@@ -724,13 +754,13 @@ dupa handshake si n-a mai rulat. **Captura de ecran n-a putut fi obtinuta** (`vf
desi procesul chiar a rulat testul complet pana la capat de fiecare data — problema de
infrastructura/masina ocupata, nu de cod; detalii in raport). **Scris in binar (write-back
FACUT dupa un fidelity-check picat pe ordine, rezolvat prin adoptarea textului regenerat),
necomis.** Diff: `docs\diff_s4_runda3b_linii.patch`. Raport: `docs\cercetare\rec_s4_runda3b.md`.
necomis.** Diff: diff aplicat (sters). Raport: `docs\cercetare\rec_s4_runda3b.md`.
Inaintea acesteia, in aceeasi zi: **extinderea la cei 5 apelanti `frm_modific2024` + linia din
`roagest.prg`** — helper nou `PregatesteArticoleFacturaEditare` in `ofacturare_editare.prg`, apelat
gardat inainte de `Createobject` la `afisjurcom.do_modifica` (registrul jurnal, viu in ROACONT),
`anaf_efactura.importmodifica` si cele doua `.sc2` de import; linia `SET PROCEDURE TO
ofacturare_editare.prg` adaugata in `roagest.prg`. Detalii: `docs\cercetare\rec_s4_apelanti.md`,
diff `docs\diff_s4_apelanti_frm_modific2024.patch`. Mai devreme: **rezolvarea datoriei 6** — baza
diff diff aplicat (sters). Mai devreme: **rezolvarea datoriei 6** — baza
de regresie #6/S4 e din nou solida, iar suitele nu mai hardcodeaza documente: si-l descopera
singure, deci nu mai mor la urmatoarea realocare de `cod`. Mai devreme inca: doua defecte de
editare pe pagina de articole (coloanele cantitate/pret needitabile, valoare defazata la bifa
@@ -774,7 +804,7 @@ nevoie de alta sursa pentru plafon.
## #6, runda 1 (S1-S3) — implementat 08.08.2026, corectii 08.08.2026
Diff: `docs\diff_consolidat_runda1_3.patch` + `docs\diff_runda4_scoate_garda.patch` (netrimise inca
Diff: diff aplicat (sters) + diff aplicat (sters) (netrimise inca
la commit, asteapta review). Patch-urile per runda raman pe disc pentru istoric.
- **`COMUN\clase\ofacturare_comun.vc2`**, clasa `frm_facturi`: metoda `do_editare_factura`
@@ -792,7 +822,7 @@ la commit, asteapta review). Patch-urile per runda raman pe disc pentru istoric.
`Createobject('frm_modific2024')` pica cu "Class definition not found" chiar si in productie):
`SET CLASSLIB TO omodificari.vcx additive`. ROAFACTURARE nu incarcase niciodata aceasta clasa —
se foloseste azi doar din ROACONT/ROAGEST (registrul jurnal).
- **Corectii de review aplicate 08.08.2026** (`docs\diff_runda2_corectii.patch`):
- **Corectii de review aplicate 08.08.2026** (diff aplicat (sters)):
- `IncarcaCursoareModificareNota` propaga acum esecul: pe eroare Oracle la interogarea `vrul_tot` sau
`vrul_obinv_tot` face `RETURN .F.` (curatand cursoarele deschise pana atunci), nu mai continua pana la
`RETURN .T.` final ca si cum ar fi reusit. **Corectie de premisa fata de constatarea initiala**:
@@ -805,7 +835,7 @@ la commit, asteapta review). Patch-urile per runda raman pe disc pentru istoric.
in `afisjurcom.do_modifica` la `buton=1`) — corect prin constructie, pentru ca acum ajunge acolo doar
daca incarcarea a reusit integral.
- **Garda pe `id_set`: adaugata in runda 2, rafinata in runda 3, SCOASA DE TOT in runda 4**
(`docs\diff_runda4_scoate_garda.patch`, decizia 24). Istoric, ca sa nu se reia: premisa ei era ca
(diff aplicat (sters), decizia 24). Istoric, ca sa nu se reia: premisa ei era ca
`PACK_FACTURARE.scrie_discount` scrie randurile `DISCOUNT`/`TVA DISCOUNT` cu `id_set + 5`, deci o
nota poate avea 2 `id_set`. **Fals la destinatie**: `cumuleaza_note_act_temp` normalizeaza inainte
de `ACT`, offsetul e tranzitoriu. Pe date: 558 de note legate de `VANZARI` cu un singur `id_set`,
@@ -895,7 +925,7 @@ sincronizate**, dar **fara diff livrat si fara raport** — runda nu e inchisa.
inofensiv; zero `CREATE SQL VIEW` / `USE ... VIA` in toata ierarhia de clase.
- **B.2 (marcaje stare linii) nu e in scope runda 1** — grid-ul e strict readonly; marcajele sunt runda 2.
- **Runda 1 e INCHISA pe cod si testata**, asteapta doar review-ul lui Marius. Diff:
`docs\diff_s4_runda1_page3.patch` (2 fisiere, fata de backup-urile de dinainte de S4). Raport:
diff aplicat (sters) (2 fisiere, fata de backup-urile de dinainte de S4). Raport:
`docs\cercetare\rec_s4_runda1.md`. Instrumentarea de depanare a fost scoasa din suita si suita
rerulata dupa curatare — 7 PASS, zero erori. `test_baseline_isolation.prg` sters (temporar prin
design, si cu concluzie nula: testa copia ROACONT). **Fara commit — se asteapta aprobarea.**
@@ -935,14 +965,14 @@ sincronizate**, dar **fara diff livrat si fara raport** — runda nu e inchisa.
`cod=1139934`->`id_vanzare=882` si un test de garda care scoate `ofacturare_editare.prg` din
`SET PROCEDURE` si verifica `PageCount=2`). Verificat separat (test dedicat) ca `SCAN...ENDSCAN` din
`IncarcaVanzareDinNota` continua corect chiar daca IncarcaVanzareNota schimba workarea in interiorul
buclei. Write-back `.vc2`->binar OK (fidelity check trecut). Diff: `docs\diff_s4_runda2_view_pozitionare.patch`.
buclei. Write-back `.vc2`->binar OK (fidelity check trecut). Diff: diff aplicat (sters).
Raport: `docs\cercetare\rec_s4_runda2.md`. **Fara commit — asteapta review.**
- **ANCORAREA COLOANELOR — REZOLVATA prin view Oracle dedicat** (decizia 26, 08.08.2026).
`VVANZARI_ARTICOLE` e **creat si validat** pe `MARIUSM_AUTO` (`VALID`, 21 de coloane, verificat independent prin
`sqlplus` dupa aplicare): `id_vanzare` + cele 20 consumate azi, valori **RAW**, fara conversie
valutara, fara filtru `sters` (apelantul filtreaza, ca la `vact_tot`/`vrul_tot`). Script:
`D:\ROA\DATABASE\SCRIPTURI_CLAR\2026\08\ff_2026_08_08_01_COMUN_VVANZARI_ARTICOLE.sql` (CRLF pur, idempotent,
**necomis in SVN**). Proiectarea: `docs\cercetare\rec_view_articole_vanzare.md`.
**necomis in SVN**). Proiectarea: `COMUN\docs\cercetare\rec_view_articole_vanzare.md`.
- **`id_vanzare` era omis** din `SELECT`-ul vechi desi e cheia de filtrare — omisiune reala, corectata.
- **`FACT_VFACTURI_DETALII` exista si a fost respins motivat**: recalculeaza `pret`/`discount_unitar`
la cursul curent, pentru tiparire. Editarea are nevoie de valorile stocate, ca S5 sa scrie inapoi
@@ -994,7 +1024,7 @@ sub-blocuri mici, cu cate un agent proaspat, ca review-ul sa ramana mic.
**Sub-blocul A e SCRIS IN BINAR** (08.08.2026). Contrar a ce scria aici, write-back-ul s-a facut:
`omodificari.vct` contine `cSubtotalArt`, `lmodificat`, `cPretCuTvaArt`, iar textul are
`ColumnCount = 14`. Fidelity-check-ul picat descris in `docs\handoff_s4_runda3a.md` a fost depasit
`ColumnCount = 14`. Fidelity-check-ul picat descris in handoff intermediar (sters) a fost depasit
(remediul era ordinea `Header1` dupa `_checkbox1` la `cPretCuTvaArt`). Ramane necomis, ca tot restul.
Doua rezultate stabilite in runda 3A, de nu mai reluat:
@@ -1019,7 +1049,7 @@ Ultimul camp se numeste **`valoare`** (fost `subtotal`), vezi sectiunea de defec
## #6, doua defecte de AFISARE pe pagina de articole — REZOLVATE 08.08.2026, dovedite pe ecran
Raportate de Marius dupa testarea pe ecran. Ambele in `frm_modific2024`. Write-back facut, text si
binar sincrone, **necomise**. Diff: `docs\diff_fix_grid_tvd_blank.patch`. Raport:
binar sincrone, **necomise**. Diff: diff aplicat (sters). Raport:
`docs\cercetare\rec_fix_grid_tvd_blank.md`.
- **Grid-ul de articole aparea COMPLET GOL** (nici macar coloane), desi `tvd` avea randuri. Cauza:
@@ -1078,7 +1108,7 @@ totaluri (deciziile 20 si 25).
Raportate de Marius dupa testarea pe ecran a rundei 3A, in `COMUN\clase\omodificari.vc2`
(`frm_modific2024`) si `COMUN\programe\ofacturare_editare.prg`. Write-back facut (fidelity check
trecut), text si binar sincrone, **necomise**. Diff: `docs\diff_fix_grid_editabil_subtotal.patch`.
trecut), text si binar sincrone, **necomise**. Diff: diff aplicat (sters).
Backup-uri dinaintea fixului: `COMUN\clase\omodificari.vc2.pre_fix3a.bak`,
`COMUN\programe\ofacturare_editare.prg.pre_valoare.bak`.
@@ -1128,7 +1158,7 @@ recreeaza cursorul.
## #6, S4 runda 3 sub-blocul B — stergerea de linii GATA, adaugarea predata mai departe, 09.08.2026
Detalii complete: `docs\cercetare\rec_s4_runda3b.md` (implementare + testare) si
`docs\handoff_s4_runda3b_adaugare.md` (cercetarea de contract pentru partea neinceputa).
handoff intermediar (sters) (cercetarea de contract pentru partea neinceputa).
- **Stergere logica** — buton nou `cmdStergeArticol` pe `pgfArticole.PAGE3`
(`omodificari.vc2:12260-12274`), `Click` comuta `tvd.sters` intre 0/1 si seteaza
@@ -1171,7 +1201,7 @@ Detalii complete: `docs\cercetare\rec_s4_runda3b.md` (implementare + testare) si
activ al lui Marius: RustDesk, VS Code, PL/SQL Developer, Explorer), nu de cod. Recomandare:
o trecere de confirmare vizuala cand masina e libera, inainte de commit — nu blocheaza
livrarea.
- Diff: `docs\diff_s4_runda3b_linii.patch` (162 linii, scopat strict pe aceasta lucrare —
- Diff: diff aplicat (sters) (162 linii, scopat strict pe aceasta lucrare —
reconstruit dintr-un backup `.pre_runda3b.bak` obtinut prin reversul exact al editarilor,
pentru ca nu s-a luat backup INAINTE de prima editare).
@@ -1273,9 +1303,9 @@ s-a facut cu `COMUN\utile\curatenie.ps1` (47 de intrari: patch-uri, handoff-uri,
`utile/Teste/editare_factura/test_page3_articole.prg`, plus cele 3 fisiere `.md` din `docs\`
(encoding). `svn status` arata in plus binarele `clase\ofacturare_comun.vcx`/`.vct` si
`clase\omodificari.vcx`/`.VCT` ca `M`. Arborele ROAFACTURARE principal e curat. Diff-urile de review:
`docs\diff_s4_fix_butoane_crsjtva.patch`, `docs\diff_reguli_encoding.patch`,
`docs\raport_sweep_encoding.md`, `docs\diff_fix_grid_tvd_blank.patch`,
`docs\diff_fix_grid_editabil_subtotal.patch`.
diff aplicat (sters), diff aplicat (sters),
`docs\raport_sweep_encoding.md`, diff aplicat (sters),
diff aplicat (sters).
### Copiile de `COMUN` din ROACONT si ROAGEST: aduse la r18010 (08.08.2026)
@@ -1290,12 +1320,12 @@ pierdut; cer `svn resolve`, decizia e a lui Marius. Au ramas modificate local do
## #6, S4 runda 2 — ce contine, pe scurt
Starea completa, inventarul si ce ramane: **`docs\handoff_sesiune_08082026_e.md`**. Pe scurt: view-ul
Starea completa, inventarul si ce ramane: **handoff intermediar (sters)**. Pe scurt: view-ul
`VVANZARI_ARTICOLE` consumat cu `select *`, pozitionarea pe triplete (decizia 27), garda pentru ROACONT/ROAGEST,
`AMESSAGEBOX` pe erorile Oracle, structura unica pentru cursorul `tvd`. Validata pe starea curenta,
dupa redenumirea view-ului si taierea comentariilor: fidelity check trecut, suita **10/10** si
**5/5** la data validarii (cifrele nu mai sunt valabile azi — vezi datoria 6), exit 0, zero
dialoguri. Diff: `docs\diff_s4_runda2_view_pozitionare.patch`.
dialoguri. Diff: diff aplicat (sters).
`vvanzari_detalii` / `vvanzari_detalii_tot` **nu se extind** — motivele pe date, in handoff: 11 coloane
lipsa, cost de 3.7x fata de `VVANZARI_ARTICOLE`, si `select * from vvanzari_detalii_tot` in `oproceduri_listari.prg`
@@ -1313,10 +1343,10 @@ din ~10 produse.
2. **Build ROAAUTO, la Marius**: rebuild din IDE + test UI pe un deviz real — fara el corectia S7 din
#8 n-are efect. Partea ROAFACTURARE e inchisa (build + deploy 2.11.14, 08.08.2026).
**Agentul nu atinge `.PJX`/`.PJT`/`.exe`.**
3. **Changelog ROAAUTO** — textul propus e in `docs\cercetare\rec_s10_s12.md`, neaplicat in
3. **Changelog ROAAUTO** — textul propus e in `COMUN\docs\cercetare\rec_s10_s12.md`, neaplicat in
`changelog_roaauto.txt`.
4. **Curatarea tabelei `VERSIUNE`** de numele vechi de scripturi (`_02`..`_06`), cu inregistrari
multiple din aplicarile succesive. `docs\cercetare\s10_curata_versiune.sql`, de extins cu numele
multiple din aplicarile succesive. `COMUN\docs\cercetare\s10_curata_versiune.sql`, de extins cu numele
vechi. Fara impact functional, doar istoric zgomotos.
5. **Puncte nedecise de la #8, niciunul blocant**:
- `tip=1` cu `id_comanda` — 16 facturi pe productie care n-ar trebui sa aiba;
@@ -1324,7 +1354,7 @@ din ~10 produse.
afisa un `/` singur. Zero documente azi in ambele scheme;
- cele 620 de randuri cu `ID_VALUTA` NULL — normalizarea la `0`/`1`;
- **propagarea corectiei `xmlefactura.prg`** in cele ~16 cai ramase din alte produse ROA.
Inventarul: `docs\cercetare\rec_consumatori_vanzari.md`. Grup A (byte-identice, acelasi patch):
Inventarul: `COMUN\docs\cercetare\rec_consumatori_vanzari.md`. Grup A (byte-identice, acelasi patch):
ROAACNPRO, ROAAUTO, ROACONT, ROACONTRACTE, ROADEF, ROAGEST, ROAIMOB, ROAREGISTRATURA, ROARES,
ROASTART. Grup B (fisier divergent, acelasi tipar la alta linie): OUTPUT/ROACONT `:350`,
ROACONIMPORT / ROAEFACTURA / ROAPRINT / ROASITFIN `:356`, ROAPRODUCTIE `:326`. Grup C (fara
@@ -1346,7 +1376,7 @@ din ~10 produse.
acoperite pe ecran de `test_ui_fix_editabil_subtotal.prg` (11/11). O asertie s-a **intarit**
(cazul B verifica acum numarul real de linii, nu `-1`), niciuna nu s-a slabit. Cifra veche
`7 PASS / 3 FAIL` din acest fisier era stale — numara doar cele 10 asertii de la runda 2.
Raport: `docs\cercetare\rec_datoria6_baza_regresie.md`. Diff: `docs\diff_datoria6_suite_regresie.patch`.
Raport: `docs\cercetare\rec_datoria6_baza_regresie.md`. Diff: diff aplicat (sters).
**Necomis.** Neprobat pe alta schema decat `MARIUSM_AUTO`.
7. **REZOLVATA 08.08.2026 — se verifica pe ecran, cu formular vizibil.** Harness nou:
`COMUN\utile\Teste\editare_factura\vfp_ui_harness.ps1` (formular vizibil off-screen, `PrintWindow`,
@@ -1507,7 +1537,7 @@ din ~10 produse.
`poDate.in_valuta = 1` cere in plus `zi_curs` si `id_valuta`, validate intern de dialog, iar calea
**nu e testabila headless** (dialogul e modal, `Show(1)`) — verificarea trece prin
`vfp_ui_harness.ps1`, cu `-SyncDir` explicit.
**CORECTIE DE PREMISA, 09.08.2026** (`docs\handoff_decizia35_valuta_dialog.md`, verificat si de
**CORECTIE DE PREMISA, 09.08.2026** (handoff intermediar (sters), verificat si de
orchestrator pe cod): **`frm_articol_factura` nu citeste deloc `poDate.in_valuta` / `zi_curs` /
`id_valuta`** — singurele aparitii din intervalul clasei sunt **comentate** (`ofacturare.vc2:2088`,
`:2136`, ramura scoasa la v2.0.56). Ramura de valuta a dialogului e condusa integral de
@@ -1801,29 +1831,29 @@ Sursa `PACK_FACTURARE` se exporta din `MARIUSM_AUTO` (`all_source`), conform
| `plan_10` / `plan_11` / `plan_12` | amanate |
| `verificare_vfacturi.sql` | harnessul de regresie pentru cele doua view-uri |
| `plan_06_s4_proiectare.md` | proiectarea S4/S4b; C.1 rescrisa 08.08.2026, A.3 aliniata la decizia 19 |
| `diff_s4_runda1_page3.patch` | **diff-ul S4 runda 1, de revizuit** (`omodificari.vc2` + `ofacturare_editare.prg`) |
| diff aplicat (sters) | **diff-ul S4 runda 1, de revizuit** (`omodificari.vc2` + `ofacturare_editare.prg`) |
| `cercetare\rec_s4_runda1.md` | raportul rundei 1: ce s-a implementat, ce s-a testat, ce NU e acoperit |
| `cercetare\rec_review_ancorare_s4.md` | review-ul de ancorare a coloanelor (sursa deciziei 26) |
| `cercetare\rec_gotop_tact_s4.md` | blocantul `Go Top In tact`, confirmat pe date (sursa deciziei 27) |
| `cercetare\rec_view_articole_vanzare.md` | proiectarea `VVANZARI_ARTICOLE` + ce s-a respins |
| `cercetare\ff_view_articole_vanzare.sql` | copia de lucru a scriptului (originalul e in `SCRIPTURI_CLAR`) |
| `COMUN\docs\cercetare\rec_view_articole_vanzare.md` | proiectarea `VVANZARI_ARTICOLE` + ce s-a respins |
| `COMUN\docs\cercetare\ff_view_articole_vanzare.sql` | copia de lucru a scriptului (originalul e in `SCRIPTURI_CLAR`) |
| `cercetare\handoff_s4_runda1.md` | predarea agentului `s4-runda1`; detaliile blocajului „View Parameter" |
| `cercetare\rec_watchdog_vfp.md`, `handoff_propr_custom.md` | watchdog-ul VFP si regula `*p:` pentru proprietati noi |
| `COMUN\docs\cercetare\rec_watchdog_vfp.md`, handoff intermediar (sters) | watchdog-ul VFP si regula `*p:` pentru proprietati noi |
| `cercetare\rec_editare_factura.md`, `rec_modific2024.md` | #6 |
| `cercetare\rec_suma_act.md` | regula sumei din `ACT` pe tip de document (sursa lui C.1) |
| `cercetare\rec_pozitionare_actactan.md` | de unde se citesc `id_set`/`id_fact`/`id_factd` (runda 4) |
| `cercetare\rec_datoria6_baza_regresie.md` | realocarea de `cod` 1140888->1140895 si re-ancorarea suitelor pe descoperire |
| `diff_datoria6_suite_regresie.patch` | diff-ul celor doua suite + `descopera_caz_test.prg` |
| diff aplicat (sters) | diff-ul celor doua suite + `descopera_caz_test.prg` |
| `cercetare\rec_cele_41_facturi.md` | cine sunt cele 41 de la decizia 9; `cod=1138989` = nota dublata |
| `cercetare\rec_tva_vanzari.md`, `rec_pret_lazy.md` | #7 (fond) si #12 |
| `cercetare\rec_integrari.md` | #10, #11, #12 |
| `cercetare\rec_consumatori_vanzari.md` | inventarul celor ~16 cai `xmlefactura` (datoria 5) |
| `cercetare\rec_s10_s12.md` | textul propus pentru `changelog_roaauto.txt` (datoria 3) |
| `COMUN\docs\cercetare\rec_tva_vanzari.md`, `rec_pret_lazy.md` | #7 (fond) si #12 |
| `COMUN\docs\cercetare\rec_integrari.md` | #10, #11, #12 |
| `COMUN\docs\cercetare\rec_consumatori_vanzari.md` | inventarul celor ~16 cai `xmlefactura` (datoria 5) |
| `COMUN\docs\cercetare\rec_s10_s12.md` | textul propus pentru `changelog_roaauto.txt` (datoria 3) |
| `cercetare\rec_todos_done.md` | starea punctelor din `todos.txt` |
| `cercetare\rec_s4_runda3b.md` | sub-blocul B: stergerea de linii (implementare + testare) |
| `handoff_s4_runda3b_adaugare.md` | contractul `frm_articol_factura`/`poArticol`/`poDate`/`gnScadereStoc` pentru adaugarea de linii (neinceputa) |
| `diff_s4_runda3b_linii.patch` | diff-ul stergerii de linii |
| `cercetare\s10_curata_versiune.sql` | curatarea tabelei `VERSIUNE` (datoria 4) |
| handoff intermediar (sters) | contractul `frm_articol_factura`/`poArticol`/`poDate`/`gnScadereStoc` pentru adaugarea de linii (neinceputa) |
| diff aplicat (sters) | diff-ul stergerii de linii |
| `COMUN\docs\cercetare\s10_curata_versiune.sql` | curatarea tabelei `VERSIUNE` (datoria 4) |
`docs\` **nu e urmarit nici de git, nici de SVN**, si `COMUN\utile\curatenie.ps1` l-ar sterge la
curatenia dinainte de commit. Ce trebuie pastrat, se muta sau se comite.