# Cercetare: eticheta care duce la editarea facturii emise Sarcina: gasirea locului (locurilor) unde apare textul care duce la editarea facturii emise (formularul `frm_modific2024`, `COMUN\clase\omodificari.vc2`), pentru a evalua propunerea utilizatorului de a-l redenumi in **"editare factura (note, rulaje, articole)"**. Concluzie scurta: **nu exista un bar de meniu `.mnx` clasic** cu acest text. Punctul real de intrare e un **popup dinamic construit din `xmenu(...)` intr-un fisier `.vc2`** (deci write-back-abil prin `txt2vcx.ps1`, nu editare manuala in IDE cum s-a presupus initial in brief). Vezi punctul C pentru corectia asta. --- ## A. Toate locurile unde apare eticheta / unde s-ar putea afla Cautari facute (rezultate zero pentru textul cerut in `.mnx`/`.mn2`): - `grep -in "modific\|editeaz\|editare" Meniuri\vanzare1.mn2 ... vanzare5.mn2` -> **zero hit-uri**. - `grep -ln "modific\|editeaz\|editare" Meniuri\*.mn2 COMUN\meniuri\*.mn2` -> doar `Meniuri\model.mn2` si `Meniuri\roafacturare.mn2`, ambele **irelevante**: - `Meniuri\roafacturare.mn2:50` — `DEFINE BAR 3 OF Ajutor PROMPT "\ comanda -> `frm_modific2024` ``` frm_facturi (lista facturi emise) -> but_modifica1 (mostenit din _frm_base, ToolTipText "Modificare (CTRL+M)") -> click -> inainte_de_do_modifica() [ofacturare_comun.vc2:4928] -> xmenu('Modificare \ optiunea 2 -> This.do_editare_factura() [ofacturare_comun.vc2:3715] -> seteaza tipul, verifica drepturi (This.lactiv3), Reccount('crsfacturi')... -> Omodif = Createobject([frm_modific2024], lnIdSet) [ofacturare_comun.vc2:3796] -> Omodif.Show() ``` Confirmare independenta a clasei tinta prin `vfp_symbols.ps1 -Where "ofacturare_comun.vc2:4935"`: `frm_facturi.inainte_de_do_modifica [method] ofacturare_comun.vc2:4928-4937`. **Alte cai catre acelasi formular**, gasite prin `grep -rn frm_modific2024` (43 fisiere), toate insa in alt context, nu din meniul principal de facturare al utilizatorului final: - `COMUN\clase\comun.vc2:2439` — `afisjurcom.do_modifica` (metoda generica, ramura `IF gnAn >= ... ELSE Createobject([frm_modific])`) — e ruta **veche/generica** de "nota contabila", partajata cu toate produsele ROA (nu specifica facturii). - `COMUN\clase\anaf_efactura.vc2:13087` — deschidere `frm_modific2024` din fluxul e-Factura ANAF (verificare/validare, nu din butonul de lista). - `COMUN\ferestre\frm_import_note_facturi_clienti.sc2:898` si `COMUN\ferestre\frm_initializare_facturi_balanta.sc2:1806` — fluxuri de import/initializare, nu editarea unei facturi deja emise, deci **nu intra in scopul cerut**. Pentru cererea utilizatorului ("editarea facturii emise"), **singurul loc relevant si cu text apropiat de ce isi doreste** este `ofacturare_comun.vc2:4930` (optiunea 2 din popup). ## C. Cum se schimba textul in practica - **Nu e in `.mnx`/`.mn2`.** Nu exista un `DEFINE BAR ... PROMPT` cu acest text nicaieri in proiect. Deci nu e nevoie de editare manuala in IDE-ul de meniuri. - **E literal, hardcodat intr-o metoda `.vc2`**: `COMUN\clase\ofacturare_comun.vc2:4930`, in interiorul clasei `frm_facturi`, metoda `inainte_de_do_modifica`. Fisierul `.vc2` **este** write-back-abil prin `txt2vcx.ps1` (regula generala din `CLAUDE.md`: doar `.vc2`/`.sc2` accepta scriere inapoi in binar). Deci schimbarea propusa de utilizator **se poate face prin editare text + `txt2vcx.ps1`**, nu necesita interventie manuala in IDE. - Text propus de utilizator ca inlocuitor pentru optiunea 2: in loc de `"Editare \100 instantieri `but_modifica` in `.vc2`/`.sc2`, majoritatea in `onomenclatoare.vc2`, `onom_sal.vc2`, `oparteneri.vc2` etc., niciunul specific facturii). Un text de forma "editare factura..." pus acolo ar minti pe toate celelalte ecrane (parteneri, personal, stocuri...). - **Nu exista mecanism `.mnx` compilat separat de regenerat** pentru aceasta schimbare — nefiind vorba de un `.mnx`, nu se aplica `git_sync.ps1`/recompilare de meniu; e nevoie doar de rebuild-ul normal al proiectului dupa modificarea `.vcx` (Project > Build din VFP IDE), conform fluxului standard descris in `CLAUDE.md`. ## C-bis. Localizare (`Locale\`) - Directorul `Locale\` **exista dar e complet gol** in aceasta copie de lucru (`find D:\ROA\ROAFACTURARE\Locale -type f` → 0 fisiere). Nu exista tabele DBF de traducere incarcate aici. - Nu exista niciun apel `Traduc(...)`/`goApp.Traduc(...)` in jurul `ToolTipText`-ului `but_modifica` sau al liniei `xmenu(...)` de mai sus — am cautat in `cmd_butoane.vc2` si `_frm_base.vc2` (`grep -n "Traduc\b"` → zero hit-uri in ambele). Singura potrivire pentru "traduc" in tot proiectul e in `comun.vc2:2157-2158`, cod comentat (`*!* IF THIS.filtru_traducere()#""`), nefolosit si nelegat de acest buton. - **Concluzie**: textul e o constanta Romana hardcodata direct in `.vc2`, nu vine din nicio sursa de traducere. Nu exista alte limbi de verificat pentru acest text. ## D. Captions reale ale paginilor din `frm_modific2024` Premisa utilizatorului ("trei pagini: Note, Rulaje si Articole") **nu se potriveste exact cu Caption-urile din formular**. Am verificat cu: ``` vfp_symbols.ps1 -Find frm_modific2024 -> class frm_modific2024 omodificari.vc2:6375-16836 awk 'NR==6375,NR==16836' omodificari.vc2 | grep -n "AS _pageframe\|PAGE.\.Caption" ``` Rezultat: **exista un singur `PageFrame`** in formular, `pgfArticole` (`omodificari.vc2:8714-8732`, adica linia absoluta ≈ `6375+2341` in indexare relativa), cu **3 pagini**, niciuna captionata "Note": ``` COMUN\clase\omodificari.vc2:8725 PAGE1.Caption = "Rulaje materii prime, materiale, marfuri, obiecte inventar (303)" COMUN\clase\omodificari.vc2:8728 PAGE2.Caption = "Rulaje obiecte inventar in folosinta (8039)" COMUN\clase\omodificari.vc2:8731 PAGE3.Caption = "Articole factura" ``` Nu exista nicio pagina/tab captionat literal **"Note"**. Zona de "note" (liniile notei contabile — coloane precum "Explicatie C", "Cont", "Cota TVA" etc., verificate prin `grep -n "Caption = \"" ` in intervalul clasei) e **corpul principal al formularului** (grid-ul de baza `grid1`), nu o pagina din pageframe. Deci structura reala e: - corp principal (nepaginat) = liniile notei contabile ("Note" e denumirea informala folosita in discutii, nu un Caption efectiv); - `pgfArticole.PAGE1` + `PAGE2` = doua variante de "Rulaje" (materiale 303 / obiecte inventar 8039); - `pgfArticole.PAGE3` = "Articole factura". Titlul formularului insusi e generic: `Lb_titlu_alb_b121.Caption = "MODIFICARE"` (`omodificari.vc2:6934`, in Init-ul clasei `frm_modific2024`), nu mentioneaza nici el "factura" sau "note/rulaje/articole". **Recomandare pentru textul de meniu**: formularea "note, rulaje, articole" e conceptual corecta (reflecta cele 3 zone reale), dar nu e un citat al Caption-urilor efective de pe ecran — daca se doreste consistenta stricta cu ce vede utilizatorul, ar trebui fie sa se ajusteze si Caption-urile paginilor (schimbare separata, in afara scopului acestei cercetari), fie sa se accepte ca eticheta de meniu descrie zonele functional, nu litera Caption-urilor. ## E. Pagina Articole e conditionata **Da, e strict conditionata** — nu apare intotdeauna. Dovezi: ``` COMUN\clase\omodificari.vc2:14927 This.lAreArticoleVanzari = .F. COMUN\clase\omodificari.vc2:14928 IF "OFACTURARE_EDITARE" $ Upper(Set("Procedure")) AND Reccount('tact') > 0 COMUN\clase\omodificari.vc2:14929 IncarcaVanzareDinNota('tact') COMUN\clase\omodificari.vc2:14930 IF Reccount('tvanz') = 1 COMUN\clase\omodificari.vc2:14931 This.lAreArticoleVanzari = .T. COMUN\clase\omodificari.vc2:14932 This.nIdVanzare = tvanz.id_vanzare COMUN\clase\omodificari.vc2:14933 This.nTipVanzare = tvanz.tip COMUN\clase\omodificari.vc2:14934 This.lArticoleReadOnly = EsteInEFactura(Nvl(tvanz.id_fact,0)) COMUN\clase\omodificari.vc2:14935 ENDIF COMUN\clase\omodificari.vc2:14936 ENDIF ... COMUN\clase\omodificari.vc2:14941 IF This.lAreArticoleVanzari COMUN\clase\omodificari.vc2:... This.pgfArticole.PageCount = 3 COMUN\clase\omodificari.vc2:... ELSE COMUN\clase\omodificari.vc2:14958 This.pgfArticole.PageCount = 2 COMUN\clase\omodificari.vc2:14959 This.but_nouR.Enabled = .F. COMUN\clase\omodificari.vc2:14960 ENDIF ``` Conditia exacta pentru ca pagina "Articole factura" sa fie vizibila: 1. formularul a fost deschis din contextul de editare factura (`"OFACTURARE_EDITARE" $ Upper(Set("Procedure"))` — adica din lantul `frm_facturi -> do_editare_factura`, nu din ruta generica `do_modifica`); 2. nota are cel putin o linie de tip articol (`Reccount('tact') > 0`); 3. exista **exact o** vanzare (factura) legata de nota (`Reccount('tvanz') = 1`). Daca oricare din conditii lipseste, `pgfArticole.PageCount = 2` — pagina "Articole factura" **nu apare deloc**, ramanand doar cele doua pagini de "Rulaje". In plus, chiar cand pagina apare, poate fi **doar-citire** (`This.lArticoleReadOnly = EsteInEFactura(...)`) daca factura a fost deja trimisa in e-Factura ANAF (`omodificari.vc2:14934`, plus dezactivari vizibile in `omodificari.vc2:14943-14947`: `but_nouR.Enabled`, `txtDiscountArt.ReadOnly`, `lblArticoleReadOnly.Visible`, `cmdSincronizeazaArticole.Enabled`). **Implicatie pentru textul de meniu**: un text care promite mereu "articole" (ex. "editare factura (note, rulaje, articole)") poate **minti in unele cazuri** — cand nota nu are exact o vanzare asociata sau nu are linii de tip articol, utilizatorul nu vede pagina de articole deloc, desi eticheta i-a promis-o. E o observatie de continut, nu un blocaj — decizia de a accepta acest risc (eticheta descrie "ce se poate edita in general", nu "ce va vedea de fiecare data") apartine utilizatorului/echipei. ## Sumar raspunsuri la intrebarile din brief | Intrebare | Raspuns | |---|---| | Exista eticheta `.mnx` literala? | **NU** — cautare completa in toate `.mn2`-urile proiectului si `COMUN\meniuri\`, zero hit-uri pe "editare factura" sau variante | | Unde e reala eticheta? | `COMUN\clase\ofacturare_comun.vc2:4930`, in `xmenu()`, clasa `frm_facturi`, metoda `inainte_de_do_modifica` | | Textul de azi | `Editare \