Plati la buget din importul de extrase: recunoastere dupa IBAN Trezorerie (TVA 4423, CAM 436, cont unic defalcat din frm_modific2024)

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LBKZQUq6vimKuAFsrS2D1s
This commit is contained in:
2026-09-15 17:00:15 +03:00
parent 8dcffef439
commit 1416587f12
2 changed files with 301 additions and 9 deletions

View File

@@ -1675,7 +1675,7 @@ DEFINE CLASS form1 AS form
Select actactan_temp Select actactan_temp
IF USED('actactan') IF USED('actactan')
* actactan_temp are structura vact (SELECT * FROM vact WHERE 1=2), un camp nou pe actactan nu supravietuieste acestui Append From Dbf - salvez randurile marcate intr-un cursor paralel, cheie pe pozitia in randurile nesterse (Recno() nu coincide cu pozitia din tact dupa un DELETE fara PACK) * actactan_temp are structura vact (SELECT * FROM vact WHERE 1=2), un camp nou pe actactan nu supravietuieste acestui Append From Dbf - salvez randurile marcate intr-un cursor paralel, cheie pe pozitia in randurile nesterse (Recno() nu coincide cu pozitia din tact dupa un DELETE fara PACK)
IF Type('actactan.listoric') = 'L' OR Type('actactan.dublura') = 'L' OR Type('actactan.ngrupa') = 'N' IF Type('actactan.listoric') = 'L' OR Type('actactan.dublura') = 'L' OR Type('actactan.ngrupa') = 'N' OR Type('actactan.cbuget') = 'C'
lnSeqMarcaj = 0 lnSeqMarcaj = 0
IF Type('actactan.listoric') = 'L' IF Type('actactan.listoric') = 'L'
Create Cursor cIstoricMarcaj (nrseq N(6)) Create Cursor cIstoricMarcaj (nrseq N(6))
@@ -1685,6 +1685,10 @@ DEFINE CLASS form1 AS form
Create Cursor cDubluraMarcaj (nrseq N(6)) Create Cursor cDubluraMarcaj (nrseq N(6))
Index On nrseq Tag nrseq Index On nrseq Tag nrseq
ENDIF ENDIF
IF Type('actactan.cbuget') = 'C'
Create Cursor cBugetMarcaj (nrseq N(6), cbuget C(3))
Index On nrseq Tag nrseq
ENDIF
IF Type('actactan.ngrupa') = 'N' IF Type('actactan.ngrupa') = 'N'
Create Cursor cGrupaMarcaj (nrseq N(6), ngrupa I, npoz I, csursa C(1)) Create Cursor cGrupaMarcaj (nrseq N(6), ngrupa I, npoz I, csursa C(1))
Index On nrseq Tag nrseq Index On nrseq Tag nrseq
@@ -1698,6 +1702,9 @@ DEFINE CLASS form1 AS form
IF Type('actactan.dublura') = 'L' AND dublura IF Type('actactan.dublura') = 'L' AND dublura
Insert Into cDubluraMarcaj (nrseq) Values (lnSeqMarcaj) Insert Into cDubluraMarcaj (nrseq) Values (lnSeqMarcaj)
ENDIF ENDIF
IF Type('actactan.cbuget') = 'C' AND !Empty(actactan.cbuget)
Insert Into cBugetMarcaj (nrseq, cbuget) Values (lnSeqMarcaj, actactan.cbuget)
ENDIF
IF Type('actactan.ngrupa') = 'N' AND ngrupa > 0 IF Type('actactan.ngrupa') = 'N' AND ngrupa > 0
Insert Into cGrupaMarcaj (nrseq, ngrupa, npoz, csursa) Values (lnSeqMarcaj, actactan.ngrupa, actactan.npoz, actactan.csursa_f) Insert Into cGrupaMarcaj (nrseq, ngrupa, npoz, csursa) Values (lnSeqMarcaj, actactan.ngrupa, actactan.npoz, actactan.csursa_f)
ENDIF ENDIF
@@ -1707,7 +1714,7 @@ DEFINE CLASS form1 AS form
Append From Dbf('actactan') Append From Dbf('actactan')
ENDIF ENDIF
Select .F. As ales, a.explicatia4 As iban, Iif(!Empty(Nvl(a.id_jtva_coloana, 0)), 1, 0) As Cu_tva, Cast(0 As N(2)) As tipnota, .F. As listoric, .F. As dublura, Cast(0 As I) As ngrupa, Cast(0 As I) As npoz, Space(1) As csursa_f, a.*, b.denumire As explicatie_tva_2 ; Select .F. As ales, a.explicatia4 As iban, Iif(!Empty(Nvl(a.id_jtva_coloana, 0)), 1, 0) As Cu_tva, Cast(0 As N(2)) As tipnota, .F. As listoric, .F. As dublura, Cast(0 As I) As ngrupa, Cast(0 As I) As npoz, Space(1) As csursa_f, Space(3) As cbuget, a.*, b.denumire As explicatie_tva_2 ;
From actactan_temp a Left Join crsExplicatiiTVATemp b On a.id_jtva_coloana = b.id_jtva_coloana ; From actactan_temp a Left Join crsExplicatiiTVATemp b On a.id_jtva_coloana = b.id_jtva_coloana ;
Into Cursor tact Readwrite Into Cursor tact Readwrite
@@ -1729,6 +1736,15 @@ DEFINE CLASS form1 AS form
Endscan Endscan
Use In cDubluraMarcaj Use In cDubluraMarcaj
ENDIF ENDIF
IF Used('cBugetMarcaj')
Select tact
Scan
If Seek(Recno(), 'cBugetMarcaj', 'nrseq')
Replace cbuget With cBugetMarcaj.cbuget
Endif
Endscan
Use In cBugetMarcaj
ENDIF
IF Used('cGrupaMarcaj') IF Used('cGrupaMarcaj')
* renumerotare in ordinea din tact: grupele consecutive devin 1,2,3... * renumerotare in ordinea din tact: grupele consecutive devin 1,2,3...
lnGrupaNoua = 0 lnGrupaNoua = 0

