603 lines
23 KiB
Plaintext
603 lines
23 KiB
Plaintext
*!* 27.09.2011
|
|
*!* marius.mutu
|
|
*!* create cursor calculcompens in loc de create table
|
|
*!* #3146 Steaua Nordului
|
|
|
|
*!* 31.01.2013
|
|
*!* marius.mutu
|
|
*!* calculcompens - tratare facturi cu tva_incasare: calculcompens.tva_incasare_a, id_fact (ex: plata 401 = 542)
|
|
|
|
*!* 19.04.2013
|
|
*!* marius.mutu
|
|
*!* calculcompens - tva incasare pentru ambele facturi din compensare. ex: 401 = 4111
|
|
|
|
*** proceduri introducere in actactan, nu merge pentru sume negative !!!!
|
|
|
|
*!* 25.12.2025
|
|
*!* calculcompens - tratare compensare 5121 = 419 cu cote TVA diferite (proc_tva, id_jtvacol)
|
|
|
|
|
|
*!* 07.01.206
|
|
*!* calculcompens_part - tratare compensare 419 lei 5121 = 419 cu cote TVA diferite (proc_tva, id_jtvacol)
|
|
|
|
******************************************* INCEPUT: calculcompens *******************************************
|
|
***
|
|
|
|
PROCEDURE calculcompens
|
|
PARAMETERS tcFisD, tcFisC, tnTipOrdonare, tnTipOprire
|
|
*!* modificare v 2.5.27 : tnTipOrdonare, tnTipOprire
|
|
*!* tnTipOrdonare - 0/implicit = ordonare descrescator dupa suma
|
|
*!* 1 = ordonare dupa data
|
|
*!* tnTipOprire - 0/implicit = cand sum(sumaachi) pentru ambele tabele este 0 ( initial, sum(sumaachi) dintr-un tabel este egala cu sum(sumaachi) din celalalt )
|
|
*!* 1 = cand sum(sumaachi) pentru unul dintre tabele este 0
|
|
|
|
PRIVATE pcCont
|
|
STORE '' TO pcCont
|
|
|
|
LOCAL max1, max2, nract1, nract2, lcFis1, lcFis2, id_fact1, id_fact2, llDefalcTVA, lnMaxTvai, lcOrdine
|
|
STORE 1 TO max1, max2
|
|
STORE 0 TO nract1, nract2, id_fact1, id_fact2
|
|
lnMaxTvai = 0
|
|
|
|
lcFisD = ALLTRIM(tcFisD)
|
|
lcFisC = ALLTRIM(tcFisC)
|
|
|
|
*!* modificare v 2.5.26
|
|
*!* modificare v 2.5.27 : am adaugat lcOrdine
|
|
*!* SELECT * FROM &lcFisD INTO CURSOR tperecheD READWRITE
|
|
*!* SELECT * FROM &lcFisC INTO CURSOR tperecheC READWRITE
|
|
lcOrdine = IIF(EVL(tnTipOrdonare,0)=1,[dataact,nract],[sumaachi desc])
|
|
SELECT * FROM &lcFisD WHERE ales AND sumaachi <> 0 ORDER BY &lcOrdine INTO CURSOR tperecheD READWRITE
|
|
SELECT * FROM &lcFisC WHERE ales AND sumaachi <> 0 ORDER BY &lcOrdine INTO CURSOR tperecheC READWRITE
|
|
*!* modificare v 2.5.26 ^
|
|
|
|
*** Aflu daca exista bifa TVA_INCASARE_A intr-unul din fisiere (ex: 401 = 542)
|
|
*** pentru a putea pune in cursorul rezultat id_fact din fisierul corespunzator
|
|
*** in cazul compensarilor 401 = 4111, pot fi amandoua facturile cu TVA incasare
|
|
|
|
llTvaIncasareD = .F.
|
|
llTvaIncasareC = .F.
|
|
select tPerecheD
|
|
locate for nvl(tva_incasare_a,0) = 1
|
|
if found()
|
|
llTvaIncasareD = .T.
|
|
endif
|
|
|
|
select tPerecheC
|
|
locate for nvl(tva_incasare_a,0) = 1
|
|
if found()
|
|
llTvaIncasareC = .T.
|
|
endif
|
|
|
|
llTVAIncasare = m.llTvaIncasareD or m.llTvaIncasareC
|
|
|
|
CREATE cursor calculcompensare (nr_doc_d N(14), nr_doc_c N(14), id_factd N(14), id_factc N(14),;
|
|
ascc c(4), ascd c(4), sumaachi N(20,4), ales l, proc_tva N(5,2), id_jtvacol N(10), proc_tvaD N(5,2), id_jtvacolD N(10), proc_tvaC N(5,2), id_jtvacolC N(10), ;
|
|
tva_incasare_a N(1), tva_incasare_d N(1), tva_incasare_dtip C(1),tva_incasare_c N(1), tva_incasare_ctip C(1))
|
|
|
|
lnRecnoD = 1
|
|
lnReccountD = Reccount("tPerecheD")
|
|
Select tperecheD
|
|
Go Top
|
|
lnSumaD = sumaachi
|
|
pcCont = Alltrim(Cont)
|
|
llDefalcTVAD = .F.
|
|
lcSelect = [select count(*) as defalcTVA from config_cont_ireg t where cont = ?pcCont and cu_proc_tva = 1]
|
|
If goExecutor.oExecuta(lcSelect, "crsDefalcTva")
|
|
Select crsDefalcTVA
|
|
llDefalcTVAD = defalcTVA >0
|
|
Use In crsDefalcTVA
|
|
Endif
|
|
|
|
lnRecnoC = 1
|
|
lnReccountC = Reccount("tPerecheC")
|
|
Select tperecheC
|
|
Go Top
|
|
lnSumaC = sumaachi
|
|
pcCont = Alltrim(Cont)
|
|
llDefalcTVAC = .F.
|
|
lcSelect = [select count(*) as defalcTVA from config_cont_ireg t where cont = ?pcCont and cu_proc_tva = 1]
|
|
If goExecutor.oExecuta(lcSelect, "crsDefalcTva")
|
|
Select crsDefalcTVA
|
|
llDefalcTVAC = defalcTVA >0
|
|
Use In crsDefalcTVA
|
|
Endif
|
|
|
|
lnSumaCompensata = 0
|
|
lcTipMaxUrm = []
|
|
lnSemnSumaD = SIGN(tperecheD.sumaachi)
|
|
|
|
*!* am ordonat documentele pereche de pe credit si de pe debit descrescator dupa sume
|
|
*!* pana ajung la 0 pe ultima inregistrare de pe una dintre tabele, aleg MIN
|
|
*!* cand am ajuns la 0 pe ultima inregistrare intr-una dintre tabele, iau doar valorile din tabelul celalalt
|
|
*!* modificare v 2.5.27
|
|
*!* DO WHILE !(lnRecnoD = lnReccountD AND lnRecnoC = lnReccountC AND lnSumaC = 0 AND lnSumaD = 0)
|
|
DO WHILE (EVL(tnTipOprire,0) = 0 AND !(lnRecnoD = lnReccountD AND lnRecnoC = lnReccountC AND lnSumaC = 0 AND lnSumaD = 0)) ;
|
|
OR (EVL(tnTipOprire,0) = 1 AND EMPTY(lcTipMaxUrm))
|
|
*!* modificare v 2.5.27 ^
|
|
lcTipMax = lcTipMaxUrm
|
|
lnSumaCompensata = IIF(lcTipMax=[C],lnSumaD,IIF(lcTipMax=[D],lnSumaC,IIF(EVL(tnTipOprire,0)=1,MIN(ABS(lnSumaC),ABS(lnSumaD)),MIN(lnSumaC,lnSumaD))))
|
|
lnProc_tva = 0.00
|
|
lnIdJtvaColoana = 0
|
|
lnProc_tvaD = 0.00
|
|
lnIdJtvaColoanaD = 0
|
|
lnProc_tvaC = 0.00
|
|
lnIdJtvaColoanaC = 0
|
|
***-------------------------
|
|
SELECT tperecheD
|
|
STORE nract TO nract1
|
|
id_fact1 = id_fact
|
|
lcascd = NVL(acont,'')
|
|
IF cu_tva = 1 AND TYPE('tPerecheD.proc_tva') # 'U' AND llDefalcTVAD
|
|
lnProc_tva = proc_tva
|
|
lnIdJtvaColoana = NVL(id_jtva_coloana,0)
|
|
lnProc_tvaD = proc_tva
|
|
lnIdJtvaColoanaD = NVL(id_jtva_coloana,0)
|
|
ENDIF
|
|
*!* cand tnTipOprire = 1, atunci trebuie sa diminuez sumaachi cu lnSumaCompensata
|
|
replace sumaachi WITH sumaachi - IIF(EVL(tnTipOprire,0)=1,lnSemnSumaD,1) * lnSumaCompensata
|
|
lnSumaD = sumaachi
|
|
Do Case
|
|
Case lnSumaD = 0 And lnRecNoD <> lnReccountD
|
|
Skip
|
|
lnSumaD = sumaachi
|
|
lnRecNoD = Recno()
|
|
Case lnSumaD = 0 And lnRecNoD = lnReccountD And EMPTY(lcTipMax)
|
|
*!* daca am ajuns la ultima inregistrare si am restul 0, atunci trebuie sa iau valorile doar din celalalt tabel
|
|
*!* pentru urmatoarele note, nu mai fac exigibilizarea de TVA pentru Debit
|
|
lcTipMaxUrm = [D]
|
|
Endcase
|
|
|
|
***-------------------------
|
|
SELECT tperecheC
|
|
STORE nract TO nract2
|
|
id_fact2 = id_fact
|
|
lcascc = NVL(acont,'')
|
|
IF cu_tva = 1 AND TYPE('tPerecheC.proc_tva') # 'U' AND llDefalcTVAC
|
|
lnProc_tva = proc_tva
|
|
lnIdJtvaColoana = NVL(id_jtva_coloana,0)
|
|
lnProc_tvaC = proc_tva
|
|
lnIdJtvaColoanaC = NVL(id_jtva_coloana,0)
|
|
ENDIF
|
|
*!* cand tnTipOprire = 1, atunci trebuie sa diminuez sumaachi cu lnSumaCompensata
|
|
replace sumaachi WITH sumaachi - IIF(EVL(tnTipOprire,0)=1,lnSemnSumaD*(-1),1) * lnSumaCompensata
|
|
lnSumaC = sumaachi
|
|
Do Case
|
|
Case lnSumaC = 0 And lnRecNoC <> lnReccountC
|
|
Skip
|
|
lnSumaC = sumaachi
|
|
lnRecNoC = Recno()
|
|
Case lnSumaC = 0 And lnRecNoC = lnReccountC And EMPTY(lcTipMax)
|
|
*!* daca am ajuns la ultima inregistrare si am restul 0, atunci trebuie sa iau valorile doar din celalalt tabel
|
|
*!* pentru urmatoarele note, nu mai fac exigibilizarea de TVA pentru Credit
|
|
lcTipMaxUrm = [C]
|
|
Endcase
|
|
|
|
SELECT calculcompensare
|
|
IF lnSumaCompensata <> 0
|
|
APPEND BLANK
|
|
REPLACE nr_doc_c WITH nract2, ascc WITH lcascc, id_factc WITH id_fact2
|
|
REPLACE nr_doc_d WITH nract1, ascd WITH lcascd, id_factd WITH id_fact1
|
|
REPLACE proc_tva WITH lnProc_tva,id_jtvacol WITH lnIdJtvaColoana
|
|
REPLACE proc_tvaD WITH lnProc_tvaD,id_jtvacolD WITH lnIdJtvaColoanaD
|
|
REPLACE proc_tvaC WITH lnProc_tvaC,id_jtvacolC WITH lnIdJtvaColoanaC
|
|
REPLACE sumaachi WITH IIF(EVL(tnTipOprire,0)=1,lnSemnSumaD,1)*lnSumaCompensata
|
|
REPLACE ales WITH .T.
|
|
|
|
if m.llTvaIncasare
|
|
replace tva_incasare_a with 1
|
|
endif
|
|
if m.llTvaIncasareD && AND lcTipMax<>[D] : pusesem conditia ca sa nu mai genereze note de TVA la incasare cand ajungeam pe 0 la ultima inregistrare din cursor
|
|
replace tva_incasare_d with 1, tva_incasare_dtip with 'D'
|
|
endif
|
|
if m.llTvaIncasareC && AND lcTipMax<>[C] : pusesem conditia ca sa nu mai genereze note de TVA la incasare cand ajungeam pe 0 la ultima inregistrare din cursor
|
|
replace tva_incasare_c with 1, tva_incasare_ctip with 'C'
|
|
endif
|
|
ENDIF
|
|
|
|
ENDDO
|
|
*!* modificare v 2.5.26 ^
|
|
|
|
USE IN tperecheD
|
|
USE IN tperecheC
|
|
RETURN
|
|
|
|
***
|
|
|
|
******************************************* SFARSIT: calculcompens in lei *******************************************
|
|
|
|
******************************************* INCEPUT: calculcompens in valuta - fara sume negative *******************************************
|
|
|
|
***
|
|
|
|
PROCEDURE calculcompens_valuta
|
|
PARAMETERS tcFisD, tcFisC
|
|
|
|
LOCAL max1, max2, nract1, nract2, lcFis1, lcFis2, id_fact1, id_fact2, llDefalcTVA
|
|
STORE 1 TO max1,max2
|
|
STORE 0 TO nract1, nract2, id_fact1, id_fact2
|
|
PRIVATE pcCont
|
|
pcCont = ''
|
|
|
|
llDefalcTVA = .F.
|
|
|
|
lcFisD = ALLTRIM(tcFisD)
|
|
lcFisC = ALLTRIM(tcFisC)
|
|
|
|
SELECT * FROM &lcFisD INTO CURSOR tperecheD READWRITE
|
|
SELECT * FROM &lcFisC INTO CURSOR tperecheC READWRITE
|
|
|
|
CREATE CURSOR calculcompensare (nr_doc_d N(14), nr_doc_c N(14),id_factd N(14), id_factc N(14),;
|
|
ascc c(4), ascd c(4), sumaachi2 N(20,4), achilei N(20,4), id_jtvacol N(10), proc_tva N(5,2), ;
|
|
sumaachid N(20,4), sumaachic N(20,4), cursd N(12,4), cursc N(12,4), difplus N(20,4), ;
|
|
difminus N(20,4), cursval N(12,4), cursdif N(12,4), ales l)
|
|
|
|
DO WHILE max1!=0 AND max2!=0
|
|
lnProc_tva = 0.00
|
|
lnIdJtvaColoana = 0
|
|
SELECT tperecheC
|
|
CALCULATE MAX(sumaachi2) FOR ales TO max2
|
|
*WAIT WINDOW 'max2'+STR(max2)
|
|
SELECT tperecheD
|
|
CALCULATE MAX(sumaachi2) FOR ales TO max1
|
|
*WAIT WINDOW 'max1'+STR(max1)
|
|
|
|
***-------------------------
|
|
|
|
SELECT tperecheD
|
|
GO TOP
|
|
pcCont = ALLTRIM(CONT)
|
|
|
|
llDefalcTVA = .F.
|
|
lcSelect = [select count(*) as defalcTVA from config_cont_ireg t where cont = ?pcCont and cu_proc_tva = 1]
|
|
lnSucces = goExecutor.oExecute(lcSelect, "crsDefalcTva")
|
|
IF lnSucces < 0
|
|
AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare')
|
|
ELSE
|
|
SELECT crsDefalcTVA
|
|
llDefalcTVA = defalcTVA >0
|
|
|
|
IF USED('crsDefalcTVA')
|
|
USE IN crsDefalcTVA
|
|
ENDIF
|
|
ENDIF
|
|
|
|
***-------------------------
|
|
SELECT tperecheD
|
|
LOCATE FOR sumaachi2 = max1 AND ales
|
|
nract1 = nract
|
|
id_fact1 = id_fact
|
|
lcascd = NVL(acont,'')
|
|
lnCursD = cursschimb
|
|
IF TYPE('tPerecheD.proc_tva') # 'U' AND llDefalcTVA
|
|
lnProc_tva = proc_tva
|
|
lnIdJtvaColoana = NVL(id_jtva_coloana,0)
|
|
ENDIF
|
|
|
|
IF max1 <= max2
|
|
lnSumaleiD = sumaachi
|
|
REPLACE sumaachi2 WITH 0
|
|
REPLACE ales WITH .F.
|
|
|
|
ELSE
|
|
lnSumaleiD = ROUND(cursschimb * max2, gnPC)
|
|
IF lnSumaleiD > sumaachi
|
|
lnSumaleiD = sumaachi
|
|
ENDIF
|
|
REPLACE sumaachi2 WITH max1 - max2
|
|
REPLACE sumaachi WITH sumaachi - lnSumaleiD
|
|
ENDIF
|
|
|
|
***-------------------------
|
|
|
|
SELECT tperecheC
|
|
GO TOP
|
|
pcCont = ALLTRIM(CONT)
|
|
|
|
llDefalcTVA = .F.
|
|
lcSelect = [select count(*) as defalcTVA from config_cont_ireg t where cont = ?pcCont and cu_proc_tva = 1]
|
|
lnSucces = goExecutor.oExecute(lcSelect, "crsDefalcTva")
|
|
IF lnSucces < 0
|
|
AMESSAGEBOX(goExecutor.cEroare,0+16,'Eroare')
|
|
ELSE
|
|
SELECT crsDefalcTVA
|
|
llDefalcTVA = defalcTVA >0
|
|
|
|
IF USED('crsDefalcTVA')
|
|
USE IN crsDefalcTVA
|
|
ENDIF
|
|
ENDIF
|
|
***-------------------------
|
|
|
|
SELECT tperecheC
|
|
LOCATE FOR sumaachi2 = max2 AND ales
|
|
nract2 = nract
|
|
id_fact2 = id_fact
|
|
lcascc = NVL(acont,'')
|
|
lnCursC = cursschimb
|
|
|
|
IF TYPE('tPerecheC.proc_tva') # 'U' AND llDefalcTVA
|
|
lnProc_tva = proc_tva
|
|
lnIdJtvaColoana = NVL(id_jtva_coloana,0)
|
|
ENDIF
|
|
|
|
IF max2 <= max1
|
|
lnSumaleiC = sumaachi
|
|
REPLACE sumaachi2 WITH 0
|
|
REPLACE ales WITH .F.
|
|
|
|
ELSE
|
|
lnSumaleiC = ROUND(cursschimb * max1, gnPC)
|
|
IF lnSumaleiC > sumaachi
|
|
lnSumaleiC = sumaachi
|
|
ENDIF
|
|
REPLACE sumaachi2 WITH max2 - max1
|
|
REPLACE sumaachi WITH sumaachi - lnSumaleiC
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
SELECT calculcompensare
|
|
IF MIN(max1, max2) <> 0
|
|
APPEND BLANK
|
|
REPLACE nr_doc_c WITH nract2, id_factc WITH id_fact2, ascc WITH lcascc, sumaachic WITH lnSumaleiC, cursc WITH lnCursC
|
|
REPLACE nr_doc_d WITH nract1, id_factd WITH id_fact1,ascd WITH lcascd, sumaachid WITH lnSumaleiD, cursd WITH lnCursD
|
|
REPLACE sumaachi2 WITH MIN(max1, max2),proc_tva WITH lnProc_tva,id_jtvacol WITH lnIdJtvaColoana
|
|
REPLACE ales WITH .T.
|
|
ENDIF
|
|
ENDDO
|
|
|
|
SELECT calculcompensare
|
|
SCAN
|
|
IF sumaachid > sumaachic
|
|
REPLACE difplus WITH sumaachid - sumaachic, achilei WITH sumaachic, cursval WITH cursc, cursdif WITH cursd
|
|
ELSE
|
|
REPLACE difminus WITH sumaachic - sumaachid, achilei WITH sumaachid, cursval WITH cursd, cursdif WITH cursc
|
|
ENDIF
|
|
ENDSCAN
|
|
|
|
USE IN tperecheD
|
|
USE IN tperecheC
|
|
|
|
RETURN
|
|
******************************************* SFARSIT: calculcompens - fara sume negative *******************************************
|
|
|
|
***
|
|
|
|
|
|
|
|
*!* PROCEDURE calculcompens_valuta
|
|
*!* PARAMETERS tcFisD, tcFisC
|
|
|
|
*!* LOCAL max1, max2, nract1, nract2, lcFis1, lcFis2
|
|
*!* STORE 1 TO max1,max2
|
|
*!* STORE 0 TO nract1,nract2
|
|
|
|
*!* lcFisD = ALLTRIM(tcFisD)
|
|
*!* lcFisC = ALLTRIM(tcFisC)
|
|
|
|
*!* SELECT * from &lcfisd INTO CURSOR tperecheD READWRITE
|
|
*!* SELECT * from &lcfisc INTO CURSOR tperecheC READWRITE
|
|
|
|
*!* CREATE TABLE &gcTempPath\calculcompensare.dbf (nr_doc_d n(14), nr_doc_c n(14), ascc c(4), ascd c(4), sumaachi2 n(16,2), achilei n(16,2), ;
|
|
*!* sumaachid n(16,2), sumaachic n(16,2), cursd n(8,2), cursc n(8,2), difplus n(16,2), difminus n(16,2), cursval n(8,2), cursdif n(8,2), ales l)
|
|
*!*
|
|
*!* DO WHILE max1!=0 OR max2!=0
|
|
*!* SELECT tperecheC
|
|
*!* CALCULATE MAX(sumaachi2) FOR ales AND sumaachi2 <> 0 TO max2
|
|
*!* *WAIT WINDOW 'max2'+STR(max2)
|
|
*!* SELECT tperecheD
|
|
*!* CALCULATE MAX(sumaachi2) FOR ales AND sumaachi2 <> 0 TO max1
|
|
*!* *WAIT WINDOW 'max1'+STR(max1)
|
|
|
|
*!* SELECT tperecheD
|
|
*!* LOCATE FOR sumaachi2 = max1 AND ales
|
|
*!* nract1 = nract
|
|
*!* lcascd = acont
|
|
*!* lnCursD = cursschimb
|
|
|
|
*!* if (max1 <= max2 OR max2 = 0) AND max1 <> 0
|
|
*!* lnSumaleiD = sumaachi
|
|
*!* REPLACE sumaachi2 WITH 0
|
|
*!* * REPLACE ales WITH .f.
|
|
*!*
|
|
*!* ELSE
|
|
*!* lnSumaLeiD = ROUND(cursschimb * max2, 0)
|
|
*!* IF lnSumaLeiD > sumaachi
|
|
*!* lnSumaLeiD = sumaachi
|
|
*!* ENDIF
|
|
*!* REPLACE sumaachi2 WITH max1 - max2
|
|
*!* REPLACE sumaachi WITH sumaachi - lnSumaLeiD
|
|
*!* ENDIF
|
|
*!*
|
|
*!* SELECT tperecheC
|
|
*!* LOCATE FOR sumaachi2 = max2 AND ales
|
|
*!* nract2 = nract
|
|
*!* lcascc = acont
|
|
*!* lnCursC = cursschimb
|
|
*!*
|
|
*!* if (max2 <= max1 OR max1 = 0) AND max2 <> 0
|
|
*!* lnSumaleiC = sumaachi
|
|
*!* REPLACE sumaachi2 WITH 0
|
|
*!* * REPLACE ales WITH .f.
|
|
*!*
|
|
*!* ELSE
|
|
*!* lnSumaLeiC = ROUND(cursschimb * max1, 0)
|
|
*!* IF lnSumaLeiC > sumaachi
|
|
*!* lnSumaLeiC = sumaachi
|
|
*!* ENDIF
|
|
*!* REPLACE sumaachi2 WITH max2 - max1
|
|
*!* REPLACE sumaachi WITH sumaachi - lnSumaLeiC
|
|
*!* ENDIF
|
|
*!*
|
|
*!*
|
|
*!* SELECT calculcompensare
|
|
*!* IF max1 <> 0 OR max2 <> 0
|
|
*!* APPEND BLANK
|
|
*!* REPLACE nr_doc_c WITH nract2, ascc WITH lcAscc, sumaAchiC WITH lnSumaleiC, cursC WITH lnCursC
|
|
*!* REPLACE nr_doc_d WITH nract1, ascd WITH lcAscd, sumaAchiD WITH lnSumaleiD, cursD WITH lnCursD
|
|
*!* IF MIN(max1, max2) <> 0
|
|
*!* REPLACE sumaachi2 WITH MIN(max1, max2)
|
|
*!* ELSE
|
|
*!* REPLACE sumaachi2 WITH MAX(max1, max2)
|
|
*!* ENDIF
|
|
*!* REPLACE ales WITH .t.
|
|
*!* ENDIF
|
|
*!* ENDDO
|
|
|
|
*!* SELECT calculcompensare
|
|
*!* SCAN
|
|
*!* IF sumaAchiD > sumaAchiC
|
|
*!* REPLACE difplus WITH sumaAchiD - sumaAchiC, achilei WITH sumaAchiC, cursval WITH cursC, cursdif WITH cursD
|
|
*!* ELSE
|
|
*!* REPLACE difminus WITH sumaAchiC - sumaAchiD, achilei WITH sumaAchiD, cursval WITH cursD, cursdif WITH cursC
|
|
*!* ENDIF
|
|
*!* ENDSCAN
|
|
|
|
*!* USE IN tperecheD
|
|
*!* USE IN tperecheC
|
|
|
|
*!* RETURN
|
|
*********************************************** SFARSIT calculcompens in valuta ******************************************
|
|
Function calculcompens_part
|
|
Lparameters tcCont, tnProcTva, tlValuta, tnIdValuta, tnIdValuta2, tcNumeVal2
|
|
&& partea in valuta nu este testata
|
|
Local llReturn, lnTip, lcCursorIregPart, lcCursorSumeNegative, lcCursorSumePozitive, lcCursorCalculCompensare, ;
|
|
lcCursorCalculCompensareTemp, lcCont, lcCond, lnIdPart, ;
|
|
lnFelCont, lnPozitie, lcSumaAchi, lcSelectie, lcSelectie1, lcSelectie2
|
|
lcCursorIregPart = Sys(2015)
|
|
lcCursorSumeNegative = Sys(2015)
|
|
lcCursorSumePozitive = Sys(2015)
|
|
lcCursorCalculCompensare = [calculcompensare]
|
|
lcCursorCalculCompensareTemp = SYS(2015)
|
|
lcCont = Alltrim(tcCont)
|
|
lcCond = [ an = ] + Alltrim(Str(gnAn)) + [ and luna = ] + Alltrim(Str(gnluna))+ Iif(glEMama,' and NVL(id_sucursala,0) = 0 ',gcCondSucursala)
|
|
llReturn = .T.
|
|
|
|
If tlValuta
|
|
lcCond= lcCond + [ and ABS(i.precvaldeb + i.valdebit - i.precvalcred - i.valcredit)>0 and i.id_valuta ] + ;
|
|
Iif(!EMPTY(tnIdValuta2), [in ( ] + Alltrim(Str(tnIdValuta)) + [,] + Alltrim(Str(Nvl(tnIdValuta2,0))) + [)], [ = ]+Alltrim(Str(tnIdValuta)))
|
|
Else
|
|
lcCond= lcCond + [ and (i.precvaldeb + i.valdebit - i.precvalcred - i.valcredit = 0) ]
|
|
Endif
|
|
|
|
Select xcont
|
|
Locate For Val(contpart) = Val(lcCont)
|
|
lnIdPart = idpart
|
|
lnFelCont = fel_cont
|
|
lnPozitie = pozitie
|
|
|
|
pcselect = ['select i.* FROM vireg_parteneri i where 2=2 ']
|
|
pcfiltru = [ i.id_part = ] + Alltrim(Str(lnIdPart)) + [ AND ABS(i.precdeb + i.debit - i.preccred - i.credit)<>0 AND i.cont = ']+ lcCont + [' and ] + lcCond
|
|
|
|
Private podateintrod
|
|
Store '' To podateintrod
|
|
gencursor('podateintrod',lcCursorIregPart,pcselect,pcfiltru,[''],[''])
|
|
|
|
Do Case
|
|
Case m.lnFelCont = 0 Or (m.lnFelCont = 2 And m.lnPozitie = 1)
|
|
lnTip = 1
|
|
lcSumaAchi = [ROUND(precdeb + debit,gnPc) - ROUND(preccred+credit,gnPc)]
|
|
lcSelectie = [SELECT *, ACONT AS ASCC, nume_val as numeval, curs as cursschimb, precdeb + debit as totctva, preccred+credit as achitat, credit as achitatl, ] +;
|
|
[precvaldeb + valdebit AS sumaval, precVALcred+VALcredit as achitatval, ] + Iif(tnProcTva = 1, [1], [0]) + [ as cu_tva, ] +;
|
|
[.T. as ales, ] + lcSumaAchi + [ as sumaachi, 000000000000.0000 as sumaachi2, 00000000000000.0000 as achilei, 00000000000000.0000 as difplus, ]+;
|
|
[ 00000000000000.0000 as difminus, 000000.0000 as cursval, 000000.0000 as cursdif, id_jtva_coloana as id_jtvacol, ] +;
|
|
[CAST(0 as n(10)) as id_valuta2, CAST('' as c(30)) as nume_val2, CAST(0 as n(15,2)) as sumaachi22,tva_incasare ] + ;
|
|
[FROM ] + lcCursorIregPart
|
|
Otherwise
|
|
lnTip = 2
|
|
lcSumaAchi = [ROUND(preccred + credit,gnPc) - ROUND(precdeb+debit,gnPc)]
|
|
lcSelectie = [SELECT *, ACONT AS ASCD, nume_val as numeval, curs as cursschimb, preccred + credit as totctva, precdeb+debit as achitat, debit as achitatl,] + ;
|
|
[precvalcred + valcredit as sumaval, precVALdeb+VALdebit as achitatval, ] + Iif(tnProcTva = 1, [1], [0]) + [ as cu_tva, ] +;
|
|
[.T. as ales, ] + lcSumaAchi + [ as sumaachi, 00000000000000.0000 as sumaachi2, 00000000000000.0000 as achilei, 00000000000000.0000 as difplus, ]+;
|
|
[ 00000000000000.0000 as difminus, 000000.0000 as cursval, 000000.0000 as cursdif, id_jtva_coloana as id_jtvacol, ] + ;
|
|
[CAST(0 as n(10)) as id_valuta2, CAST('' as c(30)) as nume_val2, CAST(0 as n(15,2)) as sumaachi22,tva_incasare ] + ;
|
|
[FROM ] + lcCursorIregPart
|
|
Endcase
|
|
lcSelectie1 = lcSelectie + [ WHERE ] + lcSumaAchi + [< 0 INTO CURSOR ] + lcCursorSumeNegative + [ READWRITE]
|
|
lcSelectie2 = lcSelectie + [ WHERE ] + lcSumaAchi + [> 0 INTO CURSOR ] + lcCursorSumePozitive + [ READWRITE]
|
|
&lcSelectie1
|
|
&lcSelectie2
|
|
|
|
If !Empty(tcNumeVal2) And !Empty(Nvl(tnIdValuta2,0))
|
|
Update (lcCursorSumeNegative) Set id_valuta2 = tnIdValuta2, nume_Val2 = tcNumeVal2
|
|
Update (lcCursorSumePozitive) Set id_valuta2 = tnIdValuta2, nume_Val2 = tcNumeVal2
|
|
ENDIF
|
|
*!* ROUND(sumaval-achitatval,gnPval)
|
|
*!* && sumaachi2 = valoarea in valuta facturii (euro)
|
|
*!* && sumaachi22 = valoarea in valuta de incasare(usd)
|
|
*!* && m.suma_32 = cursul usd
|
|
*!* && m.suma_3 = cursul euro
|
|
*!* Local lncurs
|
|
*!* If ales
|
|
*!* lncurs = Iif(id_valuta = id_valuta2, poact.suma_32, poact.suma_3)
|
|
*!* * lncurs = Iif(id_valuta = poact.id_valuta2, poact.suma_32, poact.suma_3)
|
|
*!* Repl sumaachi2 With Round(sumaval - achitatval,gnPval)
|
|
*!* IF poAct.suma_32 > 0
|
|
*!* replace sumaachi22 WITH ROUND(sumaachi2 * m.lncurs / poact.suma_32,2)
|
|
*!* ENDIF
|
|
*!* If sumaachi2=0
|
|
*!* Do mesaj With "Bifati doar inregistrarile","care au sold in valuta!"
|
|
*!* Replace ales With .F.
|
|
*!* Endif
|
|
*!* Else
|
|
*!* Repl sumaachi2 With 0, sumaachi22 With 0
|
|
*!* Endif
|
|
|
|
If Reccount(lcCursorSumeNegative)>0 And Reccount(lcCursorSumePozitive)>0
|
|
Do calculcompens With lcCursorSumeNegative, lcCursorSumePozitive, 1,1
|
|
*!* mut toate facturile pe coloana corecta si le cumulez dupa id_fact
|
|
copiaza_structura_cursor(lcCursorCalculCompensare,lcCursorCalculCompensareTemp)
|
|
INSERT INTO (lcCursorCalculCompensareTemp) SELECT * FROM (lcCursorCalculCompensare)
|
|
DELETE from (lcCursorCalculCompensare)
|
|
IF lnTip = 1
|
|
Insert Into (lcCursorCalculCompensare) (nr_doc_d,nr_doc_c,id_factd,id_factc,ascd,ascc,sumaachi,ales,proc_tva,;
|
|
id_jtvacol,tva_incasare_a,tva_incasare_d,tva_incasare_dtip,tva_incasare_c,tva_incasare_ctip) ;
|
|
SELECT 0 As nr_doc_d, nr_doc_d As nr_doc_c, 0 As id_factd, id_factd As id_factc, '' As ascd,ascd As ascc,;
|
|
Sum(sumaachi) As sumaachi,ales,;
|
|
proc_tvaD as proc_tva,id_jtvacol as id_jtvacolC,;
|
|
tva_incasare_a,0 As tva_incasare_d,'' As tva_incasare_dtip,tva_incasare_d As tva_incasare_c,;
|
|
IIF(tva_incasare_dtip='D','C','') As tva_incasare_ctip ;
|
|
From (lcCursorCalculCompensareTemp) ;
|
|
Group By 1,2,3,4,5,6,8,9,10,11,12,13,14,15 ;
|
|
Union All ;
|
|
SELECT 0 As nr_doc_d,nr_doc_c,0 As id_factd,id_factc,'' As ascd,ascc,;
|
|
Sum(sumaachi)*(-1) As sumaachi,ales,;
|
|
proc_tvaC as proc_tva, id_jtvacolC as id_jtvacol,;
|
|
tva_incasare_a,0 As tva_incasare_d,'' As tva_incasare_dtip,tva_incasare_c,tva_incasare_ctip ;
|
|
From (lcCursorCalculCompensareTemp) ;
|
|
Group By 1,2,3,4,5,6,8,9,10,11,12,13,14,15
|
|
ELSE
|
|
Insert Into (lcCursorCalculCompensare) (nr_doc_d,nr_doc_c,id_factd,id_factc,ascd,ascc,sumaachi,ales,proc_tva,;
|
|
id_jtvacol,tva_incasare_a,tva_incasare_d,tva_incasare_dtip,tva_incasare_c,tva_incasare_ctip) ;
|
|
SELECT nr_doc_c As nr_doc_d, 0 As nr_doc_c, id_factc As id_factd, 0 As id_factc, ascc As ascd, '' As ascc,;
|
|
Sum(sumaachi)*(-1) As sumaachi,ales,;
|
|
proc_tvaC as proc_tva, id_jtvacolC as id_jtvacol,;
|
|
tva_incasare_a,tva_incasare_c As tva_incasare_d,;
|
|
IIF(tva_incasare_ctip='C','D','') as tva_incasare_dtip,;
|
|
0 As tva_incasare_c,'' As tva_incasare_ctip ;
|
|
From (lcCursorCalculCompensareTemp) ;
|
|
Group By 1,2,3,4,5,6,8,9,10,11,12,13,14,15 ;
|
|
Union All ;
|
|
SELECT nr_doc_d,0 As nr_doc_c,id_factd,0 As id_factc,ascd,'' As ascc,;
|
|
Sum(sumaachi) As sumaachi,ales,;
|
|
proc_tvaD as proc_tva, id_jtvacolD as id_jtvacol, ;
|
|
tva_incasare_a,tva_incasare_d,tva_incasare_dtip,0 As tva_incasare_c,'' As tva_incasare_ctip ;
|
|
From (lcCursorCalculCompensareTemp) ;
|
|
Group By 1,2,3,4,5,6,8,9,10,11,12,13,14,15
|
|
ENDIF
|
|
USE IN (lcCursorCalculCompensareTemp)
|
|
Else
|
|
llReturn = .F.
|
|
amessagebox("Nu se pot face compensari intrucat nu exista facturi cu semn diferit!",48,"Atentie")
|
|
Endif
|
|
|
|
Use In (lcCursorIregPart)
|
|
Use In (lcCursorSumeNegative)
|
|
Use In (lcCursorSumePozitive)
|
|
Release lnTip, lcCursorIregPart, lcCursorSumeNegative, lcCursorSumePozitive, lcCursorCalculCompensare, ;
|
|
lcCursorCalculCompensareTemp, lcCont, lcCond, lnIdPart, ;
|
|
lnFelCont, lnPozitie, lcSumaAchi, lcSelectie, lcSelectie1, lcSelectie2
|
|
RETURN llReturn
|
|
Endproc |