# Inventar COMUN - functii/clase reutilizabile (ROAGEST) Scop: reutilizare comune la plan/code-review (ex. cursor2lista() in loc de Scan manual pe cursor). Generat prin grep pe COMUN/programe/*.prg + cache text D:\ROA\_vfp_textcache\roagest. Numerele = nr. aparitii grep in proiect (indiciu cat de "canonic" e functia). ## 1. Functii comune - COMUN\programe\oproceduri_comune.prg (clasa Oracle/executor + utilitare) | Functie | Semnatura scurta | Ce face | Uz | |---|---|---|---| | oExecute | (cSql,cCursor,lProgress,cTitlu,nHandle,lShowError,lQuitOnError,lReconnect) | ruleaza SQL prin Oracle, deschide cursor. Retur: <0 eroare (vezi oPrelucrareEroare), 0 fara randuri, >0 nr. randuri | 851 | | oExecuta | idem oExecute, wrapper | ca oExecute dar arata singur amessagebox la eroare si intoarce .T./.F. | 256 | | oPrelucrareEroare | () | intoarce mesajul de eroare Oracle formatat, dupa un oExecute cu retur <0 | 93 | | oFunction2Value | (cSql/cFunctie,...) | executa o functie Oracle si intoarce direct valoarea scalara | 31 | | oSelect2Value | (cSql,...) | SELECT cu 1 coloana/1 rand -> valoare scalara | 58 | | oSelecteaza2Value | variantul "Selecteaza" al lui oSelect2Value | idem, alt nume istoric | 20 | | oSelecteaza2Object | (cSql,...) | SELECT 1 rand -> obiect cu proprietati = coloane | 23 | | Connect / Disconnect / Oreset() | - | (re)conectare/deconectare goConn, reset stare executor | 33/10/119 | | ProcessError | - | procesare interna eroare conexiune | 14 | | amessagebox | (cMesaj,nIcon,cTitlu,...) | MESSAGEBOX wrapper standard ROA (icon/titlu/localizare) - **functia cea mai folosita din tot COMUN** | 1308 | | amessage | - | varianta simpla fara icon/butoane multiple | 14 | | cursor2lista | (cCursor,cColumn,cSeparator,cFiltru) | Scan cursor -> lista valori separate (";" default), pt. coloane necaracter | 36 | | cursor2listac | (cCursor,cColumn,cSeparator,cFiltru) | ca cursor2lista dar incadreaza itemii intre apostrof (pt. SQL IN ('a','b')) - de folosit in loc de Scan manual | 2 | | lista2array | (cLista,@aArray,cSeparator) | sparge o lista delimitata intr-un array | 35 | | lista2cursor | (cLista,...) | lista delimitata -> cursor | 21 | | get_mask | (nInt,nDec) | intoarce masca de format numeric (ex. "999,999.9999") dupa nr. intregi/zecimale | 24 | | formateaza | - | formatare valoare dupa masca/tip | 18 | | NEW_ID | (tabela,...) | genereaza urmatorul ID secvential pt. o tabela | 22 | | NRORD | - | numar de ordine (contor afisare grid/raport) | 217 | | NRCRT | - | numar curent (similar NRORD, alt istoric) | 108 | | Get_Ora | (nTip) | ora curenta formatata dupa tip | 150 | | ULTIMAZI / ultima_zi_din_luna | (an,luna) | ultima zi calendaristica a lunii | 16/25 | | C_LUNA / CLUNA3 / cluna | (nLuna) | nume luna (lung/prescurtat) in romana | - | | get_trimestru / get_semestru | (nLuna) | trimestrul/semestrul din numar luna | - | | SAVE_GRID / RESTORE_GRID | (oGrid,cCheie) | salveaza/restaureaza layout coloane grid (latimi/ordine) in ini/tabela | 15/15 | | SAVE_GRID_COMMENT / RESTORE_GRID_COMMENT | idem | variante cu comentarii coloane | - | | SAVE_GRID_TAG / RESTORE_GRID_TAG | idem | variante cu tag/sortare curenta | - | | snr_grid | - | switch_and_restore_grid - schimba sursa gridului si reaplica layout salvat | - | | XMENU / XMENUP | - | meniu contextual generic (popup) | 22 | | GETCHOICE | - | dialog alegere dintr-o lista | - | | Get_Version | (lNoRevision,lInfo,cFileName) | citeste versiunea din resursele .exe | 15 | | Get_Hexa | (nDeca) | conversie zecimal->hex | 12 | | format_msg | - | formateaza mesaj cu parametri (gen sprintf) | - | | GetHash | - | hash generic (verificare integritate/duplicate) | 48 | | export_xls / ExportToXMLExcel | - | export cursor -> Excel (functii libere aici, la 1234/5502; NU sunt metoda goExport.export_xls din oexport.prg - cod si semnatura diferite, doar nume identic) | 24 | | copiaza_structura_cursor | (cSursa,cDest) | copiaza doar structura unui cursor (fara date) | 27 | | GETCALLSTACK | - | stack de apel curent, pt. debug/log erori | 24 | | RemoveCharacters / RemoveCharactersDB | (cStr,cChars) | elimina caractere dintr-un string / varianta safe pt. query | 56/9 | | XmlSpecialCharacters / WindowsSpecialCharacters / OracleSpecialCharacters | (cStr) | escapare caractere speciale pe context (XML/Windows/Oracle) | 19/11/- | | EncryptDecrypt | (cStr,cCheie) | criptare/decriptare simetrica simpla | 23 | | StringAgg | (cCursor,cColumn,cSeparator) | agregare valori coloana intr-un singur string (gen LISTAGG) | 18 | | GetNrFromString / GetDigitsFromString / GetIBANFromString | (cStr) | extrage numere/cifre/IBAN dintr-un text liber | 18/- | | Atasament2File / File2Atasament | - | conversie fisier <-> blob-atasament (baza de date) | 12/12 | | romfast_suport / DownloadSupportFile | - | trimite/descarca fisier suport catre ROA | 18 | | SaveBackupSet / RestoreBackupSet / ExistsBackupSet / DeleteBackupSet / UpdateBackupSet | - | set de proceduri pt. backup/restaurare setari private utilizator | 22/12/12/12/10 | | GetOptiuneFirma / citeste_optiune_firma | (cCod) | citeste o optiune de configurare per firma | 20 | | param_listari | (cRaport,cTitlu,cSemnaturi,lFaraTab) | pregateste parametri standard pt. rapoarte (titlu/semnaturi) | 19 | | ceretitlu_rap | - | dialog cerere titlu raport | 16 | | aInputBox | - | InputBox generic cu validare | 12 | | GetPdfPath | - | cale generare/salvare PDF | 13 | | GetDefaultValue / HasProperty / GetValue / SetValue | pe clase interne (ex. optiuni) | pattern generic proprietate-cu-default | 14/11/464/540 | | verificare_note_contabile | - | valideaza notele contabile generate din import (echilibrare debit/credit) | 11 | | verifica_partener / verificare_parteneri / verificare_parteneri_istoric | (cCUI/cCod) | valideaza/cauta partener in nomenclator dupa CIF/cod, inclusiv istoric | 10/4/6 | | VerificaCodFiscal / GetMeniuVerificareCodFiscal / GetOptiuneVerificareCodFiscal | - | validare CUI/CIF (ANAF-like) | 10 | | VerifCF / cValidCNP / ValidCNP / GetDataCNP | (cCod) | validare CIF/CNP + extragere data nastere din CNP | 9/- | | VerifIBAN / verificare_iban / GetSumaControlIBAN | (cIban) | validare IBAN (cifra de control) | 8/4 | | TVA2PROCTVA / GetProcTvaStandard / GetCoeficientTvaStandard / ProcentTva2IdJtva / GetIdJtvaStandard | - | conversii cota TVA <-> procent <-> cod TVA Oracle (gcS) | 6/11/-/-/5 | | GetTaxCodeIdPart / GetTaxCode / GetPaymentCode | - | coduri taxare/plata pt. e-Factura ANAF | 12/-/- | | GetArticolByCodDenumire / GetArticolById / GetArticolEFByPartDenumire | - | cautare articol nomenclator dupa cod/denumire/id | 10/6/- | | GetPartenerByCodFiscal / GetPartenerByDenumire / GetPartenerByContBanca / GetPartenerByUtil / GetIdPartenerBy... / GetDenumirePartenerById / GetCodFiscalPartenerById | - | familie de cautari partener (id<->cod fiscal<->denumire<->cont banca) - **cauta_* pt. nomenclatoare, prioritar fata de SELECT ad-hoc** | 2 fiecare | | GetSectieByCsectie / GetSectieById / GetIdSectie / GetGestiuneById | - | cautari sectie/gestiune | 2 fiecare | | GetVencheltById / GetIdVenchelt | - | cautare venit/cheltuiala | 2 | | GetDocumentByContPartenerAct | - | cautare document existent dupa partener+cont+act | 4 | | GetFdocById | - | cautare tip document (fdoc) | - | | GetValutaByISO | - | cautare valuta dupa cod ISO | - | | NrLuni2AnLuna / GetDataIreg | - | conversii perioada an/luna | - | | sir2array | - | split string -> array (generic, non-cursor) | - | | nvl2 / nvl2Default | (val,default) | echivalent NVL Oracle in VFP | 11 | | TooManyInstances | (nInstante) | verifica daca ruleaza deja alta instanta a exe-ului | - | | MyUnzip / UnzipQuickShell / MyUnzipCallBack | - | dezarhivare (update-uri, atasamente) | - | | HTTPDownloadFile / DownloadFile | - | descarcare fisier prin HTTP | - | | lansare_help / lansare_help_meniu / arata_manual | - | deschide manualul/help-ul aplicatiei | - | | viz_prg_instalat / versiune / CheckNewVersion / CheckVersion / UpdateVersion | - | verificare versiune instalata vs. server update | 57 (versiune) | | xdir / xdelete / DeleteFiles | - | utilitare fisiere (listare/stergere) | 14/- | | ImportTable | - | import tabel extern (DBF/CSV) | - | | GET_SCHEMA_GRID | - | genereaza schema coloane pt. grid dinamic | - | | CloneObj / CopyProps | (oSursa,[oDest]) | clonare obiect / copiere proprietati intre obiecte | 10/- | | Get_zileluc | - | zile lucratoare | - | | GetUserDocPath | - | folder documente utilizator curent | - | | aleg_document_pereche | (vezi ooperatii_comune) | vezi sectiune 2 | - | Nota: multe functii de mai sus exista **dublat** in `proceduri_comune.prg` (varianta veche, non-obiect) - ex. NEW_ID, SAVE_GRID*, XMENU, cursor2lista*, lista2array/cursor, get_mask, Get_Version, Get_Hexa, format_msg, C_LUNA/cluna, get_trimestru/semestru, GETCALLSTACK, CloneObj/CopyProps, ceretitlu_rap. La duplicat castiga fisierul incarcat **cel mai recent** cu SET PROCEDURE ADDITIVE - in roagest.prg OPROCEDURI_COMUNE.PRG (linia 238) vine dupa proceduri_comune (linia 218), deci activa e varianta din `oproceduri_comune.prg`. Unice din varianta veche: `extrage_optiuni(cLista,nId)` (valoare din lista "id::val;id::val", 11 uz), `myScatter(tcBlank)` (SCATTER generic in obiect, 3 uz); restul functiilor unice de acolo = moarte. ## 2. Functii comune - COMUN\programe\ooperatii_comune.prg (contabilitate/analitice/balanta) | Functie | Ce face | Uz | |---|---|---| | viz_act | vizualizare document (act) generic | - | | aleg_document_pereche | alege documentul pereche (ex. factura<->aviz) la asociere | - | | exista_cont_in_plan_conturi | verifica daca un cont exista in planul de conturi | - | | verific_partener | valideaza/completeaza partener pe o inregistrare contabila | 7 | | verific_analitic / verific_analitic_ | valideaza analitic contabil (cont+subcont) | 7/2 | | verificare_note_contabile | valideaza echilibrarea notelor contabile generate | 11 | | sterge_nota / scrie_nota_import | sterge/scrie nota contabila generata din import | - | | do_assign_analitic | atribuie analitic automat pe o linie | - | | verific_cont | verifica existenta/valabilitate cont contabil | 9 | | viz_balanta_contabilitate / viz_balanta / make_tbalanta / Eval_balanta | construire/vizualizare balanta de verificare | - | | completare_gruputil_analitice / completare_tva_analitice / completare_taxname / completare_paymentname / completare_explicatie_tva | completeaza campuri derivate pe linie contabila (grup util, TVA, taxname, explicatie) | - | ## 3. Export si listare - COMUN\programe\oexport.prg (clasa oExportConfig -> obiect global goExport) Pattern canonic: `goExport.export2frx(...)` / `goExport.export2xlsx(...)` / `goExport.export2pdf(...)`. Preview rapoarte: FoxyPreviewer (`gcReportPreviewer = "FoxyPreview"` in roagest.prg). | Functie/metoda | Semnatura scurta | Ce face | Uz | |---|---|---|---| | export2frx | (tcAlias,tcRaport,tlCereTitlu,...,tcReportPreviewer,toPreviewerConfig) | REPORT FORM cu preview/print (FoxyPreview), logo, imprimanta din setari - **listarea standard, cea mai folosita** | 155 | | export2xls | (tcAlias,tcNumeFisier,tcListaColoane,tcFiltru) | EXPORT TO ... TYPE XL5 (.xls vechi) + deschide fisierul | 30 | | export2xlsx | (tcAlias,tcNumeFisier,tcListaColoane,tcFiltru) | copytoxlsx() - XLSX nativ modern, **preferat pt. cod nou** | 7 | | export2xlsxGrid | (toGrid,tcNumeFisier,tcWhere,tcOrder) | schema din grid (get_schema_grid) -> SELECT -> export2xlsx | 3 | | exportMultiTable2Xlsx | (tcTableList,tcFileName) | mai multe tabele in acelasi workbook xlsx (clasa VFPxWorkbookXLSX) | 3 | | Export2XmlXls | (toGrid,tcFileName,tcSheetName,tlOpen) | XML SpreadsheetML via clasa excelxml, direct din grid | 2 | | export2pdf | (tcAlias,tcRaport,tlPreview,tcCursorSalvare) | REPORT FORM OBJECT pdflistener2 -> PDF; optional continutul in cursor | 26 | | export2html | (tcTargetTables,tcNumeFisier,tcTableTitles,tlJustTables) | HTML/Excel-HTML din unul/mai multe tabele (TEXTMERGE) | 9 | | export2xml_efactura | (toDateFactura,tcCursorLinii,tlSilentios) | wrapper getXmlEFactura() - XML e-Factura ANAF | 6 | | export2frx_paginaregrup | (...) | listare cu numerotare pagini per grup (crsPaginiRaportGrup) | 6 | | getRepPath / getLogoPath | (tcRaport / tcLogo) | rezolva USR_.frx / logo per schema (DIRGEN\USERREPORTS, atas_atasamente) | 24/10 | | OPEN_DEFAULT_APP | (tcNumeFisier) | ShellExecute "open" cu aplicatia implicita | 70 | | citesteSetare / modificaSetare (+ *Ini/*Registru) | (cCheie[,cVal]) | setari registru/ini dupa setTip/setPath/setSectiune | 13/11 | | verificaDate | (tcAlias,tnTip,tlSilentios) | valideaza alias deschis/cu date inainte de export | 16 | | listareUserReport / export_frx / export_xls | - | dispatcher + variante vechi (marcate de inlocuit); metoda export_xls != functia libera export_xls din oproceduri_comune.prg | 22/13/26 | | FoxyPreview (functie libera, nu pe goExport) | (tcRaport,toPreviewerConfig) | preview FoxyPreviewer.App direct pe .frx, apelata din formulare | 19 | | FoxyPreviewerCaller (clasa) | AddReport(tcReport,tcClauses) / RunReport | combina mai multe .frx intr-un singur preview | 7 | | PreviewerConfig (clasa) | SetValue/GetValue | property-bag optiuni FoxyPreviewer (param toPreviewerConfig la export2frx) | - | ### Export Excel - 3 mecanisme paralele (atentie la confuzii) 1. `goExport.export2xls/export2xlsx` (mai sus) - preferat pt. cod nou. 2. `export_excel` / `export_excel_grid` / `exportare` / `LIST_EXCEL` (proceduri_excel.prg) - OLE Automation celula-cu-celula, cere Excel instalat; uz mic (2-12). `get_excel_mask` acolo = masca VFP -> format Excel (nu confunda cu `get_mask` din sect. 1). 3. Clasa `excelxml` (excelxml.vcx, COMUN\UTILE\excel) - Excel XML direct din `gridobject`, fara Excel instalat (proprietati file/sheetname/openaftersaving, metoda `save`); 73 uz. Plus functiile libere `export_xls`/`ExportToXMLExcel` din oproceduri_comune.prg (sect. 1) - cod diferit de metoda `goExport.export_xls`, doar nume identic. ## 4. Utilitare transversale (COMUN\programe, fisiere neinventariate initial) ### gencursor.prg | Functie | Semnatura scurta | Ce face | Uz | |---|---|---|---| | gencursor | (cNume,cAlias,cSelect,cFiltru,cSchema,cOrder,lAfisare,cGroup,...) | obiect deca_baza/ca_baza cu cursor "lazy" (select/filtru/order pe goConn) - **baza grilelor cu sursa dinamica; nu construi manual ca_baza** | 403 | ### validare.prg - validare CIF/CNP cu ANAF/MFIN/VIES (vs. VerifCF/ValidCNP offline din sect. 1) | Functie/clasa | Ce face | Uz | |---|---|---| | VerificareCod (clasa) | validare completa cu webservice: metode VERIFICARE_CIF/VERIFICARE_CNP/ANAF/MFIN/VIES/validare/GetError | 169 | | VerificareANAF (clasa) | sincronizare lista CIF-uri cu ANAF (VerificaListaCIF, ANAF_SincronWebService_PlatitorTva) | 26 | | test_cif / VALIDARE_CIF / test_cnp / VALIDARE_CNP | validari format + cifra control, offline | 27/19/9/15 | | VERIFICARE_PLATITORTVA / VIES_VAT / ONRC | platitor TVA / verificare VIES / interogare ONRC | 5/5/9 | | IntroducereCod (clasa Form) | formular introducere + validare cod | 25 | ### ocautare.prg - dialoguri standard de cautare/alegere (de refolosit in loc de SELECT+grid manual) | Functie | Ce alege | Uz (prg/forme) | |---|---|---| | caut_gestiune / caut_gestiune_dest | gestiune (sursa/destinatie) | 25/324, 12/37 | | caut_fdoc | tip document | 7/170 | | caut_explicatie_tva | explicatie TVA (filtrare exigibil JC/JV) | 9/143 | | caut_partener / CautPartenerContabilitate | partener (generic / dupa cont contabil) | 13/104, 16/16 | | caut_valuta / caut_valuta_iso | valuta | 11/104 | | cauta_nom_articole / caut_articol | articol (filtru text / multiplu) | 8/87, 20/42 | | caut_sectie / caut_facturi | sectie / facturi dupa cont+partener+interval | 8/71, 12/34 | | caut_lucrare, caut_venchelt, caut_contract, caut_delegati, ... | ~40 alte dialoguri de nomenclator, uz mic in ROAGEST | 2-17 | ### oheader.prg | Clasa | Ce face | Uz | |---|---|---| | PSHeader (As Header) | dublu-click pe header = sortare (cHOrder), evidentiaza coloana activa, apeleaza cCallMethod (default Refresh) pe parintele gridului | 37 in forme | ### regex.prg | Functie | Ce face | Uz | |---|---|---| | strtranx | STRTRAN cu regex (grupuri $1, evaluare =expr) | 14 | | GetRegExp / GetRegExpAll / OccursRegExp / StrtranRegExp | prima/toate potrivirile, numarare, inlocuire simpla | 15/4/4/2 | | StripNonAscii | elimina caractere non-ASCII dintr-un string (whitelist) | 11 | ### ini.prg | Functie | Semnatura | Ce face | Uz | |---|---|---|---| | getini / setini | (cIniFile,cSection,cVar[,cVal]) | citire/scriere fisiere .ini low-level (FOPEN) - distinct de GetOptiuneFirma (Oracle) si goExport.citesteSetareIni (wwApi) | 28/9 | ### altele (o functie-doua per fisier) | Functie (fisier) | Ce face | Uz | |---|---|---| | get_oluna (oproceduri_util.prg) | (an,luna) -> obiect cu intervalul calendaristic disponibil (lunamin/anmin/lunamax/anmax) din tabela calendar | 22 | | ReferinteDocumenteNota / ReferinteDocument (odocumente.prg) | verifica daca un document e referentiat de altul (pack_documente Oracle) - inainte de stergere/modificare | 4/4 | | anunta_rezultat / scrie_in_mesaje / raport_mesaje (mesaje.prg) | log mesaje de verificare in tabel + raport; uz de nisa | 2-3 | ## 5. Clase UI comune (COMUN\clase, cache text D:\ROA\_vfp_textcache\roagest\comun\clase) ### Butoane - cmd_butoane.vcx (parinte: _cmd_base.vcx -> buton/cmd_buton) Mecanism: fiecare buton seteaza doar proprietatea `caction` (nume metoda) + `cpictureup/down`. `buton.Click` (in `_cmd_base.vcx`) cauta metoda `caction` pe `this.Parent`, apoi `this.Parent.Parent`, apoi `Thisform`, si o executa cu `clistaparametri` ca argument daca exista (Pemstatus + macro &). **Nu suprascrie Click pe butoane noi - seteaza doar caction pe o instanta din cmd_butoane.vcx.** | Clasa buton | caction | Rol | |---|---|---| | but_nou / cmd_adauga | do_adauga | adauga inregistrare noua | | but_copiaza | do_copiaza | copiaza inregistrarea curenta | | but_sterge / cmd_sterge | inainte_de_do_sterge | sterge (cu hook de confirmare) | | but_modifica / cmd_modifica | inainte_de_do_modifica | intra in modificare | | but_termin / but_da / cmd_termin | do_termin | confirma/salveaza si inchide | | but_renunt / but_nu / cmd_renunt | do_renunt | renunta/inchide fara salvare | | but_salveaza | do_salvare | salveaza fara inchidere | | but_reset / cmd_reset | do_reset | reseteaza formularul/filtrul | | but_cautare / cmd_cauta | do_cauta | deschide cautare | | but_compara | do_compara | comparare inregistrari | | but_verifica | do_verifica | validare | | but_retur | do_retur | operatie retur | | but_precedent / but_urmator / but_urmator_tot | do_precedent / do_urmator / do_urmator_tot | navigare inregistrari | | but_excel | inainte_de_do_excel | export Excel | | but_listare | inainte_de_do_listare | listare/raport | | but_factura / but_listfactura | do_factura / do_listfact | facturare/listare factura | | but_grafic | do_grafic | afisare grafic | | but_help | do_help | help contextual | | but_modiparam | do_modiparam | modificare parametri | | but_attach | do_ataseaza | ataseaza fisier | | but_reface | inainte_de_do_reface | reface/reia operatie | | cmd_login / cmd_logoff | do_login / do_logoff | autentificare | | cmd_executa / cmd_select | do_executa / do_select | executie/selectie generica | | but_sus / but_jos | do_scrollup / do_scrolldown | scroll | ### Container label+text - lb_tx.vcx (parinte: _container, folosesc _lbbase/_txbase din _lb_base.vcx/_tx_base.vcx) | Clasa | Rol | |---|---| | clb_tx_simplu / cb_tx_simplu | label + textbox simplu | | cb_tx_autofill | label + textbox cu autocompletare (cautare in nomenclator) | | cb_tx_cautare | label + textbox + buton cautare integrat | | clb_tx_data | label + textbox cu masca data | | clb_an_luna | pereche an/luna | | clb_luna_intre / clb_nr_intre | interval luna/numar (de-la, pana-la) | | clb_n1n2_simplu | pereche 2 numere simple | | ct_cb_tx | container compus text+combo | | ed_tx_simplu | label + editbox | | op_tx_simplu | label + optiongroup | Proprietate cheie comuna: `pcobj` (leaga containerul de camp/proprietate din obiectul sursa). ### Baze formular - _frm_base.vcx / _frm_child.vcx | Clasa | Rol | |---|---| | _frmbase | baza standard formular; implementeaza deja `do_adauga/do_copiaza/do_modifica/do_renunt/do_sterge/do_termin` (override doar daca logica difera de default) | | _frmnotitle | ca _frmbase, fara bara de titlu; are propriile do_adauga/do_modifica/do_renunt/do_sterge/do_termin | | frm_termin | subclasa _frmbase, expune direct do_termin | | frm_termin_renunt | subclasa frm_termin, adauga do_renunt (fara override suplimentar) | | frm_gol | subclasa _frmbase "goala", cu propriile do_adauga/do_modifica/do_sterge | | _pgfrmbase | baza pageframe | ### Grid - _grd_base.vcx | Clasa | Rol | |---|---| | _grdbase | grid de baza (subclasa _grid) | | _grdrow | subclasa _grdbase, randuri custom | | _grdfooter | grid separat "atasat" la un grid sursa prin metoda `attachtogrid` (copiaza coloane/fonturi de la oSrcGrd) - pt. randuri de total/footer sub un grid principal | ## 6. Conventii transversale - Prefixe variabile: `g`/`gc`/`gn`/`gl` (globale char/numeric/logic), `p`/`pc`/`pn`/`pl` (proprietati obiect), `t`/`tc`/`tn`/`tl` (parametri PARAMETERS/LPARAMETERS), `l`/`lc`/`ln`/`ll` (locale), `m.` (scoping explicit memvar quand hay coliziune cu camp). - SQL pass-through: mereu prin `goExecutor.oExecute`/`oExecuta`, niciodata SQLEXEC direct in cod nou; schema calificata cu `gcS` (ex. `gcS + ".STOC"`); parametri legati cu `?param` (bind variable VFP->Oracle). - Retur executor: oExecute -> numeric (<0 eroare/`oPrelucrareEroare()`, 0 fara randuri, >0 nr. randuri); oExecuta -> logic (.T./.F., arata singur eroarea). - Cursoare temporare: prefix `crs*` (ex. `crsListaTemp` in cursor2lista/cursor2listac). - Mesaje utilizator: mereu `amessagebox()`/`amessage()`, nu `MESSAGEBOX()` direct. - Formatare numerica: `get_mask()` + `formateaza()`, nu masti hardcodate in cod nou. - Fisiere `.vc2`/`.sc2`: TAB-uri semnificative, proprietatile in blocul `*` sunt alfabetizate - orice editare manuala trebuie sa respecte formatul (vezi CLAUDE.md, flux editare text). ## 7. Ce am lasat pe dinafara (intentionat) - `proceduri_comune.prg` (varianta veche) - acoperita in nota sect. 1 (2 functii unice folosite, restul dublate/moarte); functiile ei unice cu 0 aparitii (caut_nume_politica, make_sectii_utilizator, recompune_optiuni, cere*/compara*, debug_*_eventtracking, ...) - omise. - `oproceduri_comune_imob.prg` - varianta specifica ROAIMOB, nu ROAGEST. - `xdate.prg` - script procedural (incarca cursoarele xsets/xrequest/xnote la DO), nu expune functii. - Metoda `getUserRepPath` din oExportConfig - complet comentata (moarta); varianta activa e functia libera omonima din `proceduri_rapoarte.prg` (cod diferit). - Clase de nomenclatoare mari (`onomenclatoare.vcx`, `onom_articole.vcx`, `stocuri.vcx`, `rulaje.vcx`, `ointroduceri*.vcx`, `oinventar.vcx`) - business logic gestiune, prea voluminos pt. acest inventar (candidat pt. inventar separat per-flux, daca devine necesar). - Clasele de configurare/serii (`configurare.vcx`, `serii_numere.vcx`, `ferestre_oracle.vcx`, `bon_fisc.vcx`) si utilitarele (`GridExtras`, `ctl32`, `hpdf`) - neinventariate, uz rar in fluxurile curente (`excelxml.vcx` e acoperita la sect. 3). - Functiile din `COMUN\programe` fara nicio aparitie prin grep in ROAGEST (posibil doar alte aplicatii ROA) - omise. ## 8. Cum se foloseste - **La plan**: inainte de cod/obiecte noi, scaneaza acest fisier + un grep tintit (`grep -rn "" COMUN/programe D:\ROA\_vfp_textcache\roagest`) ca sa confirmi ca nu exista deja o comuna echivalenta. - **La code-review**: daca un diff introduce Scan manual pt. liste, MESSAGEBOX direct, SQLEXEC direct, un buton cu Click suprascris in loc de `caction`, export Excel/listare construite manual in loc de `goExport.export2*`/FoxyPreview, sau un dialog de alegere nomenclator din SELECT+grid in loc de `caut_*` (ocautare.prg), semnaleaza comuna corespunzatoare din tabelele de mai sus.