Borderou eFactura: import manual arhiva zip descarcata din SPV
AnafeFacturaServer.ImportZipLocal (programe/anaf_efactura.prg): dezarhiveaza arhiva aleasa de utilizator, ia xml-ul facturii (ignora semnatura MFinante), ParseEFactura, decide FACTURA PRIMITA/TRIMISA dupa codul fiscal al firmei curente, copiaza arhiva in directorul local de raspunsuri si scrie in Oracle prin acelasi lant ca descarcarea din SPV (cursor temporar canaf_efactura_temp + cUpdateFactura + UpdateDb -> pack_anaf.AdaugaRaspunsFactura si anaf_efactura_detalii). Fara SQL scris de mana si fara duplicarea maparii de campuri. clase/anaf_efactura.vcx (clasa anaf_efactura, metoda citesteraspunsuri): optiunea 8 in meniul butonului "Raspunsuri" - "Import arhiva zip de pe disc...". Necesar cand mesajul nu mai e in lista de raspunsuri ANAF (expira dupa 60 zile) si factura primita nu a ajuns in borderou. Testare (CENTRAL/MARIUSM_AUTO, ianuarie 2026, 12 PASS / 0 FAIL): utile/Teste/efactura_import/ - garda pe cod fiscal, import complet cu verificarea campurilor si a liniilor in anaf_efactura_detalii, factura vizibila in grila reala "Facturi primite in SPV". utile/Teste/test_init_env_auto.prg: adauga goFirma.codfiscalfro ca in start_firma (ostartfirma.prg) - proprietatea nu e coloana in v_firme, iar fara ea orice cod care o citeste nepazit crapa in mediul headless. docs/depanare_testare_vfp.md: verificarea de sintaxa prin compilare headless (config.fpw cu SAFETY=OFF, copie in scratchpad) si capcana literalelor string mai lungi de 255 de caractere (eroare de compilare, nu de runtime). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RqJ7D5ftMbChDyz5mpVkCd
This commit is contained in:
@@ -105,6 +105,15 @@ obiecte/coloane din ADD OBJECT (strica structura: "Cannot add this object to a G
|
||||
- Fix-ul unui typo intr-o clasa partajata poate activa defecte latente in aval
|
||||
(codul care nu rulase niciodata incepe sa ruleze). La regresii dupa fix-uri
|
||||
"inofensive" in COMUN, cauta defectul latent, nu doar diff-ul.
|
||||
- **Literal string de peste 255 de caractere = eroare de COMPILARE, nu de runtime** (masurat
|
||||
24.07.2026: 255 trece, 256 pica). Mesajul difera dupa forma liniei: `Unrecognized command
|
||||
verb` daca linia incepe cu un apel de metoda (`goExecutor.oExecuta("<sql lung>", 'c')`),
|
||||
`Command contains unrecognized phrase/keyword` la o atribuire (`lc = "<sir lung>"`).
|
||||
Insidios: restul programului ruleaza normal, doar linia aceea lipseste din `.fxp` si da
|
||||
eroare 16 cand se ajunge la ea - deci un test poate raporta "FAIL" pe altceva decat cauza
|
||||
reala. De aceea tot SQL-ul lung din codebase e scris cu `TEXT TO <var> [TEXTMERGE] NOSHOW`
|
||||
... `ENDTEXT` sau concatenat din bucati, nu ca literal unic. Verificare rapida:
|
||||
`awk 'length($0) > 260 {print NR": "length($0)}' fisier.prg`.
|
||||
- **Coloana de grid cu ControlSource EXPRESIE (nu camp) cere `Bound = .F.`**.
|
||||
Fara el: eroare 9 "Data type mismatch" la CREATEOBJECT-ul formei (faza de
|
||||
constructie, raportata la linia apelanta, Details gol). Caz: import_nota.GridArt
|
||||
@@ -162,7 +171,49 @@ Descoperite depanand harness-ul pentru "Data type mismatch" la `CREATEOBJECT('IM
|
||||
cursor pe care nu l-ai deschis tu confirma mecanismul (faza de instantiere),
|
||||
chiar daca nu e mesajul EXACT din bug-ul original.
|
||||
|
||||
## 7. Studiu de caz: "Property CNRCRT is not found" (15.07.2026)
|
||||
## 7. Verificare de sintaxa prin compilare headless (dupa orice editare de `.prg`)
|
||||
|
||||
Cel mai ieftin test dupa o modificare intr-un `.prg`: `COMPILE` headless, care prinde erorile
|
||||
de sintaxa fara sa porneasca aplicatia si fara Oracle. Reguli:
|
||||
|
||||
- **`config.fpw` propriu cu `SAFETY=OFF` si `RESOURCE=OFF`, pasat cu `-c<cale>`** (lipit de
|
||||
flag, fara spatiu). Fara el, `COMPILE` peste un `.err`/`.fxp` existent si `STRTOFILE` peste
|
||||
un log existent scot dialogul modal "overwrite?" si procesul pare agatat. `SET SAFETY OFF`
|
||||
ca prima linie in script e complementar, nu inlocuitor (`-A` singur porneste cu SAFETY ON).
|
||||
Verificare ca a fost preluat: logheaza `SET("SAFETY")` / `SET("RESOURCE")` la start.
|
||||
- **`-c<config>` explicit are prioritate si merge impreuna cu `-A`**: desi `-A` ignora
|
||||
config.fpw-ul implicit, un `-c` explicit tot e preluat (verificat 24.07.2026:
|
||||
`vfp9.exe -c<config> -A -T script.prg` a raportat `SAFETY=[OFF] RESOURCE=[OFF]`).
|
||||
- **Compileaza o COPIE a fisierului, in scratchpad, nu sursa din working copy**: `COMPILE`
|
||||
scrie `.fxp`-ul langa `.prg`, iar `.fxp`-urile din SVN sunt artefacte de build - regenerate
|
||||
ad-hoc, ar aparea ca modificari in working copy. VFP compileaza fara sa rezolve simbolurile
|
||||
(clase, functii din alte fisiere), deci copia izolata e suficienta pentru sintaxa.
|
||||
- **Sterge `.err`-ul vechi inainte de `COMPILE`**, altfel nu poti distinge un `.err` ramas de
|
||||
la rularea precedenta de unul nou. Verdictul se citeste din existenta `<nume>.err`:
|
||||
exista => logheaza continutul lui; nu exista => compilare curata.
|
||||
|
||||
Sablon (rulat dupa fiecare runda de editare pe `anaf_efactura.prg`, 24.07.2026):
|
||||
|
||||
```
|
||||
SET SAFETY OFF
|
||||
lcDir = '<scratchpad>\'
|
||||
STRTOFILE('START ' + TTOC(DATETIME()) + ' SAFETY=' + SET("SAFETY") + CRLF, lcLog)
|
||||
IF FILE(lcDir + 'copie.err')
|
||||
DELETE FILE (lcDir + 'copie.err')
|
||||
ENDIF
|
||||
COMPILE (lcDir + 'copie.prg')
|
||||
IF FILE(lcDir + 'copie.err')
|
||||
STRTOFILE('ERR:' + CRLF + FILETOSTR(lcDir + 'copie.err'), lcLog, 1)
|
||||
ELSE
|
||||
STRTOFILE('OK: compilare fara erori', lcLog, 1)
|
||||
ENDIF
|
||||
QUIT
|
||||
```
|
||||
|
||||
Nu inlocuieste testul functional: `COMPILE` valideaza sintaxa, nu apeluri catre metode
|
||||
inexistente sau proprietati gresite (acelea apar abia la runtime).
|
||||
|
||||
## 8. Studiu de caz: "Property CNRCRT is not found" (15.07.2026)
|
||||
|
||||
Lant complet: `frm_import_extrase_banca.modificanote` copia `crsJTVATemp` fara index
|
||||
(defect latent) -> coloana `cExplicatieTVA` din `frm_modific2024.grdRulaje` face
|
||||
|
||||
Reference in New Issue
Block a user