10 KiB
Cercetare: pack_facturare.modifica_date_factura — parametri, mapare pe coloane si pe controale
Sursa pachetului: D:\ROA\ROAACNPRO\PACK_FACTURARE.pck (declaratie spec :921-935, corp :14392-14462).
Apel VFP: D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare_comun.vc2, metoda frm_facturi.do_modifica (:4538-4637),
apelul efectiv la :4599-4614. Formular de editare: frm_modifica_factura (:5262-5774).
Nu exista alt fisier .pck/.sql cu semnatura diferita pentru modifica_date_factura in
D:\ROA\ROAFACTURARE sau COMUN; niciun alt loc din VFP (in afara de ofacturare_comun.vc2 si
copia identica .bak) nu apeleaza procedura — cautat cu grep pe *.vc2/*.sc2/*.prg in tot arborele.
1-2. Tabel parametri (semnatura + destinatie in Oracle)
| # | Parametru | Tip (.pck:921-935) |
Coloana / tabel scrise in corp (.pck:14392-14462) |
Observatii |
|---|---|---|---|---|
| 1 | V_ID_VANZARE |
NUMBER |
Folosit doar in WHERE ID_VANZARE = V_ID_VANZARE (:14424) si ca sursa pentru lnIdFact (:14426) |
Identitate randului, niciodata scris |
| 2 | V_ID_RUTA |
NUMBER |
VANZARI.ID_RUTA (:14414) |
Scris neconditionat |
| 3 | V_ID_DELEGAT |
NUMBER |
VANZARI.ID_DELEGAT (:14415) |
Scris neconditionat |
| 4 | V_ID_AGENT |
NUMBER |
VANZARI.ID_AGENT (:14416) |
Scris neconditionat |
| 5 | V_ID_MASINA |
NUMBER |
VANZARI.ID_MASINA (:14417) |
Scris neconditionat |
| 6 | V_DATAORA_EXP |
DATE |
VANZARI.DATAORA_EXP (:14418) |
Scris neconditionat |
| 7 | V_ID_FACTURARE |
VANZARI.ID_FACTURARE%TYPE |
VANZARI.ID_FACTURARE (:14419) |
Scris neconditionat |
| 8 | V_LISTARE_DETALIATA |
VANZARI.LISTARE_DETALIATA%TYPE |
VANZARI.LISTARE_DETALIATA = NVL(V_LISTARE_DETALIATA, 0) (:14420) |
NVL la 0 |
| 9 | V_TEXT_ADITIONAL |
VANZARI.TEXT_ADITIONAL%TYPE |
VANZARI.TEXT_ADITIONAL (:14421) |
Scris neconditionat, fara NVL |
| 10 | V_TIP_SAFT |
VANZARI.TIP_SAFT%TYPE DEFAULT NULL |
VANZARI.TIP_SAFT (:14422) |
Scris neconditionat |
| 11 | V_EFACTURA |
VANZARI.EFACTURA%TYPE DEFAULT NULL |
VANZARI.EFACTURA (:14423) |
Scris neconditionat |
| 12 | V_DATA_ACT |
VANZARI.DATA_ACT%TYPE DEFAULT NULL |
VANZARI.DATA_ACT (:14448) + DOCUMENTE.DATAACT, ACT.DATAACT, IREG_PARTENERI.DATAACT, JV2007.DATAACT, RUL.DATAACT si RUL.DATAOUT (:14449-14453), toate WHERE ID_FACT = lnIdFact |
Doar daca V_DATA_ACT IS NOT NULL AND V_DATA_ACT <> NVL(ldDataAct, SYSDATE) (:14447) |
| 13 | V_DATA_SCAD |
VANZARI.DATA_SCAD%TYPE DEFAULT NULL |
VANZARI.DATA_SCAD (:14457) + ACT.DATASCAD, IREG_PARTENERI.DATASCAD (:14458-14459), WHERE ID_FACT = lnIdFact |
Doar daca V_DATA_SCAD IS NOT NULL AND V_DATA_SCAD <> NVL(ldDataScad, sysdate) (:14456) |
| 14 | V_NUMAR_ACT |
VANZARI.NUMAR_ACT%TYPE DEFAULT NULL |
VANZARI.NUMAR_ACT (:14439) + DOCUMENTE.NRACT, ACT.NRACT, IREG_PARTENERI.NRACT, JV2007.NRACT, RUL.NRACT (:14440-14444), WHERE ID_FACT = lnIdFact |
Doar daca V_NUMAR_ACT IS NOT NULL AND V_NUMAR_ACT <> NVL(lnNrAct, 0) (:14438) |
| 15 | V_SERIE_ACT |
VANZARI.SERIE_ACT%TYPE DEFAULT NULL |
VANZARI.SERIE_ACT (:14429) + DOCUMENTE.SERIE_ACT, ACT.SERIE_ACT, IREG_PARTENERI.SERIE_ACT, JV2007.SERIE_ACT, RUL.SERIE_ACT (:14430-14434), WHERE ID_FACT = lnIdFact |
Doar daca V_SERIE_ACT IS NOT NULL AND V_SERIE_ACT <> NVL(lcSerieAct, '') (:14428) |
Parametrii 2-11 se scriu neconditionat in VANZARI la fiecare apel (chiar cu NULL, daca asa vine
argumentul). Parametrii 12-15 (data_act, data_scad, numar_act, serie_act) au tratament
conditionat: se propaga si in DOCUMENTE/ACT/IREG_PARTENERI/JV2007/RUL (unde e cazul),
filtrate dupa ID_FACT (nu dupa ID_VANZARE) — deci ating toate randurile din acele tabele legate
de acelasi document, nu doar randul VANZARI curent. Se scriu doar daca valoarea trimisa e
NOT NULL si difera de valoarea curenta.
3. Apelul din VFP
COMUN\clase\ofacturare_comun.vc2:4599-4614, in interiorul unui SCAN peste crsfacturi (una sau
mai multe inregistrari alese):
begin pack_facturare.modifica_date_factura(<<Alltrim(Str(poRec.id_vanzare))>>,
<<Alltrim(Nvl(Str(poRec.id_ruta),[NULL]))>>,
<<Alltrim(Nvl(Str(poRec.id_delegat),[NULL]))>>,
<<Alltrim(Nvl(Str(poRec.id_agent),[NULL]))>>,
<<Alltrim(Nvl(Str(poRec.id_masina),[NULL]))>>,
to_date('<<TTOC(poRec.dataora_exp,1)>>','YYYYMMDDHH24:MI:SS'),
<<Alltrim(Nvl(Str(poRec.id_facturare),[NULL]))>>,
<<ALLTRIM(STR(NVL(poRec.listare_detaliata,0)))>>,
?poRec.text_aditional,
?poRec.tip_saft,
?poRec.efactura,
?poRec.data_act,
?poRec.data_scad,
?poRec.numar_act,
?poRec.serie_act);
end;
Toate argumentele vin din structura poRec, populata printr-un Scatter Name poRec Memo din
cursorul crsfacturi la intrarea in do_modifica (:4538-4581), apoi editata prin
frm_modifica_factura cat timp e afisat (:4588-4590), inainte de executia SCAN-ului.
Observatie de comportament: cand sunt alese mai multe inregistrari (lnNrInreg > 1), ramura
Otherwise (:4565-4580) face Scatter Name poRec Memo Blank si reseteaza explicit
id_ruta, id_delegat, id_agent, id_masina, dataora_exp, id_facturare,
listare_detaliata, tip_saft, text_aditional, efactura la valori goale/NULL/0 —
campurile data_act/data_scad/numar_act/serie_act raman goale prin acelasi NVL. Daca
formularul nu le modifica explicit, SCAN-ul trimite aceste valori goale la fiecare inregistrare
aleasa (parametrii 2-11 se scriu neconditionat in corpul procedurii — vezi tabelul de mai sus).
4. Mapare parametru -> control -> fereastra
| Parametru | Control | Fereastra | Observatii |
|---|---|---|---|
V_ID_VANZARE |
— | — | Nu are control; e identitatea randului din crsfacturi (poRec.id_vanzare) |
V_ID_RUTA |
Ct_clb_ruta (ControlSource prin cprocedura=thisform.do_cauta_ruta, seteaza poRec.id_ruta) |
frm_modifica_factura (:5510-5526, cautare :5695-5721) |
|
V_ID_DELEGAT |
Ct_clb_delegat (do_cauta_delegat seteaza poRec.id_delegat) |
frm_modifica_factura (:5473-5489, cautare :5654-5678) |
|
V_ID_AGENT |
Ct_clb_agent (do_cauta_agent seteaza poRec.id_agent) |
frm_modifica_factura (:5455-5471, cautare :5639-5652) |
|
V_ID_MASINA |
Ct_clb_masina (do_cauta_masina seteaza poRec.id_masina) |
frm_modifica_factura (:5491-5508, cautare :5680-5693) |
|
V_DATAORA_EXP |
Clb_dataora_exp.Text_simplu1 (ControlSource="poRec.dataora_exp") |
frm_modifica_factura (:5437-5453) |
validat obligatoriu in inainte_de_do_termin (:5723-5734) |
V_ID_FACTURARE |
clb_adresa_facturare (do_cauta_adresa seteaza poRec.id_facturare + poRec.adresa_facturare) |
frm_modifica_factura (:5418-5435, cautare :5621-5637) |
|
V_LISTARE_DETALIATA |
chkDetaliat (ControlSource="poRec.listare_detaliata") |
frm_modifica_factura (:5379-5390) |
|
V_TEXT_ADITIONAL |
Ed_tx_simplu1._EDBASE1 (ControlSource="poRec.text_aditional", MaxLength=1000) |
frm_modifica_factura (:5528-5551) |
comentariul VFP la :4575 spune "MAXIM 250 CARACTERE", dar MaxLength control e 1000 — contradictie neverificata mai departe |
V_TIP_SAFT |
cboTipFactura (ControlSource="poRec.tip_saft", RowSource din saft_tip_facturi) |
frm_modifica_factura (:5335-5351) |
Visible = m.gl406 (:5739-5741), deci controlul e ascuns cand gl406 e fals (gl406 definit in COMUN\programe\oinit_optiuni.prg:524) |
V_EFACTURA |
niciun control | — | poRec.efactura vine doar din Scatter initial pe crsfacturi (cazurile lnNrInreg=0/1, :4538-4564) sau e fortat 0 la selectie multipla (:4576); formularul frm_modifica_factura nu are niciun obiect legat de poRec.efactura — nu poate fi schimbat de utilizator din acest formular azi |
V_DATA_ACT |
txtDataAct (ControlSource="poRec.data_act") |
frm_modifica_factura (:5572-5581) |
vezi blocaj la punctul 5 |
V_DATA_SCAD |
txtDataScad (ControlSource="poRec.data_scad") |
frm_modifica_factura (:5583-5592) |
vezi blocaj la punctul 5 |
V_NUMAR_ACT |
txtNrAct (ControlSource="poRec.numar_act") |
frm_modifica_factura (:5594-5603) |
vezi blocaj la punctul 5 |
V_SERIE_ACT |
txtSerieAct (ControlSource="poRec.serie_act") |
frm_modifica_factura (:5605-5614) |
vezi blocaj la punctul 5 |
Nu exista niciun parametru mapat pe frm_alte_date (COMUN\clase\ferestre_cere_date.vc2:2219) —
clasa aceea nu e implicata deloc in fluxul do_modifica/modifica_date_factura.
5. Parametri blocati/needitabili azi in frm_modifica_factura
Patru checkbox-uri controleaza accesul la seria/numarul/datele actului, si patru textbox-uri asociate:
chkSerieAct,chkNrAct,chkDataAct,chkDataScad: definite cuEnabled = .F.(:5405-5416,:5392-5403,:5353-5364,:5366-5377). DevinEnableddoar inPROCEDURE Init(:5743-5746):adica doar daca factura are deja un numar de act completat (this.chkSerieAct.Enabled = !EMPTY(NVL(poRec.numar_act,0)) this.chkNrAct.Enabled = !EMPTY(NVL(poRec.numar_act,0)) this.chkDataAct.Enabled = !EMPTY(NVL(poRec.numar_act,0)) this.chkDataScad.Enabled = !EMPTY(NVL(poRec.numar_act,0))poRec.numar_actnenul) la deschiderea formularului. Pe o factura fara act (proforma/nefinalizata), toate patru raman needitabile.txtSerieAct,txtNrAct,txtDataAct,txtDataScad: definite cuEnabled = .F.(:5605-5614,:5594-5603,:5572-5581,:5583-5592) si se activeaza doar din evenimentul checkbox-ului corespunzator —chkSerieAct.Valid(:5770-5772),chkNrAct.Valid(:5766-5768),chkDataAct.Valid(:5758-5760),chkDataScad.Click(:5762-5764) — deci necesita ca checkbox-ul insusi sa fie dejaEnabled(conditia de mai sus).V_EFACTURA: fara control — needitabil in acest formular indiferent de stare (punctul 4).V_ID_VANZARE: nu e un camp de editat, e identitatea randului.
Toti ceilalti parametri (id_ruta, id_delegat, id_agent, id_masina, dataora_exp,
id_facturare, listare_detaliata, text_aditional, tip_saft) au controale mereu Enabled
(fara restrictie in cod), tip_saft fiind conditionat doar de vizibilitate (gl406), nu de
Enabled.