From 9f8dd67051e65d2371ac797e92c7e965ae789fbe Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Thu, 9 Jul 2026 18:30:39 +0300 Subject: [PATCH] Docs: flux nou de editare VFP pe text (txt2vcx.ps1) + cale cache corectata CLAUDE.md: calea cache-ului text e D:\ROA\_vfp_textcache\roagest (nu _textcache_roagest); editarile de cod .vcx/.scx se fac acum direct pe .vc2/.sc2 + write-back cu txt2vcx.ps1 (.mnx/.frx raman read-only, COMUN doar cu -AllowComun). Nota noua docs/flux-editare-vfp-text.md cu fluxul, comenzile si limitele. todo.txt: 2 itemi pending (faza 2 mnx/frx, text-as-source-of-truth in git). Co-Authored-By: Claude Fable 5 --- CLAUDE.md | 15 ++++++++++--- docs/README.md | 1 + docs/flux-editare-vfp-text.md | 42 +++++++++++++++++++++++++++++++++++ todo.txt | 5 ++++- 4 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 docs/flux-editare-vfp-text.md diff --git a/CLAUDE.md b/CLAUDE.md index 3496eac..28820ee 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -26,17 +26,26 @@ Git rulează în paralel cu SVN-ul legacy, nu îl înlocuiește. SVN rămâne su - Repo-ul principal (rădăcina acestui folder) e propriul lui `.git`, cu remote `git@gitea.romfast.ro:romfast/roagest.git`. `.gitignore` exclude `COMUN/` (gestionat separat, vezi mai jos), `.svn/`, artefactele VFP compilate (`*.fxp`, `*.bak`, `*.mpr`, `*.exe`, …) și fișierele Windows uzuale. - `COMUN/` are propriul `.git` separat, cu remote `git@gitea.romfast.ro:romfast/comun.git` — **același repo partajat de toate aplicațiile ROA** (ROAACNPRO, ROAIMOB, etc.). O modificare împinsă acolo afectează toate proiectele. Nu face `push --force` peste `comun.git` fără aprobare explicită — ar șterge istoric comun tuturor proiectelor. -- Căutarea în cod VFP binar (`.vcx`/`.scx`) pentru acest proiect folosește `vcx2txt.ps1` parametrizat pentru ROAGEST (vezi secțiunea de mai jos) — cache separat, `_textcache_roagest`, nu-l amesteca cu cache-urile altor proiecte. +- Căutarea în cod VFP binar (`.vcx`/`.scx`) pentru acest proiect folosește `vcx2txt.ps1` parametrizat pentru ROAGEST (vezi secțiunea de mai jos) — cache separat, `D:\ROA\_vfp_textcache\roagest`, nu-l amesteca cu cache-urile altor proiecte. ## Searching code inside `.vcx`/`.scx` (binary) libraries Most class/form code lives **inside binaries** (`.vcx`+`.vct`, `.scx`+`.sct`, …), not in `.prg`, so plain grep can't read it cleanly. To search method/procedure bodies, convert the binaries to their TEXT form first and grep the text, using the shared `foxbin2prg` tool already built at `D:\ROA\UTIL\foxbin2prg\FoxBin2Prg.EXE`: ```powershell -& 'D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1' -Project 'D:\ROA\ROAGEST\roagest.pjx' -ProjectRoot 'D:\ROA\ROAGEST' -CacheRoot 'D:\ROA\UTIL\foxbin2prg\_textcache_roagest' -Types vcx,scx,frx,mnx +& 'D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1' -Project 'D:\ROA\ROAGEST\roagest.pjx' -ProjectRoot 'D:\ROA\ROAGEST' -CacheRoot 'D:\ROA\_vfp_textcache\roagest' -Types vcx,scx,frx,mnx ``` -This reads the file list straight from `roagest.pjx`, so it only converts the `.vcx`/`.scx`/`.frx`/`.mnx` this project actually references — not all of `COMUN\` (most of which is unused by any one app). It's incremental and safe to re-run after IDE edits. Output lands in `_textcache_roagest/` as `.vc2`/`.sc2`/`.fr2`/`.mn2` text mirrors — `Grep` those. The text is **only for reading/search** — make real edits in the VFP IDE, then re-run the script to refresh the cache. +This reads the file list straight from `roagest.pjx`, so it only converts the `.vcx`/`.scx`/`.frx`/`.mnx` this project actually references — not all of `COMUN\` (most of which is unused by any one app). It's incremental and safe to re-run after IDE edits. Output lands in `D:\ROA\_vfp_textcache\roagest\` as `.vc2`/`.sc2`/`.fr2`/`.mn2` text mirrors — `Grep` those. + +For `.vcx`/`.scx`, code edits no longer require the VFP IDE — the flow is now: + +1. Refresh the cache (`vcx2txt.ps1` above), especially if a VFP IDE session ran since the last refresh (IDE changes make the cache stale). +2. Edit the `.vc2`/`.sc2` text directly (position-sensitive format — don't reflow lines; properties are alphabetized). +3. Review the diff on the text file like any other source change. +4. Write back with `txt2vcx.ps1` (`D:\ROA\UTIL\foxbin2prg\txt2vcx.ps1 -TextFile -ProjectRoot 'D:\ROA\ROAGEST' -CacheRoot 'D:\ROA\_vfp_textcache\roagest'`) — it regenerates and recompiles the binary in a staging folder, fidelity-checks it against the edited text, then copies it into the project only if that check passes. + +`.mnx`/`.frx` stay **read-only** in this flow (menus still need GENMENU in the IDE; reports are too fragile to round-trip) — edit those in the VFP IDE as before. Targets under `COMUN\` need `-AllowComun` plus explicit approval, since a change there affects every ROA app. See `D:\ROA\UTIL\foxbin2prg\CLAUDE.md` for full details and `docs/flux-editare-vfp-text.md` for the ROAGEST-specific notes. ## The COMUN shared framework diff --git a/docs/README.md b/docs/README.md index 86ede46..b4cc166 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,6 +6,7 @@ Notite concise despre structura interna a proiectului (fluxuri, pachete, tabele) - [CLAUDE.md](CLAUDE.md) — modul de lucru Claude ↔ Marius (propuneri de cod pentru VFP IDE, acces Oracle direct). - [flux-achizitie-import.md](flux-achizitie-import.md) — lantul achizitie import: gestiuni.vcx → achizitie_import → import_nota → import_nir → PACK_CONTAFIN; capcane (ptva bruta vs proc_tva, import_nota_original mort, 4427/401). +- [flux-editare-vfp-text.md](flux-editare-vfp-text.md) — editare directa pe cache-ul text (.vc2/.sc2) cu write-back prin txt2vcx.ps1, in loc de VFP IDE; limite (.mnx/.frx read-only, COMUN cu aprobare, staleness dupa sesiuni IDE). - [propuneri_achizitie_import.md](propuneri_achizitie_import.md) — *temporar*: modificarile propuse (cu cod) pentru sesizarea achizitie import; se sterge dupa implementare. - `local/` — notite neversionate (credentiale Oracle etc., in .gitignore). diff --git a/docs/flux-editare-vfp-text.md b/docs/flux-editare-vfp-text.md new file mode 100644 index 0000000..e2d650a --- /dev/null +++ b/docs/flux-editare-vfp-text.md @@ -0,0 +1,42 @@ +# Flux editare directă pe text pentru `.vcx`/`.scx` + +Pe lângă căutare (`vcx2txt.ps1`), cache-ul text din `D:\ROA\_vfp_textcache\roagest\` poate fi acum +și **sursă de editare** pentru `.vcx`/`.scx`, scriind înapoi în binar cu `txt2vcx.ps1` — fără trecere +prin VFP IDE. Detalii complete (guard-uri, ordinea pașilor, teste) în +`D:\ROA\UTIL\foxbin2prg\CLAUDE.md`; aici doar partea relevantă pentru ROAGEST. + +## Pașii + +1. Refresh cache (obligatoriu dacă a rulat vreo sesiune de IDE de la ultimul refresh — altfel + verificarea de staleness din `txt2vcx.ps1` refuză scrierea): + + ```powershell + & 'D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1' -Project 'D:\ROA\ROAGEST\roagest.pjx' -ProjectRoot 'D:\ROA\ROAGEST' -CacheRoot 'D:\ROA\_vfp_textcache\roagest' -Types vcx,scx,frx,mnx + ``` + +2. Editează `.vc2`/`.sc2` direct în `D:\ROA\_vfp_textcache\roagest\`. Formatul e + **position-sensitive** (nu reformata/reflow liniile) și proprietățile sunt **alfabetizate** (o + proprietate nouă se inserează la locul ei alfabetic, nu la sfârșit). +3. Revizuiește diff-ul pe fișierul text ca pe orice altă modificare de cod. +4. Scrie înapoi în proiect: + + ```powershell + & 'D:\ROA\UTIL\foxbin2prg\txt2vcx.ps1' -TextFile 'D:\ROA\_vfp_textcache\roagest\Clase\oavize.vc2' -ProjectRoot 'D:\ROA\ROAGEST' -CacheRoot 'D:\ROA\_vfp_textcache\roagest' + ``` + + Regenerează și compilează binarul într-un folder de staging, verifică fidelitatea (roundtrip + text→bin→text byte-identic) și abia apoi copiază `.vct`+`.vcx` (sau `.sct`+`.scx`) peste + binarele din proiect. Dacă orice pas eșuează, proiectul și cache-ul rămân neatinse. + +## Limite + +- `.mnx`/`.frx` rămân **doar pentru citire** — meniurile tot au nevoie de GENMENU în IDE ca să + regenereze `.mpr`, iar formatul `.frx` e prea fragil pentru round-trip. Editează-le în VFP IDE ca + până acum. +- Ținte sub `COMUN\` necesită `-AllowComun` **și** aprobare explicită — o modificare acolo afectează + toate aplicațiile ROA, nu doar ROAGEST. +- **După orice sesiune de IDE** rulează `vcx2txt.ps1` înainte de a edita text — staleness-ul se + verifică pe baza `mtime`, iar o sesiune de IDE (chiar și una care doar a deschis o clasă) poate + lăsa cache-ul în urmă față de binar. +- Fără backup-uri `.bak` lângă binarele din proiect — git e mecanismul de restore; scriptul ține o + copie de siguranță doar în folderul temp al rulării. diff --git a/todo.txt b/todo.txt index cbef254..1797907 100644 --- a/todo.txt +++ b/todo.txt @@ -26,4 +26,7 @@ INVENTAR MAGAZIN NOU - la sfarsit se face verificare pentru articolele noi pentru care nu s-a gasit pretul de achizitie - se face o diferenta inteligenta ------------------------------------------- -raport de gestiune - documentele importate intr-un inventar emise dupa inceperea inventarului sa apara inaintea inventarului \ No newline at end of file +raport de gestiune - documentele importate intr-un inventar emise dupa inceperea inventarului sa apara inaintea inventarului + +faza 2 write-back VFP: .mnx (cu pas GENMENU documentat) si .frx dupa ce testul de fidelitate le dovedeste stabile - excluse azi din txt2vcx.ps1 +migrare text-as-source-of-truth in git (FoxBin2Prg workflow upstream) - de rediscutat cand SVN se retrage pentru COMUN \ No newline at end of file