Folderul docs\ era pana acum in afara oricarui control de versiuni - nici git, nici SVN - desi contine planurile pe puncte, proiectarile si rapoartele de cercetare pe care se sprijina modificarile din cod. O stergere acolo era definitiva. Fisierele intermediare (handoff-uri intre sesiuni, diff-uri deja aplicate) au fost sterse inainte, nu versionate: ce era durabil in ele a intrat in antetele fisierelor de test la care se refereau. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
15 KiB
Inventar controale — formulare facturare (ROAFACTURARE, COMUN\clase)
Investigatie read-only (fara editari, fara git_sync.ps1/txt2vcx.ps1, fara commit). Toate liniile
sunt din fisierele text .vc2 (FoxBin2Prg), verificate pe fisierul real (nu .bak). Scop: pregatirea
unui mockup pentru un formular de facturare unificat — inventarul reflecta controalele existente, nu
o propunere noua.
1. Butoane frm_facturare_articole (ofacturare.vc2:10968-15739)
Grid sursa (comanda/lista preturi) = grd_articole (Left=9,Top=336,Width=326,Height=130,
RecordSource=crsarticole, ofacturare.vc2:11570). Grid destinatie (linii factura) = grd_factura
(Left=379,Height=337, RecordSource=crsfactura, ofacturare.vc2:12263).
| Control | Clasa de baza | Caption/Picture | L/T/W/H | ToolTipText | Pozitie fata de grid | fisier:linie |
|---|---|---|---|---|---|---|
| But_modifica1 | but_modifica | (fara caption, modific_sus.bmp) |
773/61/30/27 | "Modificare (CTRL+M)" | dreapta-sus grd_factura (Anchor=9) |
ofacturare.vc2:11192 |
| But_sterge1 | but_sterge | sterg_sus.bmp |
811/61/30/27 | "Stergere (CTRL+D)" | dreapta-sus grd_factura, langa But_modifica1 |
ofacturare.vc2:11229 |
| But_renunt1 | but_renunt | renunt_sus.bmp |
792/1/30/27 | "Renuntare (ESC)" | coltul din dreapta-sus al formularului | ofacturare.vc2:11202 |
| But_reset1 | but_reset | reset_sus.bmp |
303/295/30/27 | "Reseteaza" | deasupra grd_articole (Top grid=336) |
ofacturare.vc2:11213 |
| But_urmator1 | but_urmator, caction=do_urmator |
urmator1.bmp |
343/348/30/27 | "Verificare" | lateral-dreapta grd_articole (Left grid+Width+8=343) |
ofacturare.vc2:11237 |
| But_urmator2 | but_urmator, caction=do_urmator2 |
urmator1.bmp |
343/143/30/27 | "Verificare" | deasupra grd_articole, langa grd_contracte |
ofacturare.vc2:11247 |
| But_urmator_tot1 ("adauga tot din comanda") | but_urmator_tot, caction=do_adauga_tot |
urmator1_tot.bmp, fara ToolTipText |
343/378/30/27, Visible=.F. implicit |
— | lateral-dreapta grd_articole, sub But_urmator1 |
ofacturare.vc2:11257 |
| But_retur | but_retur | retur1.bmp |
343/407/30/27, Visible=.F. implicit |
"Retur" | lateral-dreapta grd_articole, sub But_urmator_tot1 |
ofacturare.vc2:11221 |
"Adauga tot din comanda" — But_urmator_tot1.Click -> do_adauga_tot
(ofacturare.vc2:13169-13198): parcurge crsarticole (SCAN) si apeleaza
Thisform.do_adauga_articol(.T.) pentru fiecare linie; daca articolul e gestionabil si cantitatea
ramasa >0, cere confirmare "Nu ati selectat toata cantitatea... treceti la urmatorul?"
(aMessageBox cu butoane Da/Nu/Renunta, cod 7).
Vizibilitate pe tip document (Init, ofacturare.vc2:14976-15344, Do Case poDate.tip):
| Control | Vizibil cand | Dovada |
|---|---|---|
| But_urmator_tot1 | poDate.eProforma=1, poDate.lCopiere, tip=3 (comanda), tip=4 (din avize), tip in(21,28,42,47) (aviz din comanda), tip=25, tip in(8,9) (retur factura), tip=24 (retur aviz) |
ofacturare.vc2:15113,15120,15150,15166,15177,15215,15240,15245 |
| But_retur | tip in(1,5,7,10) (facturare din lista de preturi) |
ofacturare.vc2:15127 — comentariu explicit: "pot sa fac retur de articole intr-o factura de vanzare" |
But_urmator2 / grd_contracte |
eliminate (RemoveObject) daca nu exista crsarticole1 (fara contracte pe formular) |
ofacturare.vc2:15294-15324 |
Conventia de clase de butoane (suita ROA): clasa de baza buton (_cmd_base.vc2:16,
AS _cmdbase OF "_cmd_base.vcx") — 30x27px implicit, Caption="" (buton doar cu imagine),
BackColor=alb, SpecialEffect=1. Click (_cmd_base.vc2:41-70) executa dinamic
This.Parent.<caction>() (macro pe cAction/clistaparametri) — de-asta majoritatea instantelor nu
au Caption/Click propriu, doar caction=<nume_metoda>. Subclasele concrete (but_nou,
but_sterge, but_modifica, but_urmator_tot, etc.) sunt in cmd_butoane.vc2:7-441, fiecare
hardcodand caption/cpictureup/cpicturedown/Picture (..\grafice\*.bmp, stare sus/jos) si
ToolTipText cu shortcut intre paranteze (ex. "Modificare (CTRL+M)"). but_nou (do_adauga,
nou_sus.bmp, "Adaugare (CTRL+N)") — cmd_butoane.vc2:214.
2. Butoane frm_facturare_articole2 (prototip, ofacturare.vc2:15741-19355)
Diferenta arhitecturala fata de #1: un singur grid grd_factura (Left=12,Top=204,Height=240,
ofacturare.vc2:16601) cu editare inline prin comboboxuri in celule (cCodMat.cboCodmat,
cDenumire.cCboDenumire, cGestiune.cCboGestiune) — nu exista casete separate de cautare articol
(ct_codmat/ct_articole) si nici crsarticole/comanda sursa.
| Control | Clasa de baza | Caption/Picture | L/T/W/H | ToolTipText | Pozitie fata de grid | fisier:linie |
|---|---|---|---|---|---|---|
| But_nou1 | but_nou (mostenit, caption=do_adauga suprascris in clasa) |
nou_sus.bmp |
719/175/30/27 | "Adaugare (CTRL+N)" | deasupra-dreapta grd_factura (Top grid=204) |
ofacturare.vc2:15936 |
| But_sterge1 | but_sterge | sterg_sus.bmp |
747/175/30/27 | "Stergere (CTRL+D)" | deasupra-dreapta grd_factura, langa But_nou1 |
ofacturare.vc2:15955 |
| But_renunt1 | but_renunt | renunt_sus.bmp |
716/1/30/27 | "Renuntare (ESC)" | coltul din dreapta-sus | ofacturare.vc2:15944 |
But_nou1.Click -> do_adauga (ofacturare.vc2:17118-17122, override propriu, nu
but_nou.caction implicit): SELECT crsFactura / APPEND BLANK / this.grd_factura.SetFocus() —
adauga direct un rand gol in grid si da focus, spre deosebire de do_adauga_articol complex din #1.
Nu exista But_modifica in aceasta clasa — editarea se face inline in celulele gridului, nu prin
dialog separat.
Bonus relevant pentru mockup: acest prototip incorporeaza deja aceleasi controale de antet
(Ct_clb_venchelt, Ct_clb_sectie, Ct_clb_responsabil, Ct_clb_lucrare, Ct_clb_altele,
Ct_clb_valuta, clb_fdoc, Clb_serie_act1, Clb_nract, Clb_dataact, Clb_data_scadenta,
Clb_zi_curs) direct pe formularul de articole, la ofacturare.vc2:15741+182..749 — e cea mai
apropiata schita existenta de un "formular unificat".
3. Antet frm_date_factura (ofacturare.vc2:8482-9869) si frm_date_aviz (ofacturare.vc2:6566-7618)
| Control cerut | frm_date_factura — caption real |
frm_date_aviz — caption real |
Tip/container | Obligatoriu / vizibil conditionat |
|---|---|---|---|---|
| tip venit/cheltuiala | Ct_clb_venchelt = "Venit / cheltuiala" |
Ct_clb_venchelt = "Venit / cheltuiala" |
ct_clb_cautare (container cautare) |
eliminat pe aviz pentru tip=23,41,25 (transfer/retur) — ofacturare.vc2:7438-7461 |
| sectie | Ct_clb_sectie = "Sectie" |
Ct_clb_sectie = "Sectie" |
ct_clb_cautare |
intotdeauna prezent in ambele (nu s-a gasit RemoveObject) |
| responsabil | Ct_clb_responsabil = "Responsabil" |
Ct_clb_responsabil = "Responsabil" |
ct_clb_cautare |
eliminat cand gnScadereStoc=0 sau tip in(4,7,8,9,48,49) — factura: 9646-9707; aviz: eliminat pe majoritatea tipurilor cu comanda/lista |
| lucrare | Ct_clb_lucrare = "Lucrare" |
Ct_clb_lucrare = "Lucrare" |
ct_clb_cautare |
nu s-a gasit eliminare conditionata |
| altele | Ct_clb_altele — label dinamic ("Altele" implicit) |
idem | ct_clb_cautare, .do_schimba_explicatia(...) |
eticheta se schimba pe tip: "Nr. contract"/"Nr. comanda"/"Nr. factura"/"Nr. facturi"/"Locatie" (9633-9643); eliminat complet daca gnScadereStoc=0 and tip in(1,5,10) fara copiere |
| valuta | Ct_clb_valuta = "Valuta" |
nu exista pe aviz | ct_clb_cautare |
eliminat daca poDate.in_valuta=0 (ofacturare.vc2:9725-9732) |
| fel document | Ct_clb_fdoc = combo _combobox1 FACTURA/PROFORMA/BON FISCAL, label "Tip document" |
Ct_clb_fdoc = camp cautare "Felul documentului" (caut_ora.vcx) |
container diferit intre cele doua forme (combo la factura, cautare la aviz) | intotdeauna vizibil |
| serie | Clb_serie_act label "Serie document" |
Clb_serie_act (fara label explicit override) |
clb_serie_act (serii_numere.vcx) |
eliminat daca poDate.rezultat_serii nu e in (1,2,3) — nicio serie configurata |
| numar | Clb_nract = "Numar document" |
Clb_nract = "Nr. documentului" |
clb_tx_simplu, InputMask=get_mask(14,0) |
mereu prezent |
| data act | Clb_dataact = "Data document" |
Clb_dataact = "Data documentului" |
clb_tx_data |
mereu prezent |
| data scadenta | Clb_data_scadenta = "Data scadenta" |
nu exista pe aviz | clb_tx_data |
dezactivat (nu eliminat) cand gnScadentaAutomata=1 (.dezactiveaza(), 9713-9715) |
| zi curs | Clb_zi_curs = "Data curs valutar" |
Clb_zi_curs = "Data cursului valutar" |
clb_tx_data |
eliminat pe factura daca tip in(8,9) retur (9718-9722) |
| client | Ct_clb_nume_client = "Nume client" |
Ct_clb_nume_client = "Nume client" |
ct_clb_cautare |
eticheta se schimba pe aviz ("Retur de la"/"Gestiune sursa") in functie de tip transfer |
Control specific doar in frm_date_factura: Ct_clb_gestiune_init="Gestiune sursa" (ToolTipText:
"Daca nu alegeti gestiunea, la scaderea din stoc a unui articol va vor fi aratate stocurile tuturor
gestiunilor pe care aveti drepturi.") — eliminat impreuna cu Ct_clb_responsabil in majoritatea
cazurilor gnScadereStoc=0; txtCodFiscal/lblCodFiscal (cod fiscal, ReadOnly, langa client) si
txtSoldLei/lblSoldLei (sold curent client, populat din GetSoldClient() daca
poDate.id_client<>0); But_verifica1 (verificare ANAF). Control specific doar in
frm_date_aviz: Ct_clb_politici_preturi="Politica de preturi" — eliminat pe majoritatea
tipurilor cu comanda.
Toate conditiile de vizibilitate sunt in Init (nu in do_schimba_tipdoc, care doar realoca
seria/numarul): frm_date_factura.Init = ofacturare.vc2:9563-9796; frm_date_aviz.Init =
ofacturare.vc2:7354-7600 (citit doar pana la ~7533; ultimele ~65 linii nu au fost verificate,
vezi "Necunoscute ramase").
4. frm_alte_date (ferestre_cere_date.vc2:2219-3353)
| Control | Caption | Grupare logica | fisier:linie |
|---|---|---|---|
Ct_clb_delegat |
"Delegat" | Delegat/transport | 2553 |
Ct_clb_masina |
"Masina" | Delegat/transport | 2569 |
Ct_clb_agent |
"Agent" | Delegat/transport | 2537 |
Clb_dataora_exp |
"Data si ora expedierii" | Delegat/transport | 2443 |
opt_incasat (radiogrup 4 optiuni) |
"Fara incasare" / "Chitanta" / "Bon fiscal" / "POS Card" | Incasare | 2638 |
Cb_casa |
"Casa" (-> "Banca POS" pe POS) | Incasare | 2362 |
Clb_serie_chit |
"Serie chitanta" | Incasare (doar Chitanta) | 2503 |
Clb_nrchit |
"Nr. chitanta" (-> "Nr. bon" pe Bon fiscal/POS) | Incasare | 2480 |
Clb_incasat |
"Incasat" | Incasare | 2461 |
cmdModificaBon |
(icon but_modifica) |
Incasare (doar Bon fiscal), caction=do_modifica_bon |
2526 |
chkPOS |
"POS" | Incasare (doar Bon fiscal) | 2409 |
chkDetaliat |
"Detaliat" | Incasare (doar Bon fiscal) | 2396 |
cboTipFactura |
(combo, langa label "Tip factura") | Incasare | 2378 |
clb_adresa_facturare |
"Adresa facturare" | Adresa de facturare | 2422 |
Ed_tx_simplu1 |
"Text aditional (max. 1000 caractere)" | Text aditional | 2585 |
But_modifica1 |
(icon) caction implicit -> do_modifica |
actiune pe delegat (deschide nom_parteneri_modifica) |
2343 |
actualizeaza_tipincasare (2698-2856) comuta vizibilitatea pe This.opt_incasat.Value:
| Valoare | Vizibile | Ascunse | Numar alocat |
|---|---|---|---|
| 1 = Fara incasare | — | cb_casa,clb_serie_chit,clb_nrchit,clb_incasat,_shape3,lb_simplu1,cmdModificaBon,chkPOS,chkDetaliat |
dezaloca 16(chitanta)/3(bon)/26(POS) |
| 2 = Chitanta | cb_casa,clb_serie_chit,clb_nrchit,clb_incasat,_shape3,lb_simplu1 |
cmdModificaBon,chkPOS,chkDetaliat |
Thisform.clb_serie_chit.genereazaNumar() (2783) |
| 3 = Bon fiscal | cb_casa,clb_nrchit,clb_incasat,_shape3,lb_simplu1,cmdModificaBon,chkPOS,chkDetaliat |
clb_serie_chit |
Thisform.do_aloca_nr_bon([CLICK]) (2807) |
| 4 = POS/Card | cb_casa,clb_nrchit,clb_incasat,_shape3,lb_simplu1,cmdModificaBon |
clb_serie_chit,chkPOS,chkDetaliat |
Thisform.do_aloca_nr_pos([CLICK]) (2844) |
cmdModificaBon.Click -> do_modifica_bon (3001-3010) deschide viz_config_serii_complet WITH 3
(oserii_numere.prg) si, la confirmare, dezaloca+realoca numarul de bon fiscal.
5. Butoane frm_facturi (lista facturi, ofacturare_comun.vc2:1168-5126, fisierul real —
verificat, nu .pre_s4butoane.bak)
| Control | Caption/Picture | Metoda apelata (caction/override) |
fisier:linie |
|---|---|---|---|
but_modifica1 |
modific_sus.bmp |
caction implicit = inainte_de_do_modifica -> meniu xmenu("Modificare date factura;Editare factura (articole, cantitati, preturi)") -> optiune 1: do_modifica(), optiune 2: do_editare_factura() |
ADD OBJECT 1424; inainte_de_do_modifica 4925-4934; do_modifica 4538-4637; do_editare_factura 3715-3869 |
But_modifica2 |
(fara caption, Top=341 — pe grid-ul de detalii, nu in bara de sus) | caction=do_modifica_explicatie, ToolTipText "Modificare explicatie articol" |
1434; do_modifica_explicatie 4639-4656 |
But_copiaza1 |
copy_sus.bmp, Visible=.F. implicit |
caction mostenit = do_copiaza |
1404; do_copiaza 3628-3713 |
But_sterge1 |
sterg_sus.bmp |
caction mostenit (inainte_de_do_sterge din clasa but_sterge) -> do_sterge |
1463; do_sterge 4658-4874 |
But_listare1 |
listare_sus.bmp |
do_listare |
1414 |
But_verifica1 |
(fara Picture explicit) | do_verifica, ToolTipText "Vericare coduri fiscale pe serverul ANAF" |
1473 |
But_attach1 |
attach_sus.bmp |
caction= gol, override But_attach1.Click |
1394 |
Nu exista buton separat "editare 2024": do_editare_factura este optiunea 2 din meniul popup
deschis de but_modifica1 (inainte_de_do_modifica), nu un buton propriu.
Init (4936-4959): daca glLunaInchisa (luna contabila inchisa),
Thisform.but_sterge1.Visible = .F. si se scoate dreptul de stergere din gcAcces — singura
conditionare de vizibilitate pe drept gasita in aceasta clasa.
Necunoscute ramase
do_modifica(frm_facturare_articole,13746-13914, 168 linii) sido_sterge/do_editare_factura(frm_facturi) nu au fost citite in detaliu — doar identificate ca existenta/semnatura; daca mockup-ul are nevoie de logica exacta de validare la modificare/stergere linie, trebuie citite explicit.frm_date_aviz.Init(7354-7600) a fost citit doar pana la ~7533; ultimele ~65 linii (probabil finalizarelaPozitii/repozitionare, simetrice cufrm_date_factura) nu au fost verificate.- Nu am verificat daca vizibilitatea controalelor din sectiunea 3 mai depinde si de drept de
utilizator (nu doar
poDate.tip/gnScadereStoc/gnScadentaAutomata) — codul citit foloseste doar variabile globale de setare firma si tipul documentului, nicio verificare explicitagcAcces/drepturi pe aceste containere. - Dimensiunile exacte (
Width/Height) ale containerelorct_clb_cautare/clb_tx_*nu sunt listate explicit in multe instante (mostenite din clasa de bazacaut_ora.vcx/lb_tx.vcx) — nu am deschis acele biblioteci pentru dimensiuni implicite; doarLeft/Top/TabIndexsunt suprascrise per instanta. - Nu am inspectat
caut_ora.vcx/lb_tx.vcx/serii_numere.vcx(clasele de baza ale containerelorclb_*/ct_clb_*) pentru a confirma dimensiunile standard sau comportamentul exact al proprietatiicconditie(pare sa controleze cand campul de cautare cere obligatoriu o valoare, nu vizibilitatea).