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 <noreply@anthropic.com>
This commit is contained in:
15
CLAUDE.md
15
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 <path\to\file.vc2> -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
|
||||
|
||||
|
||||
@@ -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).
|
||||
|
||||
|
||||
42
docs/flux-editare-vfp-text.md
Normal file
42
docs/flux-editare-vfp-text.md
Normal file
@@ -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.
|
||||
5
todo.txt
5
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
|
||||
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
|
||||
Reference in New Issue
Block a user