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.
|
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.
|
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):
|
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>>'
|
& '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
|
# DOAR fișierele proiectului curent (recomandat, rapid) -> cache text propriu
|
||||||
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 `
|
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 `
|
||||||
-Project '<RADACINA_PROIECT>\<proiect>.pjx' -ProjectRoot '<RADACINA_PROIECT>' `
|
-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)
|
# include și rapoartele (.frx) și meniurile (.mnx)
|
||||||
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 `
|
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 `
|
||||||
-Project '<RADACINA_PROIECT>\<proiect>.pjx' -ProjectRoot '<RADACINA_PROIECT>' `
|
-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)
|
# 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'
|
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
|
# rebuild curat (șterge cache-ul întâi) / forțează reconversia
|
||||||
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 `
|
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 `
|
||||||
-Project '<RADACINA_PROIECT>\<proiect>.pjx' -ProjectRoot '<RADACINA_PROIECT>' `
|
-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):
|
Exemplu (ROAAUTO):
|
||||||
@@ -65,21 +65,73 @@ Exemplu (ROAAUTO):
|
|||||||
```powershell
|
```powershell
|
||||||
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 `
|
powershell -ExecutionPolicy Bypass -File D:\ROA\UTIL\foxbin2prg\vcx2txt.ps1 `
|
||||||
-Project D:\ROA\ROAAUTO\roaauto.pjx -ProjectRoot D:\ROA\ROAAUTO `
|
-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.:
|
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
|
```bash
|
||||||
grep -rn "PROCEDURE do_calcul_tarife" "D:\ROA\UTIL\foxbin2prg\_textcache_<nume_proiect>"
|
grep -rn "PROCEDURE do_calcul_tarife" "D:\ROA\_vfp_textcache\<nume_proiect>"
|
||||||
grep -rln "factura_salvare" "D:\ROA\UTIL\foxbin2prg\_textcache_<nume_proiect>" # ce clase ating subiectul
|
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
|
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
|
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`.
|
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)
|
## Alternativă manuală (fără script)
|
||||||
|
|
||||||
FoxBin2Prg scrie textul **lângă sursă**. Ca să nu murdărești folderul de clase al proiectului,
|
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
|
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()
|
*** 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
|
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 = []
|
lcNumeProc = []
|
||||||
lcPrimaColoana = [denumire,numar]
|
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)
|
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
|
Return loCauta
|
||||||
ENDFUNC
|
ENDFUNC
|
||||||
***********************************************************************************************************
|
***********************************************************************************************************
|
||||||
|
|||||||
Reference in New Issue
Block a user