#13: formular de facturare unificat - etapa curenta
Squash al branch-ului de lucru plan13-s2. Clase: ofacturare (nucleul formularului unificat), ofacturare_comun, ferestre_cere_date, ocomenzi, caut_ora (lista de preturi in combo-urile de cautare), omodificari. Programe: ofacturare impartit - ofacturare_antet, ofacturare_rutare_scriere si ogrid_latimi sunt fisiere noi; oproceduri_facturare primeste discountul pe linie si cota standard de TVA cand articolul nu are cota pe politica. Documentatie: capcana SQLExec no_data_found, conventia de encoding, depanarea testelor VFP si regulile de lucru - conflictele cu modificarile venite din alte proiecte sunt rezolvate pastrand ambele parti. Loguri de rulare a testelor scoase din versionare; testele raman. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PkyjGyrV2S7932om4kfSiK
This commit is contained in:
@@ -55,6 +55,15 @@
|
||||
*!* 14.04.2026
|
||||
*!* + oDateFactura.cod_fiscal
|
||||
|
||||
*!* 31.08.2026
|
||||
*!* agent
|
||||
*!* creeaza_facturacrs + campul procdisc (procent discount calculat, needitabil) pentru S4c
|
||||
|
||||
*!* 04.09.2026
|
||||
*!* agent
|
||||
*!* prelucreaza_facturacrs + vpretctva/vdiscountctva in lista de insert (pretul si discountul
|
||||
*!* unitar in valuta cu TVA inclus, care plecau 0 la Oracle la reemiterea documentelor in valuta)
|
||||
|
||||
***************************************************************************************************************
|
||||
**** Clase:
|
||||
**** oDateFactura
|
||||
@@ -202,6 +211,7 @@ Define Class oDateFactura As Custom
|
||||
tva_incasare = 0 && modificare ROAGEST v 2.2.0
|
||||
id_facturare = NULL && id adresa facturare
|
||||
adresa_facturare = '' && adresa factuare text
|
||||
motiv_discount = '' && motivul discountului pe factura, valabil doar in sesiunea de editare
|
||||
nListareDetaliata = 0 && articolele se listeaza cumulat dupa cantitate sau detaliat, asa cum au fost adaugate pe factura
|
||||
nListareSilentioasa = 0 && listare fara previzualizare
|
||||
nListareJustPDF = 0 && listare doar pdf
|
||||
@@ -219,13 +229,19 @@ Define Class oDateFactura As Custom
|
||||
eFactura = 0 && 0/1 = se transmite in borderoul eFactura
|
||||
sold_lei = 0 && soldul total pe client la emiterea facturii in lei
|
||||
sold_valuta = 0 && soldul total pe client la emiterea facturii in valuta (nediferentiat pe valuta)
|
||||
|
||||
lProformaSursa = .F. && documentul a fost copiat dintr-o proforma
|
||||
nIdProformaSursa = 0 && id_vanzare al proformei sursa, pentru legatura VANZARI_CORESP
|
||||
lEditare = .F. && document existent deschis in editare, nu document nou
|
||||
id_ruta = NULL && ID_RUTA al documentului deschis in editare
|
||||
cListaSursa = [] && comanda/contract sursa a documentului deschis in editare
|
||||
cListaSursaAvize = [] && avizele sursa ale documentului deschis in editare
|
||||
|
||||
Procedure Init
|
||||
Lparameters tnIdSet, tnTip
|
||||
Lparameters tnIdSet, tnTip, toSursa
|
||||
&& 0,0 - la listare
|
||||
&& id_set,tip
|
||||
|
||||
Local ldData
|
||||
Local ldData, loSursa
|
||||
If !Empty(m.tnIdSet)
|
||||
&& modificare ROAFACTURARE v 2.0.58
|
||||
Use In (SELECT('crsoDateDocAtasate'))
|
||||
@@ -258,22 +274,27 @@ Define Class oDateFactura As Custom
|
||||
.discount_evidentiat = IIF(TYPE('gnDiscountEvidentiat') = 'N', m.gnDiscountEvidentiat, 1)
|
||||
.nRelistare = 0 && modificare ROAFACTURARE v 2.0.58
|
||||
|
||||
If INLIST(m.tnTip, 2, 6, 52) And Type('goContract') <> 'U' && FACTURARE DIN ROACONTRACTE
|
||||
.id_client = goContract.id_part
|
||||
.nume_client = goContract.denumire
|
||||
.cod_fiscal = ALLTRIM(NVL(goContract.cod_fiscal, ''))
|
||||
.listaid = goContract.id_ctr
|
||||
.descriere = goContract.contract
|
||||
.id_sectie = goContract.id_sectie
|
||||
.sectie = goContract.sectie
|
||||
.id_responsabil = goContract.id_responsabil
|
||||
.responsabil = goContract.responsabil
|
||||
.id_valuta = goContract.id_valuta
|
||||
.nume_valuta = goContract.nume_val
|
||||
loSursa = Iif(Type('toSursa') = 'O', toSursa, Null)
|
||||
|
||||
If INLIST(m.tnTip, 2, 6, 52) And (Type('loSursa') = 'O' Or Type('goContract') <> 'U') && FACTURARE DIN ROACONTRACTE
|
||||
If Type('loSursa') <> 'O'
|
||||
loSursa = goContract
|
||||
Endif
|
||||
.id_client = loSursa.id_part
|
||||
.nume_client = loSursa.denumire
|
||||
.cod_fiscal = ALLTRIM(NVL(loSursa.cod_fiscal, ''))
|
||||
.listaid = loSursa.id_ctr
|
||||
.descriere = loSursa.contract
|
||||
.id_sectie = loSursa.id_sectie
|
||||
.sectie = loSursa.sectie
|
||||
.id_responsabil = loSursa.id_responsabil
|
||||
.responsabil = loSursa.responsabil
|
||||
.id_valuta = loSursa.id_valuta
|
||||
.nume_valuta = loSursa.nume_val
|
||||
|
||||
lcSql = [ select id_ctr, contract, numar, data, denumire, scadenta_incasare, opt_facturare, text_standard, afisare_scadenta ]+;
|
||||
[ FROM fact_vcontracte ]+;
|
||||
[ where id_ctr = ] + Alltrim(Str(goContract.id_ctr))
|
||||
[ where id_ctr = ] + Alltrim(Str(loSursa.id_ctr))
|
||||
lnSucces = goExecutor.oExecute(lcSql,'crsCtrTemp')
|
||||
|
||||
If lnSucces < 0
|
||||
@@ -298,18 +319,23 @@ Define Class oDateFactura As Custom
|
||||
|
||||
|
||||
|
||||
If tnTip = 3 And Type('goComanda') = 'O' && FACTURARE DIN ROACOMENZI
|
||||
.id_client = goComanda.id_part
|
||||
.nume_client = ALLTRIM(goComanda.nume)
|
||||
.cod_fiscal = ALLTRIM(NVL(goComanda.cod_fiscal, ''))
|
||||
.listaid = goComanda.id_comanda
|
||||
.descriere = goComanda.nr_comanda
|
||||
.id_sectie = goComanda.id_sectie
|
||||
loSursa = Iif(Type('toSursa') = 'O', toSursa, Null)
|
||||
|
||||
If tnTip = 3 And (Type('loSursa') = 'O' Or Type('goComanda') = 'O') && FACTURARE DIN ROACOMENZI
|
||||
If Type('loSursa') <> 'O'
|
||||
loSursa = goComanda
|
||||
Endif
|
||||
.id_client = loSursa.id_part
|
||||
.nume_client = ALLTRIM(loSursa.nume)
|
||||
.cod_fiscal = ALLTRIM(NVL(loSursa.cod_fiscal, ''))
|
||||
.listaid = loSursa.id_comanda
|
||||
.descriere = loSursa.nr_comanda
|
||||
.id_sectie = loSursa.id_sectie
|
||||
*!* .sectie = goComanda.sectie
|
||||
*!* .id_responsabil = goComanda.id_responsabil
|
||||
*!* .responsabil = goComanda.responsabil
|
||||
|
||||
lcSql = [ select sectie from nom_sectii where id_sectie = ] + ALLTRIM(STR(goComanda.id_sectie))
|
||||
lcSql = [ select sectie from nom_sectii where id_sectie = ] + ALLTRIM(STR(loSursa.id_sectie))
|
||||
lnSucces = goExecutor.oExecute(lcSql,'crsComTemp')
|
||||
|
||||
If lnSucces < 0
|
||||
@@ -385,6 +411,8 @@ Define Class oDateFactura As Custom
|
||||
.nrinmat = ALLTRIM(NVL(toDateAnterior.nrinmat, ''))
|
||||
.id_masina = toDateAnterior.id_masina
|
||||
.listaid = toDateAnterior.id_vanzare
|
||||
.lProformaSursa = PEMSTATUS(toDateAnterior,'eproforma',5) And Nvl(toDateAnterior.eproforma,0) = 1
|
||||
.nIdProformaSursa = Iif(This.lProformaSursa, toDateAnterior.id_vanzare, 0)
|
||||
.descriere = Alltrim(Alltrim(Nvl(toDateAnterior.serie_act,[]))+[ ]+Alltrim(Str(toDateAnterior.numar_act,14,0)))
|
||||
.id_client = toDateAnterior.id_part
|
||||
.nume_client = toDateAnterior.client
|
||||
@@ -570,6 +598,7 @@ Define Class oDateFactura As Custom
|
||||
.sumavorbe = [] && modificare ROAFACTURARE v 2.0.78
|
||||
.coeficient_k = 0 && modificare ROAFACTURARE v 2.0.93
|
||||
.explicatia4 = [] && modificare ROACONTRACTE v 2.0.42
|
||||
.motiv_discount = ''
|
||||
.id_ordl = NULL && modificare ROAAUTO v 2.0.33
|
||||
.id_facturare = NULL
|
||||
.nListareDetaliata = 0
|
||||
@@ -577,6 +606,8 @@ Define Class oDateFactura As Custom
|
||||
.nListareJustPDF = 0 && listare doar pdf
|
||||
.oClient = NULL
|
||||
.lCopiere = .F. && copiere factura/aviz
|
||||
.lProformaSursa = .F.
|
||||
.nIdProformaSursa = 0
|
||||
.nIdBeneficiar = Null
|
||||
.nTipFactura = NULL && tip intern factura (ex: ACN 0=TRANZIT/1=CHEIAJ/3=CHIRII/5=APA/6=PENALITATI)
|
||||
.id_util = NULL && id utilizator
|
||||
@@ -762,6 +793,32 @@ Function recalculeaza_pret_vanzare_lei
|
||||
Endfunc && recalculeaza_pret_vanzare_lei
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
Function deriva_cont_venit_fara_pol
|
||||
* S4g: contul de venit pentru linia fara politica de pret - coresp_cont_venchelt pe contul de gestiune, apoi nom_articole.cont daca incepe cu 6/7, altfel 704
|
||||
Lparameters tnIdArticol,tcContGestiune
|
||||
Local lcCont,lcSql,lnSucces
|
||||
lcCont = [704]
|
||||
If Isnull(tnIdArticol)
|
||||
Return lcCont
|
||||
Endif
|
||||
lcSql = [select nvl((select cont_venit from vcoresp_cont_venchelt where cont = '] + ;
|
||||
OracleSpecialCharacters(Alltrim(Nvl(tcContGestiune,[]))) + [' and cont_venit is not null),] + ;
|
||||
[case when substr(cont,1,1) in ('6','7') then cont else '704' end) as cont_venit ] + ;
|
||||
[from nom_articole where id_articol = ] + Alltrim(Str(tnIdArticol))
|
||||
If Used('crscontvenit')
|
||||
Use In crscontvenit
|
||||
Endif
|
||||
lnSucces = goExecutor.oExecute(lcSql,[crscontvenit])
|
||||
If lnSucces >= 0 And Used('crscontvenit') And Reccount('crscontvenit') > 0
|
||||
lcCont = Alltrim(Nvl(crscontvenit.cont_venit,[704]))
|
||||
Endif
|
||||
If Used('crscontvenit')
|
||||
Use In crscontvenit
|
||||
Endif
|
||||
Return lcCont
|
||||
Endfunc && deriva_cont_venit_fara_pol
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
*!* Function recalculeaza_pret_vanzare_lei_set
|
||||
*!* Lparameters tcTabel,tnCurs
|
||||
*!* Local llReturn
|
||||
@@ -1775,7 +1832,7 @@ Procedure creeaza_facturacrs
|
||||
Create Cursor (tcNumeCursor) (id_c N(20),id_temp N(20),id_articol N(20) null,id_pol N(20) Null,id_gestiune N(20),Cont c(4),um c(10) Null, cod_um_iso c(5) null, ;
|
||||
id_valuta N(10),gestionabil N(1),tip_valuta N(1),Curs N(20,4),multiplicator N(10),id_jtva_coloana N(20) Null,id_jtva_coloana_ex N(20) Null,codmat c(100),codmatc c(100),codmatf c(100),codbare c(50),;
|
||||
pret_achizitie N(20,max(gnPPret,4)),denumire c(100),pretftva N(20,max(gnPPretV,precizie_max_pret_vz)),pretctva N(20,max(gnPPretV,precizie_max_pret_vz)),valftva N(20,max(gnPc,4)), valtva N(20,max(gnPc,4)),valctva N(20,max(gnPc,4)),;
|
||||
cantitate N(20,max(gnPCant,4)),discountftva N(20,max(gnPPretV,4)), discountctva N(20,max(gnPPretV,precizie_max_pret_vz)), valdiscountftva N(20,max(gnPc,4)),valdiscounttva N(20,max(gnPc,4)),;
|
||||
cantitate N(20,max(gnPCant,4)),discountftva N(20,max(gnPPretV,4)), discountctva N(20,max(gnPPretV,precizie_max_pret_vz)), procdisc N(10,2), valdiscountftva N(20,max(gnPc,4)),valdiscounttva N(20,max(gnPc,4)),;
|
||||
valdiscountctva N(20,max(gnPc,4)),valdiminuatftva N(20,max(gnPc,4)),valdiminuattva N(20,max(gnPc,4)),valdiminuatctva N(20,max(gnPc,4)),proc_Tvav N(20,4),cu_tva N(1), lot C(20) null, serie c(100) Null,;
|
||||
vpretftva N(20,max(gnPVal,precizie_max_pret_vz)),vpretctva N(20,max(gnPVal,precizie_max_pret_vz)),vvalftva N(20,max(gnPVal,4)),vvaltva N(20,max(gnPVal,4)),vvalctva N(20,max(gnPVal,4)),;
|
||||
vdiscountftva N(20,max(gnPVal,4)),vdiscountctva N(20,max(gnPVal,4)),vvaldiscountftva N(20,max(gnPVal,4)),vvaldiscounttva N(20,max(gnPVal,4)),;
|
||||
@@ -1806,7 +1863,7 @@ Procedure prelucreaza_facturacrs
|
||||
Insert Into (tcCursorDestinatie) (id_articol,id_temp,explicatie,denumire,lot,serie,codmat,codmatc,id_jtva_coloana,id_jtva_coloana_ex,taxcode,codmatf,codbare,pret_achizitie,cantitate,proc_Tvav,um,cod_um_iso,;
|
||||
cu_tva,pretctva,discountctva,valctva,valdiscountctva,valdiminuatctva,pretftva,;
|
||||
valftva,valtva,discountftva,valdiscountftva,valdiscounttva,valdiminuatftva,;
|
||||
valdiminuattva,vpretftva,vvalftva,vvaltva,vdiscountftva,vvaldiscountftva,vvaldiscounttva,;
|
||||
valdiminuattva,vpretftva,vpretctva,vvalftva,vvaltva,vdiscountftva,vdiscountctva,vvaldiscountftva,vvaldiscounttva,;
|
||||
vvaldiminuatftva,vvaldiminuattva,id_set_fact,gestionabil,id_ctr,numar_contract,id_valuta,tip_valuta,Curs,multiplicator,nume_val,codnc8,codcpv) ;
|
||||
SELECT CAST(IIF(TYPE(tcCursorSursa+".id_articol")='U',0,id_articol) as N(20)) as id_articol,id_vanzare_det As id_temp,;
|
||||
explicatie,denumire,lot,serie,Nvl(codmat,Space(50)) As codmat,IIF(TYPE(tcCursorSursa + '.codmatc') = 'C', Nvl(codmatc,Space(50)), SPACE(50)) As codmatc,id_jtva_coloana,id_jtva_coloana_ex,taxcode,;
|
||||
@@ -1853,6 +1910,8 @@ Procedure prelucreaza_facturacrs
|
||||
IIF(pret_cu_tva = 0,;
|
||||
Round(Pret_val,gnPVal),;
|
||||
Round(Round(Pret_val,gnPVal)/proc_Tvav,gnPVal)) As vpretftva,;
|
||||
Iif(pret_cu_tva = 1,Round(Pret_val,gnPVal),;
|
||||
Round(Pret_val,gnPVal)+Round(Round(Pret_val,gnPVal)*(proc_Tvav-1),gnPVal)) As vpretctva,;
|
||||
IIF(pret_cu_tva = 0,;
|
||||
Round(Round(Pret_val,gnPVal)*Nvl(cantitate,1),gnPVal),;
|
||||
ROUND(Round(Pret_val,gnPVal)*Nvl(cantitate,1),gnPVal) - ;
|
||||
@@ -1863,6 +1922,7 @@ Procedure prelucreaza_facturacrs
|
||||
IIF(pret_cu_tva = 0,;
|
||||
Round(discount_unitar_val,gnPVal),;
|
||||
Round(Round(discount_unitar_val,gnPVal)/proc_Tvav,gnPVal)) As vdiscountftva,;
|
||||
Iif(pret_cu_tva = 1,Round(discount_unitar_val,gnPVal),0.000) As vdiscountctva,;
|
||||
IIF(pret_cu_tva = 0,;
|
||||
Round(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal),;
|
||||
ROUND(Round(discount_unitar_val,gnPVal)*Nvl(cantitate,1),gnPVal) - ;
|
||||
@@ -2222,3 +2282,25 @@ Procedure completeaza_explicatie_contract
|
||||
Release lnPozI,lnPozF,lnIdCtr, lnIdCtrPrec, lnDimArray,lnIndex,lcNrContract,lnIndexMax
|
||||
Endproc && completeaza_explicatie_contract
|
||||
*********************************************************************************************************
|
||||
*********************************************************************************************************
|
||||
******************************* INCEPUT: scrie_legatura_proforma ****************************************
|
||||
Function scrie_legatura_proforma
|
||||
Local lcSql, lnSucces, llReturn
|
||||
llReturn = .T.
|
||||
* legatura proforma -> factura in VANZARI_CORESP (TIP = 4); clistaid se trimite explicit,
|
||||
* nu se citeste din starea sesiunii, pentru ca poDate.listaid poate fi rescris de articolele retur
|
||||
If Type('poDate') = 'O' And poDate.lProformaSursa And Nvl(poDate.nIdProformaSursa,0) > 0 ;
|
||||
And Between(Nvl(poDate.nid_vanzare,0), 1, 9999999998)
|
||||
lcSql = [begin pack_facturare.nid_vanzare := ] + Alltrim(Str(poDate.nid_vanzare,20,0)) + [;] + ;
|
||||
[ pack_facturare.clistaid := '] + Alltrim(Str(poDate.nIdProformaSursa,20,0)) + [';] + ;
|
||||
[ pack_facturare.scrie_corespondente_vanzari(4); end;]
|
||||
lnSucces = goExecutor.oExecute(lcSql)
|
||||
If lnSucces < 0
|
||||
AMESSAGEBOX(goExecutor.oPrelucrareEroare(),16,"Eroare")
|
||||
llReturn = .F.
|
||||
Endif
|
||||
Endif
|
||||
Return llReturn
|
||||
Endfunc && scrie_legatura_proforma
|
||||
******************************* SFARSIT: scrie_legatura_proforma *****************************************
|
||||
*********************************************************************************************************
|
||||
|
||||
Reference in New Issue
Block a user