ROAFACTURARE · todos.txt punctul 13 · mockup, versiunea 9 (runda 17)

Un singur formular de facturare

Datele documentului si articolele in aceeasi fereastra, fara incarcarea prealabila a tuturor articolelor din toate politicile de preturi. Acelasi formular la introducere, la modificare, la copiere si la proforma.

Mockup, nu implementare. Campurile, etichetele si coloanele sunt cele reale, verificate pe cod la 09.08.2026 — rapoartele sunt in docs\cercetare\. Plan: docs\plan_13_unificare_formular_facturare.md Asezarea e varianta D (decizia 57, runda 15), cu motivul discountului in banda de totaluri (decizia 66, runda 17).

1Formularul

Deschis pe o factura in lei, emisa pe baza de comanda. Antetul e blocat — butonul din bara lui arata creionul. Asezarea e varianta D: antetul strans pe doua randuri, fara panou separat de discount, banda de totaluri lipita de grid pe toata latimea — cu procentul si motivul discountului chiar in ea — si randul de jos cu doua sectiuni colapsabile, incasare si alte date. La introducerea unui document nou arata identic, cu antetul deschis si campurile goale.

Factura FF 1 244 / 07.08.2026 · SC EXEMPLU DISTRIBUTIE SRL Renunta Termina
Document 1 antet blocat
FACTURA
FF
1 244
07.08.2026
06.09.2026
SC EXEMPLU DISTRIBUTIE SRL F4
RO12345678 ANAF
14 820,00
CMD 3312 F4
DEPOZIT CENTRAL
Articole 3
+Linie noua −Sterge linia ✎Detalii linie ↧Adauga articole ▾ 3 linii · comanda CMD 3312 acoperita 100%
NrCod materialArticolUMGestiune CantitatePret f. TVApret
c. TVA
Disc. %Disc. unitar Explicatie TVA Val. f. TVATVAVal. c. TVAExplicatie linie
1MAT-0041Ciment Portland 42,5R 40 kg SACDEPOZIT CENTRAL 100,00028,5000 0,000,0000 Livrari 21% 2 850,00598,503 448,50—
2MAT-0107Adeziv gresie/faianta 25 kg SACDEPOZIT CENTRAL 40,00042,0000 5,002,1000 Livrari 21% 1 596,00335,161 931,16conform comanda
3SRV-0002Transport marfa BUC— 1,000250,0000✓ 0,000,0000 Prestari 21% 250,0052,50302,50—
4scrie codul sau denumirea… cautare pe server, pe masura ce scrii — nu se mai aduce lista de preturi intreaga
Ins — linie nouaDel — sterge F4 — cautaCtrl+N / Ctrl+D
Baza4 696,00
Discount articole84,00
Discount document4 0,00 %0,00 ✓ evidentiat pe factura
Motiv5 motivul discountului…
TVA986,16
Total factura5 682,16 lei
▸ Incasare NUMERAR · 5 570,55 lei
▾ Alte date 2
701
—
—
IONESCU V.
B 123 XYZ
ca a clientului
1

Antetul, blocat pana ceri altfel

Un singur buton. Creionul deschide antetul si devine discheta; discheta salveaza doar antetul si redevine creion. Nicio bifa — nici cele patru de azi, pe serie, numar, data si scadenta. Fara valuta si fara data de curs — factura e in lei si niciun articol nu are pret in valuta (sectiunea 4). Cat anume deschide, si de ce nu chiar tot in prima etapa: sectiunea 2.

2

Randul de jos, doua sectiuni

Incasarea si alte date (analitice, delegat/transport, adresa de facturare, text aditional) stau colapsate, una langa alta, nu una sub alta (decizia 57). Sunt independente — se poate tine deschisa doar una — iar randul inchis arata rezumatul continutului, nu doar titlul: cand incasarea e completata arata suma si modalitatea, cand nu e nimic completat rezumatul spune asta. Campurile din interior stau pe orizontala, doua randuri fiecare. A treia sectiune, pentru motivul discountului, a fost incercata si respinsa — motivul sta langa discount, in banda de totaluri (decizia 66 rastoarna decizia 64). Incasarea ramane cea deosebita (decizia 41): e singura cu efecte laterale reale — alocare/dezalocare de numere — deci garda de non-alocare la deschidere se scrie si se testeaza intr-un singur loc, si e singura blocata pe un document deja emis (decizia 25). Tot pe document emis, analiticele se vad dar nu se editeaza de aici — sectiunea 2.

