Files
comun/docs/facturare.md
2026-06-10 16:01:00 +03:00

4.7 KiB
Raw Permalink Blame History

Fluxul facturilor (ROAACNPRO)

Document de referință minimal: ce fișiere trebuie verificate/modificate când se schimbă ceva la facturare. Backend = Oracle (prin goExecutor/goConn), front-end = VFP9.

Componentele cheie

Rol Fișier Observații
Formularul de facturare clasa frm_factura din Clase/oacnpro.vcx (cod în .vct) se editează în IDE VFP, nu manual
Procedurile de facturare VFP Programe/proceduri_acnpro.prg factura_salvare_db, make_cfactura, factura_acn
Rapoarte facturare Programe/proceduri_acnpro_rapoarte.prg + Rapoarte/*.frx relistare/printare factură
Calcul + salvare valori în Oracle PACK_FACTURARE.pck (pachet PL/SQL) sursa de adevăr pentru valori
Framework facturare partajat COMUN/programe/ofacturare_comun.prg, oproceduri_facturare.prg partajat între aplicațiile ROA; a se evita modificarea

Lanțul de calcul (form → pachet → rapoarte)

  1. Introducere / import (frm_factura + factura_acn): articolele intră în cursorul crsFactura (creat în make_cfactura, proceduri_acnpro.prg). Import din contract/tranzit/cheiaj prin Insert Into crsFactura(...) în factura_acn.
  2. Preview pe ecran (frm_factura.CalculeazaPreturiRand + CalculeazaTotaluri): calculează valorile fiecărui rând doar pentru afișare.
  3. Salvare (factura_salvare_db): copiază rândurile din crsFactura în cursorul crsvanztemp, apoi le trimite în Oracle prin PACK_FACTURARE (un apel per rând).
  4. Calcul autoritar (PACK_FACTURARE): recalculează și stochează total_fara_tva / total_tva / total_cu_tva în vanzari (antet) și vanzari_detalii (rânduri).
  5. Relistare / lista de facturi: proceduri_acnpro_rapoarte.prg și interogările din proceduri_acnpro.prg (~liniile 1180, 1222) citesc valorile deja calculate din Oracle (v.total_cu_tva etc.) — nu recalculează.

Regula de sincronizare: valorile reale sunt cele calculate de PACK_FACTURARE la salvare. Preview-ul din frm_factura trebuie să folosească aceleași formule ca pachetul, iar factura_salvare_db trebuie să trimită corect toți parametrii relevanți. Dacă cele două diverg, ecranul arată altceva decât factura salvată/relistată.

Structura crsFactura (rândul de factură în memorie)

Definit în make_cfactura (proceduri_acnpro.prg). Câmpuri relevante:

  • pretval = preț unitar în valută (prețul introdus de operator; baza calculului)
  • Curs = curs valutar; Pret = preț unitar în lei = pretval * Curs
  • cantitate
  • proc_tva = multiplicatorul de TVA (ex. 1.19, nu 19). La salvare e trimis ca proc_tvav.
  • pret_cu_tva N(1) = flag: 1 = pretval este cu TVA inclus, 0 = fără TVA
  • Lei: valftva (fără TVA), valtva (TVA), valctva (cu TVA)
  • Valută: valval (fără TVA), tvaval (TVA), totval (cu TVA)

Formule TVA

Cu proc_tva = multiplicator (1 + cotă/100):

  • Preț fără TVA (pret_cu_tva = 0): valftva = Pret*cant; valtva = valftva*(proc_tva-1); valctva = valftva + valtva.
  • Preț cu TVA inclus (pret_cu_tva = 1, calcul invers, identic cu PACK_FACTURARE, V_PRET_CU_TVA = 1, PACK_FACTURARE.pck ~1570015922): valctva = Pret*cant; valtva = valctva*(proc_tva-1)/proc_tva; valftva = valctva - valtva.

Rotunjiri: lei la gnPC, valută la gnPval (opțiuni firmă PC / PPRETV în pachet).

Unde modific când...

  • Calculul valorilor pe rând (preview)frm_factura.CalculeazaPreturiRand (IDE VFP).
  • Ce se trimite la salvare în Oraclefactura_salvare_db (insert crsvanztemp + apel pachet).
  • Calculul/stocarea finală a valorilorPACK_FACTURARE.pck (a se ține sincron cu preview-ul).
  • Coloane noi pe rândul de facturămake_cfactura (cursor) + grid grdFactura (IDE VFP)
    • import în factura_acn + insert în factura_salvare_db.
  • Aspectul facturii tipărite / relistareproceduri_acnpro_rapoarte.prg + Rapoarte/*.frx.
  • Lista de facturi → interogările din proceduri_acnpro.prg (citesc din vanzari).

Exemplu real: suport „preț cu TVA inclus" (v2.0.4)

Lanțul complet care a trebuit atins pentru o singură funcționalitate:

  1. make_cfactura — coloană nouă pret_cu_tva N(1) în crsFactura.
  2. frm_factura.CalculeazaPreturiRand — branch pe pret_cu_tva (calcul invers).
  3. grdFactura — coloană checkbox editabilă legată de crsFactura.pret_cu_tva.
  4. factura_salvare_db — trimite Nvl(pret_cu_tva,0) (nu mai e hardcodat 0) către pachet.

Pachetul și rapoartele aveau deja suport pentru pret_cu_tva, deci nu au fost modificate — exemplu tipic de „verifică întâi ce face deja pachetul/raportul".