View File

@@ -51,6 +51,10 @@
*!* marius.mutu *!* marius.mutu
*!* CreeazaNote/CompleteazaParteneriROA - la CUI-uri duplicate aleg partenerul cu facturi in perioada curenta, nu ultimul creat *!* CreeazaNote/CompleteazaParteneriROA - la CUI-uri duplicate aleg partenerul cu facturi in perioada curenta, nu ultimul creat
*!* 15.09.2026
*!* marius.mutu
*!* CreeazaNote - plata la Trezorerie recunoscuta dupa IBAN (TVA 4423, CAM 436, cont unic defalcat din frm_modific2024)
************************************* *************************************
* Clasa ImportNote este fabrica de clase tip Export * Clasa ImportNote este fabrica de clase tip Export
************************************* *************************************
@@ -358,7 +362,7 @@ Define Class ExtrasBanca As Custom
Local lcCont, lcNumeValuta, lcValuta, ldDataIreg, llMonedaNationala, lnCurs, lnIdPartCoresp Local lcCont, lcNumeValuta, lcValuta, ldDataIreg, llMonedaNationala, lnCurs, lnIdPartCoresp
Local lnIdTipPart, lnIdValuta, lnSpecial, lnTipPersoana, loDate2, loValuta, llDocumentPereche Local lnIdTipPart, lnIdValuta, lnSpecial, lnTipPersoana, loDate2, loValuta, llDocumentPereche
Local lcRecc, lcRecno, lnRecno Local lcRecc, lcRecno, lnRecno
Local lcComanda, lcDenumire2, lcPartenerCasa, lcTip2, lnVariante, llExcludeOriginal Local lcAscdBuget, lcComanda, lcDenumire2, lcGrupaBuget, lcPartenerCasa, lcTip2, lnVariante, llExcludeOriginal
Local lnDenumire, lnDocument, lnIdPartenerCasa, lnVariante, loPartener Local lnDenumire, lnDocument, lnIdPartenerCasa, lnVariante, loPartener
Local lcGrupIdLista, lcSqlGrup, lnIdPartAlternativ, lcPartAlternativ Local lcGrupIdLista, lcSqlGrup, lnIdPartAlternativ, lcPartAlternativ
Local lcSqlIstoric, llIstoricOk, lcCheieTxt Local lcSqlIstoric, llIstoricOk, lcCheieTxt
@@ -695,6 +699,7 @@ Define Class ExtrasBanca As Custom
Scan Scan
lcContD = "" lcContD = ""
lcContC = "" lcContC = ""
lcAscdBuget = ""
lnIdPartener = NVL(id_part,0) lnIdPartener = NVL(id_part,0)
* Cheie invatata din istoric, doar cand CUI/denumire/IBAN nu au gasit partenerul (loop-ul anterior) * Cheie invatata din istoric, doar cand CUI/denumire/IBAN nu au gasit partenerul (loop-ul anterior)
If Empty(m.lnIdPartener) If Empty(m.lnIdPartener)
@@ -712,6 +717,11 @@ Define Class ExtrasBanca As Custom
lcContPartener = "" lcContPartener = ""
lcTip = Alltrim(tip) lcTip = Alltrim(tip)
lcTip2 = Alltrim(tip_2) lcTip2 = Alltrim(tip_2)
lcGrupaBuget = Iif(m.llMonedaNationala And m.lcTip = 'D', GrupaBugetDinIban(iban), '')
If !Empty(m.lcGrupaBuget)
lcTip2 = This.cTipBuget
Replace tip_2 With This.cTipBuget
Endif
lcCodFiscal = Upper(Alltrim(cod_fiscal)) lcCodFiscal = Upper(Alltrim(cod_fiscal))
lcDenumire = Upper(Alltrim(denumire)) lcDenumire = Upper(Alltrim(denumire))
@@ -793,7 +803,10 @@ Define Class ExtrasBanca As Custom
Case m.lcTip2 = This.cTipTerti && "TRF" && terti (clienti/furnizori) Case m.lcTip2 = This.cTipTerti && "TRF" && terti (clienti/furnizori)
lcContD = "401" lcContD = "401"
Case m.lcTip2 = This.cTipBuget && "BUG" && datorii la buget Case m.lcTip2 = This.cTipBuget && "BUG" && datorii la buget
lcContD = "4481" lcContD = Icase(m.lcGrupaBuget = 'TVA', '4423', m.lcGrupaBuget = 'CAM', '436', '4481')
If Inlist(m.lcGrupaBuget, 'TVA', 'CAM')
lcAscdBuget = AnaliticBugetActiv(m.lcContD)
Endif
Case m.lcTip2 = This.cTipTransfer && "TRS" transfer intre conturi Case m.lcTip2 = This.cTipTransfer && "TRS" transfer intre conturi
lcContD = "581" lcContD = "581"
Case m.lcTip2 = This.cTipDepunere && "DEP" depunere/retragere numerar Case m.lcTip2 = This.cTipDepunere && "DEP" depunere/retragere numerar
@@ -838,7 +851,7 @@ Define Class ExtrasBanca As Custom
Endif Endif
Select cActTemp Select cActTemp
Replace scd With m.lcContD, scc With m.lcContC, id_partd With m.lnIdPartD, id_partc With m.lnIdPartC, partd With m.lcPartD, partc With m.lcPartC Replace scd With m.lcContD, scc With m.lcContC, ascd With m.lcAscdBuget, id_partd With m.lnIdPartD, id_partc With m.lnIdPartC, partd With m.lcPartD, partc With m.lcPartC
Replace id_valuta With m.lnIdValuta, nume_val With m.lcNumeValuta Replace id_valuta With m.lnIdValuta, nume_val With m.lcNumeValuta
If !m.llMonedaNationala If !m.llMonedaNationala
IF curs = 0 IF curs = 0
@@ -999,6 +1012,7 @@ Define Class ExtrasBanca As Custom
scd, scc, ascd, ascc, id_partd, id_partc, partd, partc, ; scd, scc, ascd, ascc, id_partd, id_partc, partd, partc, ;
id_factd, id_factc, pereched, perechec, ; id_factd, id_factc, pereched, perechec, ;
id_fdoc, fdoc, listoric, ngrupa, npoz, csursa_f, nordine, ; id_fdoc, fdoc, listoric, ngrupa, npoz, csursa_f, nordine, ;
Cast(Iif(m.llMonedaNationala And Alltrim(tip) = 'D', GrupaBugetDinIban(iban), '') As C(3)) As cbuget, ;
Cast(gnIdSucursala As N(5) Null) As id_sucursala, Space(200) As sucursala ; Cast(gnIdSucursala As N(5) Null) As id_sucursala, Space(200) As sucursala ;
From cActTemp ; From cActTemp ;
Order By Data, nordine ; Order By Data, nordine ;
@@ -1387,6 +1401,102 @@ Procedure ImparteRanduriFacturi
Use In (Select('cAlocTemp')) Use In (Select('cAlocTemp'))
Endproc Endproc
* --------------------------------------------------------------------
* Solduri per cont/analitic pentru o grupa de buget (TVA/CAM/CU), in cDefalcare (cont, acont, denumire, sold, suma)
* --------------------------------------------------------------------
Function IncarcaDefalcareBuget
Lparameters tcGrupa
Local lcConturi, lcSql, llSucces
Do Case
Case m.tcGrupa = 'TVA'
lcConturi = "'4423'"
Case m.tcGrupa = 'CAM'
lcConturi = "'436'"
Otherwise
lcConturi = "'444','4315','4316','446','4411','4418','4481','447'"
Endcase
If Used('cDefalcare')
Use In (Select('cDefalcare'))
Endif
lcSql = [select p.cont, ' ' as acont, p.explicaties as denumire, ] + ;
[cast(nvl(vl.preccred,0) - nvl(vl.precdeb,0) as number(15,2)) as sold, cast(0 as number(15,2)) as suma ] + ;
[from plcont p left join ] + ;
[(select cont, sum(preccred) preccred, sum(precdeb) precdeb from vbal ] + ;
[where an = ?gnAn and luna = ?gnLuna ] + m.gcCondSucursala + [ group by cont) vl ] + ;
[on vl.cont = p.cont ] + ;
[where p.inactiv = 0 and p.an = ?gnAn and p.cont in (] + m.lcConturi + [) ] + ;
[and nvl(p.acont,' ') = ' ' and p.cont not in ] + ;
[(select cont from plcont where inactiv = 0 and an = ?gnAn ] + ;
[and cont in (] + m.lcConturi + [) and nvl(acont,' ') <> ' ') ] + ;
[union all ] + ;
[select p.cont, p.acont, p.explicaties as denumire, ] + ;
[cast(nvl(vla.preccred,0) - nvl(vla.precdeb,0) as number(15,2)) as sold, cast(0 as number(15,2)) as suma ] + ;
[from plcont p left join ] + ;
[(select cont, acont, sum(preccred) preccred, sum(precdeb) precdeb from vbalana ] + ;
[where an = ?gnAn and luna = ?gnLuna ] + m.gcCondSucursala + [ group by cont, acont) vla ] + ;
[on vla.cont = p.cont and vla.acont = p.acont ] + ;
[where p.inactiv = 0 and p.an = ?gnAn and p.cont in (] + m.lcConturi + [) ] + ;
[and nvl(p.acont,' ') <> ' ' ] + ;
[order by 1, 2]
llSucces = goExecutor.oExecuta(m.lcSql, 'cDefalcare')
If !m.llSucces
AMESSAGEBOX(goExecutor.cEroare, 0 + 16, 'Eroare')
Return .F.
Endif
Select cDefalcare
Replace All suma With Max(sold, 0)
Go Top
Return .T.
Endfunc
*
* --------------------------------------------------------------------
* Sparge randul tnRec din tact pe conturile/analiticele din cDefalcare cu suma <> 0
* --------------------------------------------------------------------
Procedure AplicaDefalcareBuget
Lparameters tnRec, tcGrupa
Local lnGrupa, lnPoz, loR, llCurataPartener
Select Max(ngrupa) As mgrupa From tact Into Cursor cMaxGrupaBuget
lnGrupa = Nvl(cMaxGrupaBuget.mgrupa, 0) + 1
Use In (Select('cMaxGrupaBuget'))
Select tact
Try
Go m.tnRec
Catch
Return
Endtry
Scatter Memo Name loR
* contul debit al parintelui nu e cont de buget (ex. 401 recuperat) - partenerul debitului nu se mai aplica analiticelor de buget
llCurataPartener = !Inlist(Alltrim(loR.scd), '4423', '436', '444', '4315', '4316', '446', '4411', '4418', '4481', '447')
lnPoz = 0
Select cDefalcare
Scan For suma <> 0
lnPoz = m.lnPoz + 1
Select tact
If m.lnPoz > 1
Append Blank
Gather Memo Name loR
Endif
Replace scd With Alltrim(cDefalcare.cont), ascd With Alltrim(cDefalcare.acont), ;
suma With cDefalcare.suma, ngrupa With m.lnGrupa, npoz With m.lnPoz, csursa_f With 'B'
If !Empty(m.tcGrupa) And Empty(loR.cbuget)
Replace cbuget With m.tcGrupa
Endif
If m.llCurataPartener
Replace id_partd With 0, partd With ''
Endif
Select cDefalcare
Endscan
Endproc
Define Class ExtrasBanca_MT940 As ExtrasBanca Define Class ExtrasBanca_MT940 As ExtrasBanca
cDescription = 'clasa generica import extras MT940' cDescription = 'clasa generica import extras MT940'
@@ -3449,7 +3559,7 @@ Define Class ExtrasBanca_General As ExtrasBanca
* tnTip: 1 (default) = lista tranzactii, 2 = extras de cont * tnTip: 1 (default) = lista tranzactii, 2 = extras de cont
Local mtextoriginal Local mtextoriginal
Local lcComerciant, lcDescriereFacturi, lcFacturi, lcLinie, lnLinie, lnLinii, lnResults Local lcComerciant, lcDescriereFacturi, lcFacturi, lcLinie, lnLinie, lnLinii, lnPozBuget, lnResults
LOCAL mcf, mexplicatie, mfilestr, miban, mtert LOCAL mcf, mexplicatie, mfilestr, miban, mtert
lnLinii = Alines(This.aLinii, Filetostr(m.pselectedfile), 1) lnLinii = Alines(This.aLinii, Filetostr(m.pselectedfile), 1)
@@ -3566,8 +3676,10 @@ Define Class ExtrasBanca_General As ExtrasBanca
Otherwise Otherwise
Replace tip_2 With "" Replace tip_2 With ""
Endcase Endcase
mtert = ALLTRIM(syGETWORDNUM(m.mexplicatie, 3, ';')) * platile la Trezorerie (referinta structurata /RFB/) au 3 campuri suplimentare inaintea tertului
miban = ALLTRIM(syGETWORDNUM(m.mexplicatie, 4, ';')) lnPozBuget = Iif(';/RFB/' $ m.mexplicatie, 3, 0)
mtert = ALLTRIM(syGETWORDNUM(m.mexplicatie, 3 + lnPozBuget, ';'))
miban = ALLTRIM(syGETWORDNUM(m.mexplicatie, 4 + lnPozBuget, ';'))
mcf = "" mcf = ""
IF "C.I.F.:" $ m.mexplicatie IF "C.I.F.:" $ m.mexplicatie
mcf = getdigitsfromstring(Alltrim(Substr(m.mexplicatie, At("C.I.F.:", m.mexplicatie) + 7, 13)), 4, 1, ".") mcf = getdigitsfromstring(Alltrim(Substr(m.mexplicatie, At("C.I.F.:", m.mexplicatie) + 7, 13)), 4, 1, ".")
@@ -4901,6 +5013,47 @@ Function EsteIbanInListaNeagra
Endfunc Endfunc
* *
* -------------------------------------------------------------------- * --------------------------------------------------------------------
* Grupa de buget dupa IBAN-ul Trezoreriei: TVA/CAM/CU, gol daca nu e Trezorerie
* --------------------------------------------------------------------
Function GrupaBugetDinIban
Lparameters tcIban
Local lcIban
lcIban = Upper(Chrtran(Alltrim(Nvl(m.tcIban, '')), ' ', ''))
If Len(m.lcIban) < 8 Or !(Substr(m.lcIban, 5, 4) == 'TREZ')
Return ''
Endif
Do Case
Case Substr(m.lcIban, 12, 9) == '20A100101'
Return 'TVA'
Case Substr(m.lcIban, 12, 7) == '20A4703'
Return 'CAM'
Case Substr(m.lcIban, 12, 4) == '5503'
Return 'CU'
Otherwise
Return ''
Endcase
Endfunc
*
* --------------------------------------------------------------------
* Analiticul activ al unui cont de buget, doar daca e exact unul singur
* --------------------------------------------------------------------
Function AnaliticBugetActiv
Lparameters tcCont
Local lcAcont
PRIVATE pcContBuget
pcContBuget = m.tcCont
lcAcont = ''
If goExecutor.oExecuta([select acont from plcont where inactiv = 0 and an = ?gnAn ] + ;
[and cont = ?pcContBuget and nvl(acont,' ') <> ' '], 'cAnaliticBugetActiv')
If Reccount('cAnaliticBugetActiv') = 1
lcAcont = Alltrim(cAnaliticBugetActiv.acont)
Endif
Use In (Select('cAnaliticBugetActiv'))
Endif
Return m.lcAcont
Endfunc
*
* --------------------------------------------------------------------
* Garda E3: salveaza IBAN-ul tertului pe partener doar daca partenerul nu are deja un cont, * Garda E3: salveaza IBAN-ul tertului pe partener doar daca partenerul nu are deja un cont,
* IBAN-ul nu e deja pe alt partener activ si nu e din lista neagra * IBAN-ul nu e deja pe alt partener activ si nu e din lista neagra
* -------------------------------------------------------------------- * --------------------------------------------------------------------
@@ -5702,4 +5855,127 @@ Procedure CompleteazaValutaROA
Return m.llSucces Return m.llSucces
Endproc Endproc
Define Class frmDefalcareBuget As frm_termin_renunt Of "_frm_child.vcx"
Caption = 'Defalcare plata la buget'
Width = 520
Height = 330
dData = {}
nSuma = 0
cGrupa = ''
cExplicatie = ''
nNerepartizat = 0
Procedure Init
Lparameters tdData, tnSuma, tcGrupa, tcExplicatie
Local lcTitluGrupa
DoDefault()
This.dData = m.tdData
This.nSuma = m.tnSuma
This.cGrupa = Upper(Alltrim(Nvl(m.tcGrupa, '')))
This.cExplicatie = Alltrim(Nvl(m.tcExplicatie, ''))
This.NewObject('lblInfo', '_label', '_baza.vcx')
With This.lblInfo
.Left = 10
.Top = 35
.Width = 500
.Height = 34
.AutoSize = .F.
.WordWrap = .T.
Endwith
lcTitluGrupa = Icase(This.cGrupa = 'TVA', 'TVA', This.cGrupa = 'CAM', 'CAM', 'Cont unic (buget de stat)')
This.lblInfo.Caption = Dtoc(This.dData) + ' Suma OP: ' + Transform(This.nSuma, '999,999,999.99') + ;
' ' + m.lcTitluGrupa + ' ' + This.cExplicatie
This.NewObject('grdDefalcare', '_grid', '_baza.vcx')
With This.grdDefalcare
.Left = 10
.Top = 72
.Width = 500
.Height = 210
.lcamptextneeditabil = .F.
.RecordSource = 'cDefalcare'
.ColumnCount = 5
.Columns(1).ControlSource = 'cDefalcare.cont'
.Columns(1).Header1.Caption = 'Cont'
.Columns(1).ReadOnly = .T.
.Columns(1).Width = 50
.Columns(2).ControlSource = 'cDefalcare.acont'
.Columns(2).Header1.Caption = 'Analitic'
.Columns(2).ReadOnly = .T.
.Columns(2).Width = 60
.Columns(3).ControlSource = 'cDefalcare.denumire'
.Columns(3).Header1.Caption = 'Denumire'
.Columns(3).ReadOnly = .T.
.Columns(3).Width = 190
.Columns(4).ControlSource = 'cDefalcare.sold'
.Columns(4).Header1.Caption = 'Sold precedent'
.Columns(4).ReadOnly = .T.
.Columns(4).Width = 95
.Columns(5).ControlSource = 'cDefalcare.suma'
.Columns(5).Header1.Caption = 'Suma'
.Columns(5).ReadOnly = .F.
.Columns(5).Width = 95
Bindevent(.Columns(5).Text1, 'Valid', This, 'ActualizeazaNerepartizat')
Bindevent(.Columns(5).Text1, 'LostFocus', This, 'ActualizeazaNerepartizat')
Endwith
This.NewObject('lblNerepartizat', '_label', '_baza.vcx')
With This.lblNerepartizat
.Left = 10
.Top = 288
.Width = 500
.Height = 20
.AutoSize = .F.
.FontBold = .T.
Endwith
This.ActualizeazaNerepartizat()
Endproc
Procedure ActualizeazaNerepartizat
Local lnRepartizat, lnRecno, lcSelect
If !Used('cDefalcare')
Return
Endif
lcSelect = Select()
lnRecno = Recno('cDefalcare')
Select cDefalcare
Sum suma To lnRepartizat
If Between(m.lnRecno, 1, Reccount())
Go m.lnRecno
Endif
Select (m.lcSelect)
This.nNerepartizat = Round(This.nSuma - m.lnRepartizat, 2)
This.lblNerepartizat.Caption = 'Nerepartizat: ' + Transform(This.nNerepartizat, '999,999,999.99')
This.lblNerepartizat.ForeColor = Iif(This.nNerepartizat <> 0, Rgb(200, 0, 0), Rgb(0, 130, 0))
Endproc
Procedure inainte_de_do_termin
Local llNegativ, lcSelect
This.ActualizeazaNerepartizat()
llNegativ = .F.
If Used('cDefalcare')
lcSelect = Select()
Select cDefalcare
Locate For suma < 0
llNegativ = Found()
Select (m.lcSelect)
Endif
If This.nNerepartizat <> 0 Or m.llNegativ
AMESSAGEBOX('Mai aveti de repartizat ' + Transform(This.nNerepartizat, '999,999,999.99') + ' lei.', 0 + 48, This.Caption)
Return .F.
Endif
Return .T.
Endproc
Enddefine