Cercetarile si propunerile rundelor 4-6 pe editarea facturii emise. Starea rundei 6 si ce s-a stabilit intra in progres.md. Nou: docs/conventii_mediu_oracle.md - pe dev/test se lucreaza numai cu ROA_CENTRAL si schemele CONTAFIN_ORACLE si MARIUSM_AUTO; schema ACN nu se foloseste. Scripturile de pachet sunt necalificate, deci schema tinta o decide sirul de conectare, nu fisierul. roafacturare.pj2 regenerat de git_sync. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013gYCNE26G1G7UoGu2ju7aS
14 KiB
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-> doarMeniuri\model.mn2siMeniuri\roafacturare.mn2, ambele irelevante:Meniuri\roafacturare.mn2:50—DEFINE BAR 3 OF Ajutor PROMPT "\<Jurnal modificari"(jurnal de audit al aplicatiei, nu editare factura).Meniuri\model.mn2:14—DEFINE BAR 2 OF Shortcut PROMPT "\<Modificare raport"(editare raport definit de utilizator, nu factura).
- Niciun
.mnx/.mn2din proiect sau dinCOMUN\meniuri\nu contine referinta lafrm_modific2024sauofacturare_editare(verificat cu grep pe toate cele 43 de fisiere unde aparefrm_modific2024— niciunul e.mn2).
Locul real e un buton de toolbar generic + un popup xmenu() construit in cod, in
COMUN\clase\ofacturare_comun.vc2, pe formularul frm_facturi (lista de facturi emise):
-
Butonul de toolbar — clasa
but_modifica, definita generic inCOMUN\clase\cmd_butoane.vc2:182-197:DEFINE CLASS but_modifica AS buton OF "_cmd_base.vcx" caction = inainte_de_do_modifica ... ToolTipText = "Modificare (CTRL+M)"Acest buton e adaugat direct in clasa de baza a tuturor formularelor,
COMUN\clase\_frm_base.vc2:1103(ADD OBJECT 'But_modifica1' AS but_modifica ...), deci apare pe toate formularele-lista din suita ROA (parteneri, personal, stocuri, note contabile, facturi etc.), nu doar pe cel de facturi. Textul lui ("Modificare (CTRL+M)") e generic si hardcodat, nu vine dinLocale\(vezi punctul C). -
Popup-ul specific facturii —
frm_facturi(definit inofacturare.vcx/ofacturare_comun.vc2) suprascrie handler-ul butonului cu propriul sau meniu contextual:COMUN\clase\ofacturare_comun.vc2:4928-4937 PROCEDURE inainte_de_do_modifica Local lnOptiune lnOptiune = xmenu('Modificare \<date factura;Editare \<factura (articole, cantitati, preturi)') Do Case Case lnOptiune = 1 This.do_modifica() Case lnOptiune = 2 This.do_editare_factura() Endcase ENDPROCTextul exact de azi al liniei (verificat byte cu byte, ASCII curat, fara diacritice corupte):
xmenu('Modificare \<date factura;Editare \<factura (articole, cantitati, preturi)')—COMUN\clase\ofacturare_comun.vc2:4930.Deci utilizatorul care apasa butonul "Modificare (CTRL+M)" pe lista de facturi vede un mini-meniu cu doua optiuni:
- "Modificare date factura" (accelerator D) →
This.do_modifica()— ruta genericaafisjurcom.do_modificadincomun.vc2:2222-2572(aceeasi metoda partajata de foarte multe tipuri de documente din suita, cu ramuri Do Case pentru fiecare). - "Editare factura (articole, cantitati, preturi)" (accelerator F) →
This.do_editare_factura()— asta e ruta directa catrefrm_modific2024.
- "Modificare date factura" (accelerator D) →
B. Lantul real: eticheta -> 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 \<date factura;Editare \<factura (articole, cantitati, preturi)')
[ofacturare_comun.vc2:4930]
-> 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, ramuraIF 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— deschiderefrm_modific2024din fluxul e-Factura ANAF (verificare/validare, nu din butonul de lista).COMUN\ferestre\frm_import_note_facturi_clienti.sc2:898siCOMUN\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 unDEFINE BAR ... PROMPTcu 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 claseifrm_facturi, metodainainte_de_do_modifica. Fisierul.vc2este write-back-abil printxt2vcx.ps1(regula generala dinCLAUDE.md: doar.vc2/.sc2accepta 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 \<factura (articole, cantitati, preturi)"ar deveni ceva de forma"Editare \<factura (note, rulaje, articole)"— pastrand acceleratorul\<F. (Nu am facut modificarea — doar raportez unde s-ar face, conform interdictiilor primite.) ToolTipText = "Modificare (CTRL+M)"dincmd_butoane.vc2:194NU trebuie schimbat — e folosit de zeci de formulare din toata suita ROA (am numarat >100 instantieribut_modificain.vc2/.sc2, majoritatea inonomenclatoare.vc2,onom_sal.vc2,oparteneri.vc2etc., niciunul specific facturii). Un text de forma "editare factura..." pus acolo ar minti pe toate celelalte ecrane (parteneri, personal, stocuri...).- Nu exista mecanism
.mnxcompilat separat de regenerat pentru aceasta schimbare — nefiind vorba de un.mnx, nu se aplicagit_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 inCLAUDE.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 jurulToolTipText-uluibut_modificasau al linieixmenu(...)de mai sus — am cautat incmd_butoane.vc2si_frm_base.vc2(grep -n "Traduc\b"→ zero hit-uri in ambele). Singura potrivire pentru "traduc" in tot proiectul e incomun.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:
- formularul a fost deschis din contextul de editare factura (
"OFACTURARE_EDITARE" $ Upper(Set("Procedure"))— adica din lantulfrm_facturi -> do_editare_factura, nu din ruta genericado_modifica); - nota are cel putin o linie de tip articol (
Reccount('tact') > 0); - 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 \<factura (articole, cantitati, preturi) |
Vine din Locale\? |
Nu — Locale\ e goala, nu exista apel Traduc() in jurul acestui text |
Se schimba in .mnx sau in cod? |
In cod (.vc2), write-back prin txt2vcx.ps1 — nu necesita editare manuala in IDE |
| Paginile se numesc Note/Rulaje/Articole? | Nu literal — un singur pageframe cu 3 pagini: "Rulaje materii prime..." / "Rulaje obiecte inventar..." / "Articole factura"; zona de note e corpul principal, nepaginat |
| Pagina Articole e mereu prezenta? | Nu — conditionata de 3 conditii (omodificari.vc2:14927-14936), poate lipsi sau fi doar-citire |
Nimic din NESTABILIT — toate afirmatiile au dovada fisier:linie verificata direct in text.