achizitie import intern: campul pret lei redevine editabil

ControlSource-ul coloanei cPretFactura se rebindeaza calificat (rul_temp.pret_lei);
necalificat, VFP il rezolva pe workarea altei grile si celula nu accepta tastare.
Test de reproducere + nota docs/capcana_grid_controlsource.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RYbiinqXxdEqXi53x4Ro7K
This commit is contained in:
2026-08-03 01:18:52 +03:00
parent 80726b603e
commit 6bef1e26ee
6 changed files with 828 additions and 8 deletions

View File

@@ -0,0 +1,14 @@
# Capcana: grid needitabil cand formularul are 2+ grid-uri
Pe un formular cu doua sau mai multe grid-uri, gridul ale carui coloane au `ControlSource`
**necalificat** (`camp` in loc de `alias.camp`) devine needitabil - nu se poate scrie in celule.
VFP rezolva numele necalificat pe workarea curenta, care e a celuilalt grid/cursor.
Solutii:
- **Recomandat**: `ControlSource` calificat complet (`alias.camp`) pe fiecare coloana. Obligatoriu
cand sunt implicate mai multe cursoare/tabele.
- Alternativa (doar cu un singur cursor sursa): `SELECT <alias>` inainte de `DO FORM` /
`CreateObject()`, ca workarea curenta la instantiere sa fie cea corecta.
Constatat pe ROAGEST (coloana "pret lei" nu accepta scriere pana la calificarea ControlSource-ului).

View File

@@ -36,8 +36,11 @@ fals `roundtrip text1 != text2`. Ruleaza atunci cu lista rebazata:
NU tool-ul Edit/Write (UTF-8 strica diacriticele). Continut nou ASCII, TAB-uri ca in jur,
fara reflow (format position-sensitive, proprietati alfabetizate). Valabil si pentru `.prg`.
3. Patch review: `git diff --no-index <bak> <editat> > docs/diff_runda<N>_<subiect>.patch`
(exit 1 = normal). Utilizatorul revizuieste FISIERUL de patch si aproba; write-back-ul
(pasul 5) se face DOAR dupa aprobare. Commit doar dupa confirmare pe patch + test in IDE.
(exit 1 = normal). Utilizatorul revizuieste FISIERUL de patch si aproba — aprobarea
conditioneaza COMMIT-ul, nu write-back-ul: pasii 5 si 6 se fac imediat, fara sa astepti
raspunsul (si pe `COMUN`), ca review-ul sa primeasca rezultate de test, nu o propunere
netestata. Rollback daca patch-ul e respins sau modificarea nu merge: `git checkout` pe
binare (`.vcx`+`.vct`) sau write-back din `*.pre_runda<N>.bak`.
Comentariile in cod: conventia din `reguli_lucru.md` (punctul 2).
Obligatoriu inainte de a preda patch-ul la review: skill-ul de code-review rulat pe bucatile
de cod din diff (nu doar citire manuala) - prinde defecte gen IIF cu numar gresit de
@@ -52,7 +55,9 @@ fals `roundtrip text1 != text2`. Ruleaza atunci cu lista rebazata:
existenta altor instante `vfp9` — utilizatorul poate lucra in paralel in alt proiect VFP —
si NU se omoara procese: cand lock-ul exista, se cere utilizatorului sa inchida sesiunea.
5. Write-back: `txt2vcx.ps1 -TextFile <vc2> -ProjectRoot <root> -CacheRoot <cache>`
(+ `-AllowComun` cu aprobare explicita pentru tinte COMUN — afecteaza toate aplicatiile ROA).
(+ `-AllowComun` pentru tinte COMUN — afecteaza toate aplicatiile ROA, deci schimbarea in sine
se propune explicit, dar write-back-ul local nu asteapta aprobarea; nimic nu pleaca la celelalte
aplicatii pana la commit+push).
Succes = fidelity-check trecut: binar cu mtime nou; `vcx2txt.ps1` ulterior il vede la zi.
6. Teste finale pe cerinta initiala (cerinta Marius, valabila in toate proiectele VFP):
dupa ultima runda, teste e2e (harness UI, pe fluxul real al utilizatorului) care verifica

View File

@@ -1,10 +1,13 @@
# Reguli de lucru agent (comune proiectelor ROA VFP)
1. Modificari de cod: diff ca FISIER `docs\diff_runda<N>_<subiect>.patch`
(`git diff --no-index <baseline.bak> <editat>`), nu in terminal. Write-back in binar (txt2vcx)
si commit DOAR dupa aprobarea patch-ului. Patch-urile (in .gitignore, `docs/diff_runda*.patch`)
nu se comit niciodata, raman local. Dupa commit: sterge patch-urile si backup-urile
`*.pre_runda*.bak`.
(`git diff --no-index <baseline.bak> <editat>`), nu in terminal. **COMMIT-ul** e singurul pas
care asteapta aprobarea patch-ului. Write-back-ul in binar (txt2vcx) si testele se fac IMEDIAT
dupa editarea `.vc2`/`.sc2`, fara sa astepti raspunsul — inclusiv pe `COMUN` — ca sa ajungi la
review cu rezultatele testelor, nu cu o propunere netestata; daca nu merge, revii cu
`git checkout` pe binare (`.vcx`+`.vct`) sau cu write-back din `*.pre_runda*.bak`.
Patch-urile (in .gitignore, `docs/diff_runda*.patch`) nu se comit niciodata, raman local.
Dupa commit: sterge patch-urile si backup-urile `*.pre_runda*.bak`.
2. Comentarii in cod: minime, strict functionale, descriu comportamentul CURENT (ca si cum ar fi
scris asa de la inceput) — o linie de regula, 2-3 doar pentru metode cu contract nebanal
(parametri, cursor asteptat/lasat deschis, pozitionare la iesire). Istoricul modificarilor
@@ -52,6 +55,7 @@
per pozitie din `svn cat <fisier>` (necorupt) inainte sa inlocuiesti - o inlocuire oarba cu
`0xBA` strica `a`/`t` cu caciula (`0xE3`, `0xFE`) din alte fisiere;
- adaugi/rearanjezi controale pe formulare sau coloane in grid -> `conventie_ux_formulare.md`;
- grid needitabil pe formular cu 2+ grid-uri -> `capcana_grid_controlsource.md`;
- `GO` pe un `Recno()` capturat/primit ca parametru -> `conventie_go_recno.md`;
- `ALTER TABLE` pe cursorul intors de `goExecutor.oExecute()` -> `conventie_goexecutor_alter_table.md`;
- testare UI / prin MCP -> `testare-ui-vfp.md`, `testare-vfp-mcp.md`;