3

Un singur buton de adaugare

Adauga articole deschide un meniu cu optiunile potrivite sursei — sectiunea 3. Dispare gridul de sus cu toate articolele din toate politicile.

4

Banda de totaluri, lipita de grid

Baza, discount articole, discount document si TVA, desfacute pe un singur rand, cu totalul mare singur la dreapta (decizia 57). Discountul de document se editeaza pe loc, procentul langa suma; bifa „se pune in evidenta…" de pe panoul care disparea s-a mutat aici, discret. Repartizarea pe cote de TVA e automata si proportionala (decizia 59) — nu se cere nimic utilizatorului.

5

Motivul discountului, langa discount

Singura bucata din reparatia discountului de document care cere UI nou (decizia 61): text optional, ajunge in AllowanceChargeReason din eFactura (ReasonCode ramane 95). Sta in banda de totaluri, imediat dupa suma pe care o explica (decizia 66) — nu ca sectiune separata jos, cum se stabilise la decizia 64. Ia latimea ramasa intre discount si TVA; e activ doar cand discountul de document nu e zero — un motiv fara discount n-are ce explica.

2Modificarea antetului, fara sa treci prin articole

Protectia antetului nu e o inventie: formularul de azi de modificare are deja patru bife, cate una pe camp, care deblocheaza serie, numar, data si scadenta. Ce se schimba e ca toate patru dispar, inlocuite de un singur buton in bara panoului, care isi schimba imaginea: creion cat timp antetul e blocat, discheta cat timp e deschis.

1 · antet blocat
Document antet blocat
FF
1 244
06.09.2026
IONESCU V.

Nimic nu se poate schimba din greseala. Documentul se poate citi in liniste. Butonul arata creionul: apasarea deschide.

2 · antet deschis
Document antet deschis
FF
1 244
06.09.2026 ▾
IONESCU V. F4

Tot antetul e editabil, si campurile de identitate. Butonul a devenit discheta: a doua apasare salveaza antetul si il blocheaza la loc, cu creionul inapoi.

Un singur ciclu, doua stari: creion → deschis → discheta → salvat si blocat → creion. Termina ramane neschimbat si salveaza tot documentul; butonul de antet nu il inlocuieste, ci acopera cazul in care nu vrei sa treci prin articole.

de adaugat Un singur camp de antet nu are azi control nicaieri: eFactura. Procedura il scrie la fiecare apel, dar valoarea vine din inregistrare sau e fortata zero — nimeni nu il poate schimba. Daca butonul deschide tot antetul, il deschide si pe el, langa tipul SAF-T.

exista deja Comutatorul nu e un tipar nou in suita: fereastra de rulaje face exact asta pe acelasi buton but_modifica, schimbandu-i imaginea in save_sus.bmp cand intra in editare — verificat pe cod, rulaje.vc2:4716-4773. Se copiaza reteta de acolo.

ActiuneCe salveazaCum
Butonul de antet, a doua apasare tot antetul, adica exact cele 14 campuri pe care le stie procedura: ruta, delegat, agent, masina, data/ora expedierii, adresa de facturare, listare detaliata, text aditional, tip SAF-T, eFactura, plus serie / numar / data / scadenta pe loc pack_facturare.modifica_date_factura. Nu atinge articolele si nu recalculeaza nicio suma. Zece campuri se scriu neconditionat in VANZARI, deci apelul trimite antetul intreg, nu doar ce s-a schimbat; cele patru de identitate se propaga dupa ID_FACT in inca cinci tabele.
Termina tot documentul, ca azi ruta se alege dupa ce s-a schimbat — vezi sectiunea 7

Asta acopera cazul in care vrei sa corectezi doar delegatul sau data scadentei: apesi creionul, corectezi, apesi discheta, inchizi. Articolele nici nu se ating.

