4.7 KiB
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)
- Introducere / import (
frm_factura+factura_acn): articolele intră în cursorulcrsFactura(creat înmake_cfactura,proceduri_acnpro.prg). Import din contract/tranzit/cheiaj prinInsert Into crsFactura(...)înfactura_acn. - Preview pe ecran (
frm_factura.CalculeazaPreturiRand+CalculeazaTotaluri): calculează valorile fiecărui rând doar pentru afișare. - Salvare (
factura_salvare_db): copiază rândurile dincrsFacturaîn cursorulcrsvanztemp, apoi le trimite în Oracle prinPACK_FACTURARE(un apel per rând). - Calcul autoritar (
PACK_FACTURARE): recalculează și stocheazătotal_fara_tva / total_tva / total_cu_tvaînvanzari(antet) șivanzari_detalii(rânduri). - Relistare / lista de facturi:
proceduri_acnpro_rapoarte.prgși interogările dinproceduri_acnpro.prg(~liniile 1180, 1222) citesc valorile deja calculate din Oracle (v.total_cu_tvaetc.) — nu recalculează.
Regula de sincronizare: valorile reale sunt cele calculate de
PACK_FACTURAREla salvare. Preview-ul dinfrm_facturatrebuie să folosească aceleași formule ca pachetul, iarfactura_salvare_dbtrebuie 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 * Curscantitateproc_tva= multiplicatorul de TVA (ex. 1.19, nu 19). La salvare e trimis caproc_tvav.pret_cu_tvaN(1) = flag: 1 =pretvaleste 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 cuPACK_FACTURARE,V_PRET_CU_TVA = 1, PACK_FACTURARE.pck ~15700–15922):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 Oracle →
factura_salvare_db(insertcrsvanztemp+ apel pachet). - Calculul/stocarea finală a valorilor →
PACK_FACTURARE.pck(a se ține sincron cu preview-ul). - Coloane noi pe rândul de factură →
make_cfactura(cursor) + gridgrdFactura(IDE VFP)- import în
factura_acn+ insert înfactura_salvare_db.
- import în
- Aspectul facturii tipărite / relistare →
proceduri_acnpro_rapoarte.prg+Rapoarte/*.frx. - Lista de facturi → interogările din
proceduri_acnpro.prg(citesc dinvanzari).
Exemplu real: suport „preț cu TVA inclus" (v2.0.4)
Lanțul complet care a trebuit atins pentru o singură funcționalitate:
make_cfactura— coloană nouăpret_cu_tva N(1)încrsFactura.frm_factura.CalculeazaPreturiRand— branch pepret_cu_tva(calcul invers).grdFactura— coloană checkbox editabilă legată decrsFactura.pret_cu_tva.factura_salvare_db— trimiteNvl(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".