ROAFACTURARE 2.11.15 (r18015): programe/ofacturare_editare.prg, programe/ofacturare_stoc.prg. docs: conventia de encoding .sc2/.vc2 corectata la cp1250; cercetarile trans-proiect mutate din ROAFACTURARE in docs/cercetare (r18014); actualizari reguli_lucru, oracle_export, flux-editare-vfp-text, scripturi-migrare-db, flux-modificare-stergere-nota-jurnal, todos. .gitignore: watchdog_out si PNG-urile din rularile headless (r18008). Text FoxBin2Prg regenerat: clase/comun.vc2, ferestre/frm_import_note_facturi_clienti.sc2, ferestre/frm_initializare_facturi_balanta.sc2. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AV7dQbTLAqvrtQbH7zxXxw
22 KiB
Cercetare: TVA calculat vs salvat (#7) + denormalizare VANZARI (#8)
Sursele principale sunt fisierele "curate" din arhiva de migrare Oracle
D:\ROA\DATABASE\SCRIPTURI_CLAR\... (nu in working copy VFP git — DDL/PL-SQL nu e versionat in
ROAFACTURARE), plus D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare.vc2 (working copy VFP, text
.vc2 deja la zi).
Cea mai recenta definitie completa a pachetului PACK_FACTURARE (COMUN, folosit de toate
produsele ROA care factureaza) e in
D:\ROA\DATABASE\SCRIPTURI_CLAR\2026\03\ff_2026_03_23_04_COMUN_PACK_FACTURARE.sql (16948 linii).
Toate liniile citate mai jos fara alta mentiune sunt din acest fisier.
SUBIECT A — TVA calculat, nu salvat (#7)
1. Structura VANZARI / VANZARI_DETALII (coloane pret/TVA)
Nu exista CREATE TABLE VANZARI_DETALII in arhiva cautata (tabela e mai veche decat
SCRIPTURI_CLAR, care incepe efectiv din 2009; originea e probabil in
D:\ROA\DATABASE\SCRIPTURI\2006-2008, nu am parcurs exhaustiv acel arhiv de migrari vechi).
Coloanele efective au fost confirmate prin utilizarea lor in cod (view-uri + SQL dinamic VFP):
VANZARI_DETALII (per linie articol):
PRET— pret unitar (fara/cu TVA, in functie de flag)DIFERENTA— ajustare pret (folosita incalculeaza_total_*_fact)DISCOUNT_UNITARCANTITATEPRET_CU_TVA— flag NUMBER(1): 1 = pretul de mai sus e cu TVA inclus, 0 = fara TVA (ff_2026_07_27_01_FACTURARE.sql:25,43—b.pret_cu_tva)PROC_TVAV— procent TVA ca multiplicator (ex. 1.19), nu procent brut (ff_2026_07_27_01_FACTURARE.sql:26—b.proc_tvav)PRET_ACHIZITIE(ff_2026_07_27_01_FACTURARE.sql:105,130)ID_ARTICOL,ID_VALUTA,ID_POL(politica de pret),SERIE,STERS,ID_VANZARE,ID_VANZARE_DET(ff_2026_07_27_01_FACTURARE.sql:11-76)TAXCODE— adaugata2022\03\ff_2022_03_24_01_COMUN_SAFT.sql:6(cod taxa SAFT)ID_JTVA_COLOANA_EX— adaugata2019\08\ff_2019_08_20_04_COMUN.sql:7LOT— adaugata2024\06\ff_2024_06_04_01_COMUN_FACTURARE.sql:3
NU exista o coloana de TVA calculata/salvata per linie (nici valoare_tva, nici
pret_fara_tva rezultat) — doar inputurile (pret, pret_cu_tva flag, proc_tvav), confirmand
exact ce zice todo #7: TVA e derivat, nu stocat.
VANZARI (antet factura) — coloane denormalizate relevante TVA, toate adaugate prin
2017\03\ff_2017_03_28_01_FACTURARE.sql:9-38:
DISCOUNT_TVA— "TVA DISCOUNT (DISCOUNT * MAX(PROC_TVA) ARTICOLE)"TOTAL_FARA_TVA,TOTAL_TVA,TOTAL_CU_TVA— totaluri pe document (denormalizate)VALOARE_ACHIZITIE- vezi si Subiect B pt.
SERIE_INCASAT/NR_INCASAT/SUMA_INCASAT/TIP_INCASAT/AVIZE
2. Unde se calculeaza TVA-ul pe linie — toate locurile
Calculul e centralizat in doua straturi Oracle, apelate de fiecare punct de consum (VFP nu face calcul TVA local — doar construieste SQL dinamic care cheama functiile Oracle):
-
PACK_SESIUNE.calculeaza_pret_fara_tva/tva/cu_tva— motorul de rotunjire per-unitate de pret (nu e inPACK_FACTURARE; pachetulPACK_SESIUNEnu a fost gasit definit separat in arhiva cautata — cautare punctuala pe cateva luni din 2025/2026, fara succes; probabil e intr-un scriptCOMUN_PACK_SESIUNEmai vechi, netestat exhaustiv). -
PACK_FACTURARE.calculeaza_pret(linia 14557) — wrapper subtire peste cele 3 functiiPACK_SESIUNEde mai sus. -
PACK_FACTURARE.calculeaza_sume(linia 14631, spec 980) — calculeaza suma_fara_tva / suma_tva / suma_cu_tva pe linie (cantitate * pret), delegand catre:calculeaza_total_fara_tva(linia 15745/15769) — delega lapack_sesiune.calculeaza_total_fara_tvacalculeaza_total_tva(linia 15850/15874) — delega lapack_sesiune.calculeaza_total_tvacalculeaza_total_cu_tva(linia 15638/15662) — delega lapack_sesiune.calculeaza_total_cu_tva- variantele
_fact(calculeaza_total_fara_tva_fact15794,calculeaza_total_tva_fact15899,calculeaza_total_cu_tva_fact15687) au formula proprie inline (nu delega lapack_sesiune), documentata explicit in cod ca fiind "folosita in view-ul fact_vrap_centralizator_fact" (comentarii 15686, 15744, 15793, 15848, 15897).
Formula
_fact(exemplucalculeaza_total_tva_fact, 15899-15949) e explicit ROUND-based, cu ramuri separate pentrudiscount_evidentiat— aici e punctul central de rotunjire per linie. -
Puncte de CONSUM ale acestor functii (unde efectiv se calculeaza TVA afisat/raportat):
- Views
fact_vrap_fact_articolesifact_vrap_articole_vandute(ff_2026_07_27_01_FACTURARE.sql:18-44, 131-196— apeleazacalculeaza_total_fara_tva/calculeaza_total_tvadirect inSELECT) - Raport VFP dinamic:
COMUN\programe\oproceduri_rapoarte_fact.prg:581-590— SQL construit in VFP apeleaza directpack_sesiune.calculeaza_pret_cu_tva(...)sipack_sesiune.calculeaza_total_cu_tva(...)pentru listare/relistare rapoarte articole vandute. PACK_FACTURARE.scrie_in_vanzari(13468) sifinalizeaza_avize_lucrare(14807) — calculeaza si scriuVANZARI.TOTAL_FARA_TVA/TOTAL_CU_TVAfolosindcalculeaza_total_fara_tva_factin subquery-uri (13716-13786, 14965-15008).verifica_total_document(16009) — vezi punctul 5, verifica totalul calculat vs. cel din notele contabile si genereaza o corectie.
Nu am gasit un apel VFP direct catre
calculeaza_pret(saucalculeaza_sume(in working copyROAFACTURARE/COMUN(grep pe nume exact, fara rezultate) — deci formularul de introducere factura in VFP nu recalculeaza local pretul/TVA-ul linie cu linie prin apel explicit de procedura; cel mai probabil articolele + preturile lor (deja cupret,pret_cu_tva,proc_tvav) vin dintr-un cursor Oracle (PACK_FACTURARE.cursor_preturi, spec 335, body 2121) populat cand se adauga articolul, iar TVA vizibila in grid e calculata la afisare din acele coloane brute — nu am gasit expresia VFP exacta (cursor_preturie ~500 linii, nu am parcurs linie cu linie in bugetul acestei cercetari). - Views
3. Ce inseamna "preturi_cu_tva" / pret_cu_tva
- Pe linie:
VANZARI_DETALII.PRET_CU_TVA— NUMBER(1), 0/1, transmis ca parametruV_PRET_CU_TVA/V_PRET_ARE_TVAla toate functiile de calcul de mai sus (controleaza care ramura de formula se aplica — pornind de la pret cu TVA sau fara TVA). - In grid-ul VFP exista o coloana checkbox
cPret_cu_tvainD:\ROA\ROAFACTURARE\Clase\ofundal_facturare.vc2:696-699(_grdrow2.cPret_cu_tva...) — probabil afiseaza/permite editarea flagului per linie in formular. - Nu am gasit coloana
PRET_CU_TVA(sau similara) direct peCRM_POLITICI_PRETURIin scripturile de migrare cautate (am cautatALTER TABLE CRM_POLITICI_PRETURI ADD, fara hit pe acest nume) — deci originea exacta a valorii implicite per politica de pret ("politica are bifat 'preturi fara TVA'", cum descrie todo #7) nu e confirmata cufisier:linie; e probabil citita/propagata inPACK_FACTURARE.cursor_preturi(2121) sauciteste_setari_pol_pret(spec 324, body 2025) cand se adauga articolul pe factura — nu am parcurs acele corpuri in detaliu (buget de cercetare).
4. Locuri de atins daca s-ar salva pret_cu_tva/valoare_tva per linie real (nu calculat)
Enumerare pe baza punctelor de consum gasite mai sus:
- DDL:
ALTER TABLE VANZARI_DETALII ADD (valoare_tva, pret_fara_tva_calculat, ...)— coloane noi + migrare date istorice. PACK_FACTURARE(Oracle,ff_2026_03_23_04_COMUN_PACK_FACTURARE.sql):adauga_articol_factura(spec 529, body 4972) — punctul unde se insereaza linia inVANZARI_DETALII_TEMP; ar trebui sa scrie valoarea (eventual editata de user) in loc s-o lase doar pepret/pret_cu_tva/proc_tvav.calculeaza_sume(14631) — daca valoarea e editabila, aceasta procedura ar trebui sa citeasca valoarea salvata in loc s-o recalculeze, sau sa fie ocolita.scrie_in_vanzari(13468) sifinalizeaza_avize_lucrare(14807) — subquery-urile care insumeazacalculeaza_total_fara_tva_fact/calculeaza_total_tva_factpe toate liniile (13716-13786, 14965-15008) ar trebui sa insumeze coloana noua in loc s-o recalculeze.verifica_total_document(16009) — logica de reconciliere total-vs-note-contabile ar trebui ajustata (vezi punct 5) daca totalul nu se mai deriva strict din formula.
- Views Oracle:
fact_vrap_fact_articole,fact_vrap_articole_vandute(ff_2026_07_27_01_FACTURARE.sql:10-257),fact_vfacturi/fact_vfacturi2(vezi Subiect B #11) — toate ar trebui sa citeasca noua coloana in loc decalculeaza_total_*. - VFP:
COMUN\programe\oproceduri_rapoarte_fact.prg:581-590— SQL-ul de raport care apeleaza directpack_sesiune.calculeaza_pret_cu_tva/calculeaza_total_cu_tva. - VFP grid formular:
D:\ROA\ROAFACTURARE\Clase\ofundal_facturare.vc2(coloanacPret_cu_tva+ coloanele de pret/valoare din grid — nu identificate exhaustiv, cautare punctuala doar pe flag). - Rapoarte
.frxcare afiseaza TVA pe linie de factura (ex.usr_factura*.fr2— 25 de fisiere gasite cu referinta laPACK_FACTURARE, listate la cautarea initiala; nu au fost deschise individual).
Estimare: minim 6 zone distincte (DDL, pachet Oracle ~4 proceduri, 3-4 views, 1 program raport
VFP, grid formular, rapoarte .frx) — consistent cu observatia ca e o schimbare "de volum", nu
locala.
5. Mecanism existent de ajustare/rotunjire
Da, exista, dar la nivel contabil, nu la nivel de linie facturata / vizibil userului.
PACK_FACTURARE.verifica_total_document (linia 16009-16188+) compara totalul FTVA/TVA asteptat
(pack_facturare.ntotftva, populat din VFP la pnTotalFtva/Thisform.nbazaron) cu suma reala din
notele contabile generate (ACT_TEMP, grupate pe conturi 4111/4427/418/4428). Daca difera
(16082-16083: NVL(pack_facturare.ntotftva,0) <> V_TOTFTVA_VER), calculeaza diferenta
pack_facturare.ndifftva := pack_facturare.ntotftva - V_TOTFTVA_VER (16085) si insereaza automat
o linie de corectie in ACT_TEMP (16086-16188, INSERT cu suma => pack_facturare.ndifftva) —
adica ajustarea de rotunjire se absoarbe silentios in nota contabila, nu apare ca linie editabila
pe factura si nu se reflecta in VANZARI_DETALII. Aceasta e probabil exact mecanismul care face ca
utilizatorul sa nu poata corecta manual TVA-ul afisat: rotunjirea se "repara" doar in contabilitate,
dupa fapt.
SUBIECT B — Denormalizare VANZARI, bug facturi din avize + numerar (#8)
6. Locatia PACK_FACTURARE
Nu exista fisier .pck/.sql cu acest pachet in working copy ROAFACTURARE (nici in COMUN/
local) — e in afara working copy-ului VFP, in arhiva DDL/PL-SQL Oracle
D:\ROA\DATABASE\SCRIPTURI_CLAR\. Cea mai recenta versiune completa (16948 linii):
D:\ROA\DATABASE\SCRIPTURI_CLAR\2026\03\ff_2026_03_23_04_COMUN_PACK_FACTURARE.sql
(exista si un diff mai nou, doar pe view-uri, 2026\07\ff_2026_07_27_01_FACTURARE.sql — vezi #11).
Istoricul complet de modificari e in SCRIPTURI_CLAR\<an>\<luna>\ff_..._COMUN_PACK_FACTURARE.sql
respectiv ..._FACTURARE.sql (zeci de fisiere, 2006-2026).
7. Procedura care scrie in VANZARI valorile denormalizate
PACK_FACTURARE.scrie_in_vanzari (spec linia 894, body linia 13468-13908) — apelata din
finalizeaza_factura (linia 14740). Face UPDATE VANZARI SET ... cu (13886-13898):
total_fara_tva = lnTotalFaraTVA,
...
total_cu_tva = lnTotalCuTVA,
...
serie_incasat = lnSerieIncasat,
nr_incasat = lnNrIncasat,
suma_incasat = lnSumaIncasat,
tip_incasat = lnTipIncasat
unde lnSerieIncasat/lnNrIncasat/lnSumaIncasat/lnTipIncasat sunt populate (13727-13730) din
variabilele de pachet pack_facturare.cserie_act_incasare, .nnumar_act_incasare,
.nsuma_incasare, .ntip_doc_incasare (declarate 179-182).
O a doua ramura echivalenta exista in finalizeaza_avize_lucrare (spec 1011, body
14807-15176), care face acelasi UPDATE (15124-15130) — pentru ramura "avize pe lucrare".
Variabilele de pachet cserie_act_incasare/nnumar_act_incasare/ntip_doc_incasare/
nsuma_incasare sunt setate doar de PACK_FACTURARE.scrie_incasari (spec 864, body
13070-13139), apelata condiționat (IF V_LISTA_INCASARE IS NOT NULL) din:
scrie_factura2— linia 6178 (ramura factura normala / comanda / contract)scrie_factura_avize— linia 7008 (ramura factura din aviz)
Sunt resetate la NULL in initializeaza_date_factura (comentariu 1384-1386, cod la
1876-1880) — fix explicit din 03.07.2020: "ramaneau completate pe facturile urmatoare de la o
factura anterioara".
VANZARI.AVIZE (seria/numarul avizelor facturate) e scris de
scrie_corespondente_vanzari (spec 1057, body 15421-15457, comentariu la linia 15445:
"Completez VANZARI.AVIZE redundant, pentru a nu face mai rapid fact_vfacturi") — nu am confirmat
in acest buget de cercetare din ce apeleaza finalizeaza_factura daca scrie_corespondente_vanzari
ruleaza necondiționat pe toate tipurile sau doar pe unele (V_TIP e parametru) — merita verificat
punctual daca se investigheaza bug-ul mai departe.
8. Coloanele denormalizate din VANZARI si ramura care le populeaza
Toate adaugate prin 2017\03\ff_2017_03_28_01_FACTURARE.sql:9-38 (comentariu fisier, linia 1-4:
"adaugare coloane in vanzari pentru denormalizarea join-urilor din fact_vfacturi"):
| Coloana | Comentariu DB (linia 44-54 din script) | Populata de |
|---|---|---|
DISCOUNT_TVA |
TVA DISCOUNT (DISCOUNT * MAX(PROC_TVA) ARTICOLE) | scrie_in_vanzari |
VALOARE_ACHIZITIE |
Valoare la pret achizitie articole | scrie_in_vanzari |
TOTAL_FARA_TVA |
Total fara TVA lei | scrie_in_vanzari (13886), finalizeaza_avize_lucrare (15124) |
TOTAL_TVA |
Total TVA lei | idem |
TOTAL_CU_TVA |
Total cu TVA lei | scrie_in_vanzari (13888), finalizeaza_avize_lucrare (15126) |
SERIE_INCASAT |
Seria chitanta/bon fiscal | scrie_in_vanzari (13895), din pack_facturare.cserie_act_incasare (setat de scrie_incasari) |
NR_INCASAT |
Nr chitanta/bon fiscal | idem (13896) |
SUMA_INCASAT |
Suma chitanta/bon fiscal | idem (13897) |
TIP_INCASAT |
11=CHITANTA, 2=BON FISCAL | idem (13898); vezi si nTipIncasareCardBancar=3, nTipIncasareTichete=5 |
AVIZE |
Serie/numar avize facturate (max 1000 caractere, comentariu la linia 1490) | scrie_corespondente_vanzari (15421) |
9. Tipurile de factura/aviz si ramificarea codului
Din VANZARI.TIP (CASE explicit in view fact_vfacturi2,
ff_2017_03_28_01_FACTURARE.sql:89-171) — cateva valori cheie:
1=POLITICA PRETURI, 2=CONTRACT, 3=COMANDA, 4=FACT. DIN AVIZ, 21=AVIZ PE BAZA DE
COMANDA, 24=AVIZ DE RETUR, 43=BON FISCAL MAGAZIN, etc. (lista completa la liniile citate).
Ramificare in VFP, D:\ROA\ROAFACTURARE\COMUN\clase\ofacturare.vc2, metoda
do_scrie_factura — exista doua copii aproape identice ale acestei logici, in doua clase
diferite (confirmat via vfp_symbols.ps1 -Where):
frm_facturare_articole.do_scrie_factura— liniile 13981-14339frm_facturare_articole2.do_scrie_factura— liniile 18004-18331
Structura DO CASE (identica in ambele, ex. clasa 1 la liniile 14067-14174):
poDate.eProforma = 1→{call pack_facturare.scrie_proforma(...)}(14071)poDate.Tip = 4→{call pack_facturare.scrie_factura_avize(...)}(14103) — "facturare din aviz" (comentariu 14086-14087)poDate.Tip IN (3,21,25,28,42,47)→{call pack_facturare.scrie_factura2(...)}(14130) — "facturare pe baza de comanda / avize pe baza de comanda"Otherwise→{call pack_facturare.scrie_factura2(...)}(14158) — politica de preturi/contract
Inainte de asta, lista de incasare lcListaIncasare se construieste (14012-14038) din
poDate.ntip_incasare (11=chitanta, 2=bon fiscal, 3=POS/card), comun tuturor ramurilor.
10. Ramura "factura din aviz" + "achitata numerar" — ce ar trebui sa scrie si ipoteza de cauza
Ce se intampla, pas cu pas (Tip = 4, ntip_incasare in (11,2,3)):
- VFP (
ofacturare.vc2:14012-14038) construiestelcListaIncasarede forma'11|<suma>|<id_casa>;'(chitanta) sau'2|...'/'3|...'(bon fiscal/card) — dacantip_incasarenu e in (11,2,3),lcListaIncasare = [NULL](literal SQL NULL). - VFP construieste
lcSql = {call pack_facturare.scrie_factura_avize(pnDiscount, serie_chit, nr_incasare, lcListaIncasare, id_delegat, id_masina, id_facturare, listare_detaliata, dataora_exp, id_agent, text_aditional, discount_evidentiat, param_aditional, ?@nid_vanzare)}(14103-14115) — semnatura corespunde exact cu procedura Oracle activascrie_factura_avize(linia 6675-7041, care NU areV_TOTFTVA/V_TOTTVAca prime argumente, spre deosebire descrie_factura2— asta e corect, nu e discrepanta de parametri). - In Oracle,
scrie_factura_avize(7007-7012):IF V_LISTA_INCASARE IS NOT NULL THEN pack_facturare.scrie_incasari(...)— deci doar dacalcListaIncasarenu e literalulNULLse seteaza variabilele de pachetcserie_act_incasare/etc. scrie_factura_avizeseteazapack_facturare.clistaid_avize := ...V_LISTAID(7020) — lista de ID-uri de avize facturate, folosita ulterior descrie_corespondente_vanzaripentruVANZARI.AVIZE.scrie_factura_avizecheamafinalizeaza_factura(7026-7034), care cheamascrie_in_vanzari(14740) → scrieserie_incasat/nr_incasat/suma_incasat/tip_incasatdin variabilele de pachet setate la pasul 3.
La nivel de cod citit, lantul pare corect cablat — parametrii trec prin, semnaturile se
potrivesc, iar cele doua clase VFP (frm_facturare_articole si frm_facturare_articole2) au
logica identica pentru aceasta ramura.
IPOTEZA (cauza posibila a bug-ului, nedemonstrata prin citire de cod — necesita investigatie suplimentara/testare):
- Daca ordinea reala de operatii difera de
ordine_operatii_facturare.txt(ex. daca intre pasul 3 si pasul 5 se mai apeleazainitializeaza_date_facturapentru alt document/lucru din aceeasi sesiune, inainte cafinalizeaza_facturasa apuce sa citeasca variabilele de pachet), fix-ul din 03.07.2020 (linia 1876-1880, reset la NULL) ar putea sterge datele de incasare inainte cascrie_in_vanzarisa le foloseasca — dar nu am gasit in codul citit un asemenea apel intercalat. - Alternativ: daca pe ramura aviz
scrie_corespondente_vanzari(care scrieVANZARI.AVIZE) nu e apelata necondiționat dinfinalizeaza_facturapentruTIP=4(nu am verificat corpul complet alfinalizeaza_factura, liniile 14723-14807, dincolo de apelul lascrie_in_vanzari) — merita verificat explicit daca acel apel exista si e neconditionat de tip. - Nu am verificat daca exista vreo diferenta intre
scrie_factura_avizesiscrie_factura_avize_retur(spec 667, alta ramura pentru tip retur din aviz) in privinta apeluluiscrie_incasari/scrie_in_vanzari— posibil ca bug-ul sa fie specific ramurii de retur, nu celei simple.
Recomandare pentru pasul urmator (daca se investigheaza mai departe): instrumentare/breakpoint pe
scrie_in_vanzari (13468) intr-un mediu de test, pentru o factura Tip=4 platita numerar, verificand
valorile efective ale pack_facturare.cserie_act_incasare/nnumar_act_incasare/nsuma_incasare/
ntip_doc_incasare chiar inainte de UPDATE (13886-13898).
11. Cele doua view-uri de facturi
fact_vfacturi— view-ul "original" (pe model relational, cu join-uri catreVANZARI_DETALII/ACT/ etc., fara denormalizare). Redefinit de multe ori de-a lungul timpului; cea mai recenta gasita:D:\ROA\DATABASE\SCRIPTURI_CLAR\2023\11\ff_2023_11_17_01_COMUN.sql(si2023\02\ff_2023_02_08_01_COMUN.sql) — nu am deschis continutul exact in acest buget.fact_vfacturi2— view-ul cu totaluri denormalizate din VANZARI (total_fara_tva,total_tva,total_cu_tva,serie_incasat,nr_incasat,suma_incasat,tip_incasat,avizecitite direct din coloaneleVANZARI, nu recalculate dinVANZARI_DETALII/ACT). Definit initial inD:\ROA\DATABASE\SCRIPTURI_CLAR\2017\03\ff_2017_03_28_01_FACTURARE.sql:59-236, cu comentariul explicit (linia 3): "View fact_vfacturi2 - temporar, urmand a inlocui view-ul fact_vfacturi, dupa completarea coloanelor din vanzari pentru datele existente deja".
Separat, exista si o a doua pereche de view-uri, mai recenta si mai granulara (pe linie de
articol, nu pe factura): fact_vrap_fact_articole / fact_vrap_articole_vandute, definite
in D:\ROA\DATABASE\SCRIPTURI_CLAR\2026\07\ff_2026_07_27_01_FACTURARE.sql:10-257 — acestea NU
citesc din coloane denormalizate, ci calculeaza TVA live prin pack_facturare.calculeaza_total_*
(vezi Subiect A #2). Nu sunt aceleasi cu perechea mentionata in cerinta (care pare sa se refere la
fact_vfacturi/fact_vfacturi2), dar sunt relevante daca se cauta "view-ul cu totaluri din
vanzari" generic.
Note metodologice
PACK_SESIUNE(motorul de rotunjire per-pret, apelat dePACK_FACTURARE) nu a fost gasit definit ca fisier separat in cautarile punctuale facute (cateva luni din 2025-2026); daca se continua investigatia pe rotunjire, merita o cautare dedicatacreate or replace package pack_sesiuneinD:\ROA\DATABASE\SCRIPTURI_CLAR.- Arhiva
D:\ROA\DATABASE\SCRIPTURI_CLARe foarte mare (mii de fisiere, 2009-2026); cautarile de mai sus au fost tintite (nume de coloane/proceduri cunoscute), nu exhaustive — ungrepcomplet pe intreg arhivul repetat timeout la 20s in unele incercari initiale. - Nu am gasit apeluri catre
PACK_FACTURAREdinD:\ROA\ROAFACTURAREpropriu-zis (in afaraCOMUN\clase\ofacturare.vc2) — pachetul e consumat exclusiv prin acea clasa si prinCOMUN\programe\oproceduri_rapoarte_fact.prg.