sync SVN r18041

This commit is contained in:
2026-08-23 11:08:56 +03:00
parent 79b08470be
commit 0027a28961
19 changed files with 369 additions and 592 deletions

View File

@@ -1,43 +1,34 @@
# Export surse Oracle (PACK_CONTAFIN & co.) — cum se face
# Export surse Oracle (PACK_CONTAFIN & co.) - cum se face
`PACK_CONTAFIN.pck` din acest folder este exportul sursei pachetului PL/SQL `PACK_CONTAFIN`.
Claude Code își face singur exportul/reîmprospătarea — nu mai e nevoie de export manual din
Claude Code isi face singur exportul/reimprospatarea - nu mai e nevoie de export manual din
PL/SQL Developer.
## Conexiune
- Client: `D:\ROA\instantclient_19_18\sqlplus.exe` (`TNS_ADMIN` deja setat spre același folder).
- Alias TNS: `ROA_CENTRAL` → `10.0.20.121:1521`, `SERVICE_NAME=ROA` (vezi `tnsnames.ora`).
- Schema/utilizator: `MARIUSM_AUTO` (schema de dezvoltare a lui Marius).
- **Schema de lucru pentru verificari: `MARIUSM_AUTO` pe `ROA_CENTRAL`** - nu `ACN` sau altele.
- **Parola nu e versionată în git** — în `COMUN\docs\local\oracle.md` (ignorat de git, există în SVN).
Conectare, alias TNS, schema (`MARIUSM_AUTO` pe `ROA_CENTRAL`) si capcana BOM la SQL prin pipe:
vezi `conventie_mediu_oracle.md` sectiunea 4. Aici doar ce e specific exportului:
`PACK_CONTAFIN` există în schemele `MARIUSM_AUTO` (dev) și `ACN`, plus sinonim `PUBLIC`.
Exportul de referință se face din `MARIUSM_AUTO`.
`PACK_CONTAFIN` exista in schemele `MARIUSM_AUTO` (dev) si `ACN`, plus sinonim `PUBLIC`. Exportul
de referinta se face din `MARIUSM_AUTO`.
Înainte de a lua o sursă de acolo ca referință pentru o modificare, verifică că `MARIUSM_AUTO` are
toate scripturile aplicate — procedura e în `scripturi-migrare-db.md`, secțiunea
"Sursa de referință pentru DDL".
## Gotcha sqlplus pe Windows/PowerShell
Nu trimite SQL prin pipe din PowerShell (`'select...' | sqlplus`) — BOM-ul UTF-16 sparge parserul
(`SP2-0734: unknown command beginning "select..."`). Scrie un fișier `.sql` cu encoding **ASCII**
și rulează-l cu `@fisier.sql`.
Inainte de a lua o sursa de acolo ca referinta pentru o modificare, verifica ca `MARIUSM_AUTO` are
toate scripturile aplicate - procedura si regula "sursa de referinta pentru DDL e MARIUSM_AUTO, nu
productia" sunt in `scripturi-migrare-db.md`, sectiunea "Sursa de referinta pentru DDL".
## Comanda de export (re-generare .pck)
> **`linesize` prea mic corupe tăcut sursa.** SQL\*Plus face **wrap** la coloana `linesize`, deci o
> linie de cod mai lungă e ruptă în două — inclusiv **prin mijlocul unui identificator**. Fișierul
> pare întreg, `diff` față de el nu arată nimic, dar recompilarea lui dă erori la linii care n-au
> nicio legătură cu ce ai modificat (`ORA-00920`, `PLS-*`). `PACK_FACTURARE` are linii de peste
> **1000** de caractere, iar un export la `linesize 400` i-a rupt 8. Folosește `linesize 32767` și
> verifică după export că nicio linie nu atinge exact valoarea `linesize`.
> **`linesize` prea mic corupe tacut sursa.** SQL*Plus face **wrap** la coloana `linesize`, deci o
> linie de cod mai lunga e rupta in doua - inclusiv **prin mijlocul unui identificator**. Fisierul
> pare intreg, `diff` fata de el nu arata nimic, dar recompilarea lui da erori la linii care n-au
> nicio legatura cu ce ai modificat (`ORA-00920`, `PLS-*`). `PACK_FACTURARE` are linii de peste
> **1000** de caractere, iar un export la `linesize 400` i-a rupt 8. Foloseste `linesize 32767` si
> verifica dupa export ca nicio linie nu atinge exact valoarea `linesize`.
>
> **Exportul e bun pentru CITIT, nu ca bază pentru un script de migrare.** Pentru un script de
> pachet, pleacă de la ultimul script aplicat din `SCRIPTURI_CLAR` (fișier real, care n-a trecut
> niciodată printr-un spool) și confirmă că e la zi comparându-l cu exportul **ignorând spațiul
> alb** — așa wrap-ul nu mai contează:
> **Exportul e bun pentru CITIT, nu ca baza pentru un script de migrare.** Pentru un script de
> pachet, pleaca de la ultimul script aplicat din `SCRIPTURI_CLAR` (fisier real, care n-a trecut
> niciodata printr-un spool) si confirma ca e la zi comparandu-l cu exportul **ignorand spatiul
> alb** - asa wrap-ul nu mai conteaza:
> `tr -d ' \t\r\n' < fisier | md5sum` pe ambele.
```sql
@@ -56,23 +47,5 @@ exit
& 'D:\ROA\instantclient_19_18\sqlplus.exe' -L -S 'MARIUSM_AUTO/<parola>@ROA_CENTRAL' '@export_pack.sql'
```
Același tipar merge pentru orice alt pachet/procedură (`PACK_SESIUNE`, `PACK_PRETURI`, …) sau
Acelasi tipar merge pentru orice alt pachet/procedura (`PACK_SESIUNE`, `PACK_PRETURI`, ...) sau
pentru DDL de tabele/view-uri (`all_tab_columns`, `dbms_metadata.get_ddl`).
## Ce e strict necesar de știut despre PACK_CONTAFIN
Pachetul central de **scriere a documentelor** — clientul VFP populează tabelele temporare
`ACT_TEMP`/`RUL_TEMP` (prin `oscrie_in_fisiere`-ul din COMUN), apoi pachetul distribuie:
- `SCRIE_IN_FISIERE` — orchestratorul (apelat per document).
- `SCRIE_IN_ACT` — `ACT_TEMP` → `ACT` (notele contabile).
- `SCRIE_IN_RUL` — `RUL_TEMP` → `RUL` (mișcările de stoc); completează `COD`, `DATAORA`, `ID_FACT`
(min. `id_fact` fără conturi 5xx), `ID_SUCURSALA`, `DATAIN`/`DATAOUT` din `dataact`, opțional
`ID_RUL_AUX` pe furnizor (opțiunea de firmă `RULAJFURNIZOR`). **Scrie exact ce e în RUL_TEMP — nu
derivă rulaje din ACT**, deci filtrarea liniilor de rulaj se face în clientul VFP.
- `SCRIE_IN_RUL_OBINV` / `SCRIE_IN_STOC` / `SCRIE_IN_STOC_OBINV` — variantele pentru obiecte de
inventar și actualizarea stocului.
- `VERIFICA_NOTE_CONTABILE`, `SCRIE_JC_2007`/`SCRIE_JV_2007` (jurnale TVA),
`SCRIE_IN_BALANTA(_PARTENERI)`, `sterge_document`, `finalizeaza_document_*`.
- Stare de sesiune prin settere/gettere (`SET_COD`/`GET_COD`, `SET_IDFACT`, `SET_ID_SUCURSALA`, …)
+ `PACK_SESIUNE` (an/lună, opțiuni firmă).