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
8.2 KiB
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:
ofacturare_comun.vc2:3793(do_editare_factura) si testele UI echivalente: apelantul cheamaIncarcaArticoleFactura(id_vanzare, 'crsArticoleFactura')INAINTE deCreateobject, intr-un cursor separat, neatins de grid.omodificari.vc2:14121-14148(Load()):tvdse recreeaza mereu cu structura canonica (CreeazaCursorTvdGol()dacaofacturare_editare.prge incarcat, altfelCREATE CURSORinline pentru ROACONT/ROAGEST), apoi, daca apelantul a pregatitcrsArticoleFactura, ilAPPEND FROMintvd+GO TOP- inainte ca grid-ul sa se lege la constructia formularului, deciColumnCountnu mai colapseaza niciodata dupa legare.omodificari.vc2:14249-14254(Show()): apelul vechiIncarcaArticoleFactura(This.nIdVanzare)ramane doar ca FALLBACK, pazit deIF Reccount('tvd') = 0, pentru apelantii care nu pre-incarca articolele (ex. teste vechi, alti apelanti neactualizati).omodificari.vc2:14269(Show()): conditia de colaps a pageframe-ului extinsa de laRECCOUNT('trul')=0 AND RECCOUNT('trul_obinv')=0la... 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).
ofacturare_editare.prg(CreeazaCursorArticoleGol/IncarcaArticoleFactura): parametrizate cu alias destinatie (implicit'tvd'), ca sa poata scrie fie direct intvd(ramurile fara pre-incarcare), fie incrsArticoleFactura(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 pecod=1140888(4 blocuri de test), toate cu aceeasi cauza radacina:gasit in vanzari = .F.(documentul nu mai are rand inVANZARI) - 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_aftera golit accidental folderul si a sters captura de lacod=1140885de 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).