Corecteaza trunchierea NRDOC la transformare in MF; adauga docs/ si actualizeaza changelog
Fix STR() fara lungime in Clase/oimobilizari.vcx (frm_introducere.inainte_de_do_termin), aplicat si in rapoartele jurnal.frx/listmfcota.frx. Adauga v2.1.43 in changelog. Introduce docs/ cu insight-uri de proiect (flux transformare, pack_imob, tabele) si sectiunea corespunzatoare in CLAUDE.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -47,3 +47,7 @@ Reads the file list straight from `roaimob.PJX`, so it only converts files this
|
||||
- **Changelog convention**: `changelog_roaimob.txt` holds HTML-comment-wrapped, dated (`dd/mm/yyyy`) entries per version (`ROAIMOB - X.Y.Z`), each with Romanian-language notes tagged `:nou:` (new), `:modificare:` (change), `:eroare:` (bug fix), or `:adaugare:` (addition). Follow this exact format/tagging when documenting a change here.
|
||||
|
||||
- **Unrelated nested project**: `COMUN/utile/chatbot/` is a standalone Flowise-embed HTML support chatbot (`chatbot_maria.html`) with its own README.md and CLAUDE.md. It has no relation to the FoxPro/Oracle asset-management app — don't conflate its guidance with ROAIMOB itself.
|
||||
|
||||
## Project insights (docs/)
|
||||
|
||||
`docs/` holds short, concrete notes discovered while working on real tasks — flows (e.g. transformare imobilizare in curs -> MF), `pack_imob` procedures, `IMOB_*` table layout — that go beyond what CLAUDE.md covers. See `docs/README.md` for the index. **Proactively offer to update `docs/` whenever you uncover a non-obvious project insight while fixing a bug or investigating a flow** (don't wait to be asked), so future sessions can reuse it instead of re-investigating from scratch. Keep entries concise and factual — no restating what's obvious from reading the code.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Binary file not shown.
@@ -1,4 +1,12 @@
|
||||
<!--
|
||||
<!--
|
||||
08/07/2026
|
||||
ROAIMOB - 2.1.43
|
||||
|
||||
:modificare:
|
||||
Transformare imobilizare in curs in imobilizare corporala/necorporala. S-a corectat trunchierea numarului de document la operatia de inchidere a imobilizarii in curs.
|
||||
-->
|
||||
|
||||
<!--
|
||||
26/05/2026
|
||||
ROAIMOB - 2.1.42
|
||||
|
||||
@@ -6,7 +14,7 @@ ROAIMOB - 2.1.42
|
||||
S-a corectat o eroare la export xls lista imobilizari.
|
||||
-->
|
||||
|
||||
<!--
|
||||
<!--
|
||||
25/05/2026
|
||||
ROAIMOB - 2.1.41
|
||||
|
||||
|
||||
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).
|
||||
3317
pack_imob.pck
Normal file
3317
pack_imob.pck
Normal file
File diff suppressed because it is too large
Load Diff
BIN
roaimob.PJT
BIN
roaimob.PJT
Binary file not shown.
BIN
roaimob.PJX
BIN
roaimob.PJX
Binary file not shown.
Reference in New Issue
Block a user