Files
roafacturare/docs/cercetare/modifica_date_factura_parametri.md
Marius Mutu d9f5ca4226 docs: planurile, proiectarile si rapoartele de lucru intra in versionare
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
2026-08-11 22:17:17 +03:00

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 cu Enabled = .F. (:5405-5416, :5392-5403, :5353-5364, :5366-5377). Devin Enabled doar in PROCEDURE Init (:5743-5746):
    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))
    
    adica doar daca factura are deja un numar de act completat (poRec.numar_act nenul) la deschiderea formularului. Pe o factura fara act (proforma/nefinalizata), toate patru raman needitabile.
  • txtSerieAct, txtNrAct, txtDataAct, txtDataScad: definite cu Enabled = .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 deja Enabled (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.