Initial: flux text FoxBin2Prg (git urmareste .??2 in-arbore, binarele VFP git-ignored)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
11
docs/README.md
Normal file
11
docs/README.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Documentatie tehnica ROAIMOB
|
||||
|
||||
Notite concise despre structura interna a proiectului (fluxuri, pachete Oracle, tabele), descoperite in timp ce se lucreaza la sarcini concrete. Completeaza CLAUDE.md — nu il inlocuieste si nu duplica ce e deja evident din cod.
|
||||
|
||||
- [flux-transformare-in-mf.md](flux-transformare-in-mf.md) — transformare imobilizare in curs -> imobilizare corporala/necorporala
|
||||
- [pack_imob.md](pack_imob.md) — pachetul Oracle `pack_imob` (proceduri cheie)
|
||||
- [tabele.md](tabele.md) — tabele/views `IMOB_*` relevante
|
||||
|
||||
## Cand actualizezi
|
||||
|
||||
Adauga sau corecteaza o notita aici ori de cate ori descoperi ceva nou si ne-evident despre structura proiectului in timpul rezolvarii unei sarcini (un flux ascuns, o capcana, o conventie). Nu documenta ce oricine ar afla citind codul in 30 de secunde — scopul e sa scurtezi investigatii viitoare similare, nu sa duplici codul.
|
||||
25
docs/flux-transformare-in-mf.md
Normal file
25
docs/flux-transformare-in-mf.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Flux: transformare imobilizare in curs -> imobilizare corporala/necorporala
|
||||
|
||||
Cod operatie 3 (vezi enum in `Programe/oproceduri_operatii.prg`).
|
||||
|
||||
## UI
|
||||
|
||||
- Punct de intrare: `Clase/oimobilizari.vcx`, clasa `frm_introducere`, metoda `inainte_de_do_termin`.
|
||||
- Declansat cand `Thisform.ntipmodificare = 4`.
|
||||
- Cursor `crslista3` contine imobilizarile in curs selectate pentru transformare (SCAN peste ele — se pot transforma mai multe simultan intr-un singur activ nou).
|
||||
|
||||
## Pasi per imobilizare in curs (in SCAN)
|
||||
|
||||
1. `pack_imob.adauga_mf(...)` — creeaza activul NOU (corporal/necorporal); genereaza si prima operatie a acestuia, cu `EXPLICATIA = "TRANSFORMARE IN MF"`.
|
||||
2. `pack_imob.inreg_transformare_in_mf(...)` — "inchide" imobilizarea in curs veche (`v_id_mf`): actualizeaza `IMOB_NOM_MF`, adauga operatia `id_tip_operatie=3` pe activul vechi, leaga operatia noua de cea veche prin `pack_imob.adauga_la_transformare`.
|
||||
|
||||
## Legatura intre activul nou si cel vechi
|
||||
|
||||
- `IMOB_TRANSFORMARE_MF` (insert facut de `pack_imob.adauga_la_transformare`) tine perechea `id_mf_nou/id_operatie_nou` <-> `id_mf_vechi/id_operatie_vechi`.
|
||||
- `inreg_transformare_in_mf` gaseste `id_operatie_nou` prin `select min(id_operatie_mf) from imob_operatii_mf where id_mf = v_id_mf_nou` — presupune ca operatia noua a fost deja inserata (pasul 1) inainte sa ruleze pasul 2. Ordinea pasilor in cod conteaza.
|
||||
|
||||
## Capcana descoperita (fix 08/07/2026, v2.1.43)
|
||||
|
||||
Valorile numerice mari (NRACT/NRDOC, coloane Oracle `NUMBER(20)`) trebuie convertite explicit cu `STR(x, 20)` cand se construieste SQL ca text (nu parametru legat `?var`). `STR(x)` fara lungime foloseste implicitul VFP (10) si trunchiaza/corupe cifrele — fara eroare vizibila, insertul reuseste cu valoare gresita.
|
||||
|
||||
Verifica toate apelurile `STR()`/`ALLTRIM(STR())` dintr-un bloc SQL nou, nu doar unul — e usor sa repari un apel si sa ratezi altul identic in acelasi bloc. Asa a fost bug-ul aici: in acelasi bloc din `inainte_de_do_termin`, doua din trei apeluri (`Str(m.pnnract,20)` pt. `adauga_mf`, `Str(nract,20)` pt. `v_nract`) erau corecte; al treilea (`Str(pnnract)`, pt. `v_nrdoc`) nu avea lungime specificata.
|
||||
22
docs/pack_imob.md
Normal file
22
docs/pack_imob.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# Pachetul Oracle pack_imob
|
||||
|
||||
Sursa vendorizata local: `pack_imob.pck` (specific ROAIMOB, nu e in `COMUN`).
|
||||
|
||||
## Proceduri cheie observate
|
||||
|
||||
- `pack_imob.adauga_mf(...)` — creeaza o imobilizare noua (in curs/corporala/necorporala) in `IMOB_NOM_MF` + prima operatie in `IMOB_OPERATII_MF`.
|
||||
- `pack_imob.inreg_transformare_in_mf(...)` — vezi [flux-transformare-in-mf.md](flux-transformare-in-mf.md).
|
||||
- `pack_imob.add_operatie_mf(...)` — insert generic in `IMOB_OPERATII_MF`, folosit de mai multe fluxuri (majorare, reevaluare, transformare etc).
|
||||
- `pack_imob.adauga_rata(...)` — genereaza/actualizeaza rata de amortizare asociata unei operatii.
|
||||
- `pack_imob.adauga_la_transformare(...)` — leaga operatia activului nou de operatia activului vechi in `IMOB_TRANSFORMARE_MF`.
|
||||
- `pack_imob.schimba_mf(...)` — folosit din fluxul "modificare cu istoric" (`frm_modificare`).
|
||||
- `pack_imob.inreg_majorare` / `pack_imob.inreg_reevaluare` — apelate din `Programe/oproceduri_operatii.prg` (`op_majorare`, `op_reevaluare`).
|
||||
|
||||
## Observatie: doua stiluri de apel din VFP, riscuri diferite
|
||||
|
||||
In acelasi fisier (`Clase/oimobilizari.vcx`) coexista:
|
||||
|
||||
- **SQL construit prin concatenare de text** (`STR()`, `ALLTRIM()`, `Transform()`) — risc de trunchiere/formatare gresita daca nu esti atent la lungimi (vezi capcana STR() din flux-transformare-in-mf.md).
|
||||
- **parametri legati** (`?variabila`) prin `goExecutor` — mai sigur, fara conversie manuala numar-in-text.
|
||||
|
||||
Cand cauti un bug de tipul "valoare corupta la salvare, fara eroare afisata", verifica intai daca apelul respectiv foloseste stilul text-concatenat.
|
||||
18
docs/tabele.md
Normal file
18
docs/tabele.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# Tabele/views IMOB_* relevante
|
||||
|
||||
Schema Oracle e per companie (`gcS`, ex. `CONTAFIN`).
|
||||
|
||||
- `IMOB_NOM_MF` — nomenclator/master imobilizari (un rand per activ, indiferent de tip: in curs/corporal/necorporal).
|
||||
- `IMOB_OPERATII_MF` — istoric operatii per activ. Coloane cheie: `ID_MF`, `ID_TIP_OPERATIE`, `VALOARE`, `VALOARE_RAMASA`, `NRDOC`, `DATADOC`, `EXPLICATIA`, `ID_OPERATIE_PREC` (operatia precedenta), `STERS`/`DATAORA_STERS` (soft delete).
|
||||
- `IMOB_LISTA_MF` — lista curenta / gestiune (locatie, responsabil, sectie, sucursala), actualizata prin `pack_imob.add_in_lista_mf`.
|
||||
- `IMOB_TRANSFORMARE_MF` — leaga operatia noului activ (dupa transformare in MF) de operatia activului in curs original. Vezi [flux-transformare-in-mf.md](flux-transformare-in-mf.md).
|
||||
- `IMOB_BUNURICAPITAL` — bunuri de capital (relevant TVA/ajustare); expus si ca view `imob_vbunuricapital`.
|
||||
- `IMOB_CONTURI` — mapare conturi contabile.
|
||||
|
||||
## Coduri operatie (`ID_TIP_OPERATIE`)
|
||||
|
||||
Acelasi enum ca in `Programe/oproceduri_operatii.prg`: 1 introducere, 2 preluare, 3 transformare in MF, 4 iesire din gestiune, 5 intrare in gestiune, 6 majorare, 7 reevaluare, 8 schimbare DNS, 9 recalculare cota, 10 conservare, 11 scoatere din conservare, 12 modificare cu istoric, 13 inchidere, 14 schimbare DNS + reevaluare.
|
||||
|
||||
## Coloane numerice mari
|
||||
|
||||
`NRACT`/`NRDOC` sunt `NUMBER(20)` — pot contine numere de document lungi. Orice cod VFP care le construieste prin `STR()` (concatenare text SQL, nu parametru legat) trebuie sa foloseasca explicit lungime 20, altfel trunchiaza silentios (vezi capcana in flux-transformare-in-mf.md).
|
||||
Reference in New Issue
Block a user