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:
14
docs/capcana_grid_controlsource.md
Normal file
14
docs/capcana_grid_controlsource.md
Normal 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).
|
||||
@@ -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
|
||||
|
||||
@@ -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`;
|
||||
|
||||
Reference in New Issue
Block a user