sync SVN r18103
This commit is contained in:
@@ -57,6 +57,12 @@ DEFINE CLASS form1 AS form
|
||||
*< OBJECTDATA: ObjPath="grdConturi.cDenumire.Text1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grdConturi.cDataOra.Header1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grdConturi.cDataOra.Text1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grdConturi.cSoldI.Header1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grdConturi.cSoldI.Text1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grdConturi.cSoldF.Header1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grdConturi.cSoldF.Text1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grdConturi.cSoldDif.Header1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grdConturi.cSoldDif.Text1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="But_sterge1" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grdConfigurareConturi" UniqueID="" Timestamp="" />
|
||||
*< OBJECTDATA: ObjPath="grdConfigurareConturi.cCodFiscal.Header1" UniqueID="" Timestamp="" />
|
||||
@@ -133,6 +139,7 @@ DEFINE CLASS form1 AS form
|
||||
*<DefinedPropArrayMethod>
|
||||
*m: cauta_fdoc
|
||||
*m: completeazaclientiroa
|
||||
*m: completeazasolduri
|
||||
*m: connectroa
|
||||
*m: creeazanote
|
||||
*m: disconnectroa
|
||||
@@ -507,7 +514,7 @@ DEFINE CLASS form1 AS form
|
||||
|
||||
ADD OBJECT 'grdConturi' AS grid WITH ;
|
||||
Anchor = 11, ;
|
||||
ColumnCount = 12, ;
|
||||
ColumnCount = 15, ;
|
||||
DeleteMark = .F., ;
|
||||
HeaderHeight = 30, ;
|
||||
Height = 226, ;
|
||||
@@ -586,7 +593,19 @@ DEFINE CLASS form1 AS form
|
||||
Column12.ControlSource = "dataora", ;
|
||||
Column12.Name = "cDataOra", ;
|
||||
Column12.ReadOnly = .T., ;
|
||||
Column12.Width = 108
|
||||
Column12.Width = 108, ;
|
||||
Column13.ControlSource = "sold_i", ;
|
||||
Column13.Name = "cSoldI", ;
|
||||
Column13.ReadOnly = .T., ;
|
||||
Column13.Width = 75, ;
|
||||
Column14.ControlSource = "sold_f", ;
|
||||
Column14.Name = "cSoldF", ;
|
||||
Column14.ReadOnly = .T., ;
|
||||
Column14.Width = 75, ;
|
||||
Column15.ControlSource = "sold_dif", ;
|
||||
Column15.Name = "cSoldDif", ;
|
||||
Column15.ReadOnly = .T., ;
|
||||
Column15.Width = 75
|
||||
*< END OBJECT: BaseClass="grid" />
|
||||
|
||||
ADD OBJECT 'grdConturi.cAcont.Header1' AS header WITH ;
|
||||
@@ -785,6 +804,51 @@ DEFINE CLASS form1 AS form
|
||||
Name = "Text1"
|
||||
*< END OBJECT: BaseClass="textbox" />
|
||||
|
||||
ADD OBJECT 'grdConturi.cSoldDif.Header1' AS header WITH ;
|
||||
Alignment = 2, ;
|
||||
Caption = "Diferenta", ;
|
||||
Name = "Header1"
|
||||
*< END OBJECT: BaseClass="header" />
|
||||
|
||||
ADD OBJECT 'grdConturi.cSoldDif.Text1' AS textbox WITH ;
|
||||
BackColor = 255,255,255, ;
|
||||
BorderStyle = 0, ;
|
||||
ForeColor = 0,0,0, ;
|
||||
Margin = 0, ;
|
||||
Name = "Text1", ;
|
||||
ReadOnly = .T.
|
||||
*< END OBJECT: BaseClass="textbox" />
|
||||
|
||||
ADD OBJECT 'grdConturi.cSoldF.Header1' AS header WITH ;
|
||||
Alignment = 2, ;
|
||||
Caption = "Sold final", ;
|
||||
Name = "Header1"
|
||||
*< END OBJECT: BaseClass="header" />
|
||||
|
||||
ADD OBJECT 'grdConturi.cSoldF.Text1' AS textbox WITH ;
|
||||
BackColor = 255,255,255, ;
|
||||
BorderStyle = 0, ;
|
||||
ForeColor = 0,0,0, ;
|
||||
Margin = 0, ;
|
||||
Name = "Text1", ;
|
||||
ReadOnly = .T.
|
||||
*< END OBJECT: BaseClass="textbox" />
|
||||
|
||||
ADD OBJECT 'grdConturi.cSoldI.Header1' AS header WITH ;
|
||||
Alignment = 2, ;
|
||||
Caption = "Sold initial", ;
|
||||
Name = "Header1"
|
||||
*< END OBJECT: BaseClass="header" />
|
||||
|
||||
ADD OBJECT 'grdConturi.cSoldI.Text1' AS textbox WITH ;
|
||||
BackColor = 255,255,255, ;
|
||||
BorderStyle = 0, ;
|
||||
ForeColor = 0,0,0, ;
|
||||
Margin = 0, ;
|
||||
Name = "Text1", ;
|
||||
ReadOnly = .T.
|
||||
*< END OBJECT: BaseClass="textbox" />
|
||||
|
||||
ADD OBJECT 'grdConturi.cTip.Header1' AS header WITH ;
|
||||
Alignment = 2, ;
|
||||
Caption = "Tip", ;
|
||||
@@ -1359,6 +1423,17 @@ DEFINE CLASS form1 AS form
|
||||
PROCEDURE completeazaclientiroa
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE completeazasolduri
|
||||
LPARAMETERS toImport
|
||||
LOCAL lnIncasari, lnPlati
|
||||
lnIncasari = 0
|
||||
lnPlati = 0
|
||||
CALCULATE SUM(suma) FOR tip = 'C' TO lnIncasari IN C_IMPORT_TEMP
|
||||
CALCULATE SUM(suma) FOR tip = 'D' TO lnPlati IN C_IMPORT_TEMP
|
||||
REPLACE valuta WITH m.toImport.cValuta, sold_i WITH m.toImport.nSoldInitial, sold_f WITH m.toImport.nSoldFinal IN cConturi
|
||||
REPLACE sold_dif WITH cConturi.sold_i + m.lnIncasari - m.lnPlati - cConturi.sold_f IN cConturi
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE connectroa
|
||||
ENDPROC
|
||||
|
||||
@@ -1427,6 +1502,7 @@ DEFINE CLASS form1 AS form
|
||||
|
||||
* Colorez cu albastru inregistrarile pentru import
|
||||
this.grdConturi.SetAll("DynamicForeColor", "IIF(cConturi.note = 1, RGB(0,128,0), IIF(cConturi.import = 1, RGB(0,0,128), RGB(0,0,0)))","Column")
|
||||
this.grdConturi.cSoldDif.DynamicForeColor = "IIF(NVL(sold_dif,0)<>0, RGB(255,0,0), RGB(0,0,0))"
|
||||
|
||||
this.gridextra1.setup()
|
||||
this.gridextra2.setup()
|
||||
@@ -1438,7 +1514,7 @@ DEFINE CLASS form1 AS form
|
||||
|
||||
PROCEDURE Load
|
||||
CREATE CURSOR cConturi (ales N(1), note N(1), import N(1), banca C(100), iban C(100), clasa C(100), fisier C(250), ;
|
||||
tip C(20), extensie C(4), tipclasa C(100), cont C(4), acont C(4), part_nou L, factura L, comanda L, denumire C(100), id_part N(10), dataora T)
|
||||
tip C(20), extensie C(4), tipclasa C(100), cont C(4), acont C(4), part_nou L, factura L, comanda L, denumire C(100), id_part N(10), dataora T, valuta C(3), sold_i N(15,2) NULL, sold_f N(15,2) NULL, sold_dif N(15,2) NULL, sold_dubl N(15,2))
|
||||
|
||||
* Trebuie sa citesc configurarile pentru fiecare IBAN
|
||||
CREATE CURSOR cConfigConturi(iban C(100), id_part N(10), denumire C(200), cod_fiscal C(50), cont C(4), acont C(4))
|
||||
@@ -1477,7 +1553,7 @@ DEFINE CLASS form1 AS form
|
||||
Select cConturi
|
||||
Append From Dbf('cConturiTemp')
|
||||
Use In (Select('cConturiTemp'))
|
||||
UPDATE cConturi SET import = 0, ales = 0, note = 0
|
||||
UPDATE cConturi SET import = 0, ales = 0, note = 0, sold_i = .NULL., sold_f = .NULL., sold_dif = .NULL., sold_dubl = 0
|
||||
|
||||
* Completez numele partenerilor tip BANCA
|
||||
* Caut si pentru conturile care au denumirea partenerului completata, in cazul in care s-a modificat intre timp
|
||||
@@ -1598,13 +1674,78 @@ DEFINE CLASS form1 AS form
|
||||
If m.llSucces AND !m.tlIncarcaBackup
|
||||
Select actactan_temp
|
||||
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)
|
||||
IF Type('actactan.listoric') = 'L' OR Type('actactan.dublura') = 'L' OR Type('actactan.ngrupa') = 'N'
|
||||
lnSeqMarcaj = 0
|
||||
IF Type('actactan.listoric') = 'L'
|
||||
Create Cursor cIstoricMarcaj (nrseq N(6))
|
||||
Index On nrseq Tag nrseq
|
||||
ENDIF
|
||||
IF Type('actactan.dublura') = 'L'
|
||||
Create Cursor cDubluraMarcaj (nrseq N(6))
|
||||
Index On nrseq Tag nrseq
|
||||
ENDIF
|
||||
IF Type('actactan.ngrupa') = 'N'
|
||||
Create Cursor cGrupaMarcaj (nrseq N(6), ngrupa I, npoz I, csursa C(1))
|
||||
Index On nrseq Tag nrseq
|
||||
ENDIF
|
||||
Select actactan
|
||||
Scan
|
||||
lnSeqMarcaj = lnSeqMarcaj + 1
|
||||
IF Type('actactan.listoric') = 'L' AND listoric
|
||||
Insert Into cIstoricMarcaj (nrseq) Values (lnSeqMarcaj)
|
||||
ENDIF
|
||||
IF Type('actactan.dublura') = 'L' AND dublura
|
||||
Insert Into cDubluraMarcaj (nrseq) Values (lnSeqMarcaj)
|
||||
ENDIF
|
||||
IF Type('actactan.ngrupa') = 'N' AND ngrupa > 0
|
||||
Insert Into cGrupaMarcaj (nrseq, ngrupa, npoz, csursa) Values (lnSeqMarcaj, actactan.ngrupa, actactan.npoz, actactan.csursa_f)
|
||||
ENDIF
|
||||
Endscan
|
||||
ENDIF
|
||||
Select actactan_temp
|
||||
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, 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, a.*, b.denumire As explicatie_tva_2 ;
|
||||
From actactan_temp a Left Join crsExplicatiiTVATemp b On a.id_jtva_coloana = b.id_jtva_coloana ;
|
||||
Into Cursor tact Readwrite
|
||||
|
||||
IF Used('cIstoricMarcaj')
|
||||
Select tact
|
||||
Scan
|
||||
If Seek(Recno(), 'cIstoricMarcaj', 'nrseq')
|
||||
Replace listoric With .T.
|
||||
Endif
|
||||
Endscan
|
||||
Use In cIstoricMarcaj
|
||||
ENDIF
|
||||
IF Used('cDubluraMarcaj')
|
||||
Select tact
|
||||
Scan
|
||||
If Seek(Recno(), 'cDubluraMarcaj', 'nrseq')
|
||||
Replace dublura With .T.
|
||||
Endif
|
||||
Endscan
|
||||
Use In cDubluraMarcaj
|
||||
ENDIF
|
||||
IF Used('cGrupaMarcaj')
|
||||
* renumerotare in ordinea din tact: grupele consecutive devin 1,2,3...
|
||||
lnGrupaNoua = 0
|
||||
lnGrupaVeche = 0
|
||||
Select tact
|
||||
Scan
|
||||
If Seek(Recno(), 'cGrupaMarcaj', 'nrseq')
|
||||
If cGrupaMarcaj.ngrupa <> lnGrupaVeche
|
||||
lnGrupaVeche = cGrupaMarcaj.ngrupa
|
||||
lnGrupaNoua = lnGrupaNoua + 1
|
||||
Endif
|
||||
Replace ngrupa With lnGrupaNoua, npoz With cGrupaMarcaj.npoz, csursa_f With cGrupaMarcaj.csursa
|
||||
Endif
|
||||
Endscan
|
||||
Use In cGrupaMarcaj
|
||||
ENDIF
|
||||
|
||||
Update tact Set explicatie_tva = explicatie_tva_2, explicatia4 = '', id_Set = m.lnIdSet, explicatia5 = 'IMPORT ' + STRTRAN(TTOC(DATETIME(),3), 'T', ' ')
|
||||
UPDATE tAct SET nract = INT(VAL(DTOS(dataact) + ALLTRIM(STR(RECNO())))) WHERE EMPTY(NVL(nract,0))
|
||||
|
||||
@@ -1649,8 +1790,10 @@ DEFINE CLASS form1 AS form
|
||||
Go Top
|
||||
llNotaNoua = .T.
|
||||
llMaximize = .T.
|
||||
loForm = Createobject([frm_modific2024], m.lnIdSet, m.llNotaNoua)
|
||||
loForm = Createobject([frm_modific2024], m.lnIdSet, m.llNotaNoua, m.loBackupXML)
|
||||
loForm.lb_titlu_alb_b121.Caption = 'Import extrase bancare, deconturi curieri, procesatori plati'
|
||||
*!* activeaza totalurile si autosalvarea automate, specifice acestui apelant
|
||||
loForm.lActivExtrase = .T.
|
||||
Select tact
|
||||
loForm.Show(1, m.llMaximize)
|
||||
|
||||
@@ -2096,7 +2239,6 @@ DEFINE CLASS form1 AS form
|
||||
amessagebox("Nu au fost gasite importuri in luna curenta")
|
||||
RETURN
|
||||
Endif
|
||||
SET STEP ON
|
||||
lcMenu = ''
|
||||
SELECT crsStergeri
|
||||
SCAN
|
||||
@@ -2137,33 +2279,127 @@ DEFINE CLASS form1 AS form
|
||||
ENDPROC
|
||||
|
||||
PROCEDURE verificaimport
|
||||
* Verifica daca mai exista inregistrari 90023 in luna curenta
|
||||
Local llExista, lcSelect, lcSql, llSucces
|
||||
Private pnReturnValue, pnSuma, pdDataAct, pcScd, pcScc
|
||||
pnReturnValue = 0
|
||||
* Numara cate randuri din import (actactan) sunt deja contate dintr-un import anterior 90023, in luna curenta
|
||||
Local lcSelect, lcSql, lcRaw, llSucces, lnDuplicate
|
||||
Local ldDataAct, lnSuma, lcScd, lcScc, lcExplicatie, llGasit
|
||||
Local lnGrupa, lnGrupaDublura, lnNouDublura
|
||||
Local llBancaPeD, lnIdPartCurent
|
||||
lcSelect = SELECT()
|
||||
lnDuplicate = 0
|
||||
|
||||
lcSql = [select COUNT(*) as nr from act where an=?gnAn and luna = ?gnLuna and id_set=90023 and sters=0 and suma = ?pnSuma and dataact = ?pdDataAct and scd = ?pcScd and scc = ?pcScc]
|
||||
lcRaw = 'cActVerifRaw'
|
||||
IF USED(m.lcRaw)
|
||||
USE IN (m.lcRaw)
|
||||
ENDIF
|
||||
lcSql = [select dataact, suma, scd, scc, explicatia, id_partd, id_partc from act where an=?gnAn and luna=?gnLuna and id_set=90023 and sters=0]
|
||||
llSucces = goExecutor.oExecuta(m.lcSql, m.lcRaw)
|
||||
IF !m.llSucces
|
||||
SELECT (m.lcSelect)
|
||||
RETURN 0
|
||||
ENDIF
|
||||
|
||||
* .F. AS folosit: marcheaza randurile ACT deja perechate, ca un rand ACT sa nu acopere doua randuri de import
|
||||
SELECT *, .F. AS folosit FROM (m.lcRaw) INTO CURSOR cActVerif READWRITE
|
||||
USE IN (m.lcRaw)
|
||||
|
||||
IF TYPE('actactan.dublura') = 'U'
|
||||
* ALTER TABLE da eroarea 1115 pe cursor cu nume de camp peste 10 caractere (explicatia4, id_sucursala)
|
||||
SELECT *, .F. AS dublura FROM actactan INTO CURSOR cActDublura READWRITE
|
||||
USE IN actactan
|
||||
SELECT * FROM cActDublura INTO CURSOR actactan READWRITE
|
||||
USE IN cActDublura
|
||||
ENDIF
|
||||
SELECT actactan
|
||||
REPLACE ALL dublura WITH .F.
|
||||
SCAN
|
||||
pnSuma = suma
|
||||
pdDataAct = dataact
|
||||
pcScd = ALLTRIM(scd)
|
||||
pcScc = ALLTRIM(scc)
|
||||
llSucces = goExecutor.oSelecteaza2Value(m.lcSql, @pnReturnValue)
|
||||
If !m.llSucces
|
||||
IF m.pnReturnValue > 0
|
||||
EXIT
|
||||
ENDIF
|
||||
ELSE
|
||||
EXIT
|
||||
Endif
|
||||
ldDataAct = dataact
|
||||
lnSuma = suma
|
||||
lcScd = ALLTRIM(scd)
|
||||
lcScc = ALLTRIM(scc)
|
||||
lcExplicatie = ALLTRIM(explicatia)
|
||||
llBancaPeD = (LEFT(m.lcScd,3)='512')
|
||||
lnIdPartCurent = NVL(IIF(m.llBancaPeD, id_partc, id_partd),0)
|
||||
|
||||
SELECT cActVerif
|
||||
* doar contul de banca: contul corespondent poate fi corectat la contare
|
||||
LOCATE FOR !folosit AND dataact = m.ldDataAct AND suma = m.lnSuma AND IIF(m.llBancaPeD, ALLTRIM(scd) == m.lcScd, ALLTRIM(scc) == m.lcScc) AND ALLTRIM(explicatia) == m.lcExplicatie
|
||||
IF !FOUND()
|
||||
* fara potrivire pe explicatie: regula veche, pentru note vechi sau explicatie modificata dupa import
|
||||
LOCATE FOR !folosit AND dataact = m.ldDataAct AND suma = m.lnSuma AND IIF(m.llBancaPeD, ALLTRIM(scd) == m.lcScd, ALLTRIM(scc) == m.lcScc)
|
||||
ENDIF
|
||||
llGasit = FOUND()
|
||||
IF m.llGasit
|
||||
REPLACE folosit WITH .T.
|
||||
ENDIF
|
||||
IF !m.llGasit AND m.lnIdPartCurent > 0
|
||||
* ponytail: submultimea = toate randurile nefolosite din zi+cont+partener, fara cautare de combinatii - extinde cu subseturi daca apar cazuri ratate
|
||||
IF m.llBancaPeD
|
||||
SELECT SUM(suma) AS sumagrup, COUNT(*) AS nr FROM cActVerif WHERE !folosit AND dataact = m.ldDataAct AND ALLTRIM(scd) == m.lcScd AND NVL(id_partc,0) = m.lnIdPartCurent INTO CURSOR cSumaGrupVerif
|
||||
ELSE
|
||||
SELECT SUM(suma) AS sumagrup, COUNT(*) AS nr FROM cActVerif WHERE !folosit AND dataact = m.ldDataAct AND ALLTRIM(scc) == m.lcScc AND NVL(id_partd,0) = m.lnIdPartCurent INTO CURSOR cSumaGrupVerif
|
||||
ENDIF
|
||||
IF cSumaGrupVerif.nr >= 2 AND ROUND(NVL(cSumaGrupVerif.sumagrup,0),2) == ROUND(m.lnSuma,2)
|
||||
llGasit = .T.
|
||||
SELECT cActVerif
|
||||
IF m.llBancaPeD
|
||||
REPLACE ALL folosit WITH .T. FOR !folosit AND dataact = m.ldDataAct AND ALLTRIM(scd) == m.lcScd AND NVL(id_partc,0) = m.lnIdPartCurent
|
||||
ELSE
|
||||
REPLACE ALL folosit WITH .T. FOR !folosit AND dataact = m.ldDataAct AND ALLTRIM(scc) == m.lcScc AND NVL(id_partd,0) = m.lnIdPartCurent
|
||||
ENDIF
|
||||
ENDIF
|
||||
USE IN cSumaGrupVerif
|
||||
ENDIF
|
||||
|
||||
SELECT actactan
|
||||
REPLACE dublura WITH m.llGasit
|
||||
IF m.llGasit
|
||||
lnDuplicate = m.lnDuplicate + 1
|
||||
ENDIF
|
||||
ENDSCAN && actactan
|
||||
|
||||
llExista = (m.pnReturnValue > 0)
|
||||
IF Type('actactan.ngrupa') = 'N'
|
||||
* randul impartit pe facturi (ngrupa>0) se marcheaza/sterge intreg, niciodata jumatate
|
||||
SELECT DISTINCT ngrupa FROM actactan WHERE ngrupa > 0 INTO CURSOR cGrupeVerif
|
||||
SELECT cGrupeVerif
|
||||
SCAN
|
||||
lnGrupa = ngrupa
|
||||
SELECT actactan
|
||||
COUNT FOR ngrupa = m.lnGrupa AND dublura TO lnGrupaDublura
|
||||
llGasit = (m.lnGrupaDublura > 0)
|
||||
IF !m.llGasit
|
||||
* fara potrivire pe rand in grupa: caut suma intreaga a grupei ca un singur rand ACT vechi, neimpartit
|
||||
SUM suma FOR ngrupa = m.lnGrupa TO lnSuma
|
||||
LOCATE FOR ngrupa = m.lnGrupa
|
||||
ldDataAct = dataact
|
||||
lcScd = ALLTRIM(scd)
|
||||
lcScc = ALLTRIM(scc)
|
||||
llBancaPeD = (LEFT(m.lcScd,3)='512')
|
||||
lcExplicatie = ALLTRIM(explicatia)
|
||||
|
||||
Select (m.lcSelect)
|
||||
Return m.llExista
|
||||
SELECT cActVerif
|
||||
LOCATE FOR !folosit AND dataact = m.ldDataAct AND suma = m.lnSuma AND IIF(m.llBancaPeD, ALLTRIM(scd) == m.lcScd, ALLTRIM(scc) == m.lcScc) AND ALLTRIM(explicatia) == m.lcExplicatie
|
||||
IF !FOUND()
|
||||
LOCATE FOR !folosit AND dataact = m.ldDataAct AND suma = m.lnSuma AND IIF(m.llBancaPeD, ALLTRIM(scd) == m.lcScd, ALLTRIM(scc) == m.lcScc)
|
||||
ENDIF
|
||||
llGasit = FOUND()
|
||||
IF m.llGasit
|
||||
REPLACE folosit WITH .T.
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF m.llGasit
|
||||
SELECT actactan
|
||||
COUNT FOR ngrupa = m.lnGrupa AND !dublura TO lnNouDublura
|
||||
lnDuplicate = m.lnDuplicate + m.lnNouDublura
|
||||
REPLACE ALL dublura WITH .T. FOR ngrupa = m.lnGrupa
|
||||
ENDIF
|
||||
SELECT cGrupeVerif
|
||||
ENDSCAN && cGrupeVerif
|
||||
USE IN (SELECT('cGrupeVerif'))
|
||||
ENDIF
|
||||
|
||||
USE IN (SELECT('cActVerif'))
|
||||
SELECT (m.lcSelect)
|
||||
Return m.lnDuplicate
|
||||
|
||||
|
||||
ENDPROC
|
||||
@@ -2289,10 +2525,11 @@ DEFINE CLASS form1 AS form
|
||||
|
||||
PROCEDURE cmdGenereazaNote.Click
|
||||
Local llSucces, lnSucces, lnButon, llContafin, lnIdSet
|
||||
Local lcCodAMEF, llExistaNote
|
||||
Local lcCodAMEF, lnDuplicate, lnTotalImport
|
||||
Local lcAcont, lcCont, lcIBAN, lnIdPart
|
||||
Local llPartNou
|
||||
Local lcExplicatie, lcPart, ldData, llComanda, llFactura
|
||||
Local lcExplicatie, lcPart, ldData, llComanda, llFactura, lcGardaSursa
|
||||
Local lcAvertizari, llValutaCont
|
||||
|
||||
|
||||
Local loImport As "ImportNote"
|
||||
@@ -2302,6 +2539,7 @@ DEFINE CLASS form1 AS form
|
||||
lcSelect = SELECT()
|
||||
llSucces = .T.
|
||||
lnIdSet = 90023
|
||||
lcAvertizari = ''
|
||||
ldData1 = Thisform.txtData1.Value
|
||||
ldData2 = Thisform.txtData2.Value
|
||||
ldData = thisform.txtData.Value
|
||||
@@ -2321,7 +2559,7 @@ DEFINE CLASS form1 AS form
|
||||
LOCATE FOR ales = 1 AND Import = 1 AND note = 0
|
||||
llSucces = FOUND()
|
||||
IF !m.llSucces
|
||||
AMESSAGEBOX('Alegeti un cont/decont incarcat pentru care nu s-au generat note!',0+48,_scren.caption)
|
||||
AMESSAGEBOX('Alegeti un cont/decont incarcat pentru care nu s-au generat note!',0+48,_Screen.Caption)
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
@@ -2359,6 +2597,12 @@ DEFINE CLASS form1 AS form
|
||||
If !m.llSucces
|
||||
Exit
|
||||
Endif
|
||||
If !Empty(loImport.oImport.cAvertizareCurs)
|
||||
lcAvertizari = lcAvertizari + Iif(!Empty(m.lcAvertizari), Chr(13), '') + loImport.oImport.cAvertizareCurs
|
||||
Endif
|
||||
|
||||
* contul facturii (impartit pe cAlocTemp) nu e suprascris de configurarea pe explicatie/partener
|
||||
lcGardaSursa = IIF(Type('cActTemp.csursa_f') = 'C', ' AND Empty(csursa_f)', '')
|
||||
|
||||
* Completez cont, acont, parteneri pe explicatiile din din cConfigExplicatii
|
||||
Select explicatie, id_part, denumire, Cont, acont From cConfigExplicatii Where iban = m.lcIBAN And !Empty(Nvl(explicatie, '')) Into Cursor cContTemp
|
||||
@@ -2375,9 +2619,9 @@ DEFINE CLASS form1 AS form
|
||||
Update cActTemp Set id_partc = m.lnIdPart, partc = m.lcPart Where m.lcExplicatie$UPPER(ALLTRIM(explicatia)) AND scd = m.lcContBanca AND EMPTY(NVL(id_partc, 0))
|
||||
ENDIF
|
||||
IF !EMPTY(m.lcCont)
|
||||
Update cActTemp Set scd = m.lcCont, ascd = m.lcAcont Where m.lcExplicatie$UPPER(ALLTRIM(explicatia)) AND scc = m.lcContBanca
|
||||
Update cActTemp Set scc = m.lcCont, ascc = m.lcAcont Where m.lcExplicatie$UPPER(ALLTRIM(explicatia)) AND scd = m.lcContBanca
|
||||
ENDIF
|
||||
Update cActTemp Set scd = m.lcCont, ascd = m.lcAcont Where m.lcExplicatie$UPPER(ALLTRIM(explicatia)) AND scc = m.lcContBanca &lcGardaSursa
|
||||
Update cActTemp Set scc = m.lcCont, ascc = m.lcAcont Where m.lcExplicatie$UPPER(ALLTRIM(explicatia)) AND scd = m.lcContBanca &lcGardaSursa
|
||||
ENDIF
|
||||
Endscan
|
||||
Use In (Select('cContTemp'))
|
||||
|
||||
@@ -2388,37 +2632,63 @@ DEFINE CLASS form1 AS form
|
||||
lcCont = Cont
|
||||
lcAcont = acont
|
||||
lnIdPart = id_part
|
||||
Update cActTemp Set scd = m.lcCont, ascd = m.lcAcont Where id_partd = m.lnIdPart
|
||||
Update cActTemp Set scc = m.lcCont, ascc = m.lcAcont Where id_partc = m.lnIdPart
|
||||
Update cActTemp Set scd = m.lcCont, ascd = m.lcAcont Where id_partd = m.lnIdPart &lcGardaSursa
|
||||
Update cActTemp Set scc = m.lcCont, ascc = m.lcAcont Where id_partc = m.lnIdPart &lcGardaSursa
|
||||
Endscan
|
||||
Use In (Select('cContTemp'))
|
||||
|
||||
If !Used('actactan')
|
||||
Select * From cActTemp Into Cursor actactan Readwrite
|
||||
Else
|
||||
IF Type('cActTemp.ngrupa') = 'N'
|
||||
* ngrupa unic intre conturi/fisiere acumulate in acelasi actactan
|
||||
Update cActTemp Set ngrupa = ngrupa + Reccount('actactan') Where ngrupa > 0
|
||||
ENDIF
|
||||
Select actactan
|
||||
Append From Dbf('cActTemp')
|
||||
Endif
|
||||
Use In (Select('cActTemp'))
|
||||
Release loImport
|
||||
Endscan
|
||||
If !Empty(m.lcAvertizari)
|
||||
AMESSAGEBOX(m.lcAvertizari, 0+48, _Screen.Caption)
|
||||
Endif
|
||||
Endif && llSucces
|
||||
|
||||
llSucces = llSucces and USED('actactan')
|
||||
|
||||
* verific daca mai exista import 90023
|
||||
IF m.llSucces
|
||||
llExistaNote = Thisform.VerificaImport()
|
||||
If m.llExistaNote
|
||||
If AMESSAGEBOX('Atentie! Exista deja note contabile generate dintr-un import anterior [tip operatie 90023]!' + Chr(13) + ;
|
||||
'Doriti sa continuati?', 4 + 32, _Screen.Caption) <> 6
|
||||
llSucces = .F.
|
||||
UPDATE cConturi SET sold_dubl = 0 WHERE ales = 1 AND import = 1 AND note = 0
|
||||
lnTotalImport = RECCOUNT('actactan')
|
||||
lnDuplicate = Thisform.VerificaImport()
|
||||
If m.lnDuplicate > 0
|
||||
If AMESSAGEBOX('Din ' + TRANSFORM(m.lnTotalImport) + ' randuri, ' + TRANSFORM(m.lnDuplicate) + ' sunt deja contate dintr-un import anterior (tip operatie 90023). Le scoateti din import?', 4 + 32, _Screen.Caption) = 6
|
||||
SELECT actactan
|
||||
* PACK esueaza pe cursor (nu suporta 'Invalid operation') - DELETE ramane suficient cat timp SET DELETED ON
|
||||
SET DELETED ON
|
||||
SELECT cConturi
|
||||
SCAN FOR ales = 1 AND import = 1 AND note = 0
|
||||
lcIBAN = Alltrim(Nvl(iban,''))
|
||||
llValutaCont = (Alltrim(Nvl(valuta,'RON')) <> 'RON')
|
||||
SELECT Sum(Iif(Left(Nvl(scd,''),3)='512', Iif(m.llValutaCont, suma_val, suma), 0.00)) - Sum(Iif(Left(Nvl(scc,''),3)='512', Iif(m.llValutaCont, suma_val, suma), 0.00)) As dif From actactan Where dublura And Alltrim(Nvl(explicatia4,'')) == m.lcIBAN Into Cursor cDublTemp
|
||||
REPLACE sold_dubl WITH Nvl(cDublTemp.dif,0) IN cConturi
|
||||
USE IN cDublTemp
|
||||
ENDSCAN
|
||||
SELECT actactan
|
||||
DELETE FOR dublura
|
||||
IF m.lnTotalImport - m.lnDuplicate = 0
|
||||
AMESSAGEBOX('Nu a ramas nicio inregistrare de importat!', 0 + 48, _Screen.Caption)
|
||||
llSucces = .F.
|
||||
ENDIF
|
||||
Endif
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
If m.llSucces
|
||||
SELECT iban, valuta, sold_i, sold_f, sold_dubl From cConturi Where ales = 1 And import = 1 And note = 0 Into Cursor cSolduriExtrase
|
||||
llSucces = Thisform.ModificaNote()
|
||||
USE IN cSolduriExtrase
|
||||
Endif
|
||||
|
||||
If m.llSucces
|
||||
@@ -2443,7 +2713,7 @@ DEFINE CLASS form1 AS form
|
||||
Local llSucces, lnOptiune, ldData1, ldData2, ldData
|
||||
Local lcAcontBanca, lcIBAN, lcValuta
|
||||
lcIBAN = ''
|
||||
lnOptiune = xmenu('\<Import general (se determina automat tipul de fisier);\-;Extras bancar - MT940;Extras bancar CreditEurope - XML;Extras bancar Unicredit - CSV;\-;Note contabile salvate anterior')
|
||||
lnOptiune = xmenu('\<Import fisier;Reluare import anterior')
|
||||
|
||||
If Empty(m.lnOptiune)
|
||||
Return
|
||||
@@ -2462,21 +2732,7 @@ DEFINE CLASS form1 AS form
|
||||
lcClassType = ''
|
||||
lcFileType = ''
|
||||
|
||||
Case m.lnOptiune = 3
|
||||
lcFileExt = 'TXT'
|
||||
lcClassType = 'RAIFFEISEN'
|
||||
lcFileType = 'MT940'
|
||||
|
||||
Case m.lnOptiune = 4
|
||||
lcFileExt = 'XML'
|
||||
lcClassType = 'CREDITEUROPE'
|
||||
|
||||
Case m.lnOptiune = 5
|
||||
lcFileExt = 'CSV'
|
||||
lcClassType = 'UNICREDIT'
|
||||
|
||||
Case m.lnOptiune = 7
|
||||
SET STEP ON
|
||||
Case m.lnOptiune = 2
|
||||
llSucces = Thisform.ModificaNote(.T.)
|
||||
RETURN
|
||||
Endcase
|
||||
@@ -2510,13 +2766,14 @@ DEFINE CLASS form1 AS form
|
||||
If !Found()
|
||||
Append Blank
|
||||
Replace iban With m.lcIBAN, banca With m.lcClassType, clasa With 'ExtrasBanca', fisier With m.lcFile, extensie With m.lcFileExt, tip With m.lcFileType, tipclasa With m.lcClassType, ;
|
||||
Cont With m.lcContBanca, Import With 1, ales WITH 1, note WITH 0, factura WITH .T.
|
||||
Cont With loImport.oImport.cContBanca, Import With 1, ales WITH 1, note WITH 0, factura WITH .T.
|
||||
Else
|
||||
Replace banca With m.lcClassType, clasa With 'ExtrasBanca', fisier With m.lcFile, extensie With m.lcFileExt, tipclasa With m.lcClassType, Import With 1, ales WITH 1, note WITH 0
|
||||
If Empty(Cont)
|
||||
Replace Cont With m.lcContBanca
|
||||
Endif
|
||||
Endif
|
||||
Thisform.CompleteazaSolduri(loImport.oImport)
|
||||
|
||||
DELETE FROM cExtrase WHERE eiban = m.lcIBAN
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
14
TODOS.md
14
TODOS.md
@@ -225,3 +225,17 @@ Sursa: `docs/diff-TRANSA-cache-anaf.md`, `docs/handoff_cache_anaf.md`.
|
||||
- **De ce nu acum:** fara efect (motorul `PACK_UPDATE` dispecerizeaza dupa numele fisierului de pe
|
||||
disc, nu dupa stringul din `versiune`) — curatenie de mediu de test, nu de productie.
|
||||
- **Efort:** S. **Depinde de:** nimic, se poate face oricand.
|
||||
|
||||
## Amanari review /autoplan — import extrase (13.09.2026)
|
||||
|
||||
## P2 — Acceptare in bloc a randurilor sigure la importul de extrase
|
||||
- **Ce:** in `frm_modific2024`, "accepta toate verzile": randurile cu partener din CUI/IBAN exact si factura cu nr. in text + sold exact se confirma dintr-un clic, cu urma de audit; operatorul lucreaza doar exceptiile.
|
||||
- **De ce:** 300 de randuri/luna verificate unul cate unul; minutele pe extras sunt metrica reala, nu procentul de potrivire.
|
||||
- **Contra:** contrazice premisa confirmata "verificare rand cu rand"; cere intai precizie masurata out-of-sample.
|
||||
- **Context:** `docs/plan_import_extrase_review.md` C6. **Efort:** M → S. **Depinde de:** Nivel 1 + Nivel 2 livrate, backtest.
|
||||
|
||||
## P3 — Flux bancar PSD2 in locul fisierului lunar
|
||||
- **Ce:** test cu un agregator licentiat (AISP) pentru BT/BCR care alimenteaza acelasi motor de identificare.
|
||||
- **De ce:** SmartBill/Oblio aduc deja tranzactiile automat; "import fisier lunar" imbatraneste in 12-24 luni.
|
||||
- **Contra:** contract cu agregator, consimtamant per client, cost recurent.
|
||||
- **Context:** review C7; motorul din Nivel 1 se scrie independent de sursa. **Efort:** L → M. **Depinde de:** decizie comerciala.
|
||||
|
||||
@@ -1,3 +1,19 @@
|
||||
<!--
|
||||
14/09/2026
|
||||
ROACONT - 2.11.77
|
||||
|
||||
:nou:
|
||||
Import extrase bancare. Partenerul se identifica si se propune si dupa platile lui din ultimele 12 luni, nu doar dupa CUI, denumire sau IBAN.
|
||||
|
||||
Plata se defalca automat pe facturile neachitate ale partenerului, iar ce depaseste soldul trece ca avans; pana acum se lega doar o singura factura.
|
||||
|
||||
Meniul de import s-a simplificat: Import din fisier si Reluare import anterior.
|
||||
|
||||
Import extrase bancare. Sunt semnalate liniile din extrase importate anterior.
|
||||
|
||||
Se afiseaza totalul incasarilor si platilor, cu soldul initial si final.
|
||||
-->
|
||||
|
||||
<!--
|
||||
11/09/2026
|
||||
ROACONT - 2.11.76
|
||||
|
||||
Reference in New Issue
Block a user