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
125 lines
8.2 KiB
Markdown
125 lines
8.2 KiB
Markdown
# Grid articole (pagina 3, frm_modific2024) blank la editare factura
|
|
|
|
## Defect raportat
|
|
|
|
La editarea unei facturi (`frm_modific2024`, pagina 3 "Articole factura"), pagina apare dar
|
|
grid-ul `grdArticoleFactura` apare gol.
|
|
|
|
## Ipoteza initiala (infirmata) si ce s-a dovedit real
|
|
|
|
Ipoteza initiala ("RecordSource-ul grid-ului se goleste la `Use In tvd`") a fost testata prima
|
|
data la nivel de date (headless) si infirmata: `RecordSource` a ramas `"tvd"` neschimbat. Grid-ul
|
|
insa NU se materializeaza deloc headless (`ColumnCount=0` e o datorie deja cunoscuta a mediului
|
|
de test), deci masuratoarea a fost neconcludenta, nu o infirmare reala a mecanismului.
|
|
|
|
Reprodus apoi cu un **test UI real** (formular vizibil, off-screen, `PrintWindow` - fara input
|
|
real, cf. `testare-ui-vfp.md`): `COMUN\utile\Teste\editare_factura\test_ui_grid_articole.prg`,
|
|
rulat cu `vfp_ui_harness.ps1`. Document folosit: cod=1139934/an=2021/luna=12 (id_vanzare=882) -
|
|
ales pentru ca are SI rulaje (altfel `Show()` ascunde tot `pgfArticole`, cf.
|
|
`omodificari.vc2:14254`, indiferent de articole).
|
|
|
|
Screenshot **inainte de fix**: pagina 3 e vizibila, dar grid-ul nu are NICIO coloana (headere
|
|
lipsa complet) - confirmat si prin masuratoare: `ColumnCount grid = 0`, desi `Reccount(tvd) = 2`
|
|
si `RecordSource grid = [tvd]`.
|
|
|
|
**Mecanismul real**: `IncarcaArticoleFactura` (`ofacturare_editare.prg:270-300`, apelat din
|
|
`Show()`) facea `Use In tvd` urmat de `SELECT ... INTO CURSOR tvd READWRITE` - recreaza cursorul
|
|
sub un grid deja legat pe el. Acesta e exact capcana deja documentata in
|
|
`depanare_testare_vfp.md` sectiunea 6: "*un cursor legat la grid recreat de Init lasa grid-ul
|
|
fara coloane*" - identica, doar declansata din `Show()` in loc de `Init()`. `RecordSource` (sir
|
|
text) ramane `"tvd"`, dar `Columns` colapseaza la 0 - de aici simptomul "pagina apare, grid gol".
|
|
|
|
## Arhitectura FINALA (dupa o coliziune de editare intre agenti concurenti pe `Show()`,
|
|
## descrisa in handoff intermediar (sters) - rezolvata, verificata mai jos)
|
|
|
|
Varianta livrata difera de iteratia descrisa initial mai sus (`ZAP`+`APPEND FROM` in
|
|
`IncarcaArticoleFactura` + `Refresh()` in `Show()`). Arhitectura finala muta incarcarea
|
|
articolelor INAINTE de `Createobject`, ca sa nu mai fie nevoie de nicio recreere/refresh dupa ce
|
|
grid-ul s-a legat:
|
|
|
|
1. **`ofacturare_comun.vc2:3793` (`do_editare_factura`)** si testele UI echivalente: apelantul
|
|
cheama `IncarcaArticoleFactura(id_vanzare, 'crsArticoleFactura')` INAINTE de `Createobject`,
|
|
intr-un cursor separat, neatins de grid.
|
|
2. **`omodificari.vc2:14121-14148` (`Load()`)**: `tvd` se recreeaza mereu cu structura canonica
|
|
(`CreeazaCursorTvdGol()` daca `ofacturare_editare.prg` e incarcat, altfel `CREATE CURSOR`
|
|
inline pentru ROACONT/ROAGEST), apoi, daca apelantul a pregatit `crsArticoleFactura`, il
|
|
`APPEND FROM` in `tvd` + `GO TOP` - **inainte** ca grid-ul sa se lege la constructia formularului,
|
|
deci `ColumnCount` nu mai colapseaza niciodata dupa legare.
|
|
3. **`omodificari.vc2:14249-14254` (`Show()`)**: apelul vechi `IncarcaArticoleFactura(This.nIdVanzare)`
|
|
ramane doar ca FALLBACK, pazit de `IF Reccount('tvd') = 0`, pentru apelantii care nu pre-incarca
|
|
articolele (ex. teste vechi, alti apelanti neactualizati).
|
|
4. **`omodificari.vc2:14269` (`Show()`)**: conditia de colaps a pageframe-ului extinsa de la
|
|
`RECCOUNT('trul')=0 AND RECCOUNT('trul_obinv')=0` la `... AND (!USED('tvd') OR RECCOUNT('tvd')=0)`
|
|
- fara asta, un document cu articole dar zero rulaje isi ascundea complet pagina 3 (defect 2,
|
|
independent de defectul 1).
|
|
5. **`ofacturare_editare.prg` (`CreeazaCursorArticoleGol`/`IncarcaArticoleFactura`)**: parametrizate
|
|
cu alias destinatie (implicit `'tvd'`), ca sa poata scrie fie direct in `tvd` (ramurile fara
|
|
pre-incarcare), fie in `crsArticoleFactura` (apelantii care pre-incarca).
|
|
|
|
Coliziunea descrisa in handoff (editarea mea peste editarea altui agent pe `Show()`) e rezolvata -
|
|
verificat direct in fisier (grep + citire linie cu linie) pe 08.08.2026, ~23:49: ambele fix-uri
|
|
(fallback pe `Reccount('tvd')=0` si conditia extinsa cu `tvd` la pageframe) sunt prezente, iar
|
|
mtime `.vc2`/`.vcx`/`.vct` sunt sincrone (text cu ~1s mai nou decat binarul, tiparul normal
|
|
`txt2vcx.ps1`).
|
|
|
|
## Testare (verificare 08.08.2026, dupa rezolvarea coliziunii)
|
|
|
|
- **Regresie `test_page3_articole.prg`** (watchdog, 0 dialoguri, exit code 0): rezultat identic cu
|
|
rularea anterioara coliziunii - toate PASS-urile raman PASS (`cod=1140885`, `cod=1125486`,
|
|
`cod=1137874`, `cod=1139934`/882, coliziunea pe cod cu 4 randuri VANZARI). Singurele FAIL sunt pe
|
|
`cod=1140888` (4 blocuri de test), toate cu aceeasi cauza radacina: `gasit in vanzari = .F.`
|
|
(documentul nu mai are rand in `VANZARI`) - degradare de date preexistenta, nelegata de acest fix,
|
|
confirmata stabila (acelasi rezultat, byte cu byte, in ambele rulari).
|
|
Log: `COMUN\utile\Teste\editare_factura\test_page3_articole_log.txt`.
|
|
- **UI cu captura, `cod=1140885` (zero rulaje, defectul 2)**: `test_ui_pageframe_zero_rulaje.prg` +
|
|
`vfp_ui_harness.ps1`. Rezultat: `PageCount=3`, `pgfArticole.Visible=.T.`, `lAreArticoleVanzari=.T.`,
|
|
`Reccount(trul)=0`, `Reccount(trul_obinv)=0`, `Reccount(tvd)=2`, `ColumnCount grid=14`. Screenshot
|
|
confirma vizual pagina "Articole factura" vizibila si selectata, grid populat cu 2 randuri
|
|
(MATERIALE, MANOPERA) pe toate coloanele:
|
|
`COMUN\utile\Teste\editare_factura\screenshots_after\step_0_cod_1140885_zero_rulaje.png`.
|
|
PASS.
|
|
- **UI cu captura, `cod=1139934`/an=2021/luna=12 (`id_vanzare=882`, 2 linii, are si rulaje)**:
|
|
`test_ui_grid_articole.prg` + `vfp_ui_harness.ps1`. Rezultat: `PageCount=3`,
|
|
`pgfArticole.Visible=.T.`, `lAreArticoleVanzari=.T.`, `Reccount(tvd)=2`,
|
|
`RecordSource grid=[tvd]`, `ColumnCount grid=14`. Screenshot confirma vizual grid-ul populat cu
|
|
2 randuri (ACOPERIRE FAR VOLVO F..., MANOPERA) pe toate coloanele:
|
|
`COMUN\utile\Teste\editare_factura\screenshots_after_1139934\step_0_cod_1139934_regresie_grid.png`
|
|
(mutat intr-un folder separat dupa ce prima rulare cu `-ShotsDir screenshots_after` a golit
|
|
accidental folderul si a sters captura de la `cod=1140885` de mai sus - regenerata separat,
|
|
vezi mai jos).
|
|
|
|
## Incident de verificare: stergere accidentala de screenshot, recuperat
|
|
|
|
In timpul acestei verificari, rularea testului UI pentru `cod=1139934` a folosit
|
|
`-ShotsDir screenshots_after` (acelasi folder in care exista deja captura de la `cod=1140885`
|
|
dintr-o rulare anterioara) - `vfp_ui_harness.ps1:142-143` goleste `ShotsDir` la fiecare lansare
|
|
(`Clear-Dir`), deci captura veche a fost stearsa. Nu a fost o modificare de sursa, doar o coliziune
|
|
de folder de output. Recuperat prin rerularea `test_ui_pageframe_zero_rulaje.prg` (acelasi test,
|
|
acelasi document, acelasi rezultat de date - vezi mai sus) cu acelasi `-ShotsDir screenshots_after`,
|
|
iar captura pentru `cod=1139934` a fost mutata separat in `screenshots_after_1139934\` inainte de
|
|
rerulare, ca sa nu se piarda si ea. Ambele capturi finale sunt valide si confirmate vizual.
|
|
|
|
## Ce ramane de verificat pe ecran (Marius)
|
|
|
|
Deschide o factura reala cu articole (si, ideal, cu rulaje - altfel pagina 3 poate fi complet
|
|
ascunsa, comportament preexistent nelegat de acest fix) si confirma ca grid-ul "Articole factura"
|
|
apare populat la prima deschidere a paginii, fara sa fie nevoie de navigare suplimentara.
|
|
|
|
## Descoperire separata (comunicata team-lead-ului)
|
|
|
|
`ofacturare_editare.prg` **este** inregistrat in `roacont.prg:212` (`SET PROCEDURE TO
|
|
ofacturare_editare.prg ADDITIVE`), nu doar in `roafacturare.prg`. E absent doar din `roagest.prg`
|
|
(doar `ofacturare_comun.PRG` si `ofacturare_stoc.PRG` sunt inregistrate acolo). Garda pe
|
|
`Set("Procedure")` din `Load()`/`Show()` tot trebuie sa ramana (ROAGEST are nevoie de ea), dar
|
|
impactul in ROACONT pe `comun.vc2:2436` (registrul jurnal) ramane de verificat separat.
|
|
|
|
## Stare livrare
|
|
|
|
Fara commit. Diff regenerat din starea curenta (git diff vs HEAD, in `COMUN`):
|
|
diff aplicat (sters). Write-back facut in `COMUN\clase\omodificari.vcx`/`.vct` si
|
|
`COMUN\clase\ofacturare_comun.vcx`/`.vct` (mtime text/binar sincrone, verificat 08.08.2026 23:49).
|
|
`ofacturare_editare.prg` e ASCII pur, editat direct, fara risc de encoding.
|
|
|
|
Punctul 3 din mesajul team-lead (extinderea gardei la cei 4 apelanti / ROACONT/ROAGEST) - neinceput
|
|
in aceasta verificare, in afara scopului ei (doar rulare de teste, fara editare de sursa).
|