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
21 KiB
Propunere runda 6 - grid Articole: nomenclatoare, zecimale, aspect, meniu, buton frm_facturi
Stare: diagnostic incheiat, nimic aplicat. Cele sase semnalari din proba pe ecran din 20.08.2026 sunt diagnosticate cu dovada pe cod. Fiecare punct de mai jos are cauza, interventia propusa si ce anume trebuie sa decizi.
Cercetari de sprijin:
docs\cercetare\rec_r6_nomenclatoare_grid.md, docs\cercetare\rec_r6_zecimale_si_aspect_grid.md,
docs\cercetare\rec_r6_meniu_editare_factura.md,
docs\cercetare\rec_r6_buton_modificare_frm_facturi.md.
Cum functioneaza de fapt gridul de Articole azi
Miezul, verificat direct pe cod - fara asta punctele 1, 2 si 4 par contradictorii:
Cinci coloane au nomenclator (GotFocus + InteractiveChange), enumerate din
COMUN\clase\omodificari.vc2:
| Coloana | ControlSource | GotFocus | InteractiveChange |
|---|---|---|---|
cDenumireArt (articol) |
tvd.denumire |
:16705 | :16710 |
cGestiuneArt |
tvd.gestiune |
:16734 | :16739 |
cTaxcodeArt |
tvd.taxcode |
:16810 | :16815 |
cValutaArt |
tvd.valuta |
:16821 | :16826 |
cExplicatieTvaArt |
expresie (vezi mai jos) | :16722 | :16728 |
Toate cinci au Text1.ReadOnly = .T.. Asta nu e o greseala: mecanismul se sprijina fix pe ea.
Intr-un grid VFP, cand celula curenta e read-only si coloana e legata de un camp real, tastarea
declanseaza cautarea incrementala a gridului, care schimba Value, ceea ce declanseaza
InteractiveChange, care deschide nomenclatorul. Asa merge taxcode la tastare.
cExplicatieTvaArt e singura exceptie, si de aici vine punctul 1:
omodificari.vc2:12467
Column16.ControlSource = "Iif(Seek(Nvl(tvd.id_jtva_coloana,0),'crsJtvaTemp','id_jtva'),crsJtvaTemp.denumire,'')"
Coloana afiseaza denumirea din crsJtvaTemp, deci e legata de o expresie, nu de un camp.
Nu exista camp pe care sa se faca seek, deci Value nu se schimba niciodata la tastare, deci
InteractiveChange nu porneste. Nu e o garda gresita si nu lipseste nicio ramura din dispecer -
e o consecinta structurala a felului in care coloana isi ia textul.
Butonul lateral Modificare ocoleste complet problema fiindca nu citeste ControlSource, ci
Thisform.pccontrol, pe care GotFocus il pune explicit:
omodificari.vc2:16722-16726
PROCEDURE ... cExplicatieTvaArt.Text1.GotFocus
*!* coloana afiseaza denumirea din crsJtvaTemp, deci ControlSource e expresie - campul editat se da explicit
Thisform.pccontrol = 'tvd.id_jtva_coloana'
Thisform.pncolumnorder = This.Parent.ColumnOrder
De aici rezulta fixul care rezolva punctele 1 si 2 dintr-o singura miscare: DblClick se
sprijina si el pe pccontrol, deci merge uniform pe toate cele cinci coloane, inclusiv pe
explicatie TVA, unde tastarea nu are cum sa mearga niciodata.
Punctul 1+2 - dublu-click pe toate nomenclatoarele
Cauza: DblClick nu exista deloc pe grdArticoleFactura azi. Explicatie TVA n-are nici calea
de tastare, din motivul de mai sus.
Interventia propusa: cinci metode noi DblClick, cate una per coloana cu nomenclator, pe
controlul din coloana (<coloana>.Text1.DblClick, nu pe coloana), cu corp identic - acelasi corp
de trei linii ca InteractiveChange-urile existente:
PROCEDURE pgfArticole.PAGE3.grdArticoleFactura.<coloana>.Text1.DblClick
Local loEditor
loEditor = Createobject('ArticoleNotaEditor', Thisform)
loEditor.ModificaNomenclator(Thisform.pccontrol)
ENDPROC
Nimic de schimbat in dispecer. pccontrol e deja corect la momentul dublu-click-ului: primul clic
da focusul si declanseaza GotFocus, al doilea completeaza DblClick.
Efect: explicatie TVA capata in sfarsit o cale din grid (dublu-click), iar celelalte patru capata a doua cale, pe langa tastare.
De decis: nimic - e curat si aditiv. Confirma doar ca vrei si pe cDenumireArt (articol),
nu doar pe cele patru mici.
Punctul 3 - trei zecimale la Pret
Aici formularea ta era aproape exacta, dar cu variabila inversata, si asta e chiar defectul.
Coloana este deja controlata de o variabila globala:
omodificari.vc2:12391 Column6.InputMask = (get_mask(12,gnPPRET)) && cPretArt = tvd.pret
omodificari.vc2:12400 Column7.InputMask = (get_mask(12,gnPPRET)) && cPretAchizitieArt
Ambele coloane primesc gnPPret. Dar gnPPret e precizia pretului de achizitie (=3 in mediul
investigat, OPTIUNI.PPRET), iar tvd.pret e pretul de vanzare al liniei, a carui precizie e
gnPPretV (oinit_optiuni.prg:515: Store 0 To gnPPretV && nr. de zecimale pret vanzare).
Regula e consecventa in restul suitei, si se vede pe doua coloane vecine in acelasi fisier:
ofacturare.vc2:3490 Column5.InputMask = (get_mask(14,gnPPret)) && "pret" = achizitie
ofacturare.vc2:3497 Column6.InputMask = (get_mask(14,gnPPretV)) && "pretv" = vanzare
Chiar scrierea in Oracle a coloanei VANZARI_DETALII.PRET - aceeasi din care se umple tvd.pret -
foloseste gnPPretV:
ofacturare_stoc.prg:367
Alltrim(Str(poArticol.Pret,18,Iif(poDate.in_valuta = 1,gnPVal,gnPPretV)))
Cauza: la scrierea sectiunii de grid s-a copiat masca de la coloana de achizitie pe coloana de vanzare de langa ea.
Interventia propusa: omodificari.vc2:12391, get_mask(12,gnPPRET) -> get_mask(12,gnPPretV).
O singura linie.
Doua lucruri conexe, de decis separat:
cPretCuTvaArt(omodificari.vc2:12404-12409) n-are delocFormat/InputMask, deci afiseaza precizia bruta a cursorului (4 zecimale), necontrolata de nimic. Il aliniem lagnPPretVin aceeasi runda, sau il lasam?- Linia din
ofacturare_stoc.prg:367arata ca pe documentele in valuta precizia corecta egnPVal, nugnPPretV.InputMaskde pe coloana se evalueaza o singura data, la instantierea clasei, cand moneda documentului inca nu e cunoscuta in acel context - deci o masca fidela pe ambele cazuri ar cere setare la runtime, inInit, dupa ce se stiein_valuta. Recomand sa NU intram acum: e o rafinare separata, iar simptomul pe care l-ai vazut se rezolva complet cu schimbarea de o linie. Semnalez doar ca ramane o inexactitate cunoscuta pe facturile in valuta.
Punctul 4 - fundalul gri
Aici concluzia e in doua parti, si a doua e mai serioasa decat pare din enunt.
Conventia de culoare exista deja in aplicatie, si chiar in acelasi formular, pe pagina Rulaje:
| Aspect | Semnificatie | Exemplu |
|---|---|---|
alb 255,255,255 + ReadOnly=.F. |
se scrie direct, prin tastare | grdRulaje.cPret.Text1, :9990 |
verde 160,255,205 + ReadOnly=.F. |
se editeaza, dar prin dialog/nomenclator | grdRulaje.cGest.Text1, :9689; cDenumire.Text1, :9595 |
gri 225,225,225 + ReadOnly=.T. |
nu se editeaza | - |
4a. Cele cinci coloane cu nomenclator sunt colorate gresit
cDenumireArt, cGestiuneArt, cTaxcodeArt, cValutaArt, cExplicatieTvaArt au toate
BackColor = 225,225,225 (gri) desi au editor. Omologul direct al lui cGestiuneArt de pe pagina
Rulaje (cGest, acelasi tipar GotFocus/InteractiveChange/ArticoleNotaEditor) e verde.
Deci acelasi mecanism functional e colorat diferit in doua pagini ale aceluiasi formular.
Interventia propusa: cele cinci trec pe verde 160,255,205.
Recomand sa NU atingem Text1.ReadOnly pe ele, desi pe Rulaje verdele vine cu ReadOnly=.F.
Motivul: pe Articole, calea de tastare merge tocmai fiindca sunt read-only (cautarea
incrementala). Ai probat-o azi pe taxcode si functioneaza. Daca le facem .F., tastarea ar scrie
direct in celula in loc sa declanseze cautarea - alt comportament, netestat, cu risc de a scrie
gunoi in tvd.taxcode. Verdele singur spune adevarul si nu misca nimic functional.
4b. Serie, lot si explicatie NU sunt editabile azi - griul spune adevarul
Asta e partea care nu se potriveste cu ce ai scris, si cred ca e o bucata neterminata din runda 5.
Aceste trei coloane au Column.ReadOnly = .F. si o garda .When relaxata in runda 5
(cSerieArt :16804, cLotArt :16745, cExplicatieArt :16716 - toate IF lArticoleReadOnly OR id_vanzare_set <> 0 -> RETURN .F.). Dar controlul din coloana a ramas neatins:
omodificari.vc2:12734-12743 cSerieArt.Text1 BackColor = 225,225,225 ReadOnly = .T.
omodificari.vc2:12631-12640 cLotArt.Text1 BackColor = 225,225,225 ReadOnly = .T.
omodificari.vc2:12569-12578 cExplicatieArt.Text1 BackColor = 225,225,225 ReadOnly = .T.
Comparatie de control, pe o coloana pe care sigur o editezi:
omodificari.vc2:12485-12494 cCantitateArt.Text1 BackColor = 255,255,255 ReadOnly = .F.
Nu au nici cale prin buton: but_modificaR se activeaza in AfterRowColChange (:16678-16682) doar
cand Thisform.pncolumnorder = nColIndex, iar pncolumnorder se scrie exclusiv in GotFocus -
care exista doar pe cele cinci coloane cu nomenclator. Pe serie/lot/explicatie butonul ramane
dezactivat.
Deci: garda a fost relaxata in runda 5, dar campurile au ramas read-only. Nu se pot edita pe nicio cale. Griul e onest; intentia din runda 5 e cea neimplinita.
Interventia propusa: cele trei trec pe alb 255,255,255 + Text1.ReadOnly = .F., ca
cCantitateArt. Abia atunci devin editabile prin tastare, cum s-a decis in runda 5.
De decis - e o schimbare reala de comportament, nu cosmetica: confirmi ca serie, lot si
explicatie trebuie sa devina scriabile direct in celula pe liniile deja salvate? (Garda .When
existenta ramane si continua sa blocheze liniile din seturi si facturile intrate in e-Factura.)
Punctul 5 - textul din meniu
Eticheta nu e in .mnx - cautarea in toate meniurile proiectului n-a gasit-o. E un literal
intr-o metoda, deci se poate schimba prin text + write-back, fara interventie manuala in IDE:
COMUN\clase\ofacturare_comun.vc2:4930
lnOptiune = xmenu('Modificare \<date factura;Editare \<factura (articole, cantitati, preturi)')
Interventia propusa: a doua optiune devine
Editare \<factura (note, rulaje, articole), cu acceleratorul \<F pastrat.
ToolTipText = "Modificare (CTRL+M)" de pe butonul generic (cmd_butoane.vc2:194) nu se
atinge - e mostenit de peste 100 de formulare din toata suita; un text despre facturi acolo ar
minti pe ecranele de parteneri, personal, stocuri.
Doua observatii inainte sa confirmi textul:
- Paginile reale ale formularului nu se numesc "Note / Rulaje / Articole":
Nu exista pagina "Note" - liniile notei sunt corpul principal al formularului, nepaginat. Formularea ta descrie corect cele trei zone functionale, dar nu citeaza etichetele de pe ecran. E in regula asa, sau vrei alt text?
omodificari.vc2:8725 PAGE1.Caption = "Rulaje materii prime, materiale, marfuri, obiecte inventar (303)" omodificari.vc2:8728 PAGE2.Caption = "Rulaje obiecte inventar in folosinta (8039)" omodificari.vc2:8731 PAGE3.Caption = "Articole factura" - Pagina Articole e conditionata (
omodificari.vc2:14927-14936): apare doar cand nota se mapeaza pe exact o vanzare (Reccount('tvanz') = 1); altfelPageCount = 2. Un text care promite mereu "articole" va fi inexact pe notele fara vanzare atasata. Nu e grav - dar sa stii.
Punctul 6 - explicatie TVA in butonul de modificare din frm_facturi
Premisa ta e corecta si am verificat-o direct pe baza, nu din raport. Procedura care salveaza:
PROCEDURE modifica_explicatie_articol(V_ID_VANZARE_DET IN NUMBER,
V_EXPLICATIE IN VARCHAR2,
V_ID_UTIL IN NUMBER,
V_TAXCODE IN NUMBER DEFAULT NULL) is
BEGIN
UPDATE VANZARI_DETALII
SET EXPLICATIE = V_EXPLICATIE, TAXCODE = V_TAXCODE
WHERE ID_VANZARE_DET = V_ID_VANZARE_DET;
END modifica_explicatie_articol;
Doua coloane, fara recalcul, fara atingerea cantitatii/pretului/cotei. Butonul e intr-adevar
"campurile care nu modifica valorile". (Detaliu lateral: V_ID_UTIL e primit si nefolosit.)
Traseul azi: But_modifica2 (ofacturare_comun.vc2:1436) -> do_modifica_explicatie() (:4642) ->
dialogul frm_modifica_articol_factura (:5129), cu explicatie (editbox) si taxcode (combo pe
lista plata de coduri SAF-T, fara legatura cu explicatia TVA).
Aici e capcana. Sablonul din frm_modific2024 nu se poate copia 1:1: acolo alegerea
explicatiei TVA scrie id_jtva_coloana si proc_tvav (cota noua) si recheama
calculeaza_valori_articol() (ofacturare_editare.prg:1100-1147, omodificari.vc2:15049). Adica
exact ce butonul asta nu face si nu trebuie sa faca.
Interventia propusa, ca sa ramana neutru valoric:
- In dialog, combo nou pe explicatie TVA, filtrat pe cota curenta a liniei - ca sa nu se poata alege o explicatie cu alta cota. Asta e ce pastreaza promisiunea "nu modifica valorile".
- La alegere, se deriva
taxcodeprinGetTaxCodeIdPart(oproceduri_comune.prg, functie globala, apelabila din orice formular) si se scrie in combo-ul existent.proc_tvavnu se atinge. - Piesele sunt refolosibile ca atare:
caut_explicatie_tva(ocautare.prg) siGetTaxCodeIdPartsunt globale. Cod VFP nou estimat: ~30-40 de linii.
Blocajul, si de asta punctul 6 nu poate intra in aceeasi livrare cu 1-5: id_jtva_coloana n-are
unde sa se salveze. Procedura Oracle primeste doar explicatie si taxcode. Daca scriem doar
taxcode, explicatia TVA a liniei ramane desincronizata de codul fiscal - adica exact defectul pe
care vrem sa-l evitam. Deci e nevoie de un parametru nou in pack_facturare.modifica_explicatie_articol,
schimbare PL/SQL in afara acestui repo, de coordonat separat.
De decis:
- Confirmi filtrarea pe cota curenta (varianta neutra)? Alternativa - lista completa de explicatii,
cu recalcul - ar transforma butonul in altceva decat e azi si l-ar suprapune peste editarea din
frm_modific2024. Recomand filtrarea. - Vrei sa pornim modificarea PL/SQL, sau punctul 6 asteapta?
Bonus, deja rezolvat: gridul din frm_facturi afiseaza deja "Explicatie TVA" / "Explicatie TVA 2"
ca si coloane read-only (ofacturare_comun.vc2:1679-1687) - nu e nimic de adaugat in grid, doar in
dialog.
Ce propun sa intre in livrarea imediata
Punctele 1, 2, 3, 4, 5 - toate in COMUN\clase\omodificari.vc2 si
COMUN\clase\ofacturare_comun.vc2, ambele write-back-abile. Fara atingerea bazei de date.
| # | Fisier | Interventie | Volum |
|---|---|---|---|
| 1+2 | omodificari.vc2 |
5 metode DblClick noi |
~25 linii |
| 3 | omodificari.vc2:12391 |
gnPPRET -> gnPPretV |
1 linie |
| 4a | omodificari.vc2 |
5 BackColor -> verde 160,255,205 |
5 linii |
| 4b | omodificari.vc2 |
3 BackColor -> alb + ReadOnly=.F. |
6 linii |
| 5 | ofacturare_comun.vc2:4930 |
textul optiunii 2 din xmenu |
1 linie |
Punctul 6 ramane separat - depinde de o schimbare PL/SQL.
Ce astept de la tine inainte sa deleg aplicarea
- Punctul 4b - confirmi ca serie/lot/explicatie devin scriabile in celula? (singura schimbare reala de comportament din lot)
- Punctul 3 - aliniem si
cPretCuTvaArtlagnPPretV, sau il lasam? - Punctul 5 - textul exact:
Editare \<factura (note, rulaje, articole)? - Punctul 1+2 -
DblClicksi pe coloana de articol (cDenumireArt), sau doar pe celelalte patru? - Punctul 6 - pornim schimbarea PL/SQL acum, sau asteapta?
Nimic nu e aplicat. Niciun fisier de cod n-a fost atins in aceasta runda, nu s-a facut write-back,
nu s-a rulat git_sync.ps1, nu s-a scris nimic in Oracle (doar un SELECT din all_source pentru
sursa procedurii), nu s-a comis nimic.
DECIZIILE LUI MARIUS - 20.08.2026, luate, se aplica
| Punct | Decizie |
|---|---|
1+2 DblClick |
toate cinci coloanele cu nomenclator, inclusiv cDenumireArt |
| 3 Pret | gnPPRET -> gnPPretV la omodificari.vc2:12391 |
3 conex cPretCuTvaArt |
se aliniaza la get_mask(12,gnPPretV) |
| 4a cele 5 cu nomenclator | verde 160,255,205; Text1.ReadOnly ramane .T. |
| 4b serie / lot / explicatie | devin scriabile: alb 255,255,255 + Text1.ReadOnly = .F. |
| 5 meniu | Editare \<factura (note, rulaje, articole); Caption-urile paginilor nu se ating |
6 explicatie TVA in frm_facturi |
lista completa, CU recalcul; PL/SQL porneste acum |
Consecinta punctului 6, semnalata si acceptata
Cu lista completa si recalcul, butonul But_modifica2 nu mai e "campuri fara impact pe
valori". Devine o a doua cale de editare care schimba cota si totalurile documentului. Concret,
fata de estimarea initiala din propunere, modificarea PL/SQL creste: procedura nu mai primeste doar
id_jtva_coloana, ci si proc_tvav, si trebuie sa antreneze recalcularea valorilor liniei si a
totalurilor documentului. Marius a ales aceasta varianta dupa ce consecinta a fost semnalata.
Cum se imparte aplicarea
Un singur scriitor per fisier - regula de baza, ca sa nu se piarda modificari tacut.
| Agent | Fisier | Puncte |
|---|---|---|
apply-grid |
COMUN\clase\omodificari.vc2 + write-back |
1+2, 3, 4a, 4b |
apply-meniu |
COMUN\clase\ofacturare_comun.vc2 + write-back |
5 |
design-plsql |
script in D:\ROA\DATABASE\SCRIPTURI_CLAR\ (doar scris, nerulat) |
6 - partea DB + proiectarea partii VFP |
Partea VFP a punctului 6 (combo-ul din frm_modifica_articol_factura) atinge tot
ofacturare_comun.vc2, deci nu porneste in paralel cu apply-meniu si nici inainte ca
semnatura procedurii sa fie fixata. Intra intr-un al doilea val, dupa ce design-plsql livreaza
contractul si apply-meniu termina.
Commit-ul (git sau svn) nu se da - nici in acest val, nici in urmatorul.
Constatare pe baza, 20.08.2026 - corectie la handoff-ul rundei 5
Handoff-ul rundei 5 spune despre ff_2026_08_20_01_COMUN_PACK_FACTURARE.sql (garda FACT-025 pe
totaluri) ca e "nerulat pe schema MARIUSM_AUTO (ROA_CENTRAL)". Nu mai e adevarat. Verificat direct in ALL_SOURCE,
schema MARIUSM_AUTO, corpul lui PACK_FACTURARE:
lnLiniiActive in DB = 3 aparitii
FACT-025 in DB = 2 aparitii
Deci scriptul 01 a fost aplicat pe schema MARIUSM_AUTO (ROA_CENTRAL) intre timp. Consecinte, toate favorabile:
ff_2026_08_20_02a fost construit din sursa vie a pachetului, deci contine deja modificarile scriptului 01. Nu exista riscul ca aplicarea lui 02 sa dea inapoi runda 5.- Formularea din raportul lui
design-plsql— "trebuie aplicat DUPA/impreuna cu 01" — e depasita: 01 e deja in baza, 02 il include.
Capcana ramasa, de retinut: daca cineva re-aplica ff_2026_08_20_01 dupa ce s-a aplicat
02, sterge modificarile punctului 6. Scriptul 01 e consumat; nu se mai ruleaza.
Sursa de derivare a cotei, confirmata pe dictionar: MARIUSM_AUTO.JTVA_COLOANE.COTA_TVA exista.
REVIZUIRE punctul 6 - 20.08.2026, decizie schimbata de Marius
Textual: "nu vreau sa schimb cota de tva, maxim explicatia de tva si taxcode, aferente cotei de tva, ca sa nu se modifice totaluri".
Se revine la varianta filtrata pe cota curenta - cea recomandata initial in propunere. Varianta "lista completa, CU recalcul", aleasa in prima runda de intrebari, e ABANDONATA.
Ce ramane
Butonul But_modifica2 din frm_facturi redevine neutru valoric, cum era si cum il descrisese
Marius de la inceput. Se scriu trei coloane: EXPLICATIE, TAXCODE, ID_JTVA_COLOANA.
PROC_TVAV nu se atinge, totalurile documentului nu se recalculeaza.
Parametrul nou din PL/SQL, V_ID_JTVA_COLOANA IN NUMBER DEFAULT NULL, ramane necesar: fara el,
explicatia aleasa n-ar avea unde sa se salveze si ar ramane desincronizata de taxcode.
Ce cade din discutia de gardi
Toata sectiunea A5 din docs\propunere_runda6_punct6_plsql.md era consecinta recalculului. Fara el:
- Garda pe seturi (
FACT-027) cade. Motivul ei era agregareaMAX(proc_tvav)peste componentele setului; odata ceproc_tvavnu mai e atins, componentele isi pot schimba linistit explicatia si taxcode-ul. - Garda e-Factura cade. Butonul redevine neutru valoric, iar azi nu are nicio astfel de verificare - a o adauga acum ar bloca ceva ce functioneaza, fara ca decizia s-o ceara.
- Garda pe valuta oricum nu fusese propusa.
Garda care ramane, si de ce e in PL/SQL
Neutralitatea valorica e chiar cerinta lui Marius, deci se impune in baza, nu se lasa doar pe seama filtrarii combo-ului in interfata: daca filtrul din VFP e gresit sau ocolit, baza trebuie sa refuze.
Daca V_ID_JTVA_COLOANA e dat si JTVA_COLOANE.COTA_TVA a explicatiei alese difera de
PROC_TVAV-ul liniei, procedura nu scrie nimic si arunca RAISE_APPLICATION_ERROR - stilul
FACT-025 din runda 5: esec vizibil cu rollback, niciodata scriere tacuta.
Raman si gardele ieftine: linie inexistenta sau stearsa, explicatie TVA inexistenta sau fara cota valida.
Starea livrabilelor
ff_2026_08_20_02_COMUN_PACK_FACTURARE.sql, in forma scrisa la 14:22, implementeaza varianta
respinsa (recalcul + FACT-027). Se rescrie peste el, pornind de la sursa vie din
MARIUSM_AUTO - nu se lasa doua fisiere cu acelasi scop pe disc, exact capcana din runda 5 cand o
varianta respinsa a stat alaturi de cea buna. Scriptul nu a fost rulat pe schema MARIUSM_AUTO (ROA_CENTRAL) in nicio forma.
Partea VFP: combo-ul din frm_modifica_articol_factura trebuie filtrat pe cota liniei.