diff --git a/clase/omodificari.vc2 b/clase/omodificari.vc2 index 31d4283..4ad5be1 100644 --- a/clase/omodificari.vc2 +++ b/clase/omodificari.vc2 @@ -16878,13 +16878,17 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" * BorderStyle = 1 - cDirectie = "RUL_SURSA" + cdirectie = "RUL_SURSA" DoCreate = .T. Height = 480 Name = "frm_sincronizare_articole" - oFormArticole = .F. + oformarticole = .F. Width = 700 + _shape1.Height = 29 + _shape1.Left = 0 _shape1.Name = "_shape1" + _shape1.Top = 0 + _shape1.Width = 708 _shape1.ZOrderSet = 1 _shape2.Height = 29 _shape2.Left = 636 @@ -16926,13 +16930,17 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" Top = 108, ; Width = 668, ; ZOrderSet = 2, ; + Column1.ColumnOrder = 1, ; Column1.ControlSource = "ALLTRIM(propunere_afisata.denumire) + ' (' + ALLTRIM(propunere_afisata.codmat) + ')'", ; Column1.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; + Column1.FontSize = 9, ; Column1.Name = "cArticolProp", ; Column1.ReadOnly = .T., ; Column1.Width = 180, ; + Column2.ColumnOrder = 2, ; Column2.ControlSource = "propunere_afisata.cantitate_veche", ; Column2.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; + Column2.FontSize = 9, ; Column2.Format = "R", ; Column2.InputMask = (get_mask(12,gnPCANT)), ; Column2.Name = "cCantVecheProp", ; @@ -16940,6 +16948,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" Column2.Width = 100, ; Column3.ControlSource = "propunere_afisata.cantitate_noua", ; Column3.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; + Column3.FontSize = 9, ; Column3.Format = "R", ; Column3.InputMask = (get_mask(12,gnPCANT)), ; Column3.Name = "cCantNouaProp", ; @@ -16947,6 +16956,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" Column3.Width = 100, ; Column4.ControlSource = "propunere_afisata.pret_vechi", ; Column4.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; + Column4.FontSize = 9, ; Column4.Format = "R", ; Column4.InputMask = (get_mask(12,gnPPRET)), ; Column4.Name = "cPretVechiProp", ; @@ -16954,6 +16964,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" Column4.Width = 100, ; Column5.ControlSource = "propunere_afisata.pret_nou", ; Column5.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; + Column5.FontSize = 9, ; Column5.Format = "R", ; Column5.InputMask = (get_mask(12,gnPPRET)), ; Column5.Name = "cPretNouProp", ; @@ -16961,6 +16972,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" Column5.Width = 100, ; Column6.ControlSource = "propunere_afisata.actiune", ; Column6.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; + Column6.FontSize = 9, ; Column6.Name = "cActiuneProp", ; Column6.ReadOnly = .T., ; Column6.Width = 88 @@ -16975,6 +16987,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" *< END OBJECT: BaseClass="header" /> ADD OBJECT 'grdPropunere.cArticolProp.Header1' AS header WITH ; + Alignment = 2, ; Caption = "Articol", ; FontName = "Arial", ; FontSize = 9, ; @@ -17052,7 +17065,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" OPTION2.Top = 24 *< END OBJECT: ClassLib="_baza.vcx" BaseClass="optiongroup" /> - PROCEDURE ActualizeazaCapeteColoane + PROCEDURE actualizeazacapetecoloane *!* capetele coloanelor spun singure ce e sursa si ce se suprascrie, in loc de "vechi/nou" plus o *!* legenda separata - se refac la fiecare schimbare de directie LOCAL lcTinta, lcSursa @@ -17066,7 +17079,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx" ENDWITH ENDPROC - PROCEDURE ConstruiesteEnumerare + PROCEDURE construiesteenumerare *!* propunere_sincronizare se recreeaza la fiecare apel, deci gridul nu poate sta legat de el; *!* continutul se copiaza in propunere_afisata, cursorul stabil creat in Load LOCAL lnAreaOrigine, lnAplicabile diff --git a/docs/conventie_mediu_oracle.md b/docs/conventie_mediu_oracle.md new file mode 100644 index 0000000..c763a91 --- /dev/null +++ b/docs/conventie_mediu_oracle.md @@ -0,0 +1,88 @@ +# Conventii - mediul Oracle de dev/test + +Regula lui Marius, 20.08.2026. Se aplica **de fiecare data**, si sesiunii principale, si +subagentilor. Nu e context, e conventie de lucru. + +## 1. Nu se spune "baza" + +Termenul e vag si a produs deja o intrebare care n-ar fi trebuit sa existe: *"ce este baza? care +schema?"*. Se scrie intotdeauna **schema + instanta**, explicit: + +> "se ruleaza pe schema `MARIUSM_AUTO` de pe `ROA_CENTRAL`" + +nu "se ruleaza pe baza". Acelasi lucru in rapoarte, in handoff-uri, in propuneri si in mesaje. + +## 2. Pe dev/test se lucreaza NUMAI cu ROA_CENTRAL + +Instanta: **`ROA_CENTRAL`**. Schemele permise, singurele doua: + +| Schema | Ce este | +|---|---| +| **`MARIUSM_AUTO`** | schema **de firma** - datele si pachetele de business (`VANZARI`, `VANZARI_DETALII`, `JTVA_COLOANE`, `PACK_FACTURARE`...). Aici se lucreaza pe functionalitate. | +| **`CONTAFIN_ORACLE`** | schema **comuna tuturor schemelor de firma**: pachete comune, actualizarea bazei de date, utilizatori, drepturi de utilizator, nomenclatorul de firme. Se creeaza **pe fiecare server**. | + +Nimic altceva. Daca o sarcina pare sa ceara altceva, se intreaba intai. + +Modelul de retinut: fiecare firma are schema ei (in dev/test, `MARIUSM_AUTO`), iar +`CONTAFIN_ORACLE` sta alaturi, o singura data per server, si deserveste toate schemele de firma. +Deci o modificare in `CONTAFIN_ORACLE` e **transversala peste toate firmele de pe acel server** - +se trateaza cu grija corespunzatoare, nu ca o schimbare locala. + +## 3. Schema `ACN` nu se foloseste si nu se citeaza + +Nu se interogheaza, nu se ia ca sursa de adevar, nu se pomeneste in rapoarte ca element de +comparatie. Daca apare in rezultatul unei interogari pe `ALL_OBJECTS`/`ALL_SOURCE`, se **filtreaza +din start**, nu se comenteaza. + +Consecinta practica pentru interogarile de dictionar: se pune **intotdeauna** filtrul de `owner`. +Fara el, randurile mai multor scheme se intercaleaza si output-ul devine ilizibil - capcana deja +platita o data la citirea unui corp de pachet din `ALL_SOURCE`. + +```sql +select text from all_source + where owner = 'MARIUSM_AUTO' -- niciodata fara aceasta linie + and name = 'PACK_FACTURARE' + and type = 'PACKAGE BODY' + order by line; +``` + +## 4. Conectare + +``` +& 'D:\ROA\instantclient_19_18\sqlplus.exe' -L -S 'MARIUSM_AUTO/ROMFASTSOFT@ROA_CENTRAL' '@fisier.sql' +``` + +Fisierul `.sql` se scrie in **ASCII**. SQL trimis prin pipe din PowerShell e spart de BOM. + +## 5. Ce inseamna "se ruleaza un script de pachet" + +Scripturile din `D:\ROA\DATABASE\SCRIPTURI_CLAR\` **nu modifica date** - inlocuiesc **cod stocat in +Oracle** (`CREATE OR REPLACE PACKAGE` + `PACKAGE BODY`). De retinut: + +- Efectul e **imediat si pentru toti cei conectati**. Nu seamana cu VFP, unde fiecare statie ruleaza + propriul `.exe`. +- Se recreeaza si **specificatia**, nu doar corpul - asta invalideaza obiectele dependente, care se + recompileaza la prima folosire. +- **Nu exista "undo".** Revenirea inseamna rularea unei versiuni anterioare a pachetului. +- Scripturile sunt scrise **necalificat** (`CREATE OR REPLACE PACKAGE "PACK_FACTURARE"`, fara + `CONNECT`, fara prefix de schema). Deci **se aplica schemei cu care esti conectat**, nu au tinta + proprie. Schema tinta o decide exclusiv sirul de conectare. +- Rularea unui script pe orice schema **se face doar la cererea explicita a lui Marius**. Un agent + scrie scriptul; nu il aplica. + +## 6. Stare constatata pe `ROA_CENTRAL`, 20.08.2026 + +Reper istoric, constatat din ROAFACTURARE; de reconfirmat daca a trecut timp. Punctele 1-5 +sunt conventia propriu-zisa si se aplica in toate produsele ROA. + +``` +DB_NAME: ROA server: 4e73d257c791 alias TNS: ROA_CENTRAL +``` + +- `MARIUSM_AUTO` isi detine **propriile tabele** (`VANZARI_DETALII`, `JTVA_COLOANE` sunt TABLE in + schema, nu sinonime catre alta schema). Deci cifrele obtinute conectat ca `MARIUSM_AUTO` sunt ale + datelor din `MARIUSM_AUTO`. +- `CONTAFIN_ORACLE` are 393 de obiecte si **nu** detine `VANZARI_DETALII`/`JTVA_COLOANE` - coerent + cu rolul ei: infrastructura comuna (utilizatori, drepturi, firme, actualizare), nu date de firma. +- `MARIUSM_AUTO.PACK_FACTURARE`: PACKAGE si PACKAGE BODY **VALID**, corpul modificat ultima data + **20.08.2026 08:43** (aplicarea scriptului `ff_2026_08_20_01`, garda `FACT-025`). diff --git a/docs/reguli_lucru.md b/docs/reguli_lucru.md index 2d15b59..67a9084 100644 --- a/docs/reguli_lucru.md +++ b/docs/reguli_lucru.md @@ -107,6 +107,8 @@ - `GO` pe un `Recno()` capturat/primit ca parametru -> `conventie_go_recno.md`; - `ALTER TABLE` pe cursorul intors de `goExecutor.oExecute()` -> `conventie_goexecutor_alter_table.md`; - testare UI / prin MCP -> `testare-ui-vfp.md`, `testare-vfp-mcp.md`; + - te conectezi la Oracle pe dev/test, alegi schema sau rulezi un script de pachet -> + `conventie_mediu_oracle.md`; - garzi pe valori NULL din Oracle -> `conventie_null_vfp.md`; - export date din Oracle -> `oracle_export.md`; - actualizarea ROA nu se finalizeaza (job update, PACK_UPDATE) -> `depanare-pack-update.md`;