Ce deschide efectiv butonul — si de ce nu chiar tot, deocamdata. „Tot antetul” ramane intentia, dar campurile nu au aceeasi ruta de scriere. S-a cautat exhaustiv, si in Oracle si in tot codul VFP: pentru o parte din ele nu exista nicio procedura care sa le schimbe pe un document deja emis. Nu e o scapare de proiectare, e starea codului de azi.

Grup de campuriEtapa IEtapa II, cu regenerare
cele 14 — serie, numar, data, scadenta, ruta, delegat, masina, agent, data/ora expedierii, adresa de facturare, text aditional, listare detaliata, tip SAF-T, eFactura se deschid salvate pe loc la fel
tip document, client, valuta, zi curs, sursa, gestiune sursa, politica de preturi, si incasarea blocate cu explicatie la hover se deschid modificarea lor marcheaza documentul pentru regenerare, aplicata la Termina
analiticele — venit / cheltuiala, sectie, responsabil, lucrare doar afisare se modifica din editarea notei contabile, nu de aici

Alegerea de a le tine blocate in etapa I, in loc sa se deschida cu avertisment: un camp care se lasa modificat dar nu se salveaza e o capcana. O modificare pierduta in tacere e mai rea decat un camp inca blocat, iar hover-ul spune de ce.

3Un singur buton de adaugare, cu meniu

In loc de doua butoane („adauga tot” si „alege”), unul singur care deschide un meniu — acelasi tipar folosit deja de butonul de modificare din lista de facturi. Optiunile se schimba dupa sursa documentului, cu doua constante: ultimele doua optiuni sunt aceleasi peste tot — Cauta in lista de preturi…, cu pretul din politici, si Alege din nomenclator…, cu pretul tastat. Sursa umple documentul, nu il inchide: pe o factura din comanda se poate adauga oricand un articol liber, si se poate si sterge — clientul mai vrea ceva, sau vrea sa schimbe.

Factura din comanda

Factura din contract

Factura din avize

Factura din lista de preturi

Factura de retur exista deja

Factura venita din ROAAUTO la modificare

Cele doua mecanisme de returCum e aziCe se schimba
Factura de retur
document de sine statator
exista deja alegi facturile clientului dintr-un browse cu selectie multipla, iar liniile se populeaza din ele: gestiunea si pretul de achizitie vin neschimbate din linia originala, pretul de vanzare se recalculeaza pe curs doar daca moneda nu e nationala. Antetul primeste singur textul „RETUR FACTURA …”. se muta ca atare. Nu se reproiecteaza nimic din ce functioneaza — in special nu mostenirea gestiunii si a pretului de achizitie.
Retur de articole
intr-o factura de vanzare normala
alt mecanism, complet separat: factura sursa se alege per articol, iar gestiunea nu vine din factura sursa, ci se alege. Butonul e vizibil doar pe facturile din lista de preturi. capata si alegerea la nivel de document, dupa modelul de mai sus; calea per-articol ramane, pentru cand returnezi un singur lucru
Cantitate partiala si stergere exista deja coloana isi schimba capul in Cant. max. de returnat, serverul calculeaza maximul, iar o linie stearsa isi elibereaza cantitatea inapoi nimic — se pastreaza intocmai, ca si interdictia de retur dintr-un retur
Articole din afara facturilor sursa nu se poate lista de articole este continutul facturilor alese, deci nu ai de unde alege altceva — aceeasi cauza ca la comanda optiunea din lista de preturi devine disponibila si aici. O linie de retur fara factura originala e permisa, ca pe orice alt document — returul nu face exceptie. Consecinta: pe acele linii gestiunea si pretul de achizitie se aleg, nu se mostenesc, iar maximul returnabil calculat pe server nu se aplica, pentru ca nu exista cantitate originala fata de care sa se limiteze.

„Alege…” deschide un dialog de selectie cu o coloana de bifat si criterii de cautare, dupa modelul importului din ROAACNPRO: buton activ doar cand documentul are sursa, populare aditiva in cursorul local, nicio scriere in baza pana la salvare. Spre deosebire de modelul acela, la zero rezultate se spune de ce, nu se inchide in tacere.

