14 KiB
Investigare: deschidere firma noua (LUDIPEDIA S.R.L.) pe instalatia "ROA ConPress"
Investigatie read-only, 16.09.2026. Text FoxBin2Prg (.??2) resincronizat cu
git_sync.ps1 -ProjectRoot D:\ROA\ROASTART inainte de cautari (0 esecuri, 410 fisiere la zi).
Nimic din codul aplicatiei, din baza de date sau din configurari a fost modificat.
1. Localizare ROASTART
D:\ROA\ROASTART exista si e proiect VFP9, structurat identic cu ROAFACTURARE:
roastart.PJX/.PJT (proiect), roastart.pj2 (text FoxBin2Prg), foldere
Programe/ Clase/ Ferestre/ Rapoarte/ Locale/ COMUN/, changelog_roastart.txt,
versiune_db.txt. Compilat in roastart.exe, impachetat cu Armadillo (ROASTART.ARM).
Din D:\ROA\ROASTART\CLAUDE.md:7: "ROASTART ('ROA Romfast Applications') is a Visual
FoxPro 9 launcher/shell for the ROA business application suite."
Entry point: Programe\roastart.prg. Formularul de fundal (mereu deschis, gazda
proceselor de creare firma si a butoanelor de administrare) e
D:\ROA\ROASTART\Ferestre\frm_fundal.sc2.
2. Fluxul "deschidere firma noua"
2.1 Declansare din UI
Buton/tile "Firma noua" pe fundal, imagine dedicata:
D:\ROA\ROASTART\roastart.pj2:401-.ADD('grafice\admin\firma noua.png')D:\ROA\ROASTART\Ferestre\frm_fundal.sc2:682,684,686-lb_imagine.Picture = ..\grafice\admin\firma noua.png,lb_program.Caption = "Firma noua",lb_explicatie.Caption = "Initializare firma noua".
2.2 Introducerea datelor firmei noi
D:\ROA\ROASTART\COMUN\clase\ofirma.vc2, clasa frm_firme / metoda do_adauga (linia 875):
886: Do Adauga_Modifica_Inregistrare With "firme_mini",loRec,,"INSERT"
Editorul generic deschide un formular legat de clasa de date cus_odata_firme_mini
(ofirma.vc2:158, mosteneste cus_odata_firme de la linia 7). make_sql din
cus_odata_firme (linia 14-154) construieste apelul catre pachetul PL/SQL, pentru
INSERT:
130-146: lcSql = [begin pack_drepturi.firmemodinsproc(] + lcId + [,'] + lcfirma + [','] + lcantet + [','] +
lcCodF + [','] + lcregc + [','] + && CUI, Nr. Reg. Com.
lcbanca1..lcbanca10 / lccontb1..lccontb10 + [','] + && banci si conturi (10 seturi)
lcadresa + [','] + lcCodFirma +
[',] + lnpersj + [,] + lncodang + [,'] + lcnume + [','] + lcprenume +
[','] + lctel + [','] + lctel2 + [','] + lctel3 + [','] + lcfax +
[','] + lcemail + [','] + lcoasp + [',] + lncapsv + [,] + lncapss +
[,'] + lcpctl + [','] + lccaen + [','] + lcschema +
[','] + lcjudet + [','] + lclocalitate + [','] + lcstrada + [','] + lcnumar +
[','] + lcbloc + [','] + lcscara + [',] + lnapart + [,'] + lccod_postal +
[',] + lnidm + [,] + lne_mama + [,] + lnidl + [,] + Alltrim(Str(gnIdUtil)) +
[,] + lnid_formaj + [,] + lnid_formao + [,] + lnid_formap + [,] + lnid_tip_soc +
[,'] + lcindicativ + [','] + lcDeclarant + [','] + lcFunctie + [','] + lcIndiceitm +
[',] + lcTipModificare + [,'] + lcCaenRevizie + ['); end;]
Procedura PL/SQL exacta: PACK_DREPTURI.FIRMEMODINSPROC (pachet PACK_DREPTURI).
Campurile relevante pentru certificatul RC (cu numele lor din toRec, linia 42-106):
firma= denumire firma,cod_fiscal= CUI,reg_comert= Nr. ord. Reg. Com.adresa, plus componente separate:judet,localitate,strada,numar,bloc,scara,apart(apartament),cod_postalantet,cod_firma,persoana_juridica,codang,nume/prenume(reprezentant),telefon/telefon2/telefon3,fax,email,oasp,capital_soc_var,capital_soc_sub,punct_luc,caen,caen_revizie,schema(numele schemei Oracle noi),id_mama/e_mama(grup de firme),id_loc,id_forma_juridica,id_forma_organizare,id_forma_prop,id_tip_soc,indicativ,declarant,functie,indice_itm,tip_modificare.- Etichetele din grid confirma maparea:
ofirma.vc2:567"Cod fiscal",ofirma.vc2:433-434reg_comert/"cReg_Comert",ofirma.vc2:446"Adresa",ofirma.vc2:672"Firma".
Stergere firma (pentru referinta): pack_drepturi.firmedelproc - ofirma.vc2:150.
2.3 Crearea schemei Oracle noi (jobul propriu-zis)
Dupa INSERT-ul cu succes, tot in do_adauga (ofirma.vc2:888-907):
890: If Nvl(loRec.id_mama, 0) = 0 && doar firme simple/mama, nu membri de grup
891-893: pcSchema = Alltrim(loRec.schema) ; pnAn = loRec.an ; pnLuna = loRec.luna
895: lcSql = [begin SYN_NEWSCHEMAJOB(?pcSchema, ?pnLuna, ?pnAn); end;]
896: llSucces = goExecutor.oExecuta(m.lcSql)
897-905: seteaza _Screen.cNewSchema/nNewSchemaAn/nNewSchemaLuna/cTime,
porneste _Screen.oFundal.tmrProgressBar.Enabled = .T.,
AMESSAGEBOX('Se creeaza firma "..." in baza de date! Urmariti progresul...')
Procedura/job PL/SQL exacta: SYN_NEWSCHEMAJOB(pcSchema, pnLuna, pnAn) - 3 parametri:
numele schemei Oracle noi, luna si anul de start (perioada contabila initiala). Ruleaza
asincron (job Oracle), de aceea urmatorul pas e polling.
2.4 Urmarirea progresului
D:\ROA\ROASTART\Ferestre\frm_fundal.sc2, timer tmrProgressBar.Timer (linia 1777-1833):
1783-1786: Private pcSchema, pnLuna, pnAn ; pcSchema = Alltrim(_Screen.cNewSchema) ...
1792: lcSql = [SYN_NEWSCHEMAPROGRESS(?pcSchema)]
1793: lnSucces = goExecutor.oFunction2Value(m.lcSql, @lcProgress)
1796: IF m.lcProgress = 'FINALIZAT'
1818-1819: AMESSAGEBOX('S-a creat firma ' + m.pcSchema + ... +
'Puteti da drepturi utilizatorilor pe noua firma!', 0+64, 'Firma noua')
Functie de progres: SYN_NEWSCHEMAPROGRESS(pcSchema) - intoarce un status text; cand
devine 'FINALIZAT' apare mesajul catre operator sa dea drepturi userilor pe firma noua
(exact fraza pe care ati mentionat-o).
Comentariu din cod (frm_fundal.sc2:1778-1780, istoric, 21.10.2014, marius.mutu): pasul
separat SYN_NEWSCHEMAPOST a fost mutat in interiorul lui SYN_NEWSCHEMA (jobul
asincron), deci azi tot ce tine de scripturi post-import (calendar, cote TVA, plan de
conturi) ruleaza automat in job, nu mai e apelat separat din VFP - linia veche e comentata
(*!* la 1813-1816).
Rezumat lant apeluri: do_adauga (ofirma.vc2:886) -> editor generic "firme_mini" ->
PACK_DREPTURI.FIRMEMODINSPROC(...) (INSERT firma) -> SYN_NEWSCHEMAJOB(schema, luna, an)
(pornire job async creare schema) -> poll SYN_NEWSCHEMAPROGRESS(schema) din
frm_fundal.sc2 pana la 'FINALIZAT'.
Nota: parametrii CUI/Reg.Com./adresa se scriu o singura data, la INSERT-ul in
FIRMEMODINSPROC, in tabela master de firme (nu sunt parametri ai jobului de schema -
jobul de schema primeste doar numele schemei si perioada contabila initiala).
3. "ROA ConPress" / "Contpress"
Gasit, cu ortografia "conpress" (litere mici, fara "Contpress"):
D:\ROA\ROAFACTURARE\COMUN\docs\conexiuni-tunel-ssh-odbc.md:137
134: | Tunel / profil | Alias TNS + DSN | Schema Oracle |
135: |---|---|---|
136: | `vending.tlp` | `VENDING` | **`VENDING`** (parola standard ROA) |
137: | conpress | `ROA_CONPRESS` | `xenoti` |
139-141: Profilele Bitvise sunt in D:\roa\BITVISE\ pe statia curenta (..., `conpress.tlp`, ...)
Interpretare (document-cadru, sectiunea 1-4 din acelasi fisier, linii 13-131): "conpress" e un client/instalatie de productie separata, nu o schema pe serverul central ROA:
- profil tunel SSH Bitvise:
conpress.tlp(inD:\roa\BITVISE\) - alias TNS pentru conectare prin tunel:
ROA_CONPRESS(intnsnames.oradininstantclient_19_18/instantclient_11_2_0_2) - DSN ODBC (32-bit, folosit de VFP): de regula acelasi nume ca aliasul TNS (nu e listat
explicit un DSN separat pentru conpress in acest doc - vezi
ODBC.INIla nevoie) - schema Oracle:
xenoti(nu "conpress" - numele schemei difera de numele clientului)
Nu am gasit alta mentiune "ConPress"/"Contpress" in cod (.??2) sau in alte fisiere
.ini/.md cautate in ROASTART sau in COMUN. NU GASIT: host/IP explicit al
serverului conpress, parola, sau vreo mentiune a numelui "ConPress" in codul VFP
propriu-zis (numele apare doar in acest document operational, nu in sursa aplicatiei).
Implicatie pentru sarcina cerută: pentru a deschide firma LUDIPEDIA pe instalatia
ConPress, trebuie intai ridicat tunelul conpress.tlp, apoi ROASTART/aplicatia trebuie
sa se conecteze prin DSN-ul care foloseste aliasul ROA_CONPRESS (deci pe schema
xenoti), nu pe conexiunea centrala ROA. Procedura tunel+TNS+DSN completa e in
D:\ROA\ROAFACTURARE\COMUN\docs\conexiuni-tunel-ssh-odbc.md:1-131 (skill asociat:
roa-oracle-production-access).
4. Drepturi utilizatori/grupuri pe firma
4.1 Tabele de baza (drepturi pe programe, nu neaparat per-firma)
D:\ROA\ROASTART\COMUN\Drepturi utilizatori\drepturi_utilizatori.sql:
DEF_GRUP(linia 12-21):ID_GRUP, GRUP, STERS, ID_UTILOP, DATAORA, NR_GRUP, ID_TATADEF_GRUP_DREPT(linia 66-74):ID_GRUP, ID_PROGRAM, ID_DGD, ID_UTILOP, DATAORA, STERS(drepturi grup pe program, nu pe firma)DEF_OBIECTE(linia 112-121): drepturi pe obiecte UI per program
4.2 Ecranul de alocare drepturi PE FIRMA (raspunsul direct la cerinta)
Meniu ROASTART: D:\ROA\ROASTART\Programe\oproceduri_start.prg:189
Procedure viz_utilgrupfirma:
202: pcselect1=['select id_dug,id_grup,grup,id_firma,firma from vdef_util_grup where 1=2']
219: ofrmutilgf=Createobject("frm_utilgrupf")
View sursa: vdef_util_grup (coloane: id_dug, id_grup, id_firma, firma).
Grid-ul deschide un formular de adaugare dedicat:
D:\ROA\ROASTART\Clase\ostart_util.vc2:1102 - DEFINE CLASS frm_utilgrupf_nou,
titlu "DEFINIRE ROL PE FIRMA" (linia 1138), cu 3 campuri combo:
Cb_utilizator / Cb_grup (linia 1170, eticheta "Grup") / Cb_firma (linia 1159,
eticheta "Firma").
Salvarea foloseste clasa de date cus_odata_utilgrupf (`ostart_util.vc2:7-51):
32-34: lcIdUtil = Alltrim(Str(toRec.id_util)) ; lcIdGrup = Alltrim(Str(toRec.id_grup)) ;
lcIdFirma = Alltrim(Str(toRec.id_firma))
38-40: Case lcActiune = "INSERT"
lcSql = [begin PACK_DREPTURI.utildreptinsproc(]+lcIdUtil+[,]+lcIdGrup+[,] +
lcIdFirma +[,]+Alltrim(Str(gnIdUtil))+[); end;]
Procedura exacta: PACK_DREPTURI.UTILDREPTINSPROC(id_util, id_grup, id_firma, id_utilop)
- adauga un utilizator, intr-un grup/rol, scopat pe o firma anume. Exista si
UTILDREPTMODPROC(linia 41-43, UPDATE) siUTILDREPTDELPROC(linia 44-46, DELETE).
4.3 Crearea/gestionarea utilizatorilor (pasul dinaintea alocarii pe firma)
Meniu: oproceduri_start.prg:240 Procedure viz_utilizatori -> frm_utilizatori,
cursor sursa vutilizatori (linia 245).
Salvare utilizator: ostart_util.vc2:53-98, clasa cus_odata_utilizatori:
85: Case "INSERT": lcSql = [begin pack_drepturi.utilizatoriinsproc('] + lcutilizator +
[','] + lcparola + [',] + lcInactiv + [,]+ Alltrim(Str(gnIdUtil))+[); end;]
88: Case "UPDATE": pack_drepturi.utilizatorimodproc(...)
92: Case "DELETE": pack_drepturi.utilizatoridelproc(id, id_utilop)
Procedura exacta: PACK_DREPTURI.UTILIZATORIINSPROC(utilizator, parola, inactiv, id_utilop) - creeaza un cont nou. Daca "Vali Iliescu"/"Valentina Iliescu" si
"Raluca Ion" nu exista deja ca useri, acesta e pasul care ii creeaza, inainte de a le
aloca UTILDREPTINSPROC pe firma LUDIPEDIA.
4.4 Cautare nume "Vali Iliescu" / "Valentina Iliescu" / "Raluca Ion"
Cautat in tot codul VFP text (.??2) din D:\ROA\ROASTART (inclusiv COMUN local),
variante Iliescu, ILIESCU, Raluca Ion, ION R - NU GASIT. Aceste nume nu
apar in sursa aplicatiei (asteptat: userii sunt date, nu cod, stocate in tabela Oracle
UTILIZATORI / vederea vutilizatori). Nu am interogat nicio baza Oracle (nici centrala,
nici ConPress) in aceasta investigatie - e in afara scopului "read-only pe cod" cerut, si
oricum ar necesita tunelul SSH + credentiale pe care nu le am. Pentru confirmarea
existentei conturilor "Vali Iliescu"/"Valentina Iliescu"/"Raluca Ion" e nevoie de o
interogare SELECT (read-only) pe UTILIZATORI/vutilizatori pe instanta corecta
(centrala ROA sau ConPress/xenoti, dupa unde vreti sa dati drepturile) - pas separat,
de aprobat explicit inainte de rulare.
5. Documentatie existenta pentru "deschidere firma noua"
Cautat cu Grep (path explicit) in:
D:\ROA\ROASTART\COMUN\- acest folder nu are subfolderdocs\(verificat cuGet-ChildItem: contine doarclase, datemenu, Drepturi utilizatori, ferestre, grafice, include, meniuri, Plugin, PluginTemplate, programe, Rapoarte, utile- faradocs).D:\ROA\ROAFACTURARE\COMUN\docs\- singurul hit relevant econexiuni-tunel-ssh-odbc.md(documenteaza tunelul/TNS/DSN, inclusiv randul "conpress", dar nu documenteaza fluxul de creare firma / SYN_NEWSCHEMAJOB / PACK_DREPTURI).
NU GASIT: niciun document docs/*.md cu procedura pas-cu-pas de "deschidere firma
noua" sau de "acordare drepturi pe firma noua". Fluxul de mai sus (punctele 2 si 4) a
fost reconstruit direct din cod, nu dintr-o documentatie existenta.
Concluzie operationala (fara nicio actiune executata)
- Pentru a deschide firma LUDIPEDIA S.R.L. pe instalatia ConPress trebuie lucrat pe
conexiunea
ROA_CONPRESS/schemaxenoti(tunelconpress.tlp), nu pe conexiunea centrala ROA - altfel firma s-ar crea in schema gresita. - Fluxul standard ROASTART (buton "Firma noua" -> editor "firme_mini" -> INSERT prin
PACK_DREPTURI.FIRMEMODINSPROC->SYN_NEWSCHEMAJOB(schema, luna, an)-> pollingSYN_NEWSCHEMAPROGRESS) e generic si ruleaza pe orice conexiune activa, inclusiv ConPress - nu exista cod separat "doar pentru ConPress". - Drepturile catre Vali Iliescu / Valentina Iliescu / Raluca Ion se dau prin ecranul
"DEFINIRE ROL PE FIRMA" (
frm_utilgrupf_nou), care cheamaPACK_DREPTURI.UTILDREPTINSPROC(id_util, id_grup, id_firma, id_utilop)- dar existenta conturilor lor ca utilizatori pe instanta ConPress nu a putut fi confirmata din cod; e nevoie de o interogare separata pe date (aprobata explicit). - Niciun script sau modificare nu a fost scris/rulat - investigatie 100% read-only pe
cod si pe un singur document
.md.