sync SVN r17952
This commit is contained in:
@@ -58,6 +58,17 @@ PAS 2 — caută în cache cu unealta Grep (NU în binarele originale):
|
||||
Grep pe folderul 'D:\ROA\_vfp_textcache\<<NUME_PROIECT>>' pentru numele de metodă/procedură/variabilă căutat.
|
||||
Ex.: caută "PROCEDURE do_salvare" sau numele tabelei/cursorului implicat.
|
||||
|
||||
PAS 2b — atribuie rezultatele clasei/metodei care le conține. Grep dă doar fișier:linie, iar
|
||||
într-un .vc2 antetul clasei poate fi cu mii de linii mai sus și ~2/3 din fișier e metadata:
|
||||
|
||||
& 'D:\ROA\UTIL\foxbin2prg\vfp_symbols.ps1' -CacheRoot 'D:\ROA\_vfp_textcache\<<NUME_PROIECT>>' -ProjectRoot '<<RADACINA_PROIECT>>' -Grep 'expresie' -CodeOnly
|
||||
|
||||
Alte moduri: -Where 'fisier.vc2:1234' (cine deține linia), -Find 'nume' (unde e DEFINIT, nu și
|
||||
apelurile), -Class 'nume_clasa' (lanț de moștenire + metode cu intervalele de linii).
|
||||
Indexul se reconstruiește singur din cache; rulează PAS 1 înainte.
|
||||
OBLIGATORIU înainte de PAS 3: intervalul exact al metodei. Într-un .vc2 cu multe clase, Init,
|
||||
Show, do_adauga există în aproape fiecare — fără interval editezi metoda din altă clasă.
|
||||
|
||||
CONVERSIE PUNCTUALĂ (un fișier sau folder care NU e în proiect, ex. o librărie din COMUN):
|
||||
|
||||
& 'D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1' -Source 'CALE\catre\librarie.vcx' -CacheRoot 'D:\ROA\_vfp_textcache\<<NUME_PROIECT>>'
|
||||
|
||||
@@ -44,12 +44,12 @@ structura proiectului (nu murdărește arborele SVN), rulează FoxBin2Prg, păst
|
||||
# DOAR fișierele proiectului curent (recomandat, rapid) -> cache text propriu
|
||||
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 `
|
||||
-Project '<RADACINA_PROIECT>\<proiect>.pjx' -ProjectRoot '<RADACINA_PROIECT>' `
|
||||
-CacheRoot 'D:\ROA\UTIL\foxbin2prg\_textcache_<nume_proiect>'
|
||||
-CacheRoot 'D:\ROA\_vfp_textcache\<nume_proiect>'
|
||||
|
||||
# include și rapoartele (.frx) și meniurile (.mnx)
|
||||
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 `
|
||||
-Project '<RADACINA_PROIECT>\<proiect>.pjx' -ProjectRoot '<RADACINA_PROIECT>' `
|
||||
-CacheRoot 'D:\ROA\UTIL\foxbin2prg\_textcache_<nume_proiect>' -Types vcx,scx,frx,mnx
|
||||
-CacheRoot 'D:\ROA\_vfp_textcache\<nume_proiect>' -Types vcx,scx,frx,mnx
|
||||
|
||||
# conversie punctuală a unui fișier/folder (chiar dacă NU e în proiect, ex. o clasă din COMUN)
|
||||
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 -Source '<RADACINA_PROIECT>\COMUN\clase\caut.vcx'
|
||||
@@ -57,7 +57,7 @@ powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 -Sou
|
||||
# rebuild curat (șterge cache-ul întâi) / forțează reconversia
|
||||
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 `
|
||||
-Project '<RADACINA_PROIECT>\<proiect>.pjx' -ProjectRoot '<RADACINA_PROIECT>' `
|
||||
-CacheRoot 'D:\ROA\UTIL\foxbin2prg\_textcache_<nume_proiect>' -Clean
|
||||
-CacheRoot 'D:\ROA\_vfp_textcache\<nume_proiect>' -Clean
|
||||
```
|
||||
|
||||
Exemplu (ROAAUTO):
|
||||
@@ -65,21 +65,73 @@ Exemplu (ROAAUTO):
|
||||
```powershell
|
||||
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 `
|
||||
-Project D:\ROA\ROAAUTO\roaauto.pjx -ProjectRoot D:\ROA\ROAAUTO `
|
||||
-CacheRoot D:\ROA\UTIL\foxbin2prg\_textcache_roaauto
|
||||
-CacheRoot D:\ROA\_vfp_textcache\roaauto
|
||||
```
|
||||
|
||||
> Cache-ul trebuie să stea **în afara** folderului `D:\ROA\UTIL\foxbin2prg`: `ReCreate_FoxBin2Prg.prg`
|
||||
> face `Prg2Bin` recursiv pe tot folderul uneltei și ar reconverti `.??2`-urile din cache în binare
|
||||
> rătăcite.
|
||||
|
||||
Rezultatul ajunge în cache, cu aceeași structură de directoare ca proiectul (ex.:
|
||||
`_textcache_roaauto\Clase\odevize.vc2`, `_textcache_roaauto\comun\clase\_frm_base.vc2`). Apoi:
|
||||
`roaauto\Clase\odevize.vc2`, `roaauto\comun\clase\_frm_base.vc2`). Apoi:
|
||||
|
||||
```bash
|
||||
grep -rn "PROCEDURE do_calcul_tarife" "D:\ROA\UTIL\foxbin2prg\_textcache_<nume_proiect>"
|
||||
grep -rln "factura_salvare" "D:\ROA\UTIL\foxbin2prg\_textcache_<nume_proiect>" # ce clase ating subiectul
|
||||
grep -rn "PROCEDURE do_calcul_tarife" "D:\ROA\_vfp_textcache\<nume_proiect>"
|
||||
grep -rln "factura_salvare" "D:\ROA\_vfp_textcache\<nume_proiect>" # ce clase ating subiectul
|
||||
```
|
||||
|
||||
Flux tipic: rulează scriptul o dată (populează cache-ul), apoi caută cu `Grep` în cache. La
|
||||
sesiuni următoare rescrie doar ce s-a schimbat (incremental). Pentru o librărie din `COMUN\` care
|
||||
nu e în proiect, convertește-o punctual cu `-Source`.
|
||||
|
||||
## Indexul de simboluri: `vfp_symbols.ps1`
|
||||
|
||||
`grep` spune *unde* e textul, nu *în ce metodă*. Într-un `.vc2` asta contează: fișierele au uzual
|
||||
zeci de mii de linii, din care ~2/3 sunt proprietăți și metadata (nu cod), iar antetul clasei poate
|
||||
fi cu mii de linii deasupra potrivirii. `D:\ROA\UTIL\foxbin2prg\vfp_symbols.ps1` reține intervalul
|
||||
de linii al fiecărei clase/metode/proceduri — din cache-ul text **și** din `.prg`-urile proiectului
|
||||
— și etichetează rezultatele.
|
||||
|
||||
```powershell
|
||||
$s = 'D:\ROA\UTIL\foxbin2prg\vfp_symbols.ps1'
|
||||
$c = @('-CacheRoot', 'D:\ROA\_vfp_textcache\<nume_proiect>', '-ProjectRoot', '<RADACINA_PROIECT>')
|
||||
|
||||
# căutare etichetată cu clasa.metoda; -CodeOnly taie potrivirile din metadata/proprietăți
|
||||
powershell -ExecutionPolicy Bypass -File $s @c -Grep '<expresie>' -CodeOnly
|
||||
powershell -ExecutionPolicy Bypass -File $s @c -Where '<fisier>.vc2:<linie>' # cine deține linia
|
||||
powershell -ExecutionPolicy Bypass -File $s @c -Find '<nume>' # unde e DEFINIT
|
||||
powershell -ExecutionPolicy Bypass -File $s @c -Class '<nume_clasa>' # moștenire + metode
|
||||
```
|
||||
|
||||
Exemplu (ROAACNPRO — parametrii impliciți ai scriptului țintesc deja acest proiect):
|
||||
|
||||
```
|
||||
> vfp_symbols.ps1 -Grep 'calcul_cheiaj' -CodeOnly
|
||||
clase\oacnpro.vc2:14937: [frm_tranzit.do_executa] llSucces = calcul_cheiaj(m.lcVyeIds)
|
||||
> vfp_symbols.ps1 -Class oApp
|
||||
oApp (roaacnpro.prg:88) -> RoaApp (roa.prg:1) -> Custom (clasă de bază VFP)
|
||||
```
|
||||
|
||||
Când merită în locul unui `grep` direct:
|
||||
|
||||
- **înainte de o editare cu `txt2vcx.ps1`** — `-Where`/`-Class` dau intervalul exact al metodei.
|
||||
Într-un `.vc2` cu 15 clase, `Init`, `Show`, `do_adauga`, `do_executa2` există în aproape fiecare;
|
||||
fără interval e ușor să nimerești metoda cu același nume din altă clasă;
|
||||
- **rezultate multe** — `-CodeOnly` arată doar codul (pe `goExecutor` în ROAACNPRO: 1401 potriviri
|
||||
de cod din 1505, restul metadata);
|
||||
- **„definit sau doar apelat?"** — `-Find` dă doar definiția, `grep` dă tot;
|
||||
- **moștenire** — `-Class` arată lanțul cu fișier:linie, deci se vede dacă o metodă e suprascrisă
|
||||
local sau vine din `COMUN`.
|
||||
|
||||
Indexul (`_symbols.tsv`, în rădăcina cache-ului) se reconstruiește singur când cache-ul e mai nou
|
||||
(~4 s pentru ~200 de fișiere); e regenerabil, se poate șterge oricând. Rulează întâi `vcx2txt.ps1`:
|
||||
indexul e derivat din cache, deci nu poate ști de modificări făcute în IDE și neconvertite.
|
||||
|
||||
Limite: nu rezolvă apelurile indirecte (`EVALUATE`, `SET CLASSLIB`) — dă candidații, nu
|
||||
certitudinea. Clasele de bază VFP (`form`, `custom`) apar ca neindexate: normal, n-au sursă în
|
||||
proiect. Copiile vechi de `.prg` din subfoldere (ex. `COMUN\programe\roa\`) sunt excluse implicit
|
||||
prin `-ExcludePrg`; dă `-ExcludePrg ''` ca să vezi tot.
|
||||
|
||||
## Alternativă manuală (fără script)
|
||||
|
||||
FoxBin2Prg scrie textul **lângă sursă**. Ca să nu murdărești folderul de clase al proiectului,
|
||||
|
||||
@@ -4015,7 +4015,7 @@ ENDFUNC
|
||||
|
||||
***********************************************************************************************************
|
||||
Function caut_client_contract_activ
|
||||
Lparameters tcCond, tnIdPart, tnIdCtr
|
||||
Lparameters tcCond, tnIdPart, tnIdCtr, tlVerificaANAF, tdDataDoc
|
||||
*** tnIdCtr: daca dau id_ctr direct (facturile de penalitati) selectez numai acest contractul indiferent de iscontract_valid()
|
||||
|
||||
Local lcSelect, lcFiltruInitial, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, lcPrimaColoana
|
||||
@@ -4071,8 +4071,25 @@ select c.id_ctr, c.id_part, p.denumire, p.cod_fiscal, c.data, c.numar, c.data_in
|
||||
lcNumeProc = []
|
||||
lcPrimaColoana = [denumire,numar]
|
||||
|
||||
Local lnNivelANAF
|
||||
Private poVerifAlegere, poANAFInlocuire
|
||||
poVerifAlegere = .Null.
|
||||
poANAFInlocuire = .Null.
|
||||
If m.tlVerificaANAF
|
||||
lnNivelANAF = ANAF_NivelVerificare()
|
||||
If m.lnNivelANAF > 0
|
||||
poVerifAlegere = Createobject('anaf_verif_cautare')
|
||||
poVerifAlegere.dDataDoc = ANAF_CaData(m.tdDataDoc)
|
||||
poVerifAlegere.nNivel = m.lnNivelANAF
|
||||
Endif
|
||||
Endif
|
||||
|
||||
loCauta = cauta_alfa(lcSelect, lcFiltru, lcSchema, lcOrder, lcColoane, lcTitlu, lcTitluColoane, lcNumeProc, , lcFiltruInitial, lcPrimaColoana)
|
||||
|
||||
If Type('gnbuton') = 'N' And gnbuton = 1
|
||||
AplicaInlocuirePartenerANAF(loCauta, poANAFInlocuire, pcSir_Id_tip_part)
|
||||
Endif
|
||||
|
||||
Return loCauta
|
||||
ENDFUNC
|
||||
***********************************************************************************************************
|
||||
|
||||
Reference in New Issue
Block a user