Azi „adauga tot” exista, dar e o iconita fara caption si fara tooltip, asezata lateral intre doua griduri — si nu acopera contractele: tipurile 2, 6, 26 si 52 lipsesc din conditiile lui de vizibilitate, desi avizele sunt acolo.

decis „Adauga tot din comanda” / „Adauga tot din avize” raman incarcari complete — S4 nu se restrange la o lista de preturi (decizia 39). Grila care le alimenteaza (crsarticole) nu e doar sursa listei: e si registrul cantitatii ramase de facturat, citit ca sa se decida inchiderea automata a comenzii sau a avizului cand o linie se sterge. Cautarea pe server ramane cum se vede mai sus (fara incarcare in masa); ce se decupleaza e bookkeeping-ul cantitatii ramase, intr-un registru propriu — ca sa poata disparea incarcarea si pe comanda si pe aviz fara sa strice inchiderea automata a documentului sursa.

4Valuta si data cursului

Doua concepte diferite, care azi impart acelasi camp mereu vizibil. Campul „Data curs valutar” nu e eliminat niciodata in functie de valuta — doar pe retur — deci apare si pe facturi in lei unde nu are ce cauta.

CazCe e in documentCe arata antetul
Factura in lei,
articole in lei
tot in lei, niciun pret din politica in valuta fara valuta fara data curs
Nimic de ales, nimic de convertit.
Factura in lei,
articole cu pret in valuta
documentul e in lei; unele articole au pretul din politica in valuta si se convertesc apare Data curs valutar
Cu explicatia langa el: preturile in valuta se convertesc in lei la cursul acestei zile; documentul si contabilitatea raman in lei.
Factura in valuta
Invoice, credit note, retur valuta, factura fiscala valuta pe contract
documentul insusi e in valuta; articolele au pret in valuta Valuta Data curs valutar
Amandoua, ca azi.

Al treilea caz nu se alege din formular: e decis de tipul documentului la deschidere, iar selectorul de valuta e scos din formular cand documentul nu e de tip valuta. Deci „factura in valuta” nu e o bifa pe care o pune operatorul, ci felul documentului.

Unificarea rezolva o problema care azi nu e rezolvabila. Cazul al doilea nu se poate sti la deschiderea antetului — se afla abia dupa ce se incarca articolele, cand antetul de azi e deja inchis. In formularul unificat antetul si articolele sunt in aceeasi fereastra, deci campul poate aparea in momentul in care intra pe grid primul articol cu pret in valuta. Din acelasi motiv dispare si mecanismul bug-ului #16: nu mai exista un antet inchis la care sa te intorci din formularul de curs.

decis Validarea cursurilor se restrange la valuta cautata (decizia 42). Pe varianta filtrata a cursoarelor, verifica_cursuri_valute nu mai ruleaza global la deschiderea formularului, ci doar pe valuta articolului adus in grid. Un curs lipsa pe alta valuta nu mai e semnalat la deschidere, ci abia cand se ajunge la un articol pe acea valuta — diferenta e asumata, se consemneaza la testare, nu e regresie.

5Discountul pe linie

Verificat pe formularul de azi si pe tabela. Raspunsul e mai simplu decat parea: si procentul, si valoarea exista deja — dar nu in grid.

CeCum e aziCe se schimba
Procent si valoare unitara, ca intrare pentru operator exista deja in dialogul de articol care se deschide la fiecare adaugare: trei campuri — procent, suma in lei, suma in valuta — orice tastezi in unul recalculeaza pe celelalte. Dialogul dispare odata cu unificarea. Cele doua campuri devin coloane in grid, cu acelasi calcul in spate.
Ce se stocheaza o singura coloana VANZARI_DETALII.DISCOUNT_UNITAR, NUMBER(22,6) — valoare absoluta pe unitate. Nu exista coloana de procent. Aceeasi coloana e si pe politica de pret, deci discountul poate veni din politica. Nimic. Modelul de date nu se atinge — procentul ramane doar mod de introducere.
Discountul in grid, azi inconsecvent pe factura in lei coloana e read-only; pe factura in valuta e editabila, dar nu are handler de recalcul — o editare directa in celula schimba valoarea fara sa refaca totalurile. Se repara odata cu mutarea in grid: aceleasi validari ca in dialogul de azi.

