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

80 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 Oracle** → `factura_salvare_db` (insert `crsvanztemp` + 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) + grid `grdFactura` (IDE VFP)
+ import în `factura_acn` + insert în `factura_salvare_db`.
- **Aspectul facturii tipărite / relistare** → `proceduri_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".