sync SVN r18031

This commit is contained in:
2026-08-20 23:14:53 +03:00
parent 58d4c4a891
commit 03d23222ec
3 changed files with 107 additions and 4 deletions

View File

@@ -16878,13 +16878,17 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx"
*<PropValue> *<PropValue>
BorderStyle = 1 BorderStyle = 1
cDirectie = "RUL_SURSA" cdirectie = "RUL_SURSA"
DoCreate = .T. DoCreate = .T.
Height = 480 Height = 480
Name = "frm_sincronizare_articole" Name = "frm_sincronizare_articole"
oFormArticole = .F. oformarticole = .F.
Width = 700 Width = 700
_shape1.Height = 29
_shape1.Left = 0
_shape1.Name = "_shape1" _shape1.Name = "_shape1"
_shape1.Top = 0
_shape1.Width = 708
_shape1.ZOrderSet = 1 _shape1.ZOrderSet = 1
_shape2.Height = 29 _shape2.Height = 29
_shape2.Left = 636 _shape2.Left = 636
@@ -16926,13 +16930,17 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx"
Top = 108, ; Top = 108, ;
Width = 668, ; Width = 668, ;
ZOrderSet = 2, ; ZOrderSet = 2, ;
Column1.ColumnOrder = 1, ;
Column1.ControlSource = "ALLTRIM(propunere_afisata.denumire) + ' (' + ALLTRIM(propunere_afisata.codmat) + ')'", ; 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.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ;
Column1.FontSize = 9, ;
Column1.Name = "cArticolProp", ; Column1.Name = "cArticolProp", ;
Column1.ReadOnly = .T., ; Column1.ReadOnly = .T., ;
Column1.Width = 180, ; Column1.Width = 180, ;
Column2.ColumnOrder = 2, ;
Column2.ControlSource = "propunere_afisata.cantitate_veche", ; Column2.ControlSource = "propunere_afisata.cantitate_veche", ;
Column2.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; Column2.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ;
Column2.FontSize = 9, ;
Column2.Format = "R", ; Column2.Format = "R", ;
Column2.InputMask = (get_mask(12,gnPCANT)), ; Column2.InputMask = (get_mask(12,gnPCANT)), ;
Column2.Name = "cCantVecheProp", ; Column2.Name = "cCantVecheProp", ;
@@ -16940,6 +16948,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx"
Column2.Width = 100, ; Column2.Width = 100, ;
Column3.ControlSource = "propunere_afisata.cantitate_noua", ; Column3.ControlSource = "propunere_afisata.cantitate_noua", ;
Column3.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; Column3.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ;
Column3.FontSize = 9, ;
Column3.Format = "R", ; Column3.Format = "R", ;
Column3.InputMask = (get_mask(12,gnPCANT)), ; Column3.InputMask = (get_mask(12,gnPCANT)), ;
Column3.Name = "cCantNouaProp", ; Column3.Name = "cCantNouaProp", ;
@@ -16947,6 +16956,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx"
Column3.Width = 100, ; Column3.Width = 100, ;
Column4.ControlSource = "propunere_afisata.pret_vechi", ; Column4.ControlSource = "propunere_afisata.pret_vechi", ;
Column4.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; Column4.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ;
Column4.FontSize = 9, ;
Column4.Format = "R", ; Column4.Format = "R", ;
Column4.InputMask = (get_mask(12,gnPPRET)), ; Column4.InputMask = (get_mask(12,gnPPRET)), ;
Column4.Name = "cPretVechiProp", ; Column4.Name = "cPretVechiProp", ;
@@ -16954,6 +16964,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx"
Column4.Width = 100, ; Column4.Width = 100, ;
Column5.ControlSource = "propunere_afisata.pret_nou", ; Column5.ControlSource = "propunere_afisata.pret_nou", ;
Column5.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; Column5.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ;
Column5.FontSize = 9, ;
Column5.Format = "R", ; Column5.Format = "R", ;
Column5.InputMask = (get_mask(12,gnPPRET)), ; Column5.InputMask = (get_mask(12,gnPPRET)), ;
Column5.Name = "cPretNouProp", ; Column5.Name = "cPretNouProp", ;
@@ -16961,6 +16972,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx"
Column5.Width = 100, ; Column5.Width = 100, ;
Column6.ControlSource = "propunere_afisata.actiune", ; Column6.ControlSource = "propunere_afisata.actiune", ;
Column6.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ; Column6.DynamicForeColor = "IIF(ALLTRIM(propunere_afisata.actiune)='N-A',RGB(150,150,150),RGB(0,0,0))", ;
Column6.FontSize = 9, ;
Column6.Name = "cActiuneProp", ; Column6.Name = "cActiuneProp", ;
Column6.ReadOnly = .T., ; Column6.ReadOnly = .T., ;
Column6.Width = 88 Column6.Width = 88
@@ -16975,6 +16987,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx"
*< END OBJECT: BaseClass="header" /> *< END OBJECT: BaseClass="header" />
ADD OBJECT 'grdPropunere.cArticolProp.Header1' AS header WITH ; ADD OBJECT 'grdPropunere.cArticolProp.Header1' AS header WITH ;
Alignment = 2, ;
Caption = "Articol", ; Caption = "Articol", ;
FontName = "Arial", ; FontName = "Arial", ;
FontSize = 9, ; FontSize = 9, ;
@@ -17052,7 +17065,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx"
OPTION2.Top = 24 OPTION2.Top = 24
*< END OBJECT: ClassLib="_baza.vcx" BaseClass="optiongroup" /> *< 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 *!* 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 *!* legenda separata - se refac la fiecare schimbare de directie
LOCAL lcTinta, lcSursa LOCAL lcTinta, lcSursa
@@ -17066,7 +17079,7 @@ DEFINE CLASS frm_sincronizare_articole AS frm_termin_renunt OF "_frm_child.vcx"
ENDWITH ENDWITH
ENDPROC ENDPROC
PROCEDURE ConstruiesteEnumerare PROCEDURE construiesteenumerare
*!* propunere_sincronizare se recreeaza la fiecare apel, deci gridul nu poate sta legat de el; *!* 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 *!* continutul se copiaza in propunere_afisata, cursorul stabil creat in Load
LOCAL lnAreaOrigine, lnAplicabile LOCAL lnAreaOrigine, lnAplicabile

View File

@@ -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`).

View File

@@ -107,6 +107,8 @@
- `GO` pe un `Recno()` capturat/primit ca parametru -> `conventie_go_recno.md`; - `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`; - `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`; - 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`; - garzi pe valori NULL din Oracle -> `conventie_null_vfp.md`;
- export date din Oracle -> `oracle_export.md`; - export date din Oracle -> `oracle_export.md`;
- actualizarea ROA nu se finalizeaza (job update, PACK_UPDATE) -> `depanare-pack-update.md`; - actualizarea ROA nu se finalizeaza (job update, PACK_UPDATE) -> `depanare-pack-update.md`;