De verificat separat, inainte de a incepe: daca discountul unitar apare pe rapoartele tiparite si daca e transmis in eFactura si SAF-T. Daca nu apare pe hartie, documentul tiparit nu explica totalul.

decis Discountul de DOCUMENT (nu cel de linie, de mai sus) se repartizeaza proportional pe cote de TVA, nu pe cota maxima cum face codul de azi (decizia 59). E automat, nu cere nimic de la operator. In banda de totaluri (sectiunea 1) se vede o singura suma; pe factura tiparita, cu cote mixte, pot aparea mai multe randuri „Discount X % Factura", cate unul per cota.

6De unde se intra in formular

Cerinta e ca formularul sa poata fi deschis cu sursa deja completata, fara sa o mai alegi. Doua cai fac deja exact asta.

exista Din pagina Comenzi

Butonul de pe randul de comanda trimite comanda selectata si deschide formularul cu ea completata. Ascuns cand comanda e deja facturata.

exista Din programul de contracte

Butonul de pe grila de contracte trimite contractul selectat si deschide acelasi formular, cu contractul completat. Nu mai alegi nimic.

generic Din meniu

Fara sursa precompletata — alegi comanda sau contractul in formular, ca pana acum.

Ce merita schimbat, si atat: sursa se transmite azi prin variabile globale, nu ca parametru. De aceea calea generica de comanda e obligata sa goleasca explicit globalul inainte de apel, ca sa nu ramana precompletata cu ce era in sesiune — iar calea de contract nu face acelasi lucru. Un parametru explicit inchide subiectul. Nu presupune nicio integrare noua de contracte.


7Ce se scrie la Termina

Un singur formular, dar nu o singura cale de scriere. ID_FACT se pastreaza in toate cazurile.

Ce s-a schimbatCum se scrieEfect
Antet — cele 14 campuri pe care le stie procedura pe loc modifica_date_factura aceeasi procedura ca butonul de antet pe a doua apasare; propaga serie / numar / data dupa ID_FACT
Antet — tip document, client, valuta, zi curs, sursa, gestiune sursa, politica de preturi, si tot ce tine de incasare regenerare verificat pe cod: nu exista nicio cale de a le scrie pe un document emis — nici in Oracle, nici in VFP. Singura ruta e drumul de emitere, adica regenerarea. Pana cand ea exista (etapa II), campurile raman blocate.
Antet — analiticele: venit / cheltuiala, sectie, responsabil, lucrare nu de aici se editeaza din editarea notei contabile, care le trateaza la nivel de linie de nota. Formularul unificat le arata, nu le scrie — ca sa nu existe doua ferestre care modifica acelasi camp cu intelesuri diferite.
Explicatia si codul fiscal al unei linii pe loc modifica_explicatie_articol doua coloane, nicio suma
Cantitati, preturi, linii adaugate sau sterse, discount, gestiune, cota TVA regenerare stergere + reemitere, in aceeasi tranzactie documentul vechi sters = 1; cel nou scris pe drumul normal de emitere; notele si rulajele refacute
Nimic nimic documentul ramane neatins

decis Un singur cod de scriere contabila (decizia 35). Regenerarea de mai sus scrie pe acelasi drum si la emitere, si la editare (etapa II): scrie_factura2 → contabilizeaza_articol, cu parametrul de cont de la sectiunea 10. Canalul oscrie_in_fisiere, folosit azi de #6, nu intra in #13 — doua implementari ale aceleiasi reguli de contare, una in pachet si alta in VFP, ar trebui tinute in pas manual la fiecare schimbare. Nu exista in acest formular editare directa a randului din ACT_TEMP.

8Ce trebuie verificat inainte

9Facturile venite din ROAAUTO

ROAAUTO emite facturi din formularul lui de devize, dar prin acelasi pachet si in aceleasi tabele. Formularul unificat le vede fara niciun cod special. Ce lipseste nu e recunoasterea, ci scrierea.

IntrebareRaspunsul de pe cod
Scrie in aceleasi tabele? da acelasi PACK_FACTURARE, acelasi drum prin tabela de staging catre VANZARI_DETALII. Tip de document -12.
Se vad in editorul nou? da deja, testat pe date reale — detectia liniilor nu filtreaza dupa tipul documentului.
Se pot adauga articole la emitere? da prin Alte servicii, la emiterea facturii finale. Articolele vin din nomenclatorul brut, sunt limitate la cele fara stoc, iar pretul se tasteaza — nu vine din politici. Raman linii proprii, nu se cumuleaza in manopera sau materiale.
Se pot modifica dupa emitere? nu butonul se blocheaza imediat ce comanda are numar de factura, metoda de stornare a comenzii e goala, iar gridul din editorul nou e read-only. Singurul instrument asupra unei facturi emise e stergerea ei intreaga. Asta e capacitatea care se cere.
Cum arata liniile lor? cele venite din deviz nu sunt articole: sunt sume cumulate pe categorii — manopera, materiale, avans, discount — pe pseudo-articole cu cod negativ. Langa ele pot sta articole reale. Niciunele nu au gestiune, nici macar cele reale.

Ce se cere: aceeasi adaugare de articole si la modificarea documentului, nu doar la emitere — si nu numai pentru facturile auto, ci pentru orice tip de factura, din lista de preturi sau direct din nomenclator.

corectie „Alte servicii” nu e jumatatea de drum pe care o credeam. Mecanismul acela functioneaza tocmai pentru ca ocoleste contabilizarea: facturile de deviz merg pe o cale paralela, care nu genereaza nicio nota contabila de venit. Pe fluxul normal de facturare, unde nota se genereaza, un articol fara politica de pret e respins cu eroare. Deci nu se generalizeaza un mecanism existent — se rezolva altfel (mai jos).

rezolvat Devizul nu se dezechilibreaza. Pachetul ROAAUTO nu citeste deloc tabelele de vanzari — nici antetul, nici liniile. Legatura pe care o face dupa emitere e in sens invers: pune numarul documentului pe comenzile si lucrarile lui. Deci o linie adaugata din formularul unificat nu strica niciun total si nu cere niciun apel suplimentar catre ROAAUTO.

decis Nepotrivirea de afisare e acceptata (decizia 28). Totalul devizului se calculeaza din structura proprie ROAAUTO, deci nu va arata niciodata linia adaugata; in schimb factura retiparita o va arata, pentru ca relistarea citeste direct liniile documentului. Conditia ceruta de Marius e alta: MANOPERA si MATERIALE sa fie conform devizului — restul articolelor pot exista pe factura fara sa apara in ecranul de deviz. Nu se cere cod nou in ROAAUTO ca sa aduca ecranul de deviz la zi.


10Contul de venit pentru articole adaugate din nomenclator

Intrebarea ramasa deschisa in sectiunea 8: cu ce cont de venit intra un articol adaugat „Alege din nomenclator…”, fara politica de pret. Decizia 27 (mai jos) nu s-a schimbat; reteta prin care ajungea la pack_facturare s-a abandonat intre runda 8 si runda 9-10, in favoarea unui parametru nou.

respins Decizia 24 — articolul ales din nomenclator primeste id_pol-ul unei politici de pret implicite. Retrasa in runda 8: evita cod nou in pack_facturare, dar cu pretul unei configurari cu contabilul (care politica, cu ce SCC) si al unui cont de venit uniform pentru orice articol adaugat asa. Inlocuita de decizia 27.

Decizia 27 — contul de venit se deriva, pe doua ramuri

ArticolSursa contului de venit
gestionabil
cont de gestiune clasa 3xx
CORESP_CONT_VENCHELT.CONT_VENIT, cautat pe CONT = contul de gestiune al liniei
negestionabil NOM_ARTICOLE.CONT, daca e deja cont de clasa 6xx sau 7xx; altfel, implicit 704

respins Decizia 27-bis — reteta VFP in 4 pasi: calculeaza contul, cauta o politica a carei nota il are deja, insereaza articolul in ea cu pack_preturi.adauga_politica_pret_art, trimite id_pol. Abandonata in runda 9 (decizia 34): intrebarea deschisa era cum alege programul nota contabila de vanzare pe factura din comanda, care nu are politica de pret (decizia 32) — iar raspunsul lui Marius se refoloseste direct pentru articolul ad-hoc. Nu mai e nevoie de politica tehnica, nici de interogarea inversa pe SCC, nici de inserarea articolului intr-o politica.

Decizia 34 — contabilizeaza_articol primeste contul, printr-un parametru nou

Marius, textual: „poti sa adaugi parametrul contul contabil la contabilizeaza_articol.” Verdictul de proiectare, in trei randuri, pentru ca schimba forma literala a cererii: contabilizeaza_articol ia azi un singur parametru, detalii_articol VANZARI_DETALII_TEMP%ROWTYPE — contul nu intra pe el literal, ar fi cosmetic. Intra ca coloana noua VANZARI_DETALII_TEMP.CONT_VENIT VARCHAR2(4) NULL, populata printr-un parametru nou V_CONT_VENIT IN VARCHAR2 DEFAULT NULL, adaugat la coada lui adauga_articol_factura (procedura chemata direct din VFP) — contabilizeaza_articol il primeste automat, fara sa i se schimbe semnatura. Precedentul e in aceeasi lista de parametri: V_TAXCODE si V_LOT sunt deja doi parametri adaugati ulterior, la coada, cu DEFAULT NULL, iar apelul VFP e pozitional si se opreste la V_LOT.

Cei trei apelanti interni nu se ating deloc — scrie_factura2, scrie_factura_avize_retur si scrie_aviz_retur fac SELECT * BULK COLLECT intr-un TABLE OF ...%ROWTYPE, deci coloana noua le traverseaza fara nicio schimbare de cod. Ramura noua se activeaza doar pe detalii_articol.cont_venit IS NOT NULL: infasoara blocul FACT-024 (garda ramane litera cu litera pe ramura veche — o linie fara politica si fara cont trimis continua sa cada pe eroare), n-are cursor deloc, deci descarca_gestiune ruleaza exact o data prin constructie — bug-ul de set multi-rand din ramura veche nu se mosteneste, fara sa se repare ramura veche.

de retinut la implementare Parametrul se cableaza in doua locuri VFP, nu unul: frm_facturare_articole.do_scrie_articole si frm_facturare_articole2.do_scrie_articole sunt doua clase distincte, fiecare cu apelul ei RPC propriu. Daca se vrea CONT_VENIT pastrat si dupa fapt in VANZARI_DETALII, lista de coloane explicita din scrie_in_vanzari (24 de coloane azi) trebuie extinsa — altfel coloana traieste doar in VANZARI_DETALII_TEMP si ACT_TEMP. Articolul compus nu e o gaura aici: e exclus structural — proprietatea COMPUS traieste pe perechea (articol, politica), prin ID_POL_ART, iar o linie fara politica n-are asa ceva.

Decizia 36 — SCD si CU_TVA pe ramura fara politica

Nota veche mai furniza si SCD, CU_TVA, IN_VALUTA, EXPLICATIE, ID_VENCHELT, ID_SECTIE — nu doar contul. Verificarea n-a gasit nicio sursa alternativa in cod pentru primele doua (nici optiune de firma existenta, nici cont pe partener, nici flag de scutire pe articol sau client), deci sunt decizii de produs, si Marius le-a luat:

CampSursa noua
SCD o optiune de firma noua, cu 4111 ca implicit — acelasi tipar in trei niveluri deja folosit de pack_facturare.scrie_incasare2 pentru RF_CONT_INCASARE_*: parametru explicit → optiune de firma → constanta hardcodata daca optiunea lipseste. Mecanismul (tabelul OPTIUNI, PACK_SESIUNE.getoptiunefirma, ecranul generic frm_optiuni) exista de 15+ ani, deci cheia noua nu cere niciun cod VFP nou, doar randul in tabel. ASCD nu se atinge — se calculeaza deja din V_SCD.
CU_TVA derivat din cota liniei, nu fixat: 1 daca proc_tvav > 0, altfel 0. Elimina prin constructie riscul gasit la verificarea adversariala: cu CU_TVA = 1 fixat, o linie scutita ar fi intrat in comparatia de maxim din nproc_tva_max si ar fi putut imprumuta coloana si taxcode-ul ei liniei de discount a intregii facturi. Diferenta fata de ce face azi nota e intentionata, se consemneaza la testare.

Lista de parametri noi ramane la unul singur, V_CONT_VENIT: SCD vine din configurare, CU_TVA se deriva in pachet din date deja prezente pe rand.

Decizia 37 — cheia optiunii de firma

RF_CONT_ART_FARA_POL, aliniata la familia RF_CONT_INCASARE_* — aceleasi optiuni care alimenteaza azi SCD in acelasi pachet, deci apar grupate alaturi in ecranul de optiuni. VARTYPE = 'CHARACTER', VARVALUE = '4111', PROGRAM = 'ROAFACTURARE', dar PROGRAME larg — apelul traieste in COMUN\clase\ofacturare.vc2, prezent in toate cele sapte produse ale suitei. Fara validare de cont, nici la salvare nici la citire — acelasi tipar ca RF_CONT_INCASARE_*, care nu valideaza de 15 ani. Garda gratuita ramane lungimea: un VARVALUE peste 4 caractere da ORA-12899 la INSERT INTO ACT_TEMP — esec zgomotos, nu cont tacut gresit. Un cont inexistent in planul de conturi, scris din greseala in ecran, ajunge pe nota neschimbat — risc acceptat constient, acelasi pe care produsul il are deja pe optiunile de tip cont.

Intrebarea lui Marius, verificata: „In ROAACNPRO si pe factura din comanda / contract se adauga articole fara politica — de ce nu si aici?” Raspuns, neschimbat fata de v7: ROAACNPRO nu cheama deloc contabilizeaza_articol — are propria contabilizare, pack_acn.salveaza_regdoc. Pe contract, articolele vin din cursor_contract / cursor_preturi, cu id_pol deja atasat de cursor. Deci FACT-024 ramane blocantul pe linia ad-hoc — parametrul de mai sus e cum se evita, nu un motiv sa fie sarit.

Ce nu e gratuit


11Puncte marunte ramase

Nu blocheaza nimic din ce e mai sus; se inchid la implementarea povestii respective. Enumerate ca sa nu se piarda intre runde — se merge pe recomandare daca Marius nu spune altfel.

PunctPovesteSe merge pe
Textul tooltip-urilor pentru analiticele read-only si pentru grupul de incasare blocat S3bformularea propusa in raport, sectiunile 2.2 si 5.3
Eager vs. lazy pentru lookup-urile Oracle din Init (delegat / masina ultimei facturi, casa) S3b, S3lazy, ca sa nu se plateasca la fiecare depliere
_checkbox1 vs. chkDetaliat — campul unic de „listare detaliata” S3b, S1nedecis — se inchide pe cod la implementare, nu prin alegere
Forma lui toSursa: obiect scatter (duck-typing) sau clasa dedicata S3cduck-typing, ca azi — o clasa noua n-ar schimba nimic functional
Conversia comenzii si a contractului: un commit sau doua S3cun singur commit — aceleasi trei fisiere comune, separarea nu reduce regresia
goComanda = '' redundant la Cw3.do_actiune dupa conversie S3cse lasa, marcat explicit „intentionat” in diff
Contractul cu doua meniuri (articole vs. rate): eticheta generica sau diferentiata pe OPT_FACTURARE S4bdiferentiata — „Alege ratele de facturat…” e gresita pe contractele cu articole
„Alege facturile de returnat…” — ramane doar la antet sau capata incarcare aditiva din bara S4bramane la antet in etapa I; mutarea e poveste separata
But_renunt1 / But_reset1 capata Caption pentru consistenta cu bara etichetata S4bda — decizia 13 cere etichete, nu iconite mute
Ordinea si formularea optiunilor din xmenu() per sursa S4btabelul din sectiunea 3 a raportului
UX-ul contractului cu doua surse pe acelasi grid conceptual (crsarticole filtrat + crsarticole1) S4de confirmat vizual la mockup, nu pe hartie