Files
comun/docs/wip_firma-ludipedia-conpress/schita_deschidere_firma_conpress.sql
2026-09-16 21:11:41 +03:00

408 lines
20 KiB
SQL

-- ============================================================================
-- SCHITA (DRAFT) - Deschidere firma noua pe instalatia Oracle ROA ConPress
-- Fisier NEEXECUTAT, de aprobat de Marius inainte de orice rulare.
-- Schema tinta: LUDIPEDIA (confirmat de Marius; server conpress, tunel
-- Bitvise conpress.tlp, alias TNS + DSN ODBC ROA_CONPRESS).
-- ============================================================================
--
-- NOTA IMPORTANTA 1 - conflict de regula:
-- D:\ROA\ROAFACTURARE\COMUN\docs\conexiuni-tunel-ssh-odbc.md, sectiunea
-- "Reguli pe productie" (linia ~152), interzice explicit pe canalul manual
-- sqlplus-pe-tunel orice altceva in afara de SELECT:
-- "Doar SELECT. Fara INSERT/UPDATE/DELETE/DDL, fara ALTER SESSION care
-- schimba comportament persistent."
-- PASUL 0 din acest fisier (verificari) respecta regula (doar SELECT).
-- PASII 1-4 (INSERT firma, job schema, drepturi utilizatori) SCRIU date si
-- NU respecta acea regula daca ar fi rulati pe canalul manual descris in
-- document. Nu e o decizie luata aici: Marius decide canalul de executie
-- (cont/canal cu drept de scriere pe ConPress, sau rularea propriu-zisa
-- prin aplicatia ROASTART, care e calea normala de productie pentru
-- deschidere de firma).
--
-- NOTA IMPORTANTA 2 - stare fisier:
-- Acesta e o SCHITA, nu un script gata de rulare. Nimeni nu s-a conectat
-- la ConPress pentru a pregati acest fisier si nimeni nu l-a rulat.
--
-- NOTA IMPORTANTA 3 - parametri lipsa din certificatul ONRC (LUDIPEDIA):
-- certificatul de inregistrare acopera doar firma, CUI, nr. registru
-- comert, sediu social, CAEN principal si data inregistrarii. Urmatorii
-- parametri NU sunt in certificat si trebuie completati de Marius inainte
-- de orice executie (marcati mai jos si in sectiunea de parametri cu
-- "-- DE COMPLETAT"):
-- 1. Date bancare: nume banca + cont (IBAN) - pot fi 1 pana la 10 perechi
-- (banca1..banca10 / contb1..contb10 in FIRMEMODINSPROC). Interogarea
-- ANAF publica nu intoarce IBAN (camp gol in raspuns) - ramane de
-- completat de Marius.
-- 2. Telefon2, telefon3, fax, email (telefonul principal a fost completat
-- din ANAF, vezi NOTA IMPORTANTA 5).
-- 3. Reprezentant legal / declarant: nume, prenume, functie, cod
-- angajat (codang), indicativ, indice_itm.
-- 4. Incadrare firma: id_forma_juridica, id_forma_organizare,
-- id_forma_prop, id_tip_soc (coduri interne din nomenclatoarele
-- ROASTART - ANAF intoarce doar text descriptiv, nu codul ROASTART,
-- vezi NOTA IMPORTANTA 5).
-- 5. Capital social varsat (capital_soc_var) si subscris
-- (capital_soc_sub).
-- 6. Punct de lucru (punct_luc) - daca exista, separat de sediul social.
-- 7. id_mama / e_mama - firma simpla sau membra a unui grup deja
-- existent in ROASTART; daca simpla, id_mama = 0.
-- 8. id_loc (identificator localitate in nomenclatorul ROASTART),
-- cod_firma (cod intern firma), id_util (operatorul care introduce
-- firma - userul care ruleaza scriptul in ROASTART), oasp
-- (obligatie de asigurare - da/nu), tip_modificare.
-- Lista completa de parametri "DE COMPLETAT" e reluata langa fiecare
-- variabila din sectiunea PARAMETRI de mai jos.
--
-- NOTA IMPORTANTA 5 - date confirmate/completate din interogarea publica
-- ANAF (16.09.2026, CUI 54602536, serviciu
-- https://webservicesp.anaf.ro/api/PlatitorTvaRest/v9/tva - acelasi URL
-- folosit de procedura existenta ANAF_CreeazaCerereANAF in
-- D:\ROA\ROAFACTURARE\COMUN\programe\validare.prg:1845):
-- - Denumire, nr. registru comert (J2026028926001) si CAEN (9329)
-- CONFIRMATE, identice cu certificatul ONRC.
-- - Telefon completat: 0724968582 (p_telefon).
-- - Cod postal completat: 900217 (p_cod_postal).
-- - Adresa CONFIRMATA in mare parte, cu O DISCREPANTA fata de certificat:
-- certificatul avea p_numar = 'ZA', ANAF intoarce "2A" pentru acelasi
-- sediu (judet, localitate, strada, bloc L119A, scara A, apartament 2 -
-- identice, extrase din date_generale.adresa). Marius a confirmat ca
-- ANAF e sursa de adevar (OCR-ul certificatului e suspect) - p_numar a
-- fost SCHIMBAT mai jos la '2A' (fostul 'ZA' era probabil o citire
-- gresita a lui '2A').
-- - Data inregistrarii: certificatul avea 06.05.2026, ANAF intoarce
-- date_generale.data_inregistrare = 2026-05-04 (04.05.2026) si
-- stare_inregistrare = "INREGISTRAT din data 04.05.2026" - confirma
-- aceeasi data. Marius a confirmat ANAF ca sursa de adevar - p_data_inreg
-- a fost SCHIMBAT mai jos la '04.05.2026'.
-- - scpTVA = false -> firma NU e inregistrata ca platitoare de TVA la
-- data interogarii (util pentru p_persoana_juridica / incadrare, nu
-- schimba niciun parametru din FIRMEMODINSPROC direct).
-- - forma_organizare ANAF = "PERSOANA JURIDICA" -> confirma
-- p_persoana_juridica = 'D'.
-- - IBAN, email, capital social, reprezentant legal, forma juridica
-- interna ROASTART: NU sunt in raspunsul ANAF (serviciul public nu le
-- are) - raman "DE COMPLETAT" de Marius, nu s-au inventat valori.
--
-- NOTA IMPORTANTA 4 - useri drepturi:
-- Marius a CONFIRMAT: sunt DOAR 2 useri carora li se dau drepturi pe firma
-- noua. "Vali Iliescu" / "Valentina Iliescu" e UN SINGUR user (user 1,
-- prescurtare a aceluiasi nume), al doilea e "Raluca Ion" (user 2).
-- Fisierul schiteaza exact 2 blocuri la Pasul 4, dupa acelasi sablon.
-- Niciun id_util/id_grup nu e cunoscut inca -- se completeaza DUPA ce
-- Pasul 0 confirma daca userii exista deja in UTILIZATORI/vutilizatori.
--
-- NOTA IMPORTANTA 6 - verificare DB (Pasul A) INCERCATA si BLOCATA (16.09.2026):
-- Tunelul Bitvise s-a ridicat cu succes (`stnlc.exe -profile=D:\vm303-profile\
-- conpress.tlp`, profil gasit acolo, nu la calea din documentul de conexiuni;
-- port 127.0.0.1:1521 confirmat deschis, alias TNS ROA_CONPRESS rezolvat
-- spre SID=ROA). NU s-a putut merge mai departe: schema Oracle de pe
-- ConPress e "xenoti" (conform tabelului din conexiuni-tunel-ssh-odbc.md),
-- iar parola pentru acel user NU exista nicaieri accesibil (DSN ODBC
-- ROA_CONPRESS are UserID/Password goale in registry, nu e in Windows
-- Credential Manager, nu e in vreun fisier din D:\ROA cautat). Conform
-- regulii explicite din document ("Fara ghicit parole"), verificarea NU s-a
-- facut - nu s-a incercat nicio parola. Tunelul a fost inchis la loc dupa
-- incercare (port 1521 reconfirmat inchis).
-- RAMASE NEVERIFICATE, deci NEschimbate mai jos (raman "DE COMPLETAT"):
-- - combinatia comuna id_forma_juridica/id_forma_organizare/id_forma_prop/
-- id_tip_soc (GROUP BY pe firme) - nerulat.
-- - existenta userilor Vali/Valentina Iliescu si Raluca Ion in
-- UTILIZATORI/vutilizatori si id_util al lor - nerulat.
-- - id_grup uzual din vdef_util_grup - nerulat.
-- - unicitate CUI 54602536 in firme (nu exista deja) - nerulat.
-- Marius (sau cine are parola schemei xenoti pe ConPress) trebuie sa ruleze
-- Pasul 0 manual, sau sa dea parola unei sesiuni viitoare.
--
-- ============================================================================
-- PARAMETRI DE SUBSTITUIRE (sqlplus DEFINE) - reutilizabile pentru orice
-- firma noua. Valorile de mai jos vin din interogarea ANAF (sursa de adevar
-- pentru identificare/adresa/CAEN/data inregistrare) plus certificatul ONRC
-- pentru ce ANAF nu acopera; codurile interne ROASTART si userii raman
-- DE COMPLETAT -- verificarea DB (NOTA IMPORTANTA 6) a fost blocata.
-- ============================================================================
-- --- identificare firma (din certificatul ONRC) ---
DEFINE p_firma = 'LUDIPEDIA S.R.L.'
DEFINE p_antet = 'LUDIPEDIA S.R.L.'
DEFINE p_cod_fiscal = '54602536'
DEFINE p_reg_comert = 'J2026028926001'
DEFINE p_caen = '9329' -- CONFIRMAT: identic in raspunsul ANAF (cod_CAEN) din 16.09.2026
DEFINE p_data_inreg = '04.05.2026' -- SCHIMBAT din certificat (06.05.2026) -- sursa ANAF (date_generale.data_inregistrare), vezi NOTA IMPORTANTA 5
-- --- adresa sediu social (din certificatul ONRC) ---
DEFINE p_judet = 'Constanta'
DEFINE p_localitate = 'Constanta'
DEFINE p_strada = 'Strada Baba Novac'
DEFINE p_numar = '2A' -- SCHIMBAT din certificat ('ZA') -- sursa ANAF (date_generale.adresa / snumar_Strada), vezi NOTA IMPORTANTA 5
DEFINE p_bloc = 'L119A'
DEFINE p_scara = 'A'
DEFINE p_apart = '2'
DEFINE p_cod_postal = '900217' -- completat din ANAF (16.09.2026), nu era in certificat
DEFINE p_adresa = '&p_strada. nr. &p_numar., bl. &p_bloc., sc. &p_scara., et. Parter, ap. &p_apart.'
-- --- date lipsa din certificat, obligatorii pentru FIRMEMODINSPROC ---
DEFINE p_banca1 = '' -- DE COMPLETAT (serviciul public ANAF nu intoarce IBAN)
DEFINE p_contb1 = '' -- DE COMPLETAT (IBAN)
-- banca2..banca10 / contb2..contb10: DE COMPLETAT doar daca exista mai multe conturi
DEFINE p_persoana_juridica = 'D' -- confirmat de forma_organizare ANAF = "PERSOANA JURIDICA" (D/F dupa conventia ROASTART)
DEFINE p_codang = '' -- DE COMPLETAT (cod angajat / reprezentant)
DEFINE p_nume = '' -- DE COMPLETAT (nume reprezentant legal / declarant)
DEFINE p_prenume = '' -- DE COMPLETAT
DEFINE p_telefon = '0724968582' -- completat din ANAF (16.09.2026), nu era in certificat
DEFINE p_telefon2 = '' -- DE COMPLETAT
DEFINE p_telefon3 = '' -- DE COMPLETAT
DEFINE p_fax = '' -- DE COMPLETAT
DEFINE p_email = '' -- DE COMPLETAT
DEFINE p_oasp = '' -- DE COMPLETAT (da/nu, dupa conventia ROASTART)
DEFINE p_capital_soc_var = '' -- DE COMPLETAT
DEFINE p_capital_soc_sub = '' -- DE COMPLETAT
DEFINE p_punct_luc = '' -- DE COMPLETAT (daca exista, altfel gol)
DEFINE p_schema = 'LUDIPEDIA' -- CONFIRMAT de Marius
DEFINE p_id_mama = '0' -- DE CONFIRMAT: 0 daca firma simpla, altfel id firma-mama existenta
DEFINE p_e_mama = '' -- DE COMPLETAT doar daca p_id_mama <> 0
DEFINE p_id_loc = '' -- DE COMPLETAT (id localitate in nomenclator ROASTART)
DEFINE p_id_util = '' -- DE COMPLETAT (operatorul care introduce firma in ROASTART)
DEFINE p_id_forma_juridica = '' -- DE COMPLETAT -- verificare DB blocata (fara parola schema xenoti), vezi NOTA IMPORTANTA 6
DEFINE p_id_forma_organizare = '' -- DE COMPLETAT -- verificare DB blocata, vezi NOTA IMPORTANTA 6
DEFINE p_id_forma_prop = '' -- DE COMPLETAT -- verificare DB blocata, vezi NOTA IMPORTANTA 6
DEFINE p_id_tip_soc = '' -- DE COMPLETAT -- verificare DB blocata, vezi NOTA IMPORTANTA 6
DEFINE p_indicativ = '' -- DE COMPLETAT
DEFINE p_declarant = '' -- DE COMPLETAT (nume declarant, poate fi = p_nume/p_prenume)
DEFINE p_functie = '' -- DE COMPLETAT (functia declarantului)
DEFINE p_indice_itm = '' -- DE COMPLETAT
DEFINE p_tip_modificare = '' -- DE COMPLETAT
DEFINE p_cod_firma = '' -- DE COMPLETAT (cod intern firma in ROASTART)
-- --- job schema Oracle noua (start contabil) ---
DEFINE p_luna_start = '5' -- CONFIRMAT de Marius pentru LUDIPEDIA
DEFINE p_an_start = '2026' -- CONFIRMAT de Marius pentru LUDIPEDIA
-- --- useri carora li se dau drepturi pe firma noua (DOAR 2, confirmat de Marius) ---
DEFINE p_nume_user1 = 'Iliescu'
DEFINE p_prenume_user1= 'Vali' -- "Vali" / "Valentina" -- confirmat: aceeasi persoana (user 1)
DEFINE p_nume_user2 = 'Ion'
DEFINE p_prenume_user2= 'Raluca'
DEFINE p_id_grup_useri = '' -- DE COMPLETAT -- verificare DB blocata (fara parola schema xenoti), vezi NOTA IMPORTANTA 6
DEFINE p_id_utilop = '' -- DE COMPLETAT (operator care insereaza drepturile, poate fi = p_id_util)
-- ============================================================================
-- PAS 0 -- VERIFICARE (doar SELECT, sigur pe canalul sqlplus-tunel)
-- Scop: (a) userii Vali/Valentina Iliescu si Raluca Ion exista deja in
-- UTILIZATORI/vutilizatori? (b) firma cu acest CUI exista deja pe
-- schema LUDIPEDIA (evitare duplicat)?
-- ============================================================================
-- 0a. Cautare useri dupa nume (LIKE, pentru ca nu stim daca "Vali" e nume complet)
SELECT id_util, utilizator, nume, prenume, inactiv
FROM vutilizatori
WHERE UPPER(nume) LIKE UPPER('%' || '&p_nume_user1.' || '%')
OR UPPER(prenume) LIKE UPPER('%Vali%')
OR UPPER(prenume) LIKE UPPER('%Valentina%')
FETCH FIRST 20 ROWS ONLY;
SELECT id_util, utilizator, nume, prenume, inactiv
FROM vutilizatori
WHERE UPPER(nume) LIKE UPPER('%' || '&p_nume_user2.' || '%')
OR UPPER(prenume) LIKE UPPER('%' || '&p_prenume_user2.' || '%')
FETCH FIRST 20 ROWS ONLY;
-- 0b. Drepturi deja existente pe firme, ca sa vedem grupul folosit uzual
-- (util pentru completarea p_id_grup_useri de mai sus)
SELECT id_dug, id_grup, id_firma, firma
FROM vdef_util_grup
WHERE id_grup IN (
SELECT DISTINCT id_grup FROM vdef_util_grup
)
FETCH FIRST 50 ROWS ONLY;
-- 0c. Firma cu acest CUI exista deja? (evitare duplicat la Pasul 1)
SELECT id, firma, cod_fiscal, reg_comert
FROM firme
WHERE REGEXP_REPLACE(UPPER(TRIM(cod_fiscal)), '[^0-9]', '') =
REGEXP_REPLACE(UPPER(TRIM('&p_cod_fiscal.')), '[^0-9]', '')
FETCH FIRST 10 ROWS ONLY;
-- ============================================================================
-- PAS 1 -- INSERT FIRMA
-- PACK_DREPTURI.FIRMEMODINSPROC(...)
-- Sursa semnaturii: D:\ROA\ROASTART\COMUN\clase\ofirma.vc2:130-146
-- ATENTIE: scrie date -- NU e SELECT, vezi NOTA IMPORTANTA 1 de la inceput.
-- Ordinea parametrilor de mai jos respecta exact ordinea din semnatura.
-- ============================================================================
-- BEGIN
-- PACK_DREPTURI.FIRMEMODINSPROC(
-- p_id => NULL, -- id nou, generat de procedura/secventa
-- p_firma => '&p_firma.',
-- p_antet => '&p_antet.',
-- p_cod_fiscal => '&p_cod_fiscal.',
-- p_reg_comert => '&p_reg_comert.',
-- p_banca1 => '&p_banca1.',
-- p_contb1 => '&p_contb1.',
-- p_banca2 => NULL, p_contb2 => NULL,
-- p_banca3 => NULL, p_contb3 => NULL,
-- p_banca4 => NULL, p_contb4 => NULL,
-- p_banca5 => NULL, p_contb5 => NULL,
-- p_banca6 => NULL, p_contb6 => NULL,
-- p_banca7 => NULL, p_contb7 => NULL,
-- p_banca8 => NULL, p_contb8 => NULL,
-- p_banca9 => NULL, p_contb9 => NULL,
-- p_banca10 => NULL, p_contb10 => NULL,
-- p_adresa => '&p_adresa.',
-- p_cod_firma => '&p_cod_firma.',
-- p_persoana_juridica=> '&p_persoana_juridica.',
-- p_codang => '&p_codang.',
-- p_nume => '&p_nume.',
-- p_prenume => '&p_prenume.',
-- p_telefon => '&p_telefon.',
-- p_telefon2 => '&p_telefon2.',
-- p_telefon3 => '&p_telefon3.',
-- p_fax => '&p_fax.',
-- p_email => '&p_email.',
-- p_oasp => '&p_oasp.',
-- p_capital_soc_var => '&p_capital_soc_var.',
-- p_capital_soc_sub => '&p_capital_soc_sub.',
-- p_punct_luc => '&p_punct_luc.',
-- p_caen => '&p_caen.',
-- p_schema => '&p_schema.',
-- p_judet => '&p_judet.',
-- p_localitate => '&p_localitate.',
-- p_strada => '&p_strada.',
-- p_numar => '&p_numar.',
-- p_bloc => '&p_bloc.',
-- p_scara => '&p_scara.',
-- p_apart => '&p_apart.',
-- p_cod_postal => '&p_cod_postal.',
-- p_id_mama => &p_id_mama.,
-- p_e_mama => '&p_e_mama.',
-- p_id_loc => '&p_id_loc.',
-- p_id_util => '&p_id_util.',
-- p_id_forma_juridica=> '&p_id_forma_juridica.',
-- p_id_forma_organizare => '&p_id_forma_organizare.',
-- p_id_forma_prop => '&p_id_forma_prop.',
-- p_id_tip_soc => '&p_id_tip_soc.',
-- p_indicativ => '&p_indicativ.',
-- p_declarant => '&p_declarant.',
-- p_functie => '&p_functie.',
-- p_indice_itm => '&p_indice_itm.',
-- p_tip_modificare => '&p_tip_modificare.',
-- p_caen_revizie => NULL
-- );
-- END;
-- /
-- ============================================================================
-- PAS 2 -- JOB CREARE SCHEMA ORACLE (async)
-- SYN_NEWSCHEMAJOB(pcSchema, pnLuna, pnAn)
-- Se apeleaza doar daca firma e simpla (p_id_mama = 0), nu membra de grup.
-- ATENTIE: porneste un job -- scrie/creeaza obiecte, nu e SELECT.
-- ============================================================================
-- BEGIN
-- IF &p_id_mama. = 0 THEN
-- SYN_NEWSCHEMAJOB('&p_schema.', &p_luna_start., &p_an_start.);
-- END IF;
-- END;
-- /
-- ============================================================================
-- PAS 3 -- POLL STATUS JOB SCHEMA
-- SYN_NEWSCHEMAPROGRESS(pcSchema) -- functie, intoarce status text.
-- Se astepta 'FINALIZAT'. Job async: poate dura; NU se face poll fara
-- timeout/numar maxim de incercari (exemplu mai jos, de adaptat manual
-- sau intr-un script client, nu ca bucla PL/SQL blocanta pe productie).
-- ============================================================================
-- Interogare punctuala (de rulat manual, la interval, cu numarare manuala
-- a incercarilor -- max. N incercari, ex. 30, la 10 secunde):
SELECT SYN_NEWSCHEMAPROGRESS('&p_schema.') AS status_job FROM dual;
-- Varianta PL/SQL cu timeout explicit (DOAR ca exemplu -- de adaptat/testat
-- de Marius inainte de folosire, nu se stie limita reala de reincercari):
-- DECLARE
-- v_status VARCHAR2(100);
-- v_incercari PLS_INTEGER := 0;
-- c_max_incercari CONSTANT PLS_INTEGER := 30; -- DE CONFIRMAT
-- c_pauza_sec CONSTANT PLS_INTEGER := 10; -- DE CONFIRMAT
-- BEGIN
-- LOOP
-- v_status := SYN_NEWSCHEMAPROGRESS('&p_schema.');
-- EXIT WHEN v_status = 'FINALIZAT' OR v_incercari >= c_max_incercari;
-- v_incercari := v_incercari + 1;
-- DBMS_LOCK.SLEEP(c_pauza_sec);
-- END LOOP;
-- IF v_status != 'FINALIZAT' THEN
-- RAISE_APPLICATION_ERROR(-20000, 'Job schema neterminat dupa timeout, status=' || v_status);
-- END IF;
-- END;
-- /
-- ============================================================================
-- PAS 4 -- DREPTURI UTILIZATORI PE FIRMA NOUA
-- PACK_DREPTURI.UTILDREPTINSPROC(id_util, id_grup, id_firma, id_utilop)
-- Sursa: D:\ROA\ROASTART\Clase\ostart_util.vc2:32-40
-- id_util / id_grup se completeaza DUPA ce Pasul 0a confirma daca userii
-- exista deja. id_firma se completeaza cu id-ul intors de Pasul 1.
-- ATENTIE: scrie date, nu e SELECT.
-- ============================================================================
DEFINE p_id_firma_noua = '' -- DE COMPLETAT dupa Pasul 1 (id firma inserata)
-- --- user 1: Vali / Valentina Iliescu (o singura persoana, confirmat) ---
DEFINE p_id_util_1 = '' -- DE COMPLETAT -- Pasul 0a nerulat (verificare DB blocata, NOTA IMPORTANTA 6); gol daca userul nu exista inca
-- optional, doar daca userul NU exista inca in UTILIZATORI:
-- BEGIN
-- PACK_DREPTURI.UTILIZATORIINSPROC(
-- p_utilizator => '', -- DE COMPLETAT (login)
-- p_parola => '', -- DE COMPLETAT (parola initiala)
-- p_inactiv => 'N',
-- p_id_utilop => &p_id_utilop.
-- );
-- END;
-- /
-- BEGIN
-- PACK_DREPTURI.UTILDREPTINSPROC(
-- p_id_util => &p_id_util_1.,
-- p_id_grup => &p_id_grup_useri.,
-- p_id_firma => &p_id_firma_noua.,
-- p_id_utilop=> &p_id_utilop.
-- );
-- END;
-- /
-- --- user 2: Raluca Ion ---
DEFINE p_id_util_2 = '' -- DE COMPLETAT -- Pasul 0a nerulat (verificare DB blocata, NOTA IMPORTANTA 6)
-- optional, doar daca userul NU exista inca:
-- BEGIN
-- PACK_DREPTURI.UTILIZATORIINSPROC(
-- p_utilizator => '', -- DE COMPLETAT (login)
-- p_parola => '', -- DE COMPLETAT (parola initiala)
-- p_inactiv => 'N',
-- p_id_utilop => &p_id_utilop.
-- );
-- END;
-- /
-- BEGIN
-- PACK_DREPTURI.UTILDREPTINSPROC(
-- p_id_util => &p_id_util_2.,
-- p_id_grup => &p_id_grup_useri.,
-- p_id_firma => &p_id_firma_noua.,
-- p_id_utilop=> &p_id_utilop.
-- );
-- END;
-- /
-- ============================================================================
-- SFARSIT SCHITA. De aprobat de Marius -- vezi NOTA IMPORTANTA 1-4 de la
-- inceputul fisierului inainte de orice rulare.
-- ============================================================================