*!* 16.11.2021 *!* am tratat cazurile suma = "0.00", in loc de "0" *!* 13.12.2021 *!* ExtrasBanca_UNICREDIT_CSV. Am corectat importul sumelor peste 1 milion *!* CreeazaNote. Am corectat importul sumelor in valuta *!* 11.07.2023 *!* CreeazaNote. Am adaugat note depunere/retragere numerar corespondent 5311 = 581 *!* 08.01.2024 *!* csvBT - tratare CSV exportat din BT24. Are sume negative pe Debit si posibil "~~" pe linia cu tranzactia *!* 12.06.2024 *!* csvBT - corectie preluare nume si iban tert *!* 26.08.2024 *!* csvRaiffeisen - corectie conversie suma cu zecimale *!* loImport = CREATEOBJECT("ImportNote", "ExtrasBanca", "RZBR", "MT940", "TXT", "cContBanca=>5121??cContIban=>RO33RONCRT123143213243232") *!* loImport.Import() *!* CreeazaNote - caut partenerul dupa toate variantele de denumire (nume prenume) *!* CreeazaNote - caut un document pereche chiar daca nu am numar de document *!* 06.01.2025 *!* actualizat csvIngbusiness *!* 20.01.2025 *!* actualizat csvStripe *!* 21.01.2025 *!* corectie data tranzactii *!* 06.05.2025 *!* IMPORT xlsx RAIFFEISEN *!* 12.05.2025 *!* IMPORT csv FANCOURIER *!* 22.09.2025 *!* IMPORT GARANTI - corectie eroare cod fiscal, tratare constituire/lichidare/dobanda depozit, *!* 05.01.2026 *!* IMPORT csvbt din extrase de cont csv, nu numai din lista tranzactii csv *!* 09.06.2026 *!* Import csvBT - elimin CRLF din interiorul descrierii care rupe linia de tranzactie pe 2 linii *!* 25.07.2026 *!* marius.mutu *!* 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) *!* 18.09.2026 *!* marius.mutu *!* csvGaranti - Ordonator/IBAN ordonator si cod fiscal structurat pe incasari, explicatie C(254), prefixe /ROC//URI/ din Detalii; numere de factura de la 2 cifre in alocare ************************************* * Clasa ImportNote este fabrica de clase tip Export ************************************* Define Class ImportNote As Custom oImport = Null cFile = '' && fisierul de import * Perioada de import dData1 = {} dData2 = {} dData = {} && data de import, indiferent de datele din fisier cFileExt = "TXT" cClass = '' && clasa de import: ex: "ExtrasBanca" cClassType = '' && tipul de clasa de import: ex: "RZBR" cFileType = '' && tipul de fisier (optional) ex: MT940 cFileExt = '' && extensia fisierului ex: TXT/XML/CSV/XLS cHashParam = '' cErrorMessage = '' lError = .F. Procedure Init Lparameters tcFile, tdData1, tdData2, tcClass, tcClassType, tcFileType, tcFileExt, tcHashParam, tdData * tcFile = fisierul de importat (optional) * tdData1, tdData2 = perioada de import * tcClass = Clasa de import (ExtrasBanca) * tcClassType = tipul de clasa de import (ex: Identificatorul bancii = RZBR) * tcFileType (optional) = tipul de fisier (MT940, in cazul in care pentru aceeasi extensie ex: "txt" sunt mai multe tipuri de fisier) * tcFileExt = extensia fisierului extras (txt, xml, csv, xls) * tlCreeazaParteneri = se creeaza parteneri in baza de date daca nu exista * tlFactura = se cauta facturi pereche in baza de date * tlComanda = se cauta comenzi in baza de date * tcHashParam = parametri optionali care se transmit la clasa de import sub forma [cselect=>select id, name from test??cwhere=>id=pnId??corder=>name] * Se parseaza cu loHash = GetHash(tcHashParam) oproceduri_comune.prg * tdData = nu mai tin cont de perioada de import, import tot fisierul si pun tdDataExtras. * Se foloseste pentru fisierele de la curieri (un fisier cu transferurile dintr-o zi, chiar daca datele persoanelor individuale sunt diferite) * Tin cont de tdData doar pentru importurile de la curieri This.cFile = Iif(!Empty(m.tcFile), Alltrim(m.tcFile), "") This.dData1 = Iif(!Empty(m.tdData1), m.tdData1, Date(m.gnAn, m.gnLuna, 1)) This.dData2 = Iif(!Empty(m.tdData2), m.tdData2, Gomonth(Date(m.gnAn, m.gnLuna, 1), 1) - 1) This.cClass = Iif(!Empty(m.tcClass), Upper(Alltrim(m.tcClass)), "ExtrasBanca") This.cClassType = Iif(!Empty(m.tcClassType), Upper(Alltrim(m.tcClassType)), "") This.cFileExt = Iif(!Empty(m.tcFileExt), Upper(Alltrim(m.tcFileExt)), "TXT") This.cFileType = Iif(!Empty(m.tcFileType), Upper(Alltrim(m.tcFileType)), "") This.cHashParam = Iif(!Empty(m.tcHashParam), m.tcHashParam, "") This.dData = tdData Endproc && Init Procedure Destroy Use In (Select('C_IMPORT_TEMP')) Use In (Select('cActTemp')) Endproc && Destroy Procedure Import Lparameters tlCreeazaNote Local lcFile, lcFileExt, llSucces, llCreeazaNote Local lcClasa, lcClass, lcClassType, lcFileType, lcHashParam, lnLinii Local ldData1, ldData2, ldData Local llCreeazaParteneri lcClass = This.cClass && ExtrasBanca lcClassType = This.cClassType && RZBR (RAIFFEISEN) lcFileExt = This.cFileExt && TXT/XML/CSV/XLS lcFileType = This.cFileType && MT940 (optional) lcFile = This.cFile && fisierul de import (optional) lcHashParam = This.cHashParam llCreeazaNote = Iif(Pcount() > 0, m.tlCreeazaNote, .T.) ldData1 = This.dData1 ldData2 = This.dData2 ldData = this.dData llSucces = .T. lnLinii = 0 * Aleg fisierul de import If Empty(m.lcFile) lcFileExt = Iif(!Empty(This.cFileExt), Upper(Alltrim(This.cFileExt)), 'TXT') lcFile = Getfile(m.lcFileExt, "Fisier", "Selecteaza", 0, "Alege fisierul din care se realizeaza importul") If !Empty(m.lcFile) This.cFile = m.lcFile Else This.cErrorMessage = This.cErrorMessage + Iif(!Empty(This.cErrorMessage), Chr(13), '') + 'Fisierul este gol!' This.lError = .T. llSucces = .F. Endif Endif * Creez cursoarele pentru import Create Cursor C_IMPORT_TEMP (nr N(14), Data D, suma N(15, 2), suma_val N(15, 2), Curs N (15, 4), nume_val C(20), id_valuta I, explicatie C (100), iban C (24), denumire C (60), cod_fiscal C (13), tip C (2), tip_2 C (3), documente C(250), comenzi C(250)) Select nr, Data, suma, suma_val, Curs, nume_val, id_valuta, explicatie, iban, denumire, cod_fiscal, tip, tip_2, documente, comenzi, ; Space(4) As scd, Space(4) As scc, Space(4) As ascd, Space(4) As ascc, ; Cast(Null As N(10)) As id_partd, Cast(Null As N(10)) As id_partc, Space(100) As partd, Space(100) As partc, ; Cast(Null As N(10)) As id_part, SPACE(100) as partener, ; Cast(0 As I) As id_factd, Cast(0 As I) As id_factc, Cast(0 As N(20)) As pereched, Cast(0 As N(20)) As perechec, ; Cast(Null As I) As id_fdoc, Space(50) As fdoc, .F. As listoric, ; Cast(0 As I) As ngrupa, Cast(0 As I) As npoz, Space(1) As csursa_f, Cast(0 As I) As nordine ; From C_IMPORT_TEMP ; Into Cursor cActTemp Readwrite * Instantiaza clasa de import corespunzatoare bazat pe Class, classType, FileExt, FileType If m.llSucces lcClasa = '' Try lcClasa = m.lcClass + ; Iif(!Empty(m.lcClassType), '_' + m.lcClassType, '') + ; Iif(!Empty(m.lcFileExt), '_' + m.lcFileExt, '') + ; Iif(!Empty(m.lcFileType), '_' + m.lcFileType, '') && ExtrasBanca_RZBR_TXT_MT940, ExtrasBanca_RZBR_TXT, ExtrasBanca_RZBR_XML This.oImport = Createobject(m.lcClasa, m.lcHashParam) Catch Try * Import general: clasa directa recunoscuta din continut, altfel parserul general lcClasa = Iif(m.lcClassType == "GENERAL" And File(m.lcFile), DetecteazaClasaExtrasGeneral(m.lcFile, m.lcFileExt), "") If Empty(m.lcClasa) lcClasa = "ExtrasBanca_General" Endif This.oImport = Createobject(m.lcClasa, m.lcHashParam) Catch To loEx This.lError = .T. llSucces = .F. This.cErrorMessage = This.cErrorMessage + Iif(!Empty(This.cErrorMessage), Chr(13), '') + loEx.Message Endtry Endtry If Type('This.oImport') <> 'O' This.lError = .T. llSucces = .F. This.cErrorMessage = This.cErrorMessage + Iif(!Empty(This.cErrorMessage), Chr(13), '') + 'Nu este definit importul pentru ' + m.lcClasa Else This.oImport.cFile = m.lcFile This.oImport.dData1 = m.ldData1 This.oImport.dData2 = m.ldData2 This.oImport.dData = m.ldData *!* This.oImport.lCreeazaParteneri = m.llCreeazaParteneri Endif Endif && llSucces If m.llSucces And Type('This.oImport') = 'O' * Parsez fisierul de import si completez C_IMPORT_TEMP llSucces = This.oImport.Parse() If !m.llSucces This.lError = .T. llSucces = .F. This.cErrorMessage = This.cErrorMessage + Iif(!Empty(This.cErrorMessage), Chr(13), '') + This.oImport.cErrorMessage Else IF EMPTY(NVL(m.ldData, {})) Delete From C_IMPORT_TEMP Where !Between(Data, m.ldData1, m.ldData2) If _Tally > 0 && filtrul a taiat randuri, soldul din fisier nu mai e de incredere This.oImport.nSoldInitial = .Null. This.oImport.nSoldFinal = .Null. Endif ELSE * import tot fisierul daca este completata ldData pentru deconturile de la curieri UPDATE C_IMPORT_TEMP SET data = m.ldData ENDIF Endif If !Inlist(This.oImport.cValuta, 'RON', 'LEI', 'ROL') This.oImport.cContBanca = '5124' && banca valuta Endif If m.llSucces And m.llCreeazaNote * Creez note contabile in act_temp, completez parteneri, conturi llSucces = This.oImport.CreeazaNote() Endif Endif && llSucces Return m.llSucces Endproc Enddefine && ImportNote * Clasa directa pentru importul general (aceeasi ca optiunea din meniu); '' = ramane pe ExtrasBanca_General Function DetecteazaClasaExtrasGeneral Lparameters tcFile, tcFileExt Local lcClasa, lcExt, lnFisier, lcRand lcClasa = '' lcExt = Upper(Alltrim(m.tcFileExt)) Do Case Case m.lcExt == 'TXT' && MT940 Raiffeisen: taguri ^NN in :86:, spre deosebire de BCR/Unicredit If '^20' $ Filetostr(m.tcFile) lcClasa = 'ExtrasBanca_RAIFFEISEN_TXT_MT940' Endif Case m.lcExt == 'XML' && CreditEurope: radacina If '' $ Lower(Filetostr(m.tcFile)) lcClasa = 'ExtrasBanca_CREDITEUROPE_XML' Endif Case m.lcExt == 'CSV' && Unicredit: antetul verificat in ExtrasBanca_UNICREDIT_CSV.Parse lnFisier = Fopen(m.tcFile) If m.lnFisier <> -1 lcRand = Fgets(m.lnFisier) Fclose(m.lnFisier) If [Titlu cont;Cont;Valuta;Sold deschidere;Sold inchidere] $ m.lcRand lcClasa = 'ExtrasBanca_UNICREDIT_CSV' Endif Endif Endcase Return m.lcClasa Endfunc && DetecteazaClasaExtrasGeneral ************************************* * Clasa factory pentru import extras banca * Instantiaza clasa import banca specifica bancii si tipului de fisier ales * Apeleaza ParseStatement din clasa import specifica ************************************* Define Class ExtrasBanca As Custom oExtrasBanca = Null cErrorMessage = '' lError = .F. lCreeazaParteneri = .F. && creeaza parteneri daca nu exista (dupa cod fiscal) lFactura = .F. lComanda = .F. lCurier = .F. && borderou de curier: rambursul se potriveste doar pe suma exacta, fara FIFO si avans cFile = '' && fisierul de import dData1 = {} && perioada de import dData2 = {} dData = {} && data de import, se importa toate inregistrarile, si se pune dData. Pentru deconturile de la curieri cIBAN = '' && cont bancar IBAN la care se refere extrasul cValuta = 'RON' nSoldInitial = .Null. && sold din fisier, .NULL. daca formatul nu il are sau filtrul pe perioada l-a invalidat nSoldFinal = .Null. cAvertizareCurs = '' && avertizari CursLaData, o linie per data cBIC = '' && cod BIC banca / nu se mai foloseste ??? nNr = 0 && statement number/ numar extras cContBanca = '5121' && 5121/5124/5125 cAcontBanca = '' && analitic 5121 nIdPartenerBanca = 0 && id_part ROA banca cBanca = '' && denumire banca cTipComisioane = 'COM' && 627 cTipTaxe = 'CHG' && 627 cTipCec = 'CHK' && 403/413 cTipDobanzi = 'INT' && 666/766 cTipTerti = 'TRF' && 401/4111 cTipBuget = 'BUG' && 448 cTipTransfer = 'TRS' && 5121 cTipAlte = 'ALT' && 6588/7588 cTipDepunere = 'DEP' && 5311 cTipEfecteComerciale = 'EFT' && 403/413 cTipComisionDecont = 'CDT' && 473 comisioane retinute de procesatori plati, curieri Dimension aLinii[1] nLinii = 0 Procedure Init Lparameters tcHashParam Local lcContBanca, lcContIBAN, lcHashParam, loHash Local lcAcontBanca, llComanda, llCreeazaParteneri, llFactura Local lcBanca, lnIdPartenerBanca lcHashParam = Iif(!Empty(m.tcHashParam), m.tcHashParam, '') loHash = GetHash(m.lcHashParam) lcContBanca = m.loHash.GetValue('cContBanca') lcAcontBanca = m.loHash.GetValue('cAContBanca') lcContIBAN = loHash.GetValue('cContIban') lnIdPartenerBanca = loHash.GetValue('nIdPartenerBanca') lcBanca = m.loHash.GetValue('cBanca') llCreeazaParteneri = loHash.GetValue('lCreeazaParteneri') && creeaza parteneri daca nu exista codul fiscal in baza de date llFactura = loHash.GetValue('lFactura') && se cauta facturi pereche in baza de date llComanda = loHash.GetValue('lComanda') && se cauta comenzi in baza de date This.cContBanca = Iif(!Empty(m.lcContBanca), m.lcContBanca, '5121') This.cIBAN = Iif(!Empty(m.lcContIBAN), m.lcContIBAN, '') This.lCreeazaParteneri = m.llCreeazaParteneri This.lFactura = m.llFactura This.lComanda = m.llComanda This.nIdPartenerBanca = m.lnIdPartenerBanca This.cBanca = m.lcBanca Return .T. Endproc && Init ********************** * Se implementeaza in clasa copil ********************** Procedure Parse Endproc && Parse ********************** *** Retrateaza inregistrarile din C_IMPORT_TEMP, le importa in cActTemp si completeaza conturile, partenerii ********************** Procedure CreeazaNote Local lcCodFiscal, lcContBanca, lcContC, lcContD, lcContPartener, lcDenumire, lcDocumente Local lcFdocExtrasCont, lcFdocOp, lcIBAN, lcPartC, lcPartD, lcPartener, lcPartenerBanca, lcTip Local lnDocumente, lnI, lnIdFdocExtrasCont, lnIdFdocOp, lnIdPartC, lnIdPartD, lnIdPartener Local lnIdPartenerBanca, lnNr, lnNrAct, lnSuma, loAct, loCauta, llSucces, lcSelect Local loDate As "Empty" Local lcCont, lcNumeValuta, lcValuta, ldDataIreg, llMonedaNationala, lnCurs, lnIdPartCoresp Local lnIdTipPart, lnIdValuta, lnSpecial, lnTipPersoana, loDate2, loValuta, llDocumentPereche Local lcRecc, lcRecno, lnRecno Local lcAscdBuget, lcComanda, lcDenumire2, lcGrupaBuget, lcPartenerCasa, lcTip2, lnVariante, llExcludeOriginal Local lnDenumire, lnDocument, lnIdPartenerCasa, lnVariante, loPartener Local lcGrupIdLista, lcSqlGrup, lnIdPartAlternativ, lcPartAlternativ Local lcSqlIstoric, llIstoricOk, lcCheieTxt Local lcSqlSolduri, llSolduriOk, llAlocatFacturi, lcListaIban PRIVATE pcContBanca, pnIdPartBanca, pcContBancaTert, pnIdPartenerTert lcSelect = Select() llSucces = .T. lcFdocOp = '' lcFdocExtrasCont = '' lnIdFdocOp = 0 lnIdFdocExtrasCont = 0 lcNumeValuta = '' lnIdValuta = 0 lnCurs = 0 llMonedaNationala = .T. If Type('gnID_FDOC_OP') = 'N' And !Empty(m.gnID_FDOC_OP) lnIdFdocOp = m.gnID_FDOC_OP lcFdocOp = GetFdocById(m.gnID_FDOC_OP) Endif If Type('gnID_FDOC_EXTRASCONT') = 'N' And !Empty(m.gnID_FDOC_EXTRASCONT) lnIdFdocExtrasCont = m.gnID_FDOC_EXTRASCONT lcFdocExtrasCont = GetFdocById(m.gnID_FDOC_EXTRASCONT) Endif * llFactura = (GetOptiuneFirma("RC_MT940_DOCUMENTE_PERECHE") = "1") lnNr = This.nNr lcValuta = This.cValuta && RON/EUR/USD/GBP lcContBanca = This.cContBanca && 5121/5124 lcIBAN = This.cIBAN && contul bancar din extras lnIdPartenerBanca = This.nIdPartenerBanca lcPartenerBanca = This.cBanca lnIdPartenerCasa = 0 * Partener Banca lei/valuta Wait Window 'Cautare partener banca...' Nowait If EMPTY(m.lnIdPartenerBanca) AND !Empty(m.lcIBAN) lnIdPartenerBanca = GetIdPartenerByContBanca(m.lcIBAN) Endif If Empty(m.lnIdPartenerBanca) If !Empty(m.lcIBAN) AMESSAGEBOX('Nu exista nici un partener tip Banca ' + m.lcContBanca + ' cu contul bancar ' + m.lcIBAN + Chr(13) + Chr(10) + ; 'Alegeti Banca ' + m.lcContBanca + ' pentru inregistrarea extrasului!', 0 + 64, _Screen.Caption) Endif loCauta = CautPartenerContabilitate(GetHash([cTitlu=>Banca??cCont=>] + m.lcContBanca)) lnIdPartenerBanca = NVL(loCauta.id_part, 0) lcPartenerBanca = Alltrim(m.loCauta.denumire) IF !EMPTY(m.lnIdPartenerBanca) AND AMESSAGEBOX('Doriti sa salvati contul bancar: ' + m.lcIBAN + ' pe acest partener?',4+32,_screen.Caption) = 6 pcContBanca = m.lcIBAN pnIdPartBanca = m.lnIdPartenerBanca llSucces = goExecutor.oExecuta('UPDATE NOM_PARTENERI SET CONT_BANCA = ?pcContBanca WHERE ID_PART = ?pnIdPartBanca') ENDIF Endif If Empty(m.lcPartenerBanca) And !Empty(m.lnIdPartenerBanca) lcPartenerBanca = GetDenumirePartenerById(m.lnIdPartenerBanca) Endif * Valuta If !Empty(m.lcValuta) loValuta = GetValutaByISO(m.lcValuta) lcNumeValuta = Alltrim(loValuta.nume_val) lnIdValuta = loValuta.id_valuta llMonedaNationala = (loValuta.moneda_nationala = 1) Endif * Comasez comisioanele TIP_2 = COM Select Data, Sum(suma) As comision, Count(suma) As nr_comision From C_IMPORT_TEMP Where tip_2 = this.cTipComisioane Group By Data Into Cursor C_COMISION Scan For lnI = 1 To C_COMISION.nr_comision - 1 Select C_IMPORT_TEMP Locate For tip_2 = this.cTipComisioane .And. Data = C_COMISION.Data If Found() Delete Endif Endfor Select C_IMPORT_TEMP Locate For tip_2 = this.cTipComisioane .And. Data = C_COMISION.Data If Found() Replace suma With C_COMISION.comision Endif Endscan USE IN (SELECT('C_COMISION')) * Comasez comisioanele procesatori plati TIP_2 = CDT Select Data, Sum(suma) As comision, Count(suma) As nr_comision From C_IMPORT_TEMP Where tip_2 = this.cTipComisionDecont Group By Data Into Cursor C_COMISION Scan For lnI = 1 To C_COMISION.nr_comision - 1 Select C_IMPORT_TEMP Locate For tip_2 = this.cTipComisionDecont .And. Data = C_COMISION.Data If Found() Delete Endif Endfor Select C_IMPORT_TEMP Locate For tip_2 = this.cTipComisionDecont .And. Data = C_COMISION.Data If Found() Replace suma With C_COMISION.comision Endif Endscan USE IN (SELECT('C_COMISION')) Select cActTemp Append From Dbf('C_IMPORT_TEMP') * Cheie invatata din istoric (ACT ID_SET=90023, ultimele 12 luni, linii cu partener pe 401/4111): * text normalizat din explicatia salvata -> id_part, doar cand cheia a dus mereu la acelasi partener lcSqlIstoric = [select (case when a.scd in ('401','4111') then a.id_partd else a.id_partc end) as id_part, a.explicatia ] + ; [from act a join nom_parteneri p on p.id_part = (case when a.scd in ('401','4111') then a.id_partd else a.id_partc end) ] + ; [where a.id_set = 90023 and a.sters = 0 and (a.scd in ('401','4111') or a.scc in ('401','4111')) ] + ; [and (a.an*12+a.luna) >= (?gnAn*12+?gnLuna-12) and p.sters = 0 and p.inactiv = 0] llIstoricOk = goExecutor.oExecuta(m.lcSqlIstoric, "cIstoricBrut") If m.llIstoricOk Create Cursor cCheiIstoric (cheie C(63), id_part N(10)) Select cIstoricBrut Scan lcCheieTxt = TextIstoricNormalizat(explicatia) If !Empty(m.lcCheieTxt) Insert Into cCheiIstoric (cheie, id_part) Values (m.lcCheieTxt, cIstoricBrut.id_part) Endif Endscan Use In (Select("cIstoricBrut")) Select cheie, Min(id_part) As id_part From cCheiIstoric Group By cheie ; Having Count(Distinct id_part) = 1 And Count(*) >= 2 Into Cursor cCheieInvatata Readwrite Use In (Select("cCheiIstoric")) Index On cheie Tag cheie Endif * Solduri facturi deschise (401/4111 + extinderile 404/461/462; 419/4091-4094 doar pentru avans existent) If This.lFactura lcSqlSolduri = [select i.id_part, i.cont, Nvl(i.acont, ' ') acont, i.id_fact, max(i.nract) nract, min(i.dataact) dataact, ] + ; [max(i.id_valuta) id_valuta, sum(i.precdeb+i.debit-i.preccred-i.credit) sold ] + ; [from ireg_parteneri i where i.an = ?gnAn and i.luna = ?gnLuna ] + m.gcCondSucursala + ; [and i.cont in ('401','4111','419','4091','4092','4093','4094','404','461','462') ] + ; [group by i.id_part, i.cont, i.acont, i.id_fact ] + ; [having sum(i.precdeb+i.debit-i.preccred-i.credit) <> 0] llSolduriOk = goExecutor.oExecuta(m.lcSqlSolduri, "cSolduriBrut") If m.llSolduriOk * candidati de alocat: 4111/461 sold debitor (incasari), 401/404/462 sold creditor (plati), doar valuta nationala Select id_part, Cont, acont, id_fact, nract, dataact, id_valuta, ; Cast(Abs(sold) As N(15, 2)) As ramas ; From cSolduriBrut ; Where ((Inlist(Alltrim(Cont), '4111', '461') And sold > 0) Or (Inlist(Alltrim(Cont), '401', '404', '462') And sold < 0)) ; And Inlist(Nvl(id_valuta, 0), 0, 3) ; Into Cursor cSolduriFact Readwrite Index On id_part Tag id_part * parteneri cu avans (419 sau 4091-4094) deja deschis: mai jos doar N/S, fara FIFO/avans pe rest Select Distinct id_part From cSolduriBrut Where Inlist(Alltrim(Cont), '419', '4091', '4092', '4093', '4094') Into Cursor cAvansExistent Readwrite Index On id_part Tag id_part Use In (Select("cSolduriBrut")) Endif Create Cursor cAlocTemp (nrec I, npoz I, id_fact I, nract N(20), cont C(4) Null, acont C(20) Null, suma N(15, 2), csursa C(1)) Endif * Caut/creez parteneri Create Cursor cGrupParteneriCui (id_part_ales N(10), id_part N(10), denumire C(100)) Create Cursor cIbanDeSalvat (id_part N(10), iban C(24), denumire C(100)) Index On id_part Tag id_part SELECT distinct cod_fiscal, denumire, iban FROM cActTemp INTO CURSOR cParteneriTemp READWRITE SELECT cParteneriTemp lcRecc = Transform(Reccount()) SCAN lcCodFiscal = Upper(Alltrim(cod_fiscal)) lcDenumire = Upper(Alltrim(denumire)) lcIBanPart = UPPER(ALLTRIM(NVL(iban,''))) lcRecno = Transform(Recno()) lnIdPartener = 0 Wait Window 'Cautare parteneri ' + Transform(Recno()) + '/' + m.lcRecc Nowait IF MOD(Recno(), 100) = 0 AND INKEY() = 27 IF AMESSAGEBOX('Doriti sa renuntati?',4+32,_screen.Caption) = 6 llSucces = .F. EXIT ENDIF ENDIF * Caut partener dupa cod fiscal If !Empty(m.lcCodFiscal) Wait Window 'Import inregistrare ' + m.lcRecno + '/' + m.lcRecc + ' - cautare partener cod fiscal' Nowait loPartener = GetPartenerByCodFiscal(m.lcCodFiscal) If !Isnull(loPartener) lnIdPartener = Nvl(loPartener.id_part, 0) lcPartener = Alltrim(Nvl(loPartener.denumire, "")) If PoateSalvaIbanPePartener(m.lnIdPartener, m.lcIBanPart) And !Seek(m.lnIdPartener, "cIbanDeSalvat", "id_part") Insert Into cIbanDeSalvat (id_part, iban, denumire) Values (m.lnIdPartener, m.lcIBanPart, m.lcPartener) ENDIF If GetParteneriByCuiNormalizat(m.lcCodFiscal, "cGrupCuiTemp") And Reccount("cGrupCuiTemp") > 1 lcGrupIdLista = "" Select cGrupCuiTemp Scan lcGrupIdLista = m.lcGrupIdLista + Iif(Empty(m.lcGrupIdLista), "", ",") + Transform(id_part) Endscan lcSqlGrup = [select id_part, count(*) as nr, sum(precdeb + debit - preccred - credit) as sold from ireg_parteneri ] + ; [where an = ?gnAn and luna = ?gnLuna ] + m.gcCondSucursala + [ and id_part in (] + m.lcGrupIdLista + [) group by id_part ] + ; [order by count(*) desc, abs(sum(precdeb + debit - preccred - credit)) desc] If goExecutor.oExecuta(m.lcSqlGrup, "cGrupCuiDoc") And Reccount("cGrupCuiDoc") > 0 Select cGrupCuiTemp Locate For id_part = cGrupCuiDoc.id_part If Found() lnIdPartener = cGrupCuiTemp.id_part lcPartener = Alltrim(Nvl(cGrupCuiTemp.denumire, "")) Endif Endif If Used("cGrupCuiDoc") Use In (Select("cGrupCuiDoc")) Endif Select cGrupCuiTemp Scan Insert Into cGrupParteneriCui (id_part_ales, id_part, denumire) Values (m.lnIdPartener, cGrupCuiTemp.id_part, Alltrim(Nvl(cGrupCuiTemp.denumire, ""))) Endscan Endif If Used("cGrupCuiTemp") Use In (Select("cGrupCuiTemp")) Endif Endif Endif * Caut partener dupa denumire If Empty(m.lnIdPartener) And !Empty(m.lcDenumire) Wait Window 'Import inregistrare ' + m.lcRecno + '/' + m.lcRecc + ' - cautare partener denumire' Nowait loPartener = GetPartenerByDenumire(m.lcDenumire) If !Isnull(loPartener) lnIdPartener = Nvl(loPartener.id_part, 0) lcPartener = Alltrim(Nvl(loPartener.denumire, "")) ENDIF IF EMPTY(m.lnIdPartener) * Caut si alte variante de denumiri (nume prenume1 prenume2, prenume1 prenume2 nume) llExcludeOriginal = .T. lcVariante = GetNamePermutations(m.lcDenumire, m.llExcludeOriginal) lnVariante = GETWORDCOUNT(m.lcVariante, ';') FOR lnDenumire = 1 TO m.lnVariante lcDenumire2 = GETWORDNUM(m.lcVariante, m.lnDenumire, ';') loPartener = GetPartenerByDenumire(m.lcDenumire2) If !Isnull(loPartener) AND !EMPTY(Nvl(loPartener.id_part, 0)) lnIdPartener = Nvl(loPartener.id_part, 0) lcPartener = Alltrim(Nvl(loPartener.denumire, "")) EXIT ENDIF ENDFOR ENDIF && EMPTY(m.lnIdPartener) IF EMPTY(m.lnIdPartener) * denumire fara diacritice/punctuatie/forma juridica, cand exacta si permutarile nu gasesc nimic loPartener = GetPartenerByDenumireNormalizata(m.lcDenumire) If !Isnull(loPartener) AND !EMPTY(Nvl(loPartener.id_part, 0)) lnIdPartener = Nvl(loPartener.id_part, 0) lcPartener = Alltrim(Nvl(loPartener.denumire, "")) ENDIF ENDIF * Partener ambiguu (denumirea gasita se potriveste la mai multi parteneri activi): * aleg cel cu facturi neachitate pe cont in luna curenta, altfel raman fara partener IF !EMPTY(m.lnIdPartener) Select cActTemp Locate For Upper(Alltrim(cod_fiscal)) = m.lcCodFiscal And Upper(Alltrim(denumire)) = m.lcDenumire lcTip = Iif(Found(), Alltrim(tip), '') Select cParteneriTemp lnIdPartener = AlegePartenerDenumireAmbigua(m.lnIdPartener, m.lcPartener, m.lcTip) IF EMPTY(m.lnIdPartener) lcPartener = '' ENDIF ENDIF * la curier: toate fisele cu aceeasi denumire, in orice ordine a cuvintelor, intra in grupul partenerului IF This.lCurier And !EMPTY(m.lnIdPartener) And Empty(m.lcCodFiscal) AdaugaGrupNume(m.lnIdPartener, m.lcDenumire) * si denumirea din baza, cand partenerul a fost gasit prin normalizare IF !(Upper(m.lcPartener) == m.lcDenumire) AdaugaGrupNume(m.lnIdPartener, Upper(m.lcPartener)) ENDIF ENDIF ENDIF * Caut partener dupa IBAN If Empty(m.lnIdPartener) And !Empty(m.lcIBanPart) Wait Window 'Import inregistrare ' + m.lcRecno + '/' + m.lcRecc + ' - cautare partener IBAN' Nowait loPartener = GetPartenerByContBanca(m.lcIBanPart) If !Isnull(loPartener) lnIdPartener = Nvl(loPartener.id_part, 0) lcPartener = Alltrim(Nvl(loPartener.denumire, "")) Endif ENDIF * Creez partenerul daca nu l-am gasit dupa cod fiscal sau dupa denumire si doar daca are cod fiscal * Altfel poate sa existe, dar cu denumire diferita If This.lCreeazaParteneri And Empty(m.lnIdPartener) And !Empty(m.lcCodFiscal) Wait Window 'Import inregistrare ' + m.lcRecno + '/' + m.lcRecc + ' - adaugare partener' Nowait loDate = Createobject("Empty") AddProperty(loDate, "cod_fiscal", m.lcCodFiscal) AddProperty(loDate, "denumire", m.lcDenumire) AddProperty(loDate, "id_part", m.lnIdPartener) Select cActTemp Locate For Upper(Alltrim(cod_fiscal)) = m.lcCodFiscal And Upper(Alltrim(denumire)) = m.lcDenumire lcTip = Iif(Found(), Alltrim(tip), '') Select cParteneriTemp lnIdTipPart = Iif(m.lcTip = "D", 17, 16) && furnizor/client AddProperty(loDate, "tip_partener", m.lnIdTipPart) lnTipPersoana = Iif(Len(m.lcCodFiscal) < 13, 1, 2) && persoana juridica/fizica AddProperty(loDate, "tip_persoana", m.lnTipPersoana) loDate2 = nom_parteneri_nou(, , , , , m.loDate) lnIdPartener = Nvl(loDate2.id_part, 0) lcPartener = Alltrim(Nvl(loDate2.denumire, '')) ENDIF IF !EMPTY(m.lnIdPartener) UPDATE cActTemp SET id_part = m.lnIdPartener, partener = m.lcPartener WHERE UPPER(ALLTRIM(cod_fiscal)) = m.lcCodFiscal AND Upper(Alltrim(denumire)) = m.lcDenumire ENDIF ENDSCAN && cParteneriTemp USE IN (SELECT('cParteneriTemp')) * IBAN tertului (1.3): o singura intrebare pentru toti candidatii adunati in bucla, nu una per rand If Reccount("cIbanDeSalvat") > 0 lcListaIban = "" Select cIbanDeSalvat Go Top Scan Next 15 lcListaIban = m.lcListaIban + Chr(13) + Alltrim(denumire) + ": " + Alltrim(iban) Endscan If AMESSAGEBOX('Partenerii de mai jos nu au cont bancar in nomenclator. In extras apar cu contul:' + Chr(13) + m.lcListaIban + ; Iif(Reccount("cIbanDeSalvat") > 15, Chr(13) + "... si inca " + Transform(Reccount("cIbanDeSalvat") - 15), "") + Chr(13) + Chr(13) + ; 'Salvati acest cont in fisa partenerului (' + Transform(Reccount("cIbanDeSalvat")) + ' parteneri)?', 4+32, _screen.Caption) = 6 Select cIbanDeSalvat Scan pcContBancaTert = cIbanDeSalvat.iban pnIdPartenerTert = cIbanDeSalvat.id_part goExecutor.oExecuta('UPDATE NOM_PARTENERI SET CONT_BANCA = ?pcContBancaTert WHERE ID_PART = ?pnIdPartenerTert') Endscan Endif Endif Use In (Select("cIbanDeSalvat")) * Curs BNR pe valuta fisierului, pentru randurile fara curs (curs = 0 mai jos) If !m.llMonedaNationala PRIVATE pnIdValuta, pdDataMax pnIdValuta = m.lnIdValuta Select Max(Data) As maxdata From cActTemp Into Cursor cMaxDataAct pdDataMax = cMaxDataAct.maxdata Use In (Select('cMaxDataAct')) goExecutor.oExecuta('select data, data2, curs, nvl(multiplicator,1) multiplicator from curs' + ; ' where sters = 0 and id_valuta = ?pnIdValuta and data <= ?pdDataMax order by data desc', 'cCursValuta') Endif * Completez conturi, parteneri Select cActTemp lcRecc = Transform(Reccount()) Scan lcContD = "" lcContC = "" lcAscdBuget = "" lnIdPartener = NVL(id_part,0) * Cheie invatata din istoric, doar cand CUI/denumire/IBAN nu au gasit partenerul (loop-ul anterior) If Empty(m.lnIdPartener) lcCheieTxt = Upper(Alltrim(Nvl(explicatie,'')) + ' ' + Alltrim(Nvl(denumire,'')) + ' ' + Alltrim(Nvl(cod_fiscal,''))) lnIdPartener = CautaPartenerDinIstoric(m.lcCheieTxt) If !Empty(m.lnIdPartener) Replace id_part With m.lnIdPartener, partener With GetDenumirePartenerById(m.lnIdPartener), listoric With .T. Endif Endif lnIdPartD = 0 lnIdPartC = 0 lcPartD = "" lcPartC = "" lcPartener = ALLTRIM(partener) lcContPartener = "" lcTip = Alltrim(tip) 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)) lcDenumire = Upper(Alltrim(denumire)) lnRecno = RECNO() lcRecno = Transform(m.lnRecno) Wait Window 'Import inregistrare ' + Transform(Recno()) + '/' + m.lcRecc Nowait IF MOD(m.lnRecno, 100) = 0 IF INKEY() = 27 IF AMESSAGEBOX('Doriti sa renuntati?',4+32,_screen.Caption) = 6 llSucces = .F. EXIT ENDIF ENDIF ENDIF IF .F. && am facut cautarea partenerilor separat * Caut partener dupa cod fiscal If !Empty(m.lcCodFiscal) Wait Window 'Import inregistrare ' + m.lcRecno + '/' + m.lcRecc + ' - cautare partener cod fiscal' Nowait loPartener = GetPartenerByCodFiscal(m.lcCodFiscal) If !Isnull(loPartener) lnIdPartener = Nvl(loPartener.id_part, 0) lcPartener = Alltrim(Nvl(loPartener.denumire, "")) Endif Endif * Caut partener dupa denumire If Empty(m.lnIdPartener) And !Empty(m.lcDenumire) Wait Window 'Import inregistrare ' + m.lcRecno + '/' + m.lcRecc + ' - cautare partener denumire' Nowait loPartener = GetPartenerByDenumire(m.lcDenumire) If !Isnull(loPartener) lnIdPartener = Nvl(loPartener.id_part, 0) lcPartener = Alltrim(Nvl(loPartener.denumire, "")) Endif Endif * Creez partenerul daca nu l-am gasit dupa cod fiscal sau dupa denumire If This.lCreeazaParteneri And Empty(m.lnIdPartener) And !(Empty(m.lcCodFiscal) And Empty(m.lcDenumire)) Wait Window 'Import inregistrare ' + m.lcRecno + '/' + m.lcRecc + ' - adaugare partener' Nowait loDate = Createobject("Empty") AddProperty(loDate, "cod_fiscal", m.lcCodFiscal) AddProperty(loDate, "denumire", m.lcDenumire) AddProperty(loDate, "id_part", m.lnIdPartener) lnIdTipPart = Iif(m.lcTip = "D", 17, 16) && furnizor/client AddProperty(loDate, "tip_partener", m.lnIdTipPart) lnTipPersoana = Iif(Len(m.lcCodFiscal) < 13, 1, 2) && persoana juridica/fizica AddProperty(loDate, "tip_persoana", m.lnTipPersoana) loDate2 = nom_parteneri_nou(, , , , , m.loDate) lnIdPartener = Nvl(loDate2.id_part, 0) lcPartener = Alltrim(Nvl(loDate2.denumire, '')) ENDIF ENDIF && .F. *!* If !Empty(m.lnIdPartener) *!* WAIT WINDOW 'Import inregistrare ' + TRANSFORM(RECNO()) + '/' + m.lcRecc + ' - cautare denumire partener' NOWAIT *!* lcPartener = GetDenumirePartenerById(m.lnIdPartener) *!* Endif Wait Window 'Import inregistrare ' + m.lcRecno + '/' + m.lcRecc + ' - completare conturi' Nowait If m.lcTip = "D" lcContC = m.lcContBanca lnIdPartC = m.lnIdPartenerBanca lcPartC = m.lcPartenerBanca lnIdPartD = m.lnIdPartener lcPartD = m.lcPartener Do Case Case m.lcTip2 = This.cTipComisioane && "COM" && comision lcContD = "627" Case m.lcTip2 = This.cTipTaxe && "CHG" && comisioane, taxe lcContD = "627" Case m.lcTip2 = This.cTipCec && "CHK" && cec-uri, efecte de primit/platit lcContD = "403" Case m.lcTip2 = This.cTipDobanzi && "INT" && venituri/cheltuieli cu dobanzi lcContD = "666" Case m.lcTip2 = This.cTipAlte && "ALT" && alte cheltuieli/venituri exploatare lcContD = "6588" Case m.lcTip2 = This.cTipTerti && "TRF" && terti (clienti/furnizori) lcContD = ContSalariiDinText(cActTemp.explicatie, Evl(Alltrim(Nvl(cActTemp.denumire, '')), m.lcPartener)) If Empty(m.lcContD) lcContD = "401" Endif Case m.lcTip2 = This.cTipBuget && "BUG" && datorii la buget 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 lcContD = "581" Case m.lcTip2 = This.cTipDepunere && "DEP" depunere/retragere numerar lcContD = "581" Case m.lcTip2 = This.cTipEfecteComerciale && "EFT" efecte comerciale lcContD = "403" Case m.lcTip2 = This.cTipComisionDecont && "CDT" comision procesatori plati lcContD = "473" Otherwise lcContD = "581" Endcase lcContPartener = m.lcContD Else lcContD = m.lcContBanca lnIdPartD = m.lnIdPartenerBanca lcPartD = m.lcPartenerBanca lnIdPartC = m.lnIdPartener lcPartC = m.lcPartener Do Case Case m.lcTip2 = This.cTipDobanzi && "INT" && venituri/cheltuieli cu dobanzi lcContC = "766" Case m.lcTip2 = This.cTipAlte && "ALT" && alte cheltuieli/venituri exploatare lcContC = "7588" Case m.lcTip2 = This.cTipCec && "CHK" && cec-uri, efecte de primit/platit lcContC = "413" Case m.lcTip2 = This.cTipTerti && "TRF" && terti (clienti/furnizori) lcContC = "4111" Case m.lcTip2 = This.cTipBuget && "BUG" && creante de la buget lcContC = "4482" Case m.lcTip2 = This.cTipTransfer && transfer intre conturi lcContC = "581" Case m.lcTip2 = This.cTipDepunere && depunere/retragere numerar lcContC = "581" Case m.lcTip2 = This.cTipEfecteComerciale && "EFE" efecte comerciale lcContC = "413" Otherwise lcContC = "581" Endcase lcContPartener = m.lcContC Endif Select cActTemp 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 If !m.llMonedaNationala IF curs = 0 REPLACE curs WITH CursLaData(Data) ENDIF Replace suma_val With suma Replace suma With ROUND(suma_val * curs, m.gnPC) Endif * Aloc facturile deschise ale partenerului pe suma randului: numar din text, suma exacta, FIFO, rest pe avans llAlocatFacturi = .F. If This.lFactura And !Empty(m.lnIdPartener) And Inlist(m.lcContPartener, '401', '4111') And m.llMonedaNationala llAlocatFacturi = AlocaFacturiRand(m.lcTip, m.lcContPartener, m.lnIdPartener, m.lcPartener, This.lCurier) Endif * Acum asociez doar UN SINGUR DOCUMENT, daca este completat in detaliile operatiei * Incerc sa aflu documentul pereche dupa cont, partener, suma, numar document doar daca am un singur document!!! daca sunt mai multe se complica cazurile If This.lComanda And !m.llAlocatFacturi And !This.lCurier && daca este configurata optiunea sa se caute documentele pereche dupa comanda lcDocumente = Alltrim(cActTemp.comenzi) lnSuma = cActTemp.suma lnDocumente = Getwordcount(m.lcDocumente, ",") If !Empty(m.lnIdPartener) And m.lnDocumente > 0 FOR lnDocument = 1 TO m.lnDocumente lcComanda = Getwordnum(m.lcDocumente, m.lnDocument, ",") Wait Window 'Import inregistrare ' + m.lcRecno + '/' + m.lcRecc + ' - cautare factura pentru comanda: ' + Transform(m.lcComanda) Nowait loAct = GetDocumentByContPartenerAct(m.lcContPartener, m.lnIdPartener, m.lcComanda, .T.) * daca am gasit un document si suma este mai mica decat soldul facturii (daca erau mai multe documente puteau fi si sume diferite) If !Empty(m.loAct.id_fact) Select cActTemp If m.lcTip = "D" And m.lnSuma <= - m.loAct.solddeb Replace id_factd With m.loAct.id_fact, pereched With m.loAct.nract, scd With m.loAct.Cont, ascd With m.loAct.acont Else If m.lcTip = "C" And m.lnSuma <= m.loAct.solddeb Replace id_factc With m.loAct.id_fact, perechec With m.loAct.nract, scc With m.loAct.Cont, ascc With m.loAct.acont Endif ENDIF * Daca am gasit un document, ies din bucla EXIT Else lnIdPartAlternativ = 0 If Used("cGrupParteneriCui") Select cGrupParteneriCui Scan For id_part_ales = m.lnIdPartener And id_part <> m.lnIdPartener lcPartAlternativ = Alltrim(denumire) loAct = GetDocumentByContPartenerAct(m.lcContPartener, id_part, m.lcComanda, .T.) If !Empty(m.loAct.id_fact) And ((m.lcTip = "D" And m.lnSuma <= - m.loAct.solddeb) Or (m.lcTip = "C" And m.lnSuma <= m.loAct.solddeb)) lnIdPartAlternativ = id_part Exit Endif Select cGrupParteneriCui Endscan Endif Select cActTemp If !Empty(m.lnIdPartAlternativ) Select cActTemp If m.lcTip = "D" Replace id_factd With m.loAct.id_fact, pereched With m.loAct.nract, scd With m.loAct.Cont, ascd With m.loAct.acont, id_partd With m.lnIdPartAlternativ, partd With m.lcPartAlternativ Else Replace id_factc With m.loAct.id_fact, perechec With m.loAct.nract, scc With m.loAct.Cont, ascc With m.loAct.acont, id_partc With m.lnIdPartAlternativ, partc With m.lcPartAlternativ Endif EXIT Endif ENDIF && !Empty(m.loAct.id_fact) ENDFOR && lnDocument ENDIF && !Empty(m.lnIdPartener) And m.lnDocumente > 0 ENDIF && This.lComanda ENDSCAN && cActTemp * Completez acum numar document ca sa pot adauga note de retragere/depunere numerar cu acelasi numar document ca si transferul din banca UPDATE cActTemp SET nr = INT(VAL(DTOS(data) + ALLTRIM(STR(RECNO())))) WHERE EMPTY(NVL(nr,0)) If This.lFactura ImparteRanduriFacturi() Endif * Adaug linii retragere/depunere numerar 5311 = 581 / 581 = 5311 corespunzatoare 581 = 5121 / 5121 = 581 IF m.llSucces SELECT *, -1*RECNO() as nr2 FROM cActTemp WHERE Alltrim(tip_2) = This.cTipDepunere AND (ALLTRIM(scd) = '581' OR ALLTRIM(scc) = '581') INTO CURSOR cNumerarTemp READWRITE IF _tally > 0 loCauta = CautPartenerContabilitate(GetHash([cTitlu=>Alegeti Casa pentru retragere/depunere numerar??cCont=>5311])) lnIdPartenerCasa = NVL(loCauta.id_part, 0) lcPartenerCasa = Alltrim(loCauta.denumire) If Empty(m.lcPartenerCasa) And !Empty(m.lnIdPartenerCasa) lcPartenerCasa = GetDenumirePartenerById(m.lnIdPartenerCasa) ENDIF SELECT cNumerarTemp SCAN IF ALLTRIM(scd) = '581' REPLACE scd WITH '5311', scc WITH '581', id_partc WITH 0, partc WITH '', id_partd WITH m.lnIdPartenerCasa, partd WITH m.lcPartenerCasa ELSE REPLACE scd WITH '581', scc WITH '5311', id_partd WITH 0, partd WITH '', id_partc WITH m.lnIdPartenerCasa, partc WITH m.lcPartenerCasa ENDIF IF EMPTY(NVL(nr, 0)) REPLACE nr WITH nr2 && folosesc nr = recno negativ, sa completez acelasi numar document ca la linia retragere numerar ENDIF ENDSCAN SELECT cActTemp APPEND FROM DBF('cNumerarTemp') ENDIF USE IN (SELECT('cNumerarTemp')) ENDIF && llSucces IF m.llSucces * Completez fel document cu EXTRAS CONT pentru inregistrarile cu nr = nr extras si cu ORDIN PLATA pentru inregistrarile cu nr diferit de nr extras *!* Replace All id_fdoc With Iif(nr = m.lnNr, m.lnIdFdocExtrasCont, Iif(!Empty(nr), m.lnIdFdocOp, id_fdoc)) *!* Replace All fdoc With Iif(nr = m.lnNr, m.lcFdocExtrasCont, Iif(!Empty(nr), m.lcFdocOp, fdoc)) Replace All id_fdoc With m.lnIdFdocExtrasCont, fdoc With m.lcFdocExtrasCont IN cActTemp Wait Window 'Verificare conturi fara parteneri/documente' Nowait * sterg partenerii si documentele pereche de pe conturile care nu au parteneri, documente llSucces = goExecutor.oExecuta('SELECT distinct cont, cu_inregistrari FROM vconfig_cont_ireg order by cont', 'cConturiPartTemp') If m.llSucces Select a.Cont, Iif(!Isnull(b.Cont), 1, 0) As epart, Nvl(b.cu_inregistrari, 0) As cu_inregistrari ; From (Select scd As Cont From cActTemp ; Union ; Select scc As Cont From cActTemp) a Left Join cConturiPartTemp b On a.Cont = b.Cont ; Into Cursor cConturiTemp Select cConturiTemp Scan For epart = 0 lcCont = Alltrim(Cont) If epart = 0 Update cActTemp Set id_partd = 0, partd = '', id_factd = 0, pereched = 0 Where Alltrim(scd) = m.lcCont Update cActTemp Set id_partc = 0, partc = '', id_factc = 0, perechec = 0 Where Alltrim(scc) = m.lcCont Else If cu_inregistrari = 0 Update cActTemp Set id_factd = 0, pereched = 0 Where Alltrim(scd) = m.lcCont Update cActTemp Set id_factc = 0, perechec = 0 Where Alltrim(scc) = m.lcCont Endif Endif Endscan Use In (Select('cConturiTemp')) Use In (Select('cConturiPartTemp')) Endif && llSucces ldDataIreg = Gomonth(Date(m.gnAn, m.gnLuna, 1), 1) - 1 If Type('gnIdSucursala') = 'U' Local gnIdSucursala gnIdSucursala = 0 Endif If Type('gcSucursala') = 'U' Local gcSucursala gcSucursala = Iif(!Empty(Nvl(m.gnIdSucursala, 0)), m.gcFirma, '') Endif Select nr As nract, Data As dataact, Iif(Year(Data) * 12 + Month(Data) = m.gnAn * 12 + m.gnLuna, Data, m.ldDataIreg) As dataireg, suma, ; suma_val, nume_val, id_valuta, Curs, ; Cast(Upper(Alltrim(explicatie) + Iif(!Empty(Nvl(denumire, '')), ' ' + Alltrim(denumire), '') + ; Iif(!Empty(Nvl(cod_fiscal, '')), ' ' + Alltrim(cod_fiscal), '')) As C(100)) As explicatia, ; Cast(m.lcIBAN As C(100)) As explicatia4, ; scd, scc, ascd, ascc, id_partd, id_partc, partd, partc, ; id_factd, id_factc, pereched, perechec, ; 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 ; From cActTemp ; Order By Data, nordine ; Into Cursor cActTemp2 Readwrite * Dadea eroare cand puneam cast(m.gnIdSucursala as I) Update cActTemp2 Set id_sucursala = m.gnIdSucursala, sucursala = m.gcSucursala Delete From cActTemp2 Where suma = 0 Use In (Select('cActTemp')) Select * From cActTemp2 Into Cursor cActTemp Readwrite Use In (Select('cActTemp2')) Select (m.lcSelect) ENDIF && llSucces If Used("cGrupParteneriCui") Use In (Select("cGrupParteneriCui")) Endif If Used("cCheieInvatata") Use In (Select("cCheieInvatata")) Endif If Used("cSolduriFact") Use In (Select("cSolduriFact")) Endif If Used("cAvansExistent") Use In (Select("cAvansExistent")) Endif If Used("cCursValuta") Use In (Select("cCursValuta")) Endif Return m.llSucces Endproc && CreeazaNote * -------------------------------------------------------------------- * Cursul pe unitate valabil la tdData, din cCursValuta (incarcat in CreeazaNote): interval exact, * altfel ultimul curs anterior + avertizare in This.cAvertizareCurs daca e mai vechi de 3 zile; * fara niciun curs anterior, 1 + avertizare * -------------------------------------------------------------------- Procedure CursLaData Lparameters tdData Local lnCurs, ldDataCurs, lcData lcData = Dtoc(m.tdData) If !Used('cCursValuta') Return 1 Endif Select cCursValuta Locate For m.tdData >= Data And m.tdData <= Data2 If Found() Return curs / multiplicator Endif Locate For Data <= m.tdData If Found() ldDataCurs = Iif(Vartype(Data) = "T", Ttod(Data), Data) lnCurs = curs / multiplicator If m.tdData - m.ldDataCurs > 3 And !(m.lcData $ This.cAvertizareCurs) This.cAvertizareCurs = This.cAvertizareCurs + Iif(Empty(This.cAvertizareCurs), '', Chr(13)) + ; m.lcData + ': nu exista curs, s-a folosit cursul din ' + Dtoc(m.ldDataCurs) Endif Return m.lnCurs Endif If !(m.lcData $ This.cAvertizareCurs) This.cAvertizareCurs = This.cAvertizareCurs + Iif(Empty(This.cAvertizareCurs), '', Chr(13)) + ; m.lcData + ': fara curs, verificati cursul' Endif Return 1 Endproc && CursLaData Enddefine && ExtrasBanca * -------------------------------------------------------------------- * Aloca randul curent din cActTemp (SCAN activ in CreeazaNote) pe facturile deschise ale partenerului, din cSolduriFact: * N (numar din text) -> S (suma exacta unica) -> F (FIFO) -> A (rest pe avans 419/409, doar pe contul de baza 4111/401) * Scrie alocarile in cAlocTemp (nrec, npoz, id_fact, nract, cont, acont, suma, csursa); intoarce .T. daca a alocat ceva * La curier (tlCurier): S pe tot grupul de nume, fara F si A - fara potrivire unica randul ramane intreg * -------------------------------------------------------------------- Function AlocaFacturiRand Lparameters tcTip, tcContPartener, tnIdPartener, tcPartener, tlCurier Local lnRest, lnSuma, lcNumere, lnNpoz, lcContAloc, lcContAvans, llAvansDeschis Local lnIdPartCandidat, lcPartCandidat, lnRecCrt, lcSelect lcSelect = Select() lnNpoz = 0 lcContAloc = '' If Empty(m.tnIdPartener) Or !Used('cSolduriFact') Select (m.lcSelect) Return .F. Endif Select cActTemp lnRecCrt = Recno() lnSuma = suma lnRest = m.lnSuma lnIdPartCandidat = m.tnIdPartener lcPartCandidat = m.tcPartener lcNumere = ExtrageNumereFacturi(Alltrim(explicatie) + ' ' + Alltrim(Nvl(documente, '')), cod_fiscal, iban) * 1. N - numar din text, intai pe partenerul randului, apoi pe cei cu acelasi cod fiscal If !Empty(m.lcNumere) AlocaNumarDinText(m.tnIdPartener, m.tcContPartener, m.lcNumere, m.lnRecCrt, @lnRest, @lnNpoz, @lcContAloc) If m.lnNpoz = 0 And Used('cGrupParteneriCui') Select cGrupParteneriCui Scan For id_part_ales = m.tnIdPartener And id_part <> m.tnIdPartener lnIdPartCandidat = id_part lcPartCandidat = Alltrim(denumire) AlocaNumarDinText(m.lnIdPartCandidat, m.tcContPartener, m.lcNumere, m.lnRecCrt, @lnRest, @lnNpoz, @lcContAloc) If m.lnNpoz > 0 Exit Endif Endscan If m.lnNpoz = 0 lnIdPartCandidat = m.tnIdPartener lcPartCandidat = m.tcPartener Endif Endif Endif * 2. S - suma exacta unica, doar daca pasul 1 n-a alocat nimic; la curier pe tot grupul de nume If m.lnNpoz = 0 If m.tlCurier AlocaSumaExactaGrup(m.tnIdPartener, m.tcContPartener, m.lnSuma, m.lnRecCrt, @lnRest, @lnNpoz, @lcContAloc, @lnIdPartCandidat, @lcPartCandidat) Else AlocaSumaExacta(m.lnIdPartCandidat, m.tcContPartener, m.lnSuma, m.lnRecCrt, @lnRest, @lnNpoz, @lcContAloc) Endif Endif If m.lnNpoz > 0 And m.lnIdPartCandidat <> m.tnIdPartener Select cActTemp Go m.lnRecCrt If m.tcTip = "D" Replace id_partd With m.lnIdPartCandidat, partd With m.lcPartCandidat Else Replace id_partc With m.lnIdPartCandidat, partc With m.lcPartCandidat Endif Endif * curier: un ramburs = o factura; fara potrivire unica randul ramane intreg, nealocat If m.tlCurier Select (m.lcSelect) Return (m.lnNpoz > 0) Endif llAvansDeschis = Used('cAvansExistent') And Seek(m.tnIdPartener, 'cAvansExistent') * 3. F - FIFO, doar daca partenerul nu are deja avans deschis (poate fi deja acoperit din avansul necompensat) If m.lnRest > 0 And !m.llAvansDeschis AlocaFifo(m.lnIdPartCandidat, m.tcContPartener, m.lnRecCrt, @lnRest, @lnNpoz, @lcContAloc) Endif * 4. A - rest peste facturi: contul de avans se ia dupa contul pe care s-a alocat ultima oara * (ContAvans - 461/462 nu au avans, ramane fara pereche pe contul randului, ca sa nu se piarda suma din grupa) If m.lnRest > 0 And m.lnNpoz > 0 lcContAvans = ContAvans(m.lcContAloc) lnNpoz = m.lnNpoz + 1 Insert Into cAlocTemp (nrec, npoz, id_fact, nract, cont, acont, suma, csursa) ; Values (m.lnRecCrt, m.lnNpoz, 0, 0, Iif(!Empty(m.lcContAvans), m.lcContAvans, m.tcContPartener), "", m.lnRest, "A") Endif Select (m.lcSelect) Return (m.lnNpoz > 0) Endfunc * -------------------------------------------------------------------- * Contul de avans pentru contul unei facturi alocate; gol daca acel cont nu are avans (461/462) * -------------------------------------------------------------------- Function ContAvans Lparameters tcCont Do Case Case m.tcCont = "4111" Return "419" Case m.tcCont = "401" Return "4091" Case m.tcCont = "404" Return "4093" Otherwise Return "" Endcase Endfunc * -------------------------------------------------------------------- * Candidatii de facturi ai unui partener din cSolduriFact: intai doar tcCont, altfel (fara tlDoarContul) conturile de acelasi * sens - 401 -> 404/462, 4111 -> 461 - cursor cCandRand (nract, dataact, nrecsold), ordonat * -------------------------------------------------------------------- Procedure DeschideCandidatiFactura Lparameters tnIdPart, tcCont, tlDoarContul Local lcAlteConturi If Used('cCandRand') Use In (Select('cCandRand')) Endif Select nract, dataact, Recno() As nrecsold ; From cSolduriFact ; Where id_part = m.tnIdPart And Alltrim(Cont) = m.tcCont And ramas > 0 ; Order By dataact, nract ; Into Cursor cCandRand Readwrite If Reccount('cCandRand') = 0 And !m.tlDoarContul lcAlteConturi = Icase(m.tcCont = '401', ',404,462,', m.tcCont = '4111', ',461,', '') Use In (Select('cCandRand')) Select nract, dataact, Recno() As nrecsold ; From cSolduriFact ; Where id_part = m.tnIdPart And (',' + Alltrim(Cont) + ',') $ m.lcAlteConturi And ramas > 0 ; Order By dataact, nract ; Into Cursor cCandRand Readwrite Endif Endproc * -------------------------------------------------------------------- * Ramasul curent (live) al unei facturi din cSolduriFact, dupa recno-ul ei * -------------------------------------------------------------------- Function RamasFactura Lparameters tnRecSold Local lnRamas, lcSelect lcSelect = Select() lnRamas = 0 Select cSolduriFact Try Go m.tnRecSold lnRamas = ramas Catch Endtry Select (m.lcSelect) Return m.lnRamas Endfunc * -------------------------------------------------------------------- * Scrie o alocare in cAlocTemp, scade ramas-ul facturii si actualizeaza rest/npoz/contul alocat ale randului * -------------------------------------------------------------------- Procedure AplicaAlocareFactura Lparameters tnRecCrt, tnRecSold, tcSursa, tnRest, tnNpoz, tcContAloc Local lnAlocat, lcSelect, lnIdFact, lnNract, lcCont, lcAcont lcSelect = Select() Select cSolduriFact Try Go m.tnRecSold Catch Select (m.lcSelect) Return Endtry lnAlocat = Min(m.tnRest, ramas) lnIdFact = id_fact lnNract = nract lcCont = Alltrim(Nvl(Cont, '')) lcAcont = Alltrim(Nvl(acont, '')) tnNpoz = m.tnNpoz + 1 * campurile sursa (cSolduriFact) copiate in variabile - Insert Into rezolva numele necalificate pe cursorul tinta, nu pe cel curent Insert Into cAlocTemp (nrec, npoz, id_fact, nract, cont, acont, suma, csursa) ; Values (m.tnRecCrt, m.tnNpoz, m.lnIdFact, m.lnNract, m.lcCont, m.lcAcont, m.lnAlocat, m.tcSursa) Replace ramas With ramas - m.lnAlocat tnRest = m.tnRest - m.lnAlocat tcContAloc = m.lcCont Select (m.lcSelect) Endproc * -------------------------------------------------------------------- * N - aloca facturile al caror numar apare in text (lista tcNumere, separata prin virgula) * -------------------------------------------------------------------- Procedure AlocaNumarDinText Lparameters tnIdPart, tcCont, tcNumere, tnRecCrt, tnRest, tnNpoz, tcContAloc DeschideCandidatiFactura(m.tnIdPart, m.tcCont) Select cCandRand Scan For (',' + Transform(nract) + ',') $ (',' + m.tcNumere + ',') If m.tnRest <= 0 Exit Endif If RamasFactura(nrecsold) > 0 AplicaAlocareFactura(m.tnRecCrt, nrecsold, "N", @tnRest, @tnNpoz, @tcContAloc) Endif Endscan Use In (Select('cCandRand')) Endproc * -------------------------------------------------------------------- * S - aloca integral daca exista exact un candidat al carui ramas este egal cu suma randului * -------------------------------------------------------------------- Procedure AlocaSumaExacta Lparameters tnIdPart, tcCont, tnSuma, tnRecCrt, tnRest, tnNpoz, tcContAloc Local lnCandidati, lnRecPotrivit DeschideCandidatiFactura(m.tnIdPart, m.tcCont) lnCandidati = 0 lnRecPotrivit = 0 Select cCandRand Scan If RamasFactura(nrecsold) = m.tnSuma lnCandidati = m.lnCandidati + 1 lnRecPotrivit = nrecsold Endif Endscan If m.lnCandidati = 1 AplicaAlocareFactura(m.tnRecCrt, m.lnRecPotrivit, "S", @tnRest, @tnNpoz, @tcContAloc) Endif Use In (Select('cCandRand')) Endproc * -------------------------------------------------------------------- * S la curier: exact un candidat cu ramasul egal cu suma, pe partenerul randului sau pe grupul lui (cGrupParteneriCui); * il aloca integral si intoarce partenerul lui in tnIdPartCandidat / tcPartCandidat * -------------------------------------------------------------------- Procedure AlocaSumaExactaGrup Lparameters tnIdPart, tcCont, tnSuma, tnRecCrt, tnRest, tnNpoz, tcContAloc, tnIdPartCandidat, tcPartCandidat Local lnCandidati, lnRecPotrivit, lnIdPotrivit, lcPartPotrivit If Used('cGrupSuma') Use In (Select('cGrupSuma')) Endif Create Cursor cGrupSuma (id_part N(10), denumire C(100)) Insert Into cGrupSuma (id_part, denumire) Values (m.tnIdPart, m.tcPartCandidat) If Used('cGrupParteneriCui') Select cGrupParteneriCui Scan For id_part_ales = m.tnIdPart And id_part <> m.tnIdPart Insert Into cGrupSuma (id_part, denumire) Values (cGrupParteneriCui.id_part, cGrupParteneriCui.denumire) Select cGrupParteneriCui Endscan Endif lnCandidati = 0 lnRecPotrivit = 0 lnIdPotrivit = 0 lcPartPotrivit = '' Select cGrupSuma Scan DeschideCandidatiFactura(cGrupSuma.id_part, m.tcCont) Select cCandRand Scan If RamasFactura(nrecsold) = m.tnSuma lnCandidati = m.lnCandidati + 1 lnRecPotrivit = nrecsold lnIdPotrivit = cGrupSuma.id_part lcPartPotrivit = Alltrim(cGrupSuma.denumire) Endif Endscan Use In (Select('cCandRand')) Select cGrupSuma Endscan Use In (Select('cGrupSuma')) If m.lnCandidati = 1 tnIdPartCandidat = m.lnIdPotrivit tcPartCandidat = m.lcPartPotrivit AplicaAlocareFactura(m.tnRecCrt, m.lnRecPotrivit, "S", @tnRest, @tnNpoz, @tcContAloc) Endif Endproc * -------------------------------------------------------------------- * Adauga in cGrupParteneriCui, pentru partenerul ales, partenerii activi cu aceeasi denumire in orice ordine a cuvintelor * -------------------------------------------------------------------- Procedure AdaugaGrupNume Lparameters tnIdPartener, tcDenumire Local lcVariante, lcLista, lnI, lcSql lcVariante = m.tcDenumire + ';' + GetNamePermutations(m.tcDenumire, .T.) lcLista = '' For lnI = 1 To Getwordcount(m.lcVariante, ';') lcLista = m.lcLista + Iif(Empty(m.lcLista), '', ',') + "'" + Strtran(Alltrim(Getwordnum(m.lcVariante, m.lnI, ';')), "'", "''") + "'" Endfor lcSql = [select id_part, denumire from nom_parteneri where sters = 0 and inactiv = 0 and trim(upper(denumire)) in (] + m.lcLista + [)] If goExecutor.oExecuta(m.lcSql, 'cGrupNumeTemp') Select cGrupNumeTemp Scan For id_part <> m.tnIdPartener Select cGrupParteneriCui Locate For id_part_ales = m.tnIdPartener And id_part = cGrupNumeTemp.id_part If !Found() Insert Into cGrupParteneriCui (id_part_ales, id_part, denumire) Values (m.tnIdPartener, cGrupNumeTemp.id_part, Alltrim(Nvl(cGrupNumeTemp.denumire, ''))) Endif Select cGrupNumeTemp Endscan Use In (Select('cGrupNumeTemp')) Endif Endproc * -------------------------------------------------------------------- * F - aloca in ordine cronologica pana la epuizarea sumei (ultima factura poate ramane platita partial), doar pe contul randului * -------------------------------------------------------------------- Procedure AlocaFifo Lparameters tnIdPart, tcCont, tnRecCrt, tnRest, tnNpoz, tcContAloc DeschideCandidatiFactura(m.tnIdPart, m.tcCont, .T.) Select cCandRand Scan If m.tnRest <= 0 Exit Endif If RamasFactura(nrecsold) > 0 AplicaAlocareFactura(m.tnRecCrt, nrecsold, "F", @tnRest, @tnNpoz, @tcContAloc) Endif Endscan Use In (Select('cCandRand')) Endproc * -------------------------------------------------------------------- * Cont de salarii dupa cuvintele din explicatie: LICHIDARE/SALARIU/SALARII -> 421, AVANS -> 425; * gol daca nu se potriveste sau daca beneficiarul are forma de societate in denumire (SA, SRL, PFA...) * -------------------------------------------------------------------- Function ContSalariiDinText Lparameters tcText, tcBeneficiar Local lcText, lcCont, lcBeneficiar lcText = ' ' + Chrtran(Upper(Nvl(m.tcText, '')), '/.,;:-_()', Space(9)) + ' ' lcText = Strtran(m.lcText, ' LICHIDARE DEPOZIT ', ' ') Do Case Case ' LICHIDARE ' $ m.lcText Or ' SALARIU ' $ m.lcText Or ' SALARII ' $ m.lcText lcCont = '421' Case ' AVANS ' $ m.lcText lcCont = '425' Otherwise Return '' Endcase lcBeneficiar = ' ' + Chrtran(Strtran(Upper(Nvl(m.tcBeneficiar, '')), '.', ''), '/,;:-_()', Space(8)) + ' ' If ' SA ' $ m.lcBeneficiar Or ' SRL ' $ m.lcBeneficiar Or ' SNC ' $ m.lcBeneficiar Or ' SCS ' $ m.lcBeneficiar Or ; ' RA ' $ m.lcBeneficiar Or ' PFA ' $ m.lcBeneficiar Or ' II ' $ m.lcBeneficiar Or ' IF ' $ m.lcBeneficiar Return '' Endif Return m.lcCont Endfunc * -------------------------------------------------------------------- * Numere de document din text (explicatie+documente), cifre lungi de minim 3, fara cod_fiscal/iban * -------------------------------------------------------------------- Function ExtrageNumereFacturi Lparameters tcTexte, tcCodFiscal, tcIban Local lcTexte, lcNumere, lcRezultat, lnI, lcNumar lcTexte = Upper(Alltrim(Nvl(m.tcTexte, ''))) If !Empty(Nvl(m.tcCodFiscal, '')) lcTexte = Strtran(m.lcTexte, Upper(Alltrim(m.tcCodFiscal)), ' ') Endif If !Empty(Nvl(m.tcIban, '')) lcTexte = Strtran(m.lcTexte, Upper(Alltrim(m.tcIban)), ' ') Endif lcNumere = '' GetRegExpAllNumbers(m.lcTexte, @lcNumere) lcRezultat = '' For lnI = 1 To Getwordcount(m.lcNumere, ',') lcNumar = Alltrim(Getwordnum(m.lcNumere, m.lnI, ',')) If Len(m.lcNumar) >= 2 lcRezultat = m.lcRezultat + Iif(!Empty(m.lcRezultat), ',', '') + m.lcNumar Endif Endfor Return m.lcRezultat Endfunc * -------------------------------------------------------------------- * Transforma alocarile din cAlocTemp in randuri suplimentare in cActTemp (ngrupa/npoz/csursa_f/nordine) * Alocarea 1 se scrie pe randul original, urmatoarele se adauga la coada prin Append+Gather * -------------------------------------------------------------------- Procedure ImparteRanduriFacturi Local lnRecCrt, loR If !Used('cAlocTemp') Or Reccount('cAlocTemp') = 0 Return Endif Select cActTemp Replace All nordine With Recno() * 100 Select cAlocTemp Index On nrec * 1000 + npoz Tag ordine Set Order To ordine Go Top lnRecCrt = 0 Scan Select cActTemp If cAlocTemp.nrec <> m.lnRecCrt lnRecCrt = cAlocTemp.nrec Try Go m.lnRecCrt Catch Loop Endtry Scatter Memo Name loR Else Append Blank Gather Memo Name loR Endif If Alltrim(loR.tip) = "D" Replace scd With cAlocTemp.Cont, ascd With cAlocTemp.acont, id_factd With cAlocTemp.id_fact, pereched With cAlocTemp.nract Else Replace scc With cAlocTemp.Cont, ascc With cAlocTemp.acont, id_factc With cAlocTemp.id_fact, perechec With cAlocTemp.nract Endif Replace suma With cAlocTemp.suma, ngrupa With m.lnRecCrt, npoz With cAlocTemp.npoz, ; csursa_f With cAlocTemp.csursa, nordine With m.lnRecCrt * 100 + cAlocTemp.npoz Endscan Use In (Select('cAlocTemp')) 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 If Type('loR.nordine') = 'N' Replace nordine With loR.nordine + m.lnPoz - 1 Endif 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 OrdoneazaTactDupaNordine() Endproc * -------------------------------------------------------------------- * Reface ordinea de afisare a tact pe nordine, fara sa schimbe Recno() - randurile unui grup ramin alaturate * -------------------------------------------------------------------- Procedure OrdoneazaTactDupaNordine Lparameters tcAlias Local lcAlias, lcSelect lcAlias = Evl(m.tcAlias, 'tact') If !Used(m.lcAlias) Or Type(m.lcAlias + '.nordine') <> 'N' Return Endif lcSelect = Select() Select (m.lcAlias) Index On Iif(nordine = 0, 2147483647, nordine) Tag ordtact Additive && randurile noi fara nordine raman la sfarsit Set Order To Tag ordtact Select (m.lcSelect) Endproc Define Class ExtrasBanca_MT940 As ExtrasBanca cDescription = 'clasa generica import extras MT940' ***************************** *** Parseaza liniile din extras si le introduce in cursorul C_IMPORT_TEMP ***************************** Procedure Parse Local lcBanca, lcCodFiscal, lcCursor, lcDenumire, lcDescriere, lcExtraRand, lcFacturi, lcFile Local lcIBAN, lcRand, lcRand1, lcRefDoc, lcTip, lcTip2, ldData, lnLinie, lnLinii, lnNr, lnPos Local lnPozitieN, lnRand, lnResults, lnSuma, llSucces, lcIBANPrim, llIbanMultiplu lcFile = This.cFile lnLinii = 0 llIbanMultiplu = .F. lcIBANPrim = '' If File(m.lcFile) lnLinii = Alines(This.aLinii, Filetostr(m.lcFile), 1) lnLinii = Iif(Empty(m.lnLinii), 0, m.lnLinii) This.nLinii = m.lnLinii Endif llSucces = .T. If m.lnLinii = 0 This.lError = .T. llSucces = .F. This.cErrorMessage = This.cErrorMessage + Iif(!Empty(This.cErrorMessage), Chr(13), '') + 'Fisierul este gol!' Endif * Verific antetul fisierului If m.llSucces llSucces = .F. * verifica daca exista :25 in primele 20 linii For lnLinie = 1 To 20 lcRand = Alltrim(This.aLinii[m.lnLinie]) If Left(m.lcRand, 4) = ':25:' llSucces = .T. Exit Endif Endfor If !m.llSucces This.lError = .T. This.cErrorMessage = This.cErrorMessage + Iif(!Empty(This.cErrorMessage), Chr(13), '') + 'Nu corespunde structura fisierului!' Endif Endif If m.llSucces Select C_IMPORT_TEMP lnLinii = This.nLinii For lnLinie = 1 To m.lnLinii lcRand = Alltrim(This.aLinii[m.lnLinie]) ldData = '' lcTip = '' lcTip2 = '' lnSuma = 0 Do Case Case Left(m.lcRand, 4) = ':25:' && cont bancar * :25:RO57RZBR0000060011634808 This.cIBAN = Upper(Alltrim(Substr(m.lcRand, 5))) && RO57RZBR0000060011634808 This.cBIC = Substr(m.lcRand, 9, 4) && RZBR If Empty(m.lcIBANPrim) lcIBANPrim = This.cIBAN Else If This.cIBAN <> m.lcIBANPrim llIbanMultiplu = .T. Endif Endif Case Left(m.lcRand, 5) = ':28C:' && numar extras/statement number * :28C:213/1 This.nNr = Int(Val(Substr(m.lcRand, 6))) && 213 Case Inlist(Left(m.lcRand, 5), ':60F:', ':60M:') && sold initial, primul gasit If Isnull(This.nSoldInitial) This.nSoldInitial = SoldMT940(m.lcRand) Endif Case Inlist(Left(m.lcRand, 5), ':62F:', ':62M:') && sold final, ultimul gasit This.nSoldFinal = SoldMT940(m.lcRand) Case Left(m.lcRand, 4) = ':61:' && tranzactie master, pe un singur rand * :61:1712201220D82665,12NTRF32871258//3A9H3KUEDK5T72I * :61:1712201220D3141,04NTRFNONREF//3A9H3KUEDK5T73M * :61:1712201220D8,00NCOMNONREF//3A9H3KUEDK5T73W ldData = Ctod(Substr(m.lcRand, 9, 2) + "." + Substr(m.lcRand, 7, 2) + ".20" + Substr(m.lcRand, 5, 2)) lcTip = Substr(m.lcRand, 15, 1) && D/C lcRand = Substr(m.lcRand, 16) && 82665,12NTRF32871258//3A9H3KUEDK5T72I lnPozitieN = At("N", m.lcRand) lnSuma = Val(Strtran(Substr(m.lcRand, 1, m.lnPozitieN - 1), ",", ".")) && 82665.12 lcTip2 = Substr(m.lcRand, m.lnPozitieN + 1, 3) && TRF Select C_IMPORT_TEMP Append Blank Replace Data With m.ldData, suma With m.lnSuma, tip With m.lcTip, tip_2 With m.lcTip2 If !'NONREF' $ m.lcRand lnPos = At('/', m.lcRand) && && 82665,12NTRF32871258//3A9H3KUEDK5T72I lcCodFiscal = Substr(m.lcRand, m.lnPozitieN + 4, m.lnPos - m.lnPozitieN - 4) && 32871258 Replace cod_fiscal With m.lcCodFiscal Endif *** Se poate sa mai existe o linie suplimentara cu detalii pentru :61: Case Left(m.lcRand, 4) = ":86:" && tranzactie detalii, maxim 6 randuri * Completez randul :86: cu liniile urmatoare, pana la intalnirea liniei :61:,:62:, ':6x:' * :86:000^20C/V F. 54^24Ref.Doc 1501/OPIB^30GE GARAN * TI BANK S.A.^31RO68UGBI0000442012404RON^32ADINA SI * CAMI UNIVERS SRL * :61:1712201220D13,74NCOMNONREF//3A9H3KUEDK5T72S lcExtraRand = "" lcRand1 = m.lcRand For lnRand = 1 To 5 lnLinie = m.lnLinie + 1 && avansez 1 linie IF m.lnLinie > m.lnLinii EXIT ENDIF lcExtraRand = This.aLinii[m.lnLinie] If Left(m.lcExtraRand, 2) = ':6' lnLinie = m.lnLinie - 1 && revin 1 linie Exit Else lcRand1 = m.lcRand1 + m.lcExtraRand Endif Endfor lcRand = m.lcRand1 lcDescriere = Strextract(m.lcRand, '^20', '^', 1, 1 + 2) && 20: descriere: C/V F. 54 * Array sau lista cu numere de facturi separate prin "," daca exista in descriere lcFacturi = '' *!* lnResults = GetRegExpAll(m.lcDescriere, '\d+', @m.lcFacturi) lnResults = GetRegExpAllNumbers(m.lcDescriere, @m.lcFacturi) lcRefDoc = Strextract(m.lcRand, '^24', '^', 1, 1 + 2) && 24: document plata: Ref.Doc 1501/OPIB lnNr = 0 If 'ref.doc' $ Lower(m.lcRefDoc) lnNr = Int(Val(Strextract(m.lcRefDoc, 'ref.doc', '/', 1, 1 + 2))) Endif lcBanca = Strextract(m.lcRand, '^30', '^', 1, 1 + 2) && 30: banca tert: GE GARANTI BANK S.A. lcIBAN = Strextract(m.lcRand, '^31', '^', 1, 1 + 2) && 31: cont bancar tert: RO68UGBI0000442012404RON lcDenumire = Strextract(m.lcRand, '^32', '^', 1, 1 + 2) && 32: nume tert: ADINA SI CAMI UNIVERS SRL Replace iban With m.lcIBAN, denumire With m.lcDenumire, explicatie With m.lcDescriere + '; ' + m.lcRefDoc, nr With m.lnNr, documente With m.lcFacturi Endcase Endfor && lnLinie = 1 TO lnLinii Select C_IMPORT_TEMP Replace All nr With This.nNr For Empty(nr) If m.llIbanMultiplu This.nSoldInitial = .Null. This.nSoldFinal = .Null. Endif Endif && llSucces Return m.llSucces Endproc && Parse Enddefine Define Class ExtrasBanca_RAIFFEISEN_TXT_MT940 As ExtrasBanca_MT940 * Se poate suprascrie daca RAIFFEISEN are particularitati fata de clasa generica Enddefine && ExtrasBanca_RAIFFEISEN_TXT_MT940 Define Class ExtrasBanca_CREDITEUROPE_XML As ExtrasBanca ***************************** *** Parseaza liniile din extras si le introduce in cursorul C_IMPORT_TEMP ***************************** Procedure Parse Local lcBanca, lcCodFiscal, lcCursor, lcData, lcDenumire, lcDescriere, lcDescriereFacturi Local lcExplicatie, lcExtraRand, lcFacturi, lcFile, lcIBAN, lcInfo1, lcInfo1Exemplu, lcInfo2 Local lcInfo2Exemplu, lcMovements, lcMovementsExemplu, lcNr, lcRand, lcRand1, lcRef, lcRefDoc Local lcText, lcTip, lcTip2, ldData, lnCredit, lnDay, lnDebit, lnLinie, lnLinii, lnMonth, lnNr Local lnPos, lnPozitieN, lnRand, lnResults, lnSuma, lnYear, llSucces, ldData1, ldData2 Local loEx As Exception lcFile = This.cFile lnLinii = 0 llSucces = .T. If File(m.lcFile) Text To m.lcInfo1Exemplu Noshow 20210428105248 RO88FNNB000503152940RO02 RON 19245.98 20210401 Endtext Text To m.lcInfo2Exemplu Noshow 22354.81 20210428 Endtext Text To m.lcMovementsExemplu Noshow OPIOPRIC/12747148 20210401 20210401
Incasare OP/NOTPROVIDED/DOMINUS CONSULT SRL /ROC/srvicii contabilitate conf. contr.//RFB/35
OPC NOTPROVIDED 15111236 RO78BTRL01401202699905XX DOMINUS CONSULT SRL 0.00 600.00
Endtext lcText = Filetostr(m.lcFile) lcInfo1 = Strextract(m.lcText, '', '', 1, 1) lcInfo2 = Strextract(m.lcText, '', '', 1, 1) lcMovements = Strextract(m.lcText, '', '', 1, 1 + 4) Try lnLinii = Xmltocursor(m.lcMovements, "cMovementsTemp") Catch To loEx This.lError = .T. llSucces = .F. This.cErrorMessage = This.cErrorMessage + Iif(!Empty(This.cErrorMessage), Chr(13), '') + 'Nu corespunde structura fisierului!' + ; Chr(13) + loEx.Message lnLinii = 0 Endtry lnLinii = Iif(Empty(m.lnLinii), 0, m.lnLinii) This.nLinii = m.lnLinii Endif If m.lnLinii = 0 This.lError = .T. llSucces = .F. This.cErrorMessage = This.cErrorMessage + Iif(!Empty(This.cErrorMessage), Chr(13), '') + 'Fisierul este gol!' Endif * Verific antetul fisierului If m.llSucces If ![] $ m.lcInfo1 This.lError = .T. llSucces = .F. This.cErrorMessage = This.cErrorMessage + Iif(!Empty(This.cErrorMessage), Chr(13), '') + 'Nu corespunde structura fisierului!' Endif Endif If m.llSucces This.cIBAN = Upper(Alltrim(Strextract(m.lcInfo1, '', '', 1, 1))) This.cValuta = Upper(Alltrim(Strextract(m.lcInfo1, '', '', 1, 1))) This.nSoldInitial = Val(Strextract(m.lcInfo1, '', '', 1, 1)) This.nSoldFinal = Val(Strextract(m.lcInfo2, '', '', 1, 1)) If !Inlist(This.cValuta, 'RON', 'LEI', 'ROL') This.cContBanca = '5124' && banca valuta Endif ldData1 = This.dData1 ldData2 = this.dData2 This.nNr = Int(Val(Strextract(m.lcInfo2, '', '', 1, 1))) && numarul extrasului il consider data de sfarsit a extrasului Select cMovementsTemp Scan lcData = Alltrim(Transform(value_date)) lnYear = Int(Val(Substr(m.lcData, 1, 4))) lnMonth = Int(Val(Substr(m.lcData, 5, 2))) lnDay = Int(Val(Substr(m.lcData, 7, 2))) ldData = Date(m.lnYear, m.lnMonth, m.lnDay) IF !BETWEEN(m.ldData, m.ldData1, m.ldData2) LOOP ENDIF lnDebit = Val(Transform(debit)) lnCredit = Val(Transform(credit)) lnSuma = Iif(m.lnDebit <> 0, m.lnDebit, m.lnCredit) lcTip = Iif(m.lnDebit <> 0, 'D', 'C') lcRef = Getwordnum(Upper(Alltrim(ref)), 1, '/') * OPIOPRIC/12747148 Incasare OP/2021105/WERT SRL /ROC/FACT. 2372 DIN 01.03.2021 * COM/12747474 * ODSIBS.ODORANGE/9061093 Plata factura Orange, cod abonat 0554957175 * OPPIBS.OPRCT/13717432 Plata OP / 342 - BUGETUL DE STAT * FXCIBS.FCTRAN/1962148 Transfer 1000 RON cu data valutei 23-APR-21 * GENCCCPJS/862026678 Plata comision lunar de administrare cont lcTip2 = '' Do Case Case m.lcRef = 'COM' Or 'GENCCCPJS' $ m.lcRef lcTip2 = This.cTipComisioane Case 'OPPIBS.OPRCT' $ m.lcRef lcTip2 = This.cTipBuget Case 'FXCIBS' $ m.lcRef lcTip2 = This.cTipTransfer Case m.lcRef = 'OPIOPRIC' Or 'OPPIBS.OPRCC' $ m.lcRef lcTip2 = This.cTipTerti Otherwise lcTip2 = This.cTipTerti Endcase lcCodFiscal = Upper(Alltrim(TRANSFORM(cui_platitor))) lcDescriere = Alltrim(TRANSFORM(Details)) * Daca sunt mai multe informatii, nu pastrez explicatiile 2,3,4 (numar op, nume partener si alta explicatie necunoscuta) * Pastrez doar tipul de document incasare op / plata op / transfer etc. si detaliile completate de client/furnizor * in procedura import_extras completez explicatia cu nume client/furnizori si cod fiscal lcExplicatie = m.lcDescriere Do Case Case Getwordcount(m.lcDescriere, '/') = 2 lcExplicatie = Alltrim(Getwordnum(m.lcDescriere, 1, '/')) Case Getwordcount(m.lcDescriere, '/') > 4 lcExplicatie = Alltrim(Alltrim(Getwordnum(m.lcDescriere, 1, '/')) + ' ' + Alltrim(Getwordnum(m.lcDescriere, 5, '/'))) Endcase lcBanca = '' && nume banca platitor lcIBAN = Alltrim(TRANSFORM(iban_platitor)) && cont bancar tert: RO68UGBI0000442012404RON lcDenumire = Alltrim(TRANSFORM(denumire_platitor)) && nume tert: ADINA SI CAMI UNIVERS SRL lnNr = 0 && numar document de plata OP If Lower(Left(m.lcDescriere, 8)) = 'plata op' && Plata OP / 343 - BUGETUL DE STAT lcNr = Alltrim(Strextract(m.lcDescriere, 'Plata OP /', '-', 1, 1)) lnNr = Int(Val(m.lcNr)) Endif * Array sau lista cu numere de facturi separate prin "," daca exista in descriere * (?:( \d+)(?![\.\d])(?!2021).) spatiu apoi cifre, fara . si cifra si fara anul curent (sa excluda datele) lcFacturi = '' lcDescriereFacturi = m.lcDescriere If 'incasare op' $ Lower(m.lcDescriereFacturi) * Incasare OP/2021105/WERT SRL /ROC/FACT. 2372 DIN 01.03.2021 * Incasare OP/197 DIVIZIA DE PAZA SRL /ROC/FACT NR 2021102 29 04 2021 SUPORT TEHNIC APR 2021 * Incasare OP/864/CN ACN SA 2021100/29,04,2021 lcDescriereFacturi = Getwordnum(m.lcDescriereFacturi, 3, '/')+ ' ' + Getwordnum(m.lcDescriereFacturi, 4, '/')+ ' '+ Getwordnum(m.lcDescriereFacturi, 5, '/') Endif *!* lcRegExp = "(?:( \d+)(?![\.\d])(?!" + Alltrim(Str(Int(m.gnAn))) + ").)" *!* lcRegExp = "(\d)+" *!* lnResults = GetRegExpAll(m.lcDescriereFacturi, m.lcRegExp, @m.lcFacturi) lnResults = GetRegExpAllNumbers(m.lcDescriereFacturi, @m.lcFacturi) Select C_IMPORT_TEMP Append Blank Replace Data With m.ldData, suma With m.lnSuma, tip With m.lcTip, tip_2 With m.lcTip2, cod_fiscal With m.lcCodFiscal Replace iban With m.lcIBAN, denumire With m.lcDenumire, explicatie With m.lcExplicatie, documente With m.lcFacturi, nr With m.lnNr Endscan && cMovementsTemp Select C_IMPORT_TEMP Replace All nr With This.nNr For Empty(nr) Endif && llSucces Use In (Select('cMovementsTemp')) Return m.llSucces Endproc && Parse Enddefine && ExtrasBanca_CREDITEUROPE_XML Define Class ExtrasBanca_UNICREDIT_CSV As ExtrasBanca ***************************** *** Parseaza liniile din extras si le introduce in cursorul C_IMPORT_TEMP ***************************** Procedure Parse Local lcBanca, lcCodFiscal, lcCursor, lcData, lcDenumire, lcDescriere, lcDescriereFacturi Local lcExplicatie, lcExtraRand, lcFacturi, lcFile, lcIBAN, lcInfo1, lcInfo1Exemplu, lcInfo2 Local lcInfo2Exemplu, lcMovements, lcMovementsExemplu, lcNr, lcRand, lcRand1, lcRef, lcRefDoc Local lcText, lcTip, lcTip2, ldData, lnCredit, lnDay, lnDebit, lnLinie, lnLinii, lnMonth, lnNr Local lnPos, lnPozitieN, lnRand, lnResults, lnSuma, lnYear, llSucces, lcRegExp lcFile = This.cFile lnLinii = 0 llSucces = .T. If File(m.lcFile) Text To m.lcAntetExemplu Noshow Titlu cont;Cont;Valuta;Sold deschidere;Sold inchidere GENIUS IMM MOD OP;819976000;RON;-80.762,64;-158.108,98 Endtext Text To m.lcBodyExemplu Noshow Cont;Suma;Valuta;Data tranzactiei;Data valutei;Banca;Numele bancii;Adresa bancii;Cont;IBAN;Nume;Adresa 1;Adresa 2;Adresa 3;Detalii tranzactie 1;Detalii tranzactie 2;Detalii tranzactie 3;Detalii tranzactie 4;Detalii tranzactie 5;Detalii tranzactie 6;Detalii tranzactie 7;Detalii tranzactie 8;Detalii plata 1;Detalii plata 2;Detalii plata 3;Detalii plata 4;Detalii plata 5;Detalii plata 6;Cod fiscal;Numar ordin;Camp neutilizat;Camp neutilizat;Camp neutilizat;Numar de referinta;Requested Processing date;Numar inregistrare PSP;Nume PSP tert;Referinta plata PSP tert;Tara emiterii autorizatiei;Codul autoritatii nationale 819976000;-21,28;RON;10.05.2021;10.05.2021;;;;;;;;;;COMMISSION FOR CASH TRANS;CAK-LCD/1900/A/0015;;;;;;;;;;;;;;;;;;;;;;;; 819976000;2.127,84;RON;10.05.2021;10.05.2021;;;;;;;;;;CASH DEPOSIT/LEI ACCOUNT;CAK-LCD/1900/A/0015;FACT PROF SOWB21009895;MATEI ANDREI MARIUS;;;;;;;;;;;;;;;;;;;;;; 819976000;-51,33;RON;07.05.2021;07.05.2021;INGB;ING BANK ROMANIA;;;RO54INGB0000999907783025;PRO INTERACTIVE PLUS SRL;;;;;;;;;;;;F 6607/05.04.21;;;;;;32933032;304;;;;279591539;07.05.2021;;;;; Endtext lnLinii = Alines(This.aLinii, Filetostr(m.lcFile), 1) lnLinii = Iif(m.lnLinii < 2, 0, m.lnLinii) This.nLinii = m.lnLinii Endif If m.lnLinii = 0 This.lError = .T. llSucces = .F. This.cErrorMessage = This.cErrorMessage + Iif(!Empty(This.cErrorMessage), Chr(13), '') + 'Fisierul este gol!' Endif * Verific antetul fisierului If m.llSucces If ![Titlu cont;Cont;Valuta;Sold deschidere;Sold inchidere] $ This.aLinii[1] This.lError = .T. llSucces = .F. This.cErrorMessage = This.cErrorMessage + Iif(!Empty(This.cErrorMessage), Chr(13), '') + 'Nu corespunde structura fisierului!' Endif Endif If m.llSucces lcLinie = This.aLinii[2] This.cIBAN = syGETWORDNUM(m.lcLinie, 2, ';') This.cValuta = syGETWORDNUM(m.lcLinie, 3, ';') This.nSoldInitial = Val(Strtran(Strtran(syGETWORDNUM(m.lcLinie, 4, ';'), '.', '', 1, 10, 1), ',', '.', 1, 1, 1)) This.nSoldFinal = Val(Strtran(Strtran(syGETWORDNUM(m.lcLinie, 5, ';'), '.', '', 1, 10, 1), ',', '.', 1, 1, 1)) This.nNr = Int(Val(Dtos(Gomonth(Date(m.gnAn, m.gnLuna, 1), 1) - 1))) For lnLinie = 4 To m.lnLinii lcLinie = This.aLinii[m.lnLinie] lcData = syGETWORDNUM(m.lcLinie, 4, ';') lnYear = Int(Val(Substr(m.lcData, 7, 4))) lnMonth = Int(Val(Substr(m.lcData, 4, 2))) lnDay = Int(Val(Substr(m.lcData, 1, 2))) ldData = Date(m.lnYear, m.lnMonth, m.lnDay) lcSuma = syGETWORDNUM(m.lcLinie, 2, ';') lcSuma = Strtran(m.lcSuma, '.', '', 1, 10, 1) && sterg separatorul grupe . lcSuma = Strtran(m.lcSuma, ',', '.', 1, 1, 1) && modific separator zecimale in . lnSuma = Val(m.lcSuma) lcTip = Iif(m.lnSuma < 0, 'D', 'C') lnSuma = Abs(m.lnSuma) lcD1 = syGETWORDNUM(m.lcLinie, 15, ';') lcD2 = syGETWORDNUM(m.lcLinie, 16, ';') lcD3 = syGETWORDNUM(m.lcLinie, 17, ';') lcD4 = syGETWORDNUM(m.lcLinie, 18, ';') lcD5 = syGETWORDNUM(m.lcLinie, 19, ';') lcD6 = syGETWORDNUM(m.lcLinie, 20, ';') lcD7 = syGETWORDNUM(m.lcLinie, 21, ';') lcD8 = syGETWORDNUM(m.lcLinie, 22, ';') lcDP1 = syGETWORDNUM(m.lcLinie, 23, ';') lcDP2 = syGETWORDNUM(m.lcLinie, 24, ';') lcDP3 = syGETWORDNUM(m.lcLinie, 25, ';') lcDP4 = syGETWORDNUM(m.lcLinie, 26, ';') lcDP5 = syGETWORDNUM(m.lcLinie, 27, ';') lcDP6 = syGETWORDNUM(m.lcLinie, 28, ';') lcExplicatie = m.lcD1 + ; Iif(!Empty(m.lcD2), ' ' + m.lcD2, '') + ; Iif(!Empty(m.lcD3), ' ' + m.lcD3, '') + ; Iif(!Empty(m.lcD4), ' ' + m.lcD4, '') + ; Iif(!Empty(m.lcD5), ' ' + m.lcD5, '') + ; Iif(!Empty(m.lcD6), ' ' + m.lcD6, '') + ; Iif(!Empty(m.lcD7), ' ' + m.lcD7, '') + ; Iif(!Empty(m.lcD8), ' ' + m.lcD8, '') + ; Iif(!Empty(m.lcDP1), ' ' + m.lcDP1, '') + ; Iif(!Empty(m.lcDP2), ' ' + m.lcDP2, '') + ; Iif(!Empty(m.lcDP3), ' ' + m.lcDP3, '') + ; Iif(!Empty(m.lcDP4), ' ' + m.lcDP4, '') + ; Iif(!Empty(m.lcDP5), ' ' + m.lcDP5, '') + ; Iif(!Empty(m.lcDP6), ' ' + m.lcDP6, '') * COMMISSION FOR CASH TRANS;CAK-LCD/1900/A/0015 * CASH DEPOSIT/LEI ACCOUNT;CAK-LCD/1900/A/0015;FACT PROF SOWB21009895;MATEI ANDREI MARIUS lcBanca = Upper(Alltrim(syGETWORDNUM(m.lcLinie, 6, ';'))) && nume banca platitor lcIBAN = Upper(Alltrim(syGETWORDNUM(m.lcLinie, 10, ';'))) && cont bancar tert: RO68UGBI0000442012404RON lcDenumire = Upper(Alltrim(syGETWORDNUM(m.lcLinie, 11, ';'))) && denumire tert lcCodFiscal = syGETWORDNUM(m.lcLinie, 29, ';') lnNr = Int(Val(syGETWORDNUM(m.lcLinie, 30, ';'))) lcTip2 = '' Do Case Case 'COMMISSION' $ Upper(m.lcExplicatie) Or ' FEE' $ Upper(m.lcExplicatie) Or ; 'FEE/' $ Upper(m.lcExplicatie) Or Upper(m.lcExplicatie) = 'FEE' lcTip2 = This.cTipComisioane Case 'CASH DEPOSIT' $ Upper(m.lcExplicatie) lcTip2 = This.cTipDepunere Case 'BUGETUL DE STAT' $ m.lcDenumire lcTip2 = This.cTipBuget Case 'PROMISSORY NOTE' $ Upper(m.lcDP1) Or 'PROMISSORY NOTE' $ Upper(m.lcD1) lcTip2 = This.cTipEfecteComerciale Otherwise lcTip2 = This.cTipTerti Endcase * Array sau lista cu numere de facturi separate prin "," daca exista in descriere * (?:( \d+)(?![\.\d])(?!2021).) spatiu apoi cifre, fara . si cifra si fara anul curent (sa excluda datele) lcFacturi = '' lcDescriereFacturi = m.lcExplicatie lnResults = GetRegExpAllNumbers(m.lcDescriereFacturi, @m.lcFacturi) Select C_IMPORT_TEMP Append Blank Replace Data With m.ldData, suma With m.lnSuma, tip With m.lcTip, tip_2 With m.lcTip2, cod_fiscal With m.lcCodFiscal Replace iban With m.lcIBAN, denumire With m.lcDenumire, explicatie With m.lcExplicatie, documente With m.lcFacturi, nr With m.lnNr Endfor && laLinii Select C_IMPORT_TEMP Replace All nr With This.nNr For Empty(nr) Endif && llSucces Use In (Select('cMovementsTemp')) Return m.llSucces Endproc && Parse Enddefine && ExtrasBanca_UNICREDIT_CSV * Clasa preluata din SAGA * Determina automat tipul de fisier (extras, decont curier, procesator plati) din continutul fisierului Define Class ExtrasBanca_General As ExtrasBanca Function Parse Local mdatareferinta, lnfilehandle, mrand, mcomision, mnrcomision, isunicredit, isfaracitire, mnrimport mSelectedFile = This.cFile isunicredit = .F. isbcr = .F. isfaracitire = .F. mdatareferinta = Date() mnrimport = 1 mrand = "" Create Cursor match (Id N (10), id_pi N (7), ip C (1), nr C (16), cod C (8), denumire C (64), Data D, scadent D Null, Total N (15, 2), tva N (15, 2), neachitat N (15, 2), neachitat_real N (15, 2), achitat N (15, 2), cod_valuta C (3), Curs N (15, 4), dif_curs N (15, 2), total_val N (16, 4), is_total N (1, 0), tip_o C (3), grupa C (16), plan C (6), sector C (16), sursa C (16), capitol C (16), articol C (16), tip C (1), tvai N (1, 0), inf_suplm C (100)) Index On Data Tag Data Create Cursor c_iex (Id N (10, 0), ip C (1), nr C (16), Data D, suma N (15, 2), explicatie C (200), original M, iban C (24), cod C (8), tert C (64), cf C (13), tip C (2), tip_2 C (3), Cont C (20), cont_casa C (20), ok N (1, 0), tert_v N (1, 0), suma_v N (1, 0), cod_valuta C (3), tip_o C (3), importat N (1), tel C (20), email C (100), asociat N (1, 0), documente C(250), comenzi C(250)) If !Inlist(Upper(Justext(mSelectedFile)), "XLS", "XML") lnfilehandle = Fopen(mSelectedFile) If lnfilehandle = -1 Messagebox( "Fisierul nu poate fi accesat." + Chr(13) + "Probabil ca este deschis in alta fereastra.", 16, "Eroare acces" ) Return .F. Endif Do While !Feof(lnfilehandle) .And. Empty(mrand) mrand = Fgets(lnfilehandle) Enddo Fclose(lnfilehandle) Endif Do Case Case Left(Upper(Justext(mSelectedFile)), 3) = "XLS" This.xlsGeneral(mSelectedFile) Case Upper(Justext(mSelectedFile)) = "XML" This.xmlAsc(mSelectedFile) Case Upper(Justext(mSelectedFile)) = "TXT" .And. "mandat postal" $ Lower(mrand) This.txtPosta(mSelectedFile) Case Upper(Justext(mSelectedFile)) = "CSV" Do Case Case 'transaction date,type,order'$Lower(mrand) * Data Comenzii,Tipul,Nr Comanda,,Data Transferului,Suma,Comision,Suma Neta,Referinta This.csvStripe(mSelectedFile) Case Lower(Left(mrand, 4)) = "tip," .Or. Lower(Left(mrand, 5)) = "type," Messagebox( "Formatul fisierului CSV nu este implementat pentru import.", 16, "Format necunoscut" ) Return .F. Case "id produs,cod produs," $ Lower(mrand) This.csvPayu(mSelectedFile) Case Occurs('textbox', Lower(mrand)) > 6 This.csvIntesa(mSelectedFile, 1) Case Occurs('textbox', Lower(mrand)) = 6 This.csvIntesa(mSelectedFile, 2) Case 'localitate' $ Lower(mrand) AND 'persoanae' $ Lower(mrand) This.csvFanCourier(mSelectedFile) Case 'oras destinatar' $ Lower(mrand) This.csvFunCourier(mSelectedFile) Case 'awb,data_awb,destinatar' $ Lower(mrand) This.csvFunCourier2(mSelectedFile) Case 'idawb' $ Lower(mrand) Messagebox( "Formatul fisierului CSV nu este implementat pentru import.", 16, "Format necunoscut" ) Return .F. Case 'waybill' $ Lower(mrand) Messagebox( "Formatul fisierului CSV nu este implementat pentru import.", 16, "Format necunoscut" ) Return .F. Case 'data,id,numar' $ Lower(mrand) .Or. '"data","id","numar"' $ Lower(mrand) .Or. 'data;id;numar' $ Lower(mrand) .Or. '"data";"id";"numar"' $ Lower(mrand) Messagebox( "Formatul fisierului CSV nu este implementat pentru import.", 16, "Format necunoscut" ) Return .F. Case 'tranzactiile contului:' $ Lower(mrand) .Or. 'account activities:' $ Lower(mrand) This.csvGaranti(mSelectedFile) Case Lower(Left(mrand, 11)) = "cod client:" This.csvGaranti_2(mSelectedFile) Case 'suma db' $ Lower(mrand) .Or. ('suma debit' $ Lower(mrand) .And. 'referinta' $ Lower(mrand) .And. 'data val.' $ Lower(mrand)) This.csvOTP(mSelectedFile) Case "perioada:" $ Lower(mrand) .Or. "data generare extras:" $ Lower(mrand) This.csvRaiffeisen(mSelectedFile, Iif(";;" $ mrand, ";", ",")) Case "titlu cont" $ Lower(mrand) .Or. "account title" $ Lower(mrand) If "titlu cont" $ Lower(mrand) This.csvUnicredit(mSelectedFile, Substr(mrand, Atc( "Titlu cont", mrand) + 10, 1)) Else This.csvUnicredit(mSelectedFile, Substr(mrand, Atc( "Account Title", mrand) + 13, 1)) Endif Case ",,detalii tranzactie," $ Lower(mrand) .Or. ",,transaction details," $ Lower(mrand) If "debit,credit" $ Lower(mrand) This.csvIng(mSelectedFile, 2) Else This.csvIng(mSelectedFile, 1) Endif Case "numar cont;" $ Lower(mrand) lnTipFisier = IIF('sold initial;sold final;numar cont;'$ Lower(mrand), 2, 1) This.csvIngbusiness(mSelectedFile, ";", m.lnTipFisier) Case "ingb" $ Lower(mrand) .Or. 'numar cont,' $ Lower(mrand) .Or. 'numar cont",' $ Lower(mrand) This.csvIngbusiness(mSelectedFile, ",") Case Lower(Left(mrand, 10)) = "tranzactii" .Or. Lower(Left(mrand, 12)) = "transactions" * BTGO lista de tranzactii in cursul lunii This.csvBT(mSelectedFile, 1) Case Lower(Left(mrand, 19)) = [lista de tranzactii] OR Lower(Left(mrand, 21)) = ["lista de tranzactii"] * BTGO extrase de cont final de luna This.csvBT(mSelectedFile, 2) Case '"date",' $ Lower(mrand) This.csvPaypal(mSelectedFile) Case Lower(Left(mrand, 6)) = '"brde"' .Or. Lower(Left(mrand, 4)) = 'brde' This.csvBRD(mSelectedFile) Case Lower(Left(mrand, 6)) = '"rncb"' .Or. Lower(Left(mrand, 4)) = 'rncb' This.csvBCR2(mSelectedFile) Case "first bank" $ Lower(mrand) This.csvFirstBank(mSelectedFile) Case "cece" $ Lower(mrand) This.csvCEC(mSelectedFile) Case Lower(Left(mrand, 3)) = '"#"' This.csvMobilPay(mSelectedFile) Case "data emitere extras" $ Lower(mrand) This.csvBCR(mSelectedFile) Case Occurs(";", mrand) = 7 Messagebox( "Formatul fisierului CSV nu este implementat pentru import.", 16, "Format necunoscut" ) Return .F. Case Occurs(",", mrand) = 6 Messagebox( "Formatul fisierului CSV nu este implementat pentru import.", 16, "Format necunoscut" ) Return .F. Case "platitor_nume_denumire" $ Lower(mrand) This.csvIdea(mSelectedFile) Case "numeclient,perioada,codclient" $ Lower(mrand) This.csvCreditEurope(mSelectedFile) Case Lower(Left(mrand, 3)) = "sep" This.csvAlpha(mSelectedFile) Otherwise Messagebox( "Formatul fisierului CSV nu este implementat pentru import.", 16, "Format necunoscut" ) Return .F. Endcase Case Upper(Justext(mSelectedFile)) = "TXT" && MT940 This.MT940(mSelectedFile) Otherwise * Endcase Update c_iex Set tip_2 = This.cTipTerti Where Empty(tip_2) Select Int(Val(nr)) As nr, Data, suma, explicatie, original, iban, cod, tert As denumire, cf As cod_fiscal, tip, tip_2, ; Cont, tert_v, suma_v As suma_val, cod_valuta As nume_val, tip_o, documente, comenzi ; From c_iex Into Cursor c_iex_temp Select C_IMPORT_TEMP Append From Dbf('c_iex_temp') Use In (Select('c_iex_temp')) Use In (Select('c_iex')) Use In (Select('match ')) *!* This.cIBAN = syGETWORDNUM(m.lcLinie, 2, ';') *!* This.cValuta = syGETWORDNUM(m.lcLinie, 3, ';') *!* If !Inlist(This.cValuta, 'RON', 'LEI', 'ROL') *!* This.cContBanca = '5124' && banca valuta *!* ENDIF Endfunc && Parse Function MT940 Lparameters mSelectedFile lnfilehandle = Fopen(mSelectedFile) mtextoriginal = "" mibanprim = '' mibanmultiplu = .F. isfaracitire = .F. isbcr = .F. isunicredit = .F. Select c_iex Do While !Feof(lnfilehandle) If !isfaracitire mrand = Fgets(lnfilehandle) Endif isfaracitire = .F. Do Case Case Left(m.mrand, 4) = ':25:' && cont bancar * :25:RO57RZBR0000060011634808 This.cIBAN = Upper(Alltrim(Substr(m.mrand, 5))) && RO57RZBR0000060011634808 If Empty(mibanprim) mibanprim = This.cIBAN Else If This.cIBAN <> mibanprim mibanmultiplu = .T. Endif Endif Case Inlist(Left(m.mrand, 5), ':60F:', ':60M:') && sold initial, primul gasit If Isnull(This.nSoldInitial) This.nSoldInitial = SoldMT940(m.mrand) Endif Case Inlist(Left(m.mrand, 5), ':62F:', ':62M:') && sold final, ultimul gasit This.nSoldFinal = SoldMT940(m.mrand) Case ":61:" $ mrand Append Blank mldatae = {} nnrapnc = Occurs("NC", mrand) If nnrapnc > 0 mstartdata = At("NC", mrand, nnrapnc) + 2 mldatae = Ctod(Substr(mrand, mstartdata + 4, 2) + "." + Substr(mrand, mstartdata + 2, 2) + ".20" + Substr(mrand, mstartdata, 2)) Endif If mldatae = {} mldatae = Ctod(Substr(mrand, 9, 2) + "." + Substr(mrand, 7, 2) + ".20" + Substr(mrand, 5, 2)) Endif Replace Data With mldatae, tip With Substr(mrand, 15, 1) + Iif(Inlist(Substr(mrand, 16, 1), "D", "C"), Substr(mrand, 16, 1), "") mrand = Iif(Inlist(Substr(mrand, 16, 1), "D", "C"), Substr(mrand, 17, 50), Substr(mrand, 16, 50)) mtextoriginal = mrand Do Case Case "NTRF" $ mrand isbcr = .T. mpozitien = At("N", mrand) Replace suma With Val(Strtran(Substr(mrand, 1, mpozitien - 1), ",", ".")), tip_2 With Substr(mrand, mpozitien + 1, 3) If "//" $ mrand mpozitienr = At("//", mrand) + 10 Replace nr With Alltrim(Substr(mrand, mpozitienr, 16)) Else Replace nr With Alltrim(Substr(mrand, mpozitien + 4, 16)) Endif Case "FMSC" $ mrand mpozitien = At("F", mrand) Replace suma With Val(Strtran(Substr(mrand, 1, mpozitien - 1), ",", ".")), tip_2 With "", nr With Alltrim(Substr(mrand, mpozitien + 12, 16)) isunicredit = .T. Otherwise mpozitien = At("N", mrand) Replace suma With Val(Strtran(Substr(mrand, 1, mpozitien - 1), ",", ".")), tip_2 With Substr(mrand, mpozitien + 1, 3), nr With Strtran(Alltrim(Substr(mrand, mpozitien + 4, 16)), "NONREF //", "") If !("NONREF //" $ mrand) mrand = Fgets(lnfilehandle) Replace explicatie With mrand mtextoriginal = mtextoriginal + Chr(13) + mrand Endif Endcase Case ":86:" $ mrand .And. "+31" $ mrand Replace iban With Alltrim(Substr(mrand, At( "+31", mrand) + 3, 24)) mrand = Fgets(lnfilehandle) mtextoriginal = mtextoriginal + Chr(13) + mrand Replace tert With Substr(mrand, At( "+32", mrand) + 3, At( "+33", mrand) - 4), cf With Alltrim(Substr(mrand, At( "+33", mrand) + 3, 13)) Case ":86:" $ mrand .And. !isunicredit .And. !isbcr mnextrand = Fgets(lnfilehandle) mtextoriginal = mtextoriginal + Chr(13) + mnextrand If mnextrand = ":61:" mrand = mnextrand isfaracitire = .T. Loop Else mrand1 = mrand + mnextrand Endif mnextrand = Fgets(lnfilehandle) mtextoriginal = mtextoriginal + Chr(13) + mnextrand If mnextrand = ":61:" mrand = mnextrand isfaracitire = .T. Loop Else mrand1 = mrand + mnextrand Endif mnextrand = Fgets(lnfilehandle) mtextoriginal = mtextoriginal + Chr(13) + mnextrand If mnextrand = ":61:" mrand = mnextrand isfaracitire = .T. Loop Else mrand1 = mrand + mnextrand Endif mnextrand = Fgets(lnfilehandle) mtextoriginal = mtextoriginal + Chr(13) + mnextrand If mnextrand = ":61:" mrand = mnextrand isfaracitire = .T. Loop Else mrand1 = mrand + mnextrand Endif mrand1 = Substr(Strtran(mrand1, "intrabancara Platitor", ""), 5, 250) mcf = getnrfromstring(mrand1) miban = Substr(mcf, At("RO", mcf), 24) mcf = Substr(mcf, 1, At( " ", mcf)) mtert = Substr(mrand1, At( " ", mrand1) + 3, At(mcf, mrand1) - 5) If "Detalii " $ mrand1 mexplicatie = Substr(mrand1, At( "Detalii ", mrand1) + 8, 60) Else mexplicatie = Substr(mrand, 5, 60) Endif If !verifcf(mcf) mcf = getdigitsfromstring(mrand1, 4, 1, ".") Endif Replace tert With mtert, cf With mcf, iban With miban, explicatie With mexplicatie Case ":86:" $ mrand .And. isbcr mnextrand = "" mrand1 = mrand ij = 1 Do While !(":61:" $ mnextrand) .And. ij <= 7 mnextrand = Fgets(lnfilehandle) If mnextrand = ":61:" Fseek(lnfilehandle, - Len(mnextrand) - 2, 1) Else mrand1 = mrand1 + mnextrand Endif ij = ij + 1 Enddo mtextoriginal = mtextoriginal + Chr(13) + mrand1 Store "" To mtert, miban, mcf If tip = "C" If "-Platitor" $ mrand1 mstart = At("-Platitor", mrand1) + 11 mtert = Substr(mrand1, mstart, 200) mstartiban = At(" RO", mtert) + 2 miban = Substr(mtert, mstartiban, 24) mstartcf = At(" CODFISC ", mtert) + 9 mcf = Substr(mtert, mstartcf, 12) If " " $ mcf mcf = Left(mcf, At(" ", mcf)) Else If "-" $ mcf mcf = Left(mcf, At("-", mcf) - 1) Endif Endif mtert = Left(mtert, mstartiban - 2) Endif Else If "-Beneficiar" $ mrand1 mstart = At("-Beneficiar", mrand1) + 13 mtert = Substr(mrand1, mstart, 200) mstartiban = At(" RO", mtert) + 2 miban = Substr(mtert, mstartiban, 24) mstartcf = At(" CODFISC ", mtert) + 9 mcf = Substr(mtert, mstartcf, 12) If " " $ mcf mcf = Left(mcf, At(" ", mcf)) Else If "-" $ mcf mcf = Left(mcf, At("-", mcf) - 1) Endif Endif mtert = Left(mtert, mstartiban - 2) Endif Endif If !verifcf(mcf) mcf = getdigitsfromstring(mrand1, 4, 1, ".") Endif If "Detalii " $ mrand1 mexplicatie = Substr(mrand1, At( "Detalii ", mrand1) + 9, 60) Else mexplicatie = Substr(mrand, 5, 60) Endif Replace tert With mtert, cf With mcf, iban With miban, explicatie With mexplicatie Case ":86:" $ mrand .And. isunicredit mtextoriginal = mtextoriginal + Chr(13) + mrand mrand1 = Fgets(lnfilehandle) If mrand1 = ":61:" mrand = mrand1 isfaracitire = .T. Else mtextoriginal = mtextoriginal + Chr(13) + mrand1 If "CUI" $ mrand + mrand1 mrand2 = Fgets(lnfilehandle) mtextoriginal = mtextoriginal + Chr(13) + mrand2 If mrand2 = ":61:" mrand1 = mrand + mrand1 mrand = mrand2 isfaracitire = .T. Else mrand1 = mrand + mrand1 + mrand2 mrand2 = Fgets(lnfilehandle) If mrand2 = ":61:" mrand = mrand2 isfaracitire = .T. Else mrand1 = mrand1 + mrand2 mtextoriginal = mtextoriginal + Chr(13) + mrand2 Endif Endif mtert = Alltrim(Left(mrand1, At("CUI", mrand1) - 3)) mrand1 = Alltrim(Substr(mrand1, At("CUI", mrand1) + 3, 400)) mcf = Alltrim(Substr(mrand1, 1, At(",", mrand1) - 1)) mrand1 = Alltrim(Substr(mrand1, At("Acc.", mrand1) + 4, 400)) miban = Alltrim(Substr(mrand1, 1, At(",", mrand1) - 1)) mrand1 = Alltrim(Substr(mrand1, At(",", mrand1, 4) + 2, 400)) mexplicatie = Alltrim(Substr(mrand1, 1, At(",", mrand1) - 1)) Replace tert With Substr(mtert, 5, 60), cf With mcf, iban With miban, explicatie With mexplicatie, tip_2 With "TRF" Else Do Case Case ":61:" $ mrand1 isfaracitire = .T. mrand = mrand1 mexplicatie = Alltrim(Substr(mrand, 5, 60)) Case mrand1 = ":" mexplicatie = Alltrim(Substr(mrand, 5, 60)) Otherwise mrand2 = Fgets(lnfilehandle) + " " mexplicatie = "" If mrand2 = ":61:" mrand = mrand2 isfaracitire = .T. Else mexplicatie = mrand2 mtextoriginal = mtextoriginal + Chr(13) + mrand2 mrand3 = Fgets(lnfilehandle) If mrand3 = ":61:" mrand = mrand3 isfaracitire = .T. Else mtextoriginal = mtextoriginal + Chr(13) + mrand3 mrand4 = Fgets(lnfilehandle) If mrand4 = ":61:" mrand = mrand4 isfaracitire = .T. Else mtextoriginal = mtextoriginal + Chr(13) + mrand4 If mrand2 = "Fee/" .Or. "Transfond fee" $ mrand2 mexplicatie = mrand2 + mrand3 + " " + mrand4 Else mexplicatie = mrand3 + " " + mrand4 Endif Endif Endif Endif Endcase If mexplicatie = "Fee/" .Or. "Transfond fee" $ mexplicatie .Or. "COMMISSION" $ Upper(mtextoriginal) Replace tip_2 With "COM", explicatie With "Comision" Else Replace explicatie With mexplicatie Endif Endif Endif Endcase Replace original With mtextoriginal Enddo Fclose(lnfilehandle) If mibanmultiplu This.nSoldInitial = .Null. This.nSoldFinal = .Null. Endif Endfunc Function xlsGeneral Lparameters pselectedfile Local I, mnrstart, mcf, mtert, mexplicatie, mtipimport, mdataextras Local oexcel As "Excel.Application" Local lcData, lcValue, loEx as Exception, llXLS, llXLSX *:Global jj, mcolcredit, mcoldata, mcoldebit, mcolexplicatie, mcontorinregistrari, mcredit, mdata *:Global mdataimp, mdatatest, mdebit, mexplicatie1, minceput, mlfinal, mlungime, mnrdoc, mnrdoctest *:Global mpozsrl, mpozstart1, mpozstart2, msrl, msuma, msumac, msumad, mtext1, mtextoriginal *:Global mtexttert, oexcelapp, oworkbook mtipimport = "" lcMesajEroare = "" Create Cursor C_TMP_I (data_t C (10), detalii C (250), data_v C (10), debit C (15), credit C (15), cf C (13), tert C (120), nr C (16), iban C (24), comision N (15, 2), documente C(250), comenzi C(250)) * Pentru llXLSX nu folosesc automatizare Microsoft Excel lcDBF = '' IF LOWER(JUSTEXT(m.pselectedfile)) = 'xlsx' llXLS = .F. llXLSX = .T. Create Cursor cXLSXTmp(mfield1 M null,mfield2 M null,mfield3 M null,mfield4 M null,mfield5 M null,mfield6 M null,; mfield7 M null,mfield8 M null,mfield9 M null,mfield10 M null,mfield11 M null,mfield12 M null,mfield13 M null,; mfield14 M null,mfield15 M null,mfield16 M null,mfield17 M null,mfield18 M null,mfield19 M null,mfield20 M null,; mfield21 M null,mfield22 M null,mfield23 M null,mfield24 M null,mfield25 M null,mfield26 M null,mfield27 M null,; mfield28 M null,mfield29 M null,mfield30 M null) TRY * lcFileName,cCur,lcFFields,lnStartRows,lcSheet,llEmptyCells appendfromxlsx(m.pselectedfile,'cXLSXTmp','',1,'',.T.) GO TOP IN cXLSXTmp Catch To loEx lcMesajEroare = loEx.message ENDTRY IF RECCOUNT('cXLSXTmp') = 0 USE IN (SELECT('cXLSXTmp')) AMESSAGEBOX('Eroare la importul din fisier!' + IIF(!EMPTY(m.lcMesajEroare), CHR(13) + m.lcMesajEroare, ""), 0 + 48, 'Atentie!') Return .F. ENDIF ELSE Try oexcel = Createobject("Excel.Application") Catch To loEx * ENDTRY If Vartype(oexcel) <> "O" AMESSAGEBOX( 'Nu aveti instalat Microsoft Excel!', 0 + 48, 'Atentie!') Return .F. Endif oexcel.Visible = .T. oexcel.sheetsinnewworkbook = 1 oworkbook = oexcel.workbooks.Open(pselectedfile) oexcelapp = oexcel.Application llXLS = .T. llXLSX = .F. ENDIF && !m.llXLSX mnrstart = 0 Do Case CASE m.llXLSX AND (LOWER(ALLTRIM(cXLSXTmp.mfield1)) = "payout date") * Import EMAG din XLSX mtipimport = "eMag" INSERT INTO C_TMP_I(data_t, data_v, debit, credit, nr, tert, comenzi) ; SELECT CAST(mfield1 as C(10)) as data_t, CAST(mfield1 as C(10)) as data_v, CAST("" as C(15)) as debit, ; CAST(mfield17 as C(15)) as credit, CAST(mfield9 as C(16)) as nr, CAST(mfield12 as C(120)) as tert, CAST(mfield9 as C(250)) as comenzi ; FROM cXLSXTmp ; WHERE RECNO() > 1 Case m.llXLSX AND (LEFT(LOWER(ALLTRIM(cXLSXTmp.mfield1)),3) = "gls" OR ("referin"$lower(cXLSXTmp.mfield1) AND "colet"$lower(cXLSXTmp.mfield2))) * Import GLS din XLSX mtipimport = "GLS" mdataextras = "" SELECT cXLSXTmp SCAN lcValue = ALLTRIM(LOWER(mfield1)) Do Case Case "data tranferarii banilor:" $ m.lcValue Or "data transferarii banilor:" $ m.lcValue lcData = GetRegExp(m.lcValue, '\d{2}\.\d{2}\.\d{4}', 1) If !Empty(Ctod(m.lcData)) mdataextras = m.lcData Endif Case Inlist(Lower(Left(m.lcValue, 5)), "numar", "numãr") mnrstart = RECNO() Exit Endcase ENDSCAN If mnrstart = 0 Return Endif Insert Into C_TMP_I (data_t, data_v, debit, credit, detalii, nr, comenzi) ; SELECT CAST(mfield4 as C(10)) as data_t, CAST(Iif(!Empty(mdataextras), mdataextras, mfield4) as C(10)) as data_v, ; CAST('' as C(15)) as debit, CAST(Iif(!EMPTY(NVL(mfield5, '')), mfield5, "") as C(15)) as credit, ; CAST(mfield7 as C(250)) as detalii, CAST(mfield2 as C(16)) as nr, CAST(ALLTRIM(mfield2) as C(250)) as comenzi ; FROM cXLSXTmp ; WHERE RECNO() > mnrstart AND !EMPTY(NVL(mfield2,'')) AND !EMPTY(NVL(mfield7,'')) UPDATE C_TMP_I SET tert = Upper(Left(detalii, At(" ", detalii))) WHERE " " $ Alltrim(detalii) AND EMPTY(NVL(tert,'')) UPDATE C_TMP_I SET tert = Upper(Left(detalii, At(" RO-", detalii))) WHERE " RO-" $ Alltrim(detalii) AND EMPTY(NVL(tert,'')) Case m.llXLSX AND (LEFT(LOWER(ALLTRIM(cXLSXTmp.mfield1)),14) = "orasdestinatar") AND (LEFT(LOWER(ALLTRIM(cXLSXTmp.mfield2)),8) = "data awb") * Import FAN Courier din XLSX mtipimport = "FAN" mdataextras = "" mnrstart = 1 Insert Into C_TMP_I (data_t, data_v, debit, credit, detalii, nr, comenzi) ; SELECT CAST(mfield2 as C(10)) as data_t, CAST(mfield2 as C(10)) as data_v, ; CAST('' as C(15)) as debit, CAST(Iif(!EMPTY(NVL(mfield3, '')), mfield3, "") as C(15)) as credit, ; CAST(mfield6 as C(250)) as detalii, CAST(mfield4 as C(16)) as nr, CAST(ALLTRIM(mfield4) as C(250)) as comenzi ; FROM cXLSXTmp ; WHERE RECNO() > mnrstart AND !EMPTY(NVL(mfield3,'')) AND !EMPTY(NVL(mfield6,'')) SELECT C_TMP_I SCAN FOR " CUI " $ UPPER(detalii) OR " CUI:" $ UPPER(detalii) mcf = getdigitsfromstring(C_TMP_I.detalii, 4, 1, ".") SELECT C_TMP_I IF !EMPTY(mcf) REPLACE cf WITH m.mcf ENDIF ENDSCAN UPDATE C_TMP_I SET tert = Upper(detalii) WHERE !" CUI " $ UPPER(detalii) AND !" CUI:" $ UPPER(detalii) UPDATE C_TMP_I SET tert = Upper(Left(detalii, At(" CUI", detalii))) WHERE EMPTY(NVL(TERT, '')) AND " CUI" $ UPPER(detalii) && CIOBANU ANAMARIA-CRISTINA CUI 33930204 L Case m.llXLS AND (Type( "oExcelApp.Cells(1,1).Value" ) = "C" .And. Lower(Left(oexcelapp.cells(1, 1).Value, 11)) = "payout date") * automatizare Excel pentru fisier EMAG XLSX * Nu se intra pe ramura aceasta pentru ca intra pe importul fara automatizare mtipimport = "eMag" I = 2 Do While !Isnull(oexcelapp.cells(I, 1).Value) .And. !Empty(oexcelapp.cells(I, 1).Value) Insert Into C_TMP_I (data_t, data_v, debit, credit, nr, tert) Values (oexcelapp.cells(I, 1).Value, oexcelapp.cells(I, 1).Value, "", Str(oexcelapp.cells(I, 17).Value, 15, 2), Alltrim(Str(oexcelapp.cells(I, 9).Value, 16, 0)), Alltrim(oexcelapp.cells(I, 12).Value)) I = I + 1 ENDDO Case m.llXLS AND Type( "oExcelApp.Cells(1,1).Value" ) = "C" .And. Lower(Left(oexcelapp.cells(1, 1).Value, 3)) = "gls" * automatizare Excel pentru fisier GSL XLS mtipimport = "GLS" I = 1 mdataextras = "" For I = 1 To 100 lcValue = Alltrim(Lower(Transform(oexcelapp.cells(I, 1).Value))) Do Case Case "data tranferarii banilor:" $ m.lcValue Or "data transferarii banilor:" $ m.lcValue lcData = GetRegExp(m.lcValue, '\d{2}\.\d{2}\.\d{4}', 1) If !Empty(Ctod(m.lcData)) mdataextras = m.lcData Endif *!* If !Empty(Ctod(Substr(oexcelapp.cells(i, 1).Value, 27, 10))) *!* mdataextras = Substr(oexcelapp.cells(i, 1).Value, 27, 10) *!* Endif *!* CASE "cont bancar nr.:" $ m.lcValue *!* This.cIBAN = UPPER(ALLTRIM(SUBSTR(m.lcValue, 17))) Case Inlist(Lower(Left(m.lcValue, 5)), "numar", "numãr") mnrstart = I Exit Endcase Endfor If mnrstart = 0 Return Endif I = mnrstart + 1 Do While !Isnull(oexcelapp.cells(I, 2).Value) .And. !Empty(oexcelapp.cells(I, 2).Value) If !Isnull(oexcelapp.cells(I, 7).Value) Insert Into C_TMP_I (data_t, data_v, debit, credit, detalii, nr, documente) ; Values (oexcelapp.cells(I, 4).Value, ; Iif( !Empty(mdataextras), mdataextras, oexcelapp.cells(I, 4).Value), "", ; Iif( !Isnull(oexcelapp.cells(I, 5).Value), Str(oexcelapp.cells(I, 5).Value, 15, 2), ""), ; oexcelapp.cells(I, 7).Value, ; Alltrim(Str(oexcelapp.cells(I, 2).Value)), ; Alltrim(Transform(oexcelapp.cells(I, 1).Value))) If " " $ Alltrim(C_TMP_I.detalii) Replace tert With Upper(Left(C_TMP_I.detalii, At(" ", C_TMP_I.detalii))) Endif Endif I = I + 1 ENDDO Case m.llXLS AND (Type( "oExcelApp.Cells(6,14).Value" ) = "C" .And. Upper(Left(oexcelapp.cells(6, 14).Value, 11)) = "EXTRAS CONT") mtipimport = "ProCredit" I = 44 Do While !Isnull(oexcelapp.cells(I, 10).Value) .And. !Empty(oexcelapp.cells(I, 10).Value) msumad = oexcelapp.cells(I, 19).Value msumac = oexcelapp.cells(I, 21).Value mdata = oexcelapp.cells(I, 10).Value mexplicatie = oexcelapp.cells(I, 13).Value If !Isnull(mexplicatie) mtert = "" If " SRL " $ mexplicatie .Or. " SA " $ mexplicatie If " SRL " $ mexplicatie msrl = " SRL" Else msrl = " SA " Endif mpozsrl = At(msrl, mexplicatie) + 4 mpozstart1 = At(" ", mexplicatie, 2) + 1 mpozstart2 = At(" ", mexplicatie, 3) + 1 If getnumberincrement(Substr(mexplicatie, mpozstart1, mpozstart2 - mpozstart1)) > 0 mpozstart1 = mpozstart2 Endif If mpozsrl - mpozstart1 > 0 mtert = Substr(mexplicatie, mpozstart1, mpozsrl - mpozstart1) mexplicatie = Substr(mexplicatie, mpozsrl + 1, 150) Endif Endif Insert Into C_TMP_I (data_t, data_v, debit, credit, nr, tert, detalii, iban) Values (mdata, mdata, Iif( !Isnull(msumad), msumad, ""), Iif( !Isnull(msumac), msumac, ""), "", mtert, mexplicatie, getibanfromstring(mexplicatie, 1)) Endif I = I + 1 Enddo Case m.llXLS AND (Type( "oExcelApp.Cells(2,2).Value" ) = "C" .And. Upper(Left(oexcelapp.cells(2, 2).Value, 15)) = "PATRIA BANK S.A") mtipimport = "Patria" I = 35 mcontorinregistrari = 1 Do While mcontorinregistrari <= 10 msumad = oexcelapp.cells(I, 16).Value msumac = oexcelapp.cells(I, 21).Value mdata = oexcelapp.cells(I, 4).Value mexplicatie = oexcelapp.cells(I, 9).Value If !Isnull(mdata) Insert Into C_TMP_I (data_t, data_v, debit, credit, nr, tert, detalii) Values (mdata, mdata, Iif( !Isnull(msumad), msumad, ""), Iif( !Isnull(msumac), msumac, ""), "", "", mexplicatie) mcontorinregistrari = 1 Else mcontorinregistrari = mcontorinregistrari + 1 Endif I = I + 1 Enddo Case m.llXLS AND (Type( "oExcelApp.Cells(5,1).Value" ) = "C" .And. Lower(Left(oexcelapp.cells(5, 1).Value, 20)) = "soldul depus înainte") mtipimport = "Viva" I = 6 Do While !Isnull(oexcelapp.cells(I, 1).Value) .And. !Empty(oexcelapp.cells(I, 1).Value) msuma = oexcelapp.cells(I, 5).Value mdata = Dtoc(oexcelapp.cells(I, 1).Value) Insert Into C_TMP_I (data_t, data_v, debit, credit, nr, tert) Values (mdata, mdata, Iif(msuma > 0, Str(msuma, 15, 2), ""), Iif(msuma < 0, Str(msuma, 15, 2), ""), "", Substr(oexcelapp.cells(I, 3).Value, At(" - ", oexcelapp.cells(I, 3).Value) + 3, 100)) I = I + 1 Enddo Case m.llXLS AND (Type( "oExcelApp.Cells(1,1).Value" ) = "C" .And. (Lower(Left(oexcelapp.cells(1, 1).Value, 15)) = "daily statement" .Or. Lower(Left(oexcelapp.cells(1, 1).Value, 17)) = "account statement")) mtipimport = "PNB" I = 12 Do While !Isnull(oexcelapp.cells(I, 1).Value) .And. !Empty(oexcelapp.cells(I, 1).Value) .And. Type( "oExcelApp.Cells(i,5).Value" ) = "N" Insert Into C_TMP_I (data_t, data_v, detalii) Values (oexcelapp.cells(I, 1).Value, oexcelapp.cells(I, 2).Value, Alltrim(oexcelapp.cells(I, 3).Value)) If oexcelapp.cells(I, 5).Value < 0 Replace debit With Alltrim(Str(oexcelapp.cells(I, 5).Value, 15, 2)) Else Replace credit With Alltrim(Str(oexcelapp.cells(I, 5).Value, 15, 2)) Endif If oexcelapp.cells(I, 4).Value = "TRF" mlfinal = At( " Bank reference", oexcelapp.cells(I, 3).Value) minceput = At( " ", oexcelapp.cells(I, 3).Value, 3) If mlfinal > 0 .And. minceput > 0 Replace tert With Substr(oexcelapp.cells(I, 3).Value, minceput + 1, mlfinal - minceput) Endif Endif Replace iban With getibanfromstring(oexcelapp.cells(I, 3).Value, 1) Replace cf With getdigitsfromstring(oexcelapp.cells(I, 3).Value, 4, 1, ".") I = I + 1 Enddo Case m.llXLS AND Type( "oExcelApp.Cells(1,1).Value" ) = "C" .And. Lower(Left(oexcelapp.cells(1, 1).Value, 22)) = "nume client / companie" mtipimport = "SameDay" oexcelapp = oexcel.activeworkbook.sheets(2) I = 2 If Lower(Left(oexcelapp.cells(1, 9).Value, 18)) = "ramburs transferat" Do While !Isnull(oexcelapp.cells(I, 11).Value) .And. !Empty(oexcelapp.cells(I, 11).Value) Insert Into C_TMP_I (data_t, data_v, debit, credit, detalii, nr, tert) Values (oexcelapp.cells(I, 10).Value, oexcelapp.cells(I, 11).Value, "", Iif( !Isnull(oexcelapp.cells(I, 8).Value), Str(oexcelapp.cells(I, 8).Value, 15, 2), ""), Alltrim(oexcelapp.cells(I, 3).Value) + " " + Alltrim(oexcelapp.cells(I, 4).Value) + " " + Alltrim(oexcelapp.cells(I, 5).Value), Alltrim(oexcelapp.cells(I, 1).Value), Alltrim(oexcelapp.cells(I, 2).Value)) I = I + 1 Enddo Else Do While !Isnull(oexcelapp.cells(I, 10).Value) .And. !Empty(oexcelapp.cells(I, 10).Value) Insert Into C_TMP_I (data_t, data_v, debit, credit, detalii, nr, tert) Values (oexcelapp.cells(I, 9).Value, oexcelapp.cells(I, 10).Value, "", Iif( !Isnull(oexcelapp.cells(I, 8).Value), Str(oexcelapp.cells(I, 8).Value, 15, 2), ""), Alltrim(oexcelapp.cells(I, 3).Value) + " " + Alltrim(oexcelapp.cells(I, 4).Value) + " " + Alltrim(oexcelapp.cells(I, 5).Value), Alltrim(oexcelapp.cells(I, 1).Value), Alltrim(oexcelapp.cells(I, 2).Value)) I = I + 1 Enddo Endif Case m.llXLSX AND (LEFT(LOWER(ALLTRIM(cXLSXTmp.mfield1)),3) = "awb") AND (LEFT(LOWER(ALLTRIM(cXLSXTmp.mfield2)),15) = "nume destinatar") * Import SameDay din XLSX mtipimport = "SameDay" mdataextras = "" mnrstart = 1 Insert Into C_TMP_I (data_t, data_v, debit, credit, detalii, nr, comenzi, tert) ; SELECT CAST(mfield9 as C(10)) as data_t, CAST(mfield10 as C(10)) as data_v, ; CAST('' as C(15)) as debit, CAST(Iif(!EMPTY(NVL(mfield8, '')), mfield8, "") as C(15)) as credit, ; CAST(ALLTRIM(NVL(mfield2, '')) + ' ' + ALLTRIM(NVL(mfield3, '')) + ' ' + ALLTRIM(NVL(mfield4, '')) as C(250)) as detalii, CAST(mfield1 as C(16)) as nr, CAST(ALLTRIM(mfield1) as C(250)) as comenzi, ; CAST(mfield2 as C(100)) as tert ; FROM cXLSXTmp ; WHERE RECNO() > mnrstart AND !EMPTY(NVL(mfield8,'')) AND !EMPTY(NVL(mfield2,'')) Case m.llXLS AND Type( "oExcelApp.Cells(1,1).Value" ) = "C" .And. Lower(Left(oexcelapp.cells(1, 1).Value, 10)) = "merchantid" mtipimport = "EuPlatesc" I = 2 Do While !Isnull(oexcelapp.cells(I, 10).Value) .And. !Empty(oexcelapp.cells(I, 10).Value) mdataimp = "" mdatatest = oexcelapp.cells(I, 10).Value Do Case Case Type("mDataTest") = "T" mdataimp = Dtoc(mdatatest) Case Type("mDataTest") = "D" mdataimp = Left(Ttoc(mdatatest), 10) Otherwise mdataimp = mdatatest Endcase mnrdoc = "" mnrdoctest = oexcelapp.cells(I, 2).Value If Type("mNrDocTest") = "N" mnrdoc = Alltrim(Str(mnrdoctest, 15, 0)) Else mnrdoc = mnrdoctest Endif Insert Into C_TMP_I (data_t, data_v, debit, credit, detalii, nr, tert, comision) Values (mdataimp, mdataimp, Iif( !Isnull(oexcelapp.cells(I, 11).Value), Alltrim(Str(oexcelapp.cells(I, 11).Value, 15, 2)), ""), Iif( !Isnull(oexcelapp.cells(I, 6).Value), Alltrim(Str(oexcelapp.cells(I, 6).Value, 15, 2)), ""), Alltrim(oexcelapp.cells(I, 3).Value), mnrdoc, Iif( !Isnull(oexcelapp.cells(I, 4).Value), Alltrim(oexcelapp.cells(I, 4).Value), ""), Iif( !Isnull(oexcelapp.cells(I, 13).Value), oexcelapp.cells(I, 13).Value, 0)) I = I + 1 Enddo Case m.llXLS AND Type( "oExcelApp.Cells(1,1).Value" ) = "C" .And. Lower(Left(oexcelapp.cells(1, 1).Value, 13)) = "expeditie tur" mtipimport = "Cargus" I = 3 Do While !Isnull(oexcelapp.cells(I, 12).Value) .And. !Empty(oexcelapp.cells(I, 12).Value) Insert Into C_TMP_I (data_t, data_v, debit, credit, detalii, nr, tert) Values (Dtoc(oexcelapp.cells(I, 9).Value), Dtoc(oexcelapp.cells(I, 12).Value), "", Iif( !Isnull(oexcelapp.cells(I, 11).Value), Str(oexcelapp.cells(I, 11).Value, 15, 2), ""), "Data " + Dtoc(oexcelapp.cells(I, 9).Value) + " Nr chit. " + Alltrim(oexcelapp.cells(I, 10).Value), Alltrim(oexcelapp.cells(I, 13).Value), Alltrim(oexcelapp.cells(I, 5).Value)) I = I + 1 Enddo Case m.llXLS AND Type( "oExcelApp.Cells(1,1).Value" ) = "C" .And. Lower(Left(oexcelapp.cells(1, 1).Value, 22)) = "chitanta cont colector" mtipimport = "Cargus" I = 1 For I = 1 To 100 If oexcelapp.cells(I, 1).Value = "Data" mnrstart = I Exit Endif Endfor If mnrstart = 0 Return Endif I = mnrstart + 1 If Type( "oExcelApp.Cells(i,8).Value" ) = "T" Do While !Isnull(oexcelapp.cells(I, 8).Value) .And. !Empty(oexcelapp.cells(I, 8).Value) Insert Into C_TMP_I (data_t, data_v, debit, credit, detalii, nr, tert) Values (Dtoc(oexcelapp.cells(I, 1).Value), Dtoc(oexcelapp.cells(I, 8).Value), "", Iif( !Isnull(oexcelapp.cells(I, 3).Value), Str(oexcelapp.cells(I, 3).Value, 15, 2), ""), "Data " + Dtoc(oexcelapp.cells(I, 1).Value) + " Serie chit. " + Alltrim(oexcelapp.cells(I, 2).Value) + " Serie deco. " + Alltrim(oexcelapp.cells(I, 5).Value), Alltrim(oexcelapp.cells(I, 9).Value), Alltrim(oexcelapp.cells(I, 7).Value)) I = I + 1 Enddo Else Do While !Isnull(oexcelapp.cells(I, 9).Value) .And. !Empty(oexcelapp.cells(I, 9).Value) Insert Into C_TMP_I (data_t, data_v, debit, credit, detalii, nr, tert) Values (Dtoc(oexcelapp.cells(I, 1).Value), Dtoc(oexcelapp.cells(I, 9).Value), "", Iif( !Isnull(oexcelapp.cells(I, 3).Value), Str(oexcelapp.cells(I, 3).Value, 15, 2), ""), "Data " + Dtoc(oexcelapp.cells(I, 1).Value) + " Serie chit. " + Alltrim(oexcelapp.cells(I, 2).Value) + " Serie deco. " + Alltrim(oexcelapp.cells(I, 6).Value), Alltrim(oexcelapp.cells(I, 10).Value), Alltrim(oexcelapp.cells(I, 8).Value)) I = I + 1 Enddo Endif Case m.llXLSX AND ((LEFT(LOWER(ALLTRIM(cXLSXTmp.mfield1)),8) = "perioada") OR (LEFT(LOWER(ALLTRIM(cXLSXTmp.mfield1)),20) = "data generare extras")) * Import RAIFFEISEN din XLSX SELECT cXLSXTmp LOCATE FOR 'RAIFFEISEN'$mfield2 IF !FOUND() AMessagebox( "Format fisier incorect.", 16, "Import extrase" ) Return .F. ENDIF LOCATE FOR ATC('Cod IBAN:', mfield1) > 0 IF FOUND() This.cIBAN = UPPER(ALLTRIM(mfield2)) ENDIF mtipimport = "RAIFFEISEN" mdataextras = "" mnrstart = 18 Insert Into C_TMP_I (data_t, data_v, debit, credit, detalii, nr, comenzi) ; SELECT CAST(mfield1 as C(10)) as data_t, CAST(mfield2 as C(10)) as data_v, ; CAST(Iif(!EMPTY(NVL(mfield3, '')), mfield3, "") as C(15)) as debit, CAST(Iif(!EMPTY(NVL(mfield4, '')), mfield4, "") as C(15)) as credit, ; CAST(mfield12 as C(250)) as detalii, CAST(mfield9 as C(120)) as tert, CAST(ALLTRIM(mfield11) as C(24)) as iban ; FROM cXLSXTmp ; WHERE RECNO() > mnrstart AND !EMPTY(NVL(mfield1,'')) AND !EMPTY(NVL(mfield2,'')) SELECT C_TMP_I SCAN FOR " CUI " $ UPPER(detalii) OR " CUI:" $ UPPER(detalii) mcf = getdigitsfromstring(C_TMP_I.detalii, 4, 1, ".") SELECT C_TMP_I IF !EMPTY(mcf) REPLACE cf WITH m.mcf ENDIF ENDSCAN Case m.llXLS AND (Type( "oExcelApp.Cells(1,1).Value" ) = "C" .And. Lower(Left(oexcelapp.cells(1, 1).Value, 21)) = "data generare extras:" .Or. (Type( "oExcelApp.Cells(2,1).Value" ) = "C" .And. Lower(Left(oexcelapp.cells(2, 1).Value, 21)) = "data generare extras:" )) mtipimport = "RAIFFEISEN" I = 1 For I = 1 To 100 If Lower(Left(oexcelapp.cells(I, 1).Value, 17)) = "data inregistrare" mnrstart = I Exit Endif Endfor If mnrstart = 0 Return Endif I = mnrstart + 2 Do While !Isnull(oexcelapp.cells(I, 2).Value) .And. !Empty(oexcelapp.cells(I, 2).Value) If !Isnull(oexcelapp.cells(I, 12).Value) Insert Into C_TMP_I (data_t, data_v, debit, credit, detalii, cf, tert, iban, nr) Values (oexcelapp.cells(I, 1).Value, oexcelapp.cells(I, 2).Value, Iif( !Isnull(oexcelapp.cells(I, 3).Value), Str(oexcelapp.cells(I, 3).Value, 15, 2), ""), Iif( !Isnull(oexcelapp.cells(I, 4).Value), Str(oexcelapp.cells(I, 4).Value, 15, 2), ""), oexcelapp.cells(I, 12).Value, Iif( !Isnull(oexcelapp.cells(I, 6).Value), oexcelapp.cells(I, 6).Value, ""), Iif( !Isnull(oexcelapp.cells(I, 9).Value), oexcelapp.cells(I, 9).Value, ""), Iif( !Isnull(oexcelapp.cells(I, 11).Value), oexcelapp.cells(I, 11).Value, ""), Iif( !Isnull(oexcelapp.cells(I, 5).Value), oexcelapp.cells(I, 5).Value, "")) Endif I = I + 1 Enddo CASE m.llXLS mtipimport = "LIBRA" I = 1 For I = 1 To 100 If Type( "oExcelApp.Cells(i,2).Value" ) = "C" .And. Lower(Left(oexcelapp.cells(I, 2).Value, 4)) = "data" mnrstart = I Exit Endif Endfor If mnrstart = 0 Messagebox( "Format XLS incorect.", 16, "Import extrase" ) Return .F. Endif I = mnrstart + 1 mcoldata = 0 mcolexplicatie = 0 mcoldebit = 0 mcolcredit = 0 For jj = 1 To 18 If mcoldata = 0 .And. Type( "oExcelApp.Cells(mNrStart,jj).Value" ) = "C" .And. Lower(Left(oexcelapp.cells(mnrstart, jj).Value, 4)) = "data" mcoldata = jj Loop Endif If jj > mcoldata .And. mcoldata <> 0 .And. mcolexplicatie = 0 .And. Type( "oExcelApp.Cells(mNrStart,jj).Value" ) = "C" .And. Lower(Left(oexcelapp.cells(mnrstart, jj).Value, 9)) = "descriere" mcolexplicatie = jj Loop Endif If jj > mcolexplicatie .And. mcoldata <> 0 .And. mcolexplicatie <> 0 .And. mcoldebit = 0 .And. Type( "oExcelApp.Cells(mNrStart,jj).Value" ) = "C" .And. Lower(Left(oexcelapp.cells(mnrstart, jj).Value, 5)) = "debit" mcoldebit = jj Loop Endif If jj > mcoldebit .And. mcoldata <> 0 .And. mcolexplicatie <> 0 .And. mcoldebit <> 0 .And. mcolcredit = 0 .And. Type( "oExcelApp.Cells(mNrStart,jj).Value" ) = "C" .And. Lower(Left(oexcelapp.cells(mnrstart, jj).Value, 6)) = "credit" mcolcredit = jj Endif Endfor If mcoldata = 0 .Or. mcolexplicatie = 0 .Or. mcoldebit = 0 .Or. mcolcredit = 0 Messagebox( "Format XLS incorect.", 16, "Import extrase" ) Return .F. Endif Do While !Isnull(oexcelapp.cells(I, mcoldata).Value) .And. !Empty(oexcelapp.cells(I, mcoldata).Value) If Type( "oExcelApp.Cells(i,mColDebit).Value" ) = "N" mdebit = Alltrim(Str(oexcelapp.cells(I, mcoldebit).Value, 15, 2)) Else mdebit = Alltrim(oexcelapp.cells(I, mcoldebit).Value) Endif If Type( "oExcelApp.Cells(i,mColCredit).Value" ) = "N" mcredit = Alltrim(Str(oexcelapp.cells(I, mcolcredit).Value, 15, 2)) Else mcredit = Alltrim(oexcelapp.cells(I, mcolcredit).Value) Endif If !Isnull(mdebit) .And. !Isnull(mcredit) Insert Into C_TMP_I (data_t, detalii, data_v, debit, credit) Values (oexcelapp.cells(I, mcoldata).Value, oexcelapp.cells(I, mcolexplicatie).Value, oexcelapp.cells(I, mcoldata).Value, mdebit, mcredit) Endif I = I + 1 ENDDO OTHERWISE AMessagebox( "Format fisier incorect.", 16, "Import extrase" ) Return .F. ENDCASE USE IN (SELECT('cXLSXTmp')) UPDATE C_TMP_I SET data_v = TRANSFORM(ExcelSerialNumber2Date(INT(VAL(data_v)))) WHERE !('.'$data_v OR '/'$data_v OR '-'$data_v) UPDATE C_TMP_I SET data_t = TRANSFORM(ExcelSerialNumber2Date(INT(VAL(data_t)))) WHERE !('.'$data_t OR '/'$data_t OR '-'$data_t) Select C_TMP_I Scan For !Empty(data_v) Select c_iex Insert Into c_iex (Data, documente, comenzi) Values (setdategerman(C_TMP_I.data_v), C_TMP_I.documente, C_TMP_I.comenzi) If !Empty(C_TMP_I.debit) .And. Val(C_TMP_I.debit) <> 0 Replace tip With "D" msuma = This.setsuma(C_TMP_I.debit) Else Replace tip With "C" If mtipimport = "eMag" msuma = Val(C_TMP_I.credit) Else msuma = This.setsuma(C_TMP_I.credit) Endif Endif Replace suma With msuma mexplicatie = Alltrim(C_TMP_I.detalii) mexplicatie = Strtran(mexplicatie, " ", " ") mtert = "" mcf = "" Do Case Case LEFT(ALLTRIM(LOWER(NVL(mexplicatie,''))), 8) = "comision" OR ; 'comision-atm'$LOWER(NVL(mexplicatie,'')) OR ; 'comision procesare ridicare numerar'$LOWER(NVL(mexplicatie,'')) OR ; 'pachet izi'$LOWER(NVL(mexplicatie,'')) OR ; 'abonament'$LOWER(NVL(mexplicatie,'')) Replace tip_2 With This.cTipComisioane Case 'retragere de numerar'$ALLTRIM(LOWER(NVL(mexplicatie,''))) OR ; 'depunere de numerar'$ALLTRIM(LOWER(NVL(mexplicatie,''))) OR ; 'depunere numerar'$ALLTRIM(LOWER(NVL(mexplicatie,''))) OR ; 'retragere numerar'$ALLTRIM(LOWER(NVL(mexplicatie,''))) Replace tip_2 With This.cTipDepunere Case 'transfer intern'$ALLTRIM(LOWER(NVL(mexplicatie,''))) OR ; 'dob.dep'$ALLTRIM(LOWER(NVL(mexplicatie,''))) Replace tip_2 With This.cTipTransfer Otherwise Replace tip_2 With "" ENDCASE If "Detalii: " $ mexplicatie mexplicatie1 = Substr(mexplicatie, Atc( "Detalii: ", mexplicatie) + 9, 100) mtexttert = Left(mexplicatie, Atc( "Detalii: ", mexplicatie) - 1) Else mexplicatie1 = mexplicatie mtexttert = mexplicatie Endif If Empty(C_TMP_I.tert) If c_iex.tip = "D" .And. "beneficiar: " $ Lower(mtexttert) mtext1 = Substr(mtexttert, Atc( "Beneficiar: ", mtexttert) + 12, 60) mlungime = Min(Iif(Occurs( " RO", Upper(mtext1)) > 0, Atc( " RO", mtext1, Occurs( " RO", Upper(mtext1))), 60), Iif( "cont benef" $ Lower(mtext1), Atc( "Cont benef", mtext1), 60), Iif("platitor" $ Lower(mtext1), Atc("Platitor", mtext1), 60)) mlungime = Max(mlungime, 7) - 1 mtert = Left(mtext1, mlungime) Else If "platitor: " $ Lower(mtexttert) mtext1 = Substr(mtexttert, Atc( "Platitor: ", mtexttert) + 10, 60) mlungime = Iif(Occurs( " RO", Upper(mtext1)) > 0, Atc( " RO", mtext1, Occurs( " RO", Upper(mtext1))), 60) mlungime = Max(mlungime, 7) - 1 mtert = Left(mtext1, mlungime) Endif Endif Else mtert = Alltrim(Upper(C_TMP_I.tert)) Endif mcf = getdigitsfromstring(C_TMP_I.detalii, 13, 2, ".") If Empty(mcf) If Empty(C_TMP_I.cf) .And. !Inlist(mtipimport, "GLS", "FAN", "Cargus", "PNB", "eMAG", "SameDay", "Patria", "ProCredit") mcf = getdigitsfromstring(C_TMP_I.detalii, 4, 1, ".") Else mcf = Alltrim(C_TMP_I.cf) Endif Endif mtextoriginal = C_TMP_I.data_v + " " + Chr(13) + Alltrim(C_TMP_I.debit) + Alltrim(C_TMP_I.credit) + " " + Chr(13) + Alltrim(C_TMP_I.nr) + " " + Alltrim(C_TMP_I.cf) + Chr(13) + Alltrim(C_TMP_I.tert) + " " + Alltrim(C_TMP_I.iban) + " " + Chr(13) + Alltrim(C_TMP_I.detalii) + " " Replace tert With Upper(mtert), cf With mcf, explicatie With mexplicatie1, original With mtextoriginal, nr With C_TMP_I.nr, iban With C_TMP_I.iban If mtipimport = "eMag" .And. !Empty(c_iex.nr) Select match Locate For inf_suplm = Alltrim(c_iex.nr) If Found() Replace id_pi With c_iex.Id If Empty(c_iex.cod) .Or. c_iex.cod <> match.cod Replace cod With match.cod, tert With match.denumire In c_iex Endif Select match Replace achitat With c_iex.suma This.actsume() Replace asociat With 1 In c_iex Endif Endif Endscan Select data_v, Sum(comision) As comision From C_TMP_I Group By data_v Into Cursor C_COMISON Scan For comision > 0 Insert Into c_iex (Data, suma, tip, tip_2) Values (setdategerman(C_COMISON.data_v), C_COMISON.comision, "D", "COM") Endscan Use In (Select('C_TMP_I')) IF EMPTY(this.cIBAN) This.cIBAN = m.mtipimport ENDIF This.lCurier = Inlist(m.mtipimport, "GLS", "FAN", "Cargus", "SameDay") Endfunc * Procedure csvFirstBank Lparameters pselectedfile Local mtextoriginal This.cIBAN = 'FirstBank' mtextoriginal = "" mfilestr = Filetostr(pselectedfile) mfilestr = Strtran(mfilestr, '=', '') If "Transaction History" $ mfilestr .Or. "Istoric Tranzac" $ mfilestr Create Cursor C_TMP_I (data_t C (10), data_v C (10), tip_op C (100), referinta C (200), explicatie C (200), suma C (15)) Else Create Cursor C_TMP_I (data_t C (10), data_v C (10), suma C (15), referinta C (200), tip_op C (100), explicatie C (200)) Endif Strtofile(mfilestr, m.gcTempPath + "FirstBankTMP.csv") Append From (m.gcTempPath + "FirstBankTMP.csv") Delimited With Character ";" Delete For Empty(Ctod(C_TMP_I.data_t)) Scan For !Empty(data_t) .And. !Empty(setdategerman(C_TMP_I.data_t)) Select c_iex Insert Into c_iex (Data) Values (setdategerman(C_TMP_I.data_t)) If "-" $ C_TMP_I.suma Replace tip With "D" Else Replace tip With "C" Endif Replace suma With This.setsuma(C_TMP_I.suma) Do Case Case "comis" $ Lower(C_TMP_I.tip_op) Replace tip_2 With "COM" Otherwise Replace tip_2 With "" Endcase mexplicatie = C_TMP_I.explicatie mtert = "" miban = "" If Occurs(",", mexplicatie) > 0 mtert = Upper(Left(mexplicatie, At(",", mexplicatie) - 1)) Endif miban = getibanfromstring(mexplicatie, 1) If !Empty(miban) mtert = Left(mexplicatie, At(miban, mexplicatie) - 1) mexplicatie = Substr(mexplicatie, At(miban, mexplicatie) + 25, 100) Endif Replace tert With mtert, iban With miban mtextoriginal = C_TMP_I.data_t + " " + Chr(13) + C_TMP_I.suma + " " + Chr(13) + Alltrim(C_TMP_I.tip_op) + " " + Chr(13) + Alltrim(C_TMP_I.explicatie) Replace explicatie With mexplicatie, original With mtextoriginal Endscan Endproc * Procedure csvOTP Lparameters pselectedfile Local mtextoriginal, mexplicatie, mtert, miban, mstarttert, mstartcont, mdataop This.cIBAN = 'OTP' mtextoriginal = "" Create Cursor C_TMP_I (detalii1 C (200), data_v C (10), data_op C (10), detalii2 C (200), debit C (15), credit C (15)) mfilestr = Filetostr(pselectedfile) mlen = Len(mfilestr) If Occurs('""', mfilestr) > 20 mfilestr = EliminVirguleDintreGhilimele(mfilestr, '""') mfilestr = Strtran(mfilestr, '"', '') Strtofile(mfilestr, m.gcTempPath + "OTPTMP.csv") Append From (m.gcTempPath + "OTPTMP.csv") Csv Else Append From (mSelectedFile) Csv Endif Scan For !Empty(data_op) Select c_iex mdataop = Substr(C_TMP_I.data_op, 7, 2) + "." + Substr(C_TMP_I.data_op, 5, 2) + "." + Substr(C_TMP_I.data_op, 1, 4) Insert Into c_iex (Data) Values (Ctod(mdataop)) mtert = "" miban = "" mstarttert = 0 mexplicatie = Alltrim(C_TMP_I.detalii2) If EMPTY(VAL(Alltrim(C_TMP_I.credit))) Replace tip With "D" msuma = Abs(Val(C_TMP_I.debit)) If "Ben:" $ C_TMP_I.detalii2 mstarttert = At("Ben:", mexplicatie) + 5 mstartcont = At("Cont:", mexplicatie) + 6 mtert = Substr(mexplicatie, mstarttert, mstartcont - mstarttert - 8) miban = Substr(mexplicatie, mstartcont, 24) Endif Else Replace tip With "C" msuma = Abs(Val(C_TMP_I.credit)) If "Platitor:" $ C_TMP_I.detalii2 mstarttert = At("Platitor:", mexplicatie) + 10 mstartcont = At("Cont:", mexplicatie) + 6 mtert = Substr(mexplicatie, mstarttert, mstartcont - mstarttert - 8) miban = Substr(mexplicatie, mstartcont, 24) Endif Endif Replace suma With msuma Do Case Case "comision" $ Lower(C_TMP_I.detalii2) Replace tip_2 With "COM" Otherwise Replace tip_2 With "" Endcase mtextoriginal = Alltrim(C_TMP_I.detalii1) + Chr(13) + Alltrim(C_TMP_I.data_op) + " " + Chr(13) + Iif(C_TMP_I.debit <> "0.00", Alltrim(C_TMP_I.debit), Alltrim(C_TMP_I.credit)) + " " + Chr(13) + Alltrim(C_TMP_I.detalii2) Replace nr With Alltrim(Str(Recno())), tert With Upper(mtert), explicatie With mexplicatie, original With mtextoriginal, iban With miban Endscan Endproc * Procedure xmlAsc Lparameters pselectedfile Local oxml, orootnode, orootnodecontext, orootnodecontmisc, ij, npass, onode, nnumlinii, nchildlen, mtextoriginal This.cIBAN = 'XML' mtextoriginal = "" oxml = Createobject('MSXML2.DomDocument') oxml.Async = .F. oxml.Load(pselectedfile) orootnode = oxml.documentelement If Isnull(orootnode) AMessagebox( "Fisier de XML invalid.", 16, "Eroare import extrase" ) Return Endif Do Case Case orootnode.nodename = "document" loNodSold = oxml.selectSingleNode('//opening_balance/balance') If !Isnull(loNodSold) This.nSoldInitial = Val(loNodSold.Text) Endif loNodSold = oxml.selectSingleNode('//closing_balance/balance') If !Isnull(loNodSold) This.nSoldFinal = Val(loNodSold.Text) Endif orootnodecontext = orootnode.childnodes.Item(2) If orootnodecontext.nodename <> "movements" Messagebox( "Format XML invalid.", 64, "Atentie...") Return Endif nnumliniicontext = orootnodecontext.childnodes.Length For ij = 0 To (nnumliniicontext - 1) orootnodecontmisc = orootnodecontext.childnodes.Item(ij) If orootnodecontmisc.nodename <> "movement" Loop Endif nnumlinii = orootnodecontmisc.childnodes.Length m.cf = "" m.tert = "" m.iban = "" m.suma = 0 m.explicatie = "" m.data = {} m.debit = "" m.credit = "" m.suma = "" m.original = "" For npass = 0 To (nnumlinii - 1) olinienode = orootnodecontmisc.childnodes.Item(npass) cvalue = olinienode.Text cparentname = olinienode.nodename Do Case Case cparentname == "ref" m.nr = cvalue Case cparentname == "value_date" m.data = setdategerman(cvalue) Case cparentname = "debit" m.debit = Val(cvalue) Case cparentname = "credit" m.credit = Val(cvalue) Case cparentname == "details" m.explicatie = cvalue Endcase If !Empty(cvalue) m.original = M.original + cvalue + Chr(13) Endif Endfor Select c_iex If m.data >= Ctod("01.01.2015") Insert Into c_iex (Data) Values (m.data) If m.credit = 0 m.suma = M.debit Replace tip With "D", ip With "I" In c_iex Else m.suma = M.credit Replace tip With "C", ip With "P" In c_iex Endif If "comision" $ Lower(m.explicatie) Replace tip_2 With "COM" In c_iex Endif If "in fav." $ M.explicatie mtext1 = Substr(m.explicatie, At( "in fav.", M.explicatie) + 8) mdouapuncte = At(":", mtext1) - 1 If mdouapuncte > 0 m.tert = Substr(mtext1, 1, mdouapuncte) Endif Endif If "Denumire Client:" $ M.explicatie mtext1 = Substr(m.explicatie, At( "Denumire Client:", M.explicatie) + 17) mvirgula = At(",", mtext1) - 1 If mvirgula > 0 m.tert = Substr(mtext1, 1, mvirgula) Endif Endif Gather Memvar Endif Endfor Case orootnode.nodename = "extras" orootnodecontext = orootnode.childnodes.Item(0) If orootnodecontext.nodename <> "cont_ext" AMessagebox( "Format XML invalid.", 64, "Atentie...") Return Endif nnumliniicontext = orootnodecontext.childnodes.Length For ij = 0 To (nnumliniicontext - 1) orootnodecontmisc = orootnodecontext.childnodes.Item(ij) If orootnodecontmisc.nodename <> "cont_misc" Loop Endif nnumlinii = orootnodecontmisc.childnodes.Length m.cf = "" m.tert = "" m.iban = "" m.suma = 0 m.explicatie = "" m.data = {} m.debit = "" m.credit = "" m.suma = "" m.original = "" For npass = 0 To (nnumlinii - 1) olinienode = orootnodecontmisc.childnodes.Item(npass) cvalue = olinienode.Text cparentname = olinienode.nodename Do Case Case cparentname == "nrdoc" m.nr = cvalue Case cparentname == "datadoc" m.data = setdategerman(cvalue) Case cparentname == "platitor" m.cf = Upper(cvalue) Case cparentname == "numepb" m.tert = Upper(cvalue) Case cparentname == "ibanbfpl" m.iban = Upper(cvalue) Case cparentname = "sumad" m.debit = Val(cvalue) Case cparentname = "sumac" m.credit = Val(cvalue) Case cparentname == "explicatii" m.explicatie = cvalue Endcase If !Empty(cvalue) m.original = M.original + cvalue + Chr(13) Endif Endfor Select c_iex If m.data >= Ctod("01.01.2015") Insert Into c_iex (Data) Values (m.data) If m.credit = 0 m.suma = M.debit Replace tip With "D", ip With "I" In c_iex Else m.suma = M.credit Replace tip With "C", ip With "P" In c_iex Endif If "comision" $ Lower(m.explicatie) Replace tip_2 With "COM" In c_iex Endif Gather Memvar Endif Endfor Otherwise AMessagebox( "Format XML invalid.", 64, "Atentie...") Endcase Endproc * Procedure csvAlpha Lparameters pselectedfile Local mtextoriginal This.cIBAN = 'Alpha' mtextoriginal = "" Create Cursor C_TMP_I (data_v C (16), data_t C (16), explicatie C (250), referinta C (60), valuta C (3), suma C (15), tip C (2), valuta1 C (3), sold C (15)) Append From (pselectedfile) Delimited With Char ";" Scan For !Empty(data_t) .And. !Empty(setdategerman(C_TMP_I.data_t)) Select c_iex Insert Into c_iex (Data) Values (setdategerman(Alltrim(C_TMP_I.data_t))) If Alltrim(C_TMP_I.tip) = "C" Replace tip With "C" Else Replace tip With "D" Endif Replace suma With This.setsuma(C_TMP_I.suma) mexplicatie = Alltrim(C_TMP_I.explicatie) Do Case Case "comision" $ Lower(mexplicatie) Replace tip_2 With "COM" Otherwise Replace tip_2 With "" Endcase miban = "" miban = getibanfromstring(mexplicatie, 1) mpoziban = 0 If miban = "RO" mpoziban = At(miban, mexplicatie) Endif mtert = "" mcf = "" If c_iex.tip = "C" If "PLATITOR: " $ mexplicatie mpoztertstart = At( "PLATITOR: ", mexplicatie) + 10 If mpoziban > mpoztertstart mtert1 = Alltrim(Substr(mexplicatie, mpoztertstart, mpoziban - mpoztertstart)) Else mtert1 = Alltrim(Substr(mexplicatie, mpoztertstart, 100)) Endif If "," $ mtert1 mtert = Left(mtert1, At( ",", mtert1) - 1) Else mtert = mtert1 Endif Endif Else If "BENEFICIAR: " $ mexplicatie mpoztertstart = At( "BENEFICIAR: ", mexplicatie) + 12 If (mpoziban - 9) > mpoztertstart mtert1 = Alltrim(Substr(mexplicatie, mpoztertstart, (mpoziban - 9) - mpoztertstart)) Else mtert1 = Alltrim(Substr(mexplicatie, mpoztertstart, 100)) Endif If "," $ mtert1 mtert = Left(mtert1, At( ",", mtert1) - 1) Else mtert = mtert1 Endif Endif Endif mexplicatiereal = "" If "END TO END " $ mexplicatie .Or. "URGENT " $ mexplicatie If "END TO END " $ mexplicatie mpoztertexplfin = At( "END TO END ", mexplicatie) - 1 Else mpoztertexplfin = At( "URGENT ", mexplicatie) - 1 Endif If "DETALII INCASARE: " $ mexplicatie mpoztertexplstart = At( "DETALII INCASARE: ", mexplicatie) + 18 mexplicatiereal = Alltrim(Substr(mexplicatie, mpoztertexplstart, mpoztertexplfin - mpoztertexplstart)) Else If "DETALII PLATA: " $ mexplicatie mpoztertexplstart = At( "DETALII PLATA: ", mexplicatie) + 15 mexplicatiereal = Alltrim(Substr(mexplicatie, mpoztertexplstart, mpoztertexplfin - mpoztertexplstart)) Else mexplicatiereal = mexplicatie Endif Endif Endif Replace tert With mtert, iban With miban, cf With mcf mtextoriginal = C_TMP_I.data_t + " " + Chr(13) + C_TMP_I.suma + " " + Chr(13) + Alltrim(mexplicatie) Replace explicatie With mexplicatiereal, original With mtextoriginal Endscan Endproc * Procedure csvBCR Lparameters pselectedfile Local mtextoriginal, mfilestr, mlen, ij, mpas This.cIBAN = 'BCR' mtextoriginal = "" Create Cursor C_TMP_I (data_e C (10), ora_e C (6), data_i C (10), data_s C (10), valuta C (16), Curs C (16), Cont C (24), tip C (24), titular C (60), sold_i C (15), data_final C (10), ora_fin C (6), detalii C (250), referinta C (60), debit C (15), credit C (15), t_debit C (15), t_credit C (15), sold_f C (15), sume_b C (15), sold_d C (15), plafon C (15)) mfilestr = Filetostr(pselectedfile) If Occurs('""', mfilestr) >= 4 mfilestr = EliminVirguleDintreGhilimele(mfilestr, '""') Else mfilestr = EliminVirguleDintreGhilimele(mfilestr, '"') Endif mfilestr = Strtran(mfilestr, '"', '') Strtofile(mfilestr, m.gcTempPath + "BCRTMP.csv") Select C_TMP_I Append From (m.gcTempPath + "BCRTMP.csv") Csv Delete For Empty(Ctod(C_TMP_I.data_final)) Scan For !Empty(data_final) .And. !Empty(detalii) Select c_iex Insert Into c_iex (Data) Values (Ctod(C_TMP_I.data_final)) If EMPTY(VAL(Alltrim(C_TMP_I.credit))) Replace tip With "D", suma With This.setsuma(C_TMP_I.debit) Else Replace tip With "C", suma With This.setsuma(C_TMP_I.credit) Endif Do Case Case "comision " $ C_TMP_I.detalii .Or. "Operatiuni fara numerar" $ C_TMP_I.detalii Replace tip_2 With "COM" Case "rambursare automata" $ Lower(C_TMP_I.detalii) .Or. "tragere automata" $ Lower(C_TMP_I.detalii) Replace tip_2 With "XXX" Otherwise Replace tip_2 With "TRF" Endcase mnr = Alltrim(Substr(C_TMP_I.referinta, At("Ordin de plata ", C_TMP_I.referinta) + 15, 100)) Replace nr With Left(mnr, At(".", mnr) - 4) mtert = "" mcf = "" If tip = "C" If "Ordonator: " $ C_TMP_I.detalii mtert = Alltrim(Substr(C_TMP_I.detalii, At( "Ordonator: ", C_TMP_I.detalii) + 11, 100)) Endif If "Platitor: " $ C_TMP_I.detalii mtert = Alltrim(Substr(C_TMP_I.detalii, At( "Platitor: ", C_TMP_I.detalii) + 10, 100)) Endif mcf = Alltrim(Str(Val(Alltrim(Substr(C_TMP_I.detalii, At("CODFISC ", C_TMP_I.detalii) + 8, 13))), 13, 0)) Else If "Ordonator: " $ C_TMP_I.detalii mtert = Alltrim(Substr(C_TMP_I.detalii, At( "Ordonator: ", C_TMP_I.detalii) + 11, 100)) Endif If "Beneficiar: " $ C_TMP_I.detalii mtert = Alltrim(Substr(C_TMP_I.detalii, At( "Beneficiar: ", C_TMP_I.detalii) + 12, 100)) Endif If "CODFISC" $ C_TMP_I.detalii mcf = Alltrim(Str(Val(Alltrim(Substr(C_TMP_I.detalii, At( "CODFISC ", C_TMP_I.detalii, Occurs("CODFISC", C_TMP_I.detalii)) + 8, 13))), 13, 0)) Endif Endif If ";" $ mtert mtert = Left(mtert, At(";", mtert) - 1) Else mlen = Len(mtert) mspace = mlen For ij = 1 To mlen If Substr(mtert, ij, 1) == " " mspace = ij Endif If Isdigit(Substr(mtert, ij, 1)) Exit Endif Endfor mtert = Left(mtert, mspace - 1) Endif Replace tert With mtert, cf With Iif(mcf <> "0 ", mcf, "") mexplicatie = Alltrim(Substr(C_TMP_I.detalii, At("Detalii: ", C_TMP_I.detalii) + 9, 100)) mtextoriginal = C_TMP_I.data_final + Chr(13) + Alltrim(C_TMP_I.titular) + Chr(13) + Alltrim(C_TMP_I.Cont) + Chr(13) + Alltrim(C_TMP_I.detalii) + Chr(13) + Alltrim(C_TMP_I.referinta) + Chr(13) + Alltrim(C_TMP_I.debit) + " " + Alltrim(C_TMP_I.credit) Replace explicatie With mexplicatie, original With mtextoriginal, iban With getibanfromstring(C_TMP_I.detalii, 1) Endscan Endproc * Procedure csvBCR2 Lparameters pselectedfile Local mtextoriginal This.cIBAN = 'BCR' mtextoriginal = "" Create Cursor C_TMP_I (c1 C (4), c2 C (24), c3 C (24), data_v C (10), cod_valuta C (24), c6 C (10), c7 C (10), c8 C (24), c9 C (24), suma C (24), tip C (3), c12 C (24), c13 C (24), tert C (100), c15 C (24), c16 C (2), c17 C (4), c18 C (24), cf C (100), c20 C (100), detalii C (100), detalii2 C (60), detalii3 C (60), detalii4 C (100), detalii5 C (100), c26 C (2), c27 C (2), c28 C (24)) Append From (mSelectedFile) Delimited With Char ";" Locate For !Empty(data_v) If Eof() Use In C_TMP_I Create Cursor C_TMP_I (c1 C (4), c2 C (24), c3 C (24), data_v C (10), cod_valuta C (24), c6 C (10), c7 C (10), c8 C (24), suma C (24), tip C (3), c12 C (24), c13 C (24), tert C (100), c15 C (24), c16 C (2), c17 C (4), c18 C (24), c18_1 C (24), c18_2 C (24), cf C (100), detalii C (100), detalii2 C (24), detalii3 C (60), detalii4 C (100), detalii5 C (100), c26 C (2), c27 C (2), c28 C (24)) Append From (mSelectedFile) Delimited With Character, Endif Scan For !Empty(data_v) Select c_iex Insert Into c_iex (Data) Values (setdategerman(C_TMP_I.data_v)) msuma = Thisform.setsuma(C_TMP_I.suma) If "-" $ C_TMP_I.suma Replace tip With "D" Else Replace tip With "C" Endif Replace suma With msuma Do Case Case "com" $ Lower(C_TMP_I.tip) Replace tip_2 With "COM" Otherwise Replace tip_2 With "" Endcase mexplicatie = Alltrim(C_TMP_I.detalii) mexplicatie = Strtran(mexplicatie, " ", " ") If "Detalii: " $ C_TMP_I.detalii mexplicatie = Substr(mexplicatie, At( "Detalii: ", mexplicatie) + 9, 100) Endif miban = getibanfromstring(Alltrim(C_TMP_I.detalii4) + C_TMP_I.detalii5, 1) If "CODFISC" $ C_TMP_I.detalii5 mcf = getdigitsfromstring(Substr(C_TMP_I.detalii5, At("CODFISC", C_TMP_I.detalii5) + 8, 13), 4, 1, ".") Else mcf = "" Endif Replace tert With Upper(C_TMP_I.tert), cf With mcf, iban With miban mtextoriginal = C_TMP_I.data_v + " " + C_TMP_I.tip + " " + Chr(13) + Alltrim(C_TMP_I.suma) + " " + Chr(13) + Alltrim(C_TMP_I.tert) + " " + " " + Chr(13) + Alltrim(C_TMP_I.detalii) + Alltrim(C_TMP_I.detalii2) + Alltrim(C_TMP_I.detalii3) + Alltrim(C_TMP_I.detalii4) + Alltrim(C_TMP_I.detalii5) Replace explicatie With mexplicatie, original With mtextoriginal Endscan Endproc * Procedure csvBRD Lparameters pselectedfile Local mtextoriginal This.cIBAN = 'BRD' mtextoriginal = "" Create Cursor C_TMP_I (c1 C (4), c2 C (24), c3 C (24), data_v C (10), cod_valuta C (24), c6 C (10), c7 C (10), c8 C (24), c9 C (24), suma C (24), tip C (3), c12 C (24), c13 C (24), c14 C (100), c15 C (24), c16 C (2), c17 C (4), c18 C (24), tert C (100), cf C (100), detalii C (100), detalii2 C (100), detalii3 C (100), detalii4 C (100), c25 C (24), c26 C (2), c27 C (2), iban C (24)) Append From (mSelectedFile) Delimited With Char ";" Locate For !Empty(data_v) If Eof() Use In C_TMP_I Create Cursor C_TMP_I (c1 C (4), c2 C (24), c3 C (24), data_v C (10), cod_valuta C (24), c6 C (10), c7 C (10), c8 C (24), suma C (24), tip C (3), c12 C (24), c13 C (24), c14 C (100), c15 C (24), c16 C (2), c17 C (4), c18 C (24), c18_1 C (24), c18_2 C (24), tert C (100), cf C (100), detalii C (100), detalii2 C (100), detalii3 C (100), detalii4 C (100), c25 C (24), c26 C (2), c27 C (2), iban C (24)) Append From (mSelectedFile) Delimited With Character, Endif Scan For !Empty(data_v) Select c_iex Insert Into c_iex (Data) Values (setdategerman(C_TMP_I.data_v)) msuma = This.setsuma(C_TMP_I.suma) If "-" $ C_TMP_I.suma Replace tip With "D" Else Replace tip With "C" Endif Replace suma With ABS(msuma) Do Case Case "com" $ Lower(C_TMP_I.tip) Replace tip_2 With "COM" Case ATC('TransCr-IncIntra',C_TMP_I.detalii) > 0 Replace tip_2 With This.cTipTransfer Otherwise Replace tip_2 With "" Endcase mexplicatie = Alltrim(C_TMP_I.detalii) mexplicatie = Strtran(mexplicatie, " ", " ") If "Detalii: " $ C_TMP_I.detalii mexplicatie = Substr(mexplicatie, At( "Detalii: ", mexplicatie) + 9, 100) Endif Replace tert With ALLTRIM(STRTRAN(Upper(C_TMP_I.tert), 'Dl ','',1,1,1)), cf With getdigitsfromstring(C_TMP_I.cf, 4, 1, ".") mtextoriginal = C_TMP_I.data_v + " " + C_TMP_I.tip + " " + Chr(13) + Alltrim(C_TMP_I.suma) + " " + Chr(13) + Alltrim(C_TMP_I.tert) + " " + Chr(13) + Alltrim(C_TMP_I.c14) + " " + Chr(13) + Alltrim(C_TMP_I.cf) + " " + Chr(13) + Alltrim(C_TMP_I.detalii) + Alltrim(C_TMP_I.detalii2) + Alltrim(C_TMP_I.detalii3) + Alltrim(C_TMP_I.detalii4) + Chr(13) + Alltrim(C_TMP_I.iban) Replace explicatie With mexplicatie, original With mtextoriginal, iban With C_TMP_I.iban Endscan Endproc * Procedure csvBT Lparameters pselectedfile, tnTip * pcSelectedFile: fisierul csv * tnTip: 1 (default) = lista tranzactii, 2 = extras de cont Local mtextoriginal Local lcComerciant, lcDescriereFacturi, lcFacturi, lcLinie, lnLinie, lnLinii, lnPozBuget, lnResults LOCAL mcf, mexplicatie, mfilestr, miban, mtert lnLinii = Alines(This.aLinii, Filetostr(m.pselectedfile), 1) FOR lnLinie = 1 TO lnLinii lcLinie = This.aLinii[m.lnLinie] lcItem = STRTRAN(LOWER(ALLTRIM(GETWORDNUM(m.lcLinie,1,','))), ["], [],1,2) DO CASE CASE m.lcItem = [numar cont:] This.cIBAN = STRTRAN(LEFT(ALLTRIM(syGETWORDNUM(m.lcLinie, 2, ',')), 24), ["], [], 1, 2) IF m.tnTip = 1 && Tip B: "RO32...701 RON" This.cValuta = ALLTRIM(syGETWORDNUM(ALLTRIM(syGETWORDNUM(m.lcLinie, 2, ',')), 2, ' ')) ENDIF CASE m.lcItem = [moneda cont:] && Tip A This.cValuta = ALLTRIM(syGETWORDNUM(m.lcLinie, 2, ',')) CASE m.lcItem = [sold initial:] This.nSoldInitial = VAL(syGETWORDNUM(m.lcLinie, 2, ',')) CASE m.lcItem = [sold final cont:] This.nSoldFinal = VAL(syGETWORDNUM(m.lcLinie, 2, ',')) CASE m.lcItem = [data tranzactie] && capul tabelului de tranzactii EXIT ENDCASE ENDFOR IF EMPTY(this.cIBAN) This.cIBAN = 'BT' ENDIF mtextoriginal = "" IF m.tnTip = 1 && lista de tranzactii * Data tranzactie,Data valuta,Descriere,Referinta tranzactiei,Debit,Credit,Sold contabil Create Cursor C_TMP_I (data_p C (16), data_t C (16), explicatie C (200), referinta C (200), suma_d C (15), suma_c C (15), sold C (15)) ELSE * Data tranzactie,Data valuta,Referinta,Tip tranzactie,Descriere,Debit,Credit Create Cursor C_TMP_I (data_p C (16), data_t C (16), referinta C (200), tipt C (100), explicatie C (200), suma_d C (15), suma_c C (15)) ENDIF mfilestr = Filetostr(pselectedfile) mfilestr = EliminVirguleDintreGhilimele(mfilestr, '"') mfilestr = Strtran(mfilestr, '"', '') * elimin LF din descriere in CSV BT24 se poate sa fie un LF pe linia cu tranzactia + ~~ pe urmatoarea linie mfilestr = Strtran(mfilestr, CHR(10) + '~~', '') * Reunesc liniile rupte: pastrez un \n doar daca e urmat de o data cu an complet (4 cifre) + virgula * Formate suportate: YYYY-MM-DD, / DD/MM/YYYY, / DD.MM.YYYY, / DD-MM-YYYY, / YYYY/MM/DD, / MM/DD/YYYY, mfilestr = Strtranx(mfilestr, "\r?\n(?!(?:\d{4}-\d{2}-\d{2}|\d{2}/\d{2}/\d{4}|\d{2}\.\d{2}\.\d{4}|\d{2}-\d{2}-\d{4}|\d{4}/\d{2}/\d{2}),)", " ", 1, , 1) * Este csv exportat din BT24 sau NeoBT. BT24 are sume negative???? pe debit pentru plati llBT24 = 'sold contabil'$LOWER(mfilestr) Strtofile(mfilestr, m.gcTempPath + "BTTMP.csv") Append From (m.gcTempPath + "BTTMP.csv") Csv IF m.tnTip = 1 AND Reccount() > 0 && Sold contabil pe rand, descrescator: primul da SF, ultimul da SI (invers daca fisierul e crescator) Go Top ldDataPrim = setdategerman(Alltrim(data_t)) lnSoldPrim = This.setsuma(sold) lnDPrim = This.setsuma(suma_d) lnCPrim = This.setsuma(suma_c) Go Bottom ldDataUlt = setdategerman(Alltrim(data_t)) lnSoldUlt = This.setsuma(sold) lnDUlt = This.setsuma(suma_d) lnCUlt = This.setsuma(suma_c) IF m.ldDataPrim >= m.ldDataUlt This.nSoldFinal = m.lnSoldPrim This.nSoldInitial = m.lnSoldUlt - m.lnCUlt - m.lnDUlt ELSE This.nSoldInitial = m.lnSoldPrim - m.lnCPrim - m.lnDPrim This.nSoldFinal = m.lnSoldUlt ENDIF Go Top ENDIF Scan For !Empty(data_t) .And. !Empty(setdategerman(C_TMP_I.data_t)) Select c_iex Insert Into c_iex (Data) Values (setdategerman(Alltrim(C_TMP_I.data_t))) If !EMPTY(VAL(Alltrim(C_TMP_I.suma_d))) Replace tip With "D" Replace suma With This.setsuma(C_TMP_I.suma_d) * Doar pentru export CSV BT24, platile (Debit) au suma negativa * Le inlocuiesc cu suma inversa IF m.llBT24 REPLACE suma WITH -suma ENDIF Else Replace tip With "C" Replace suma With This.setsuma(C_TMP_I.suma_c) ENDIF * Incasare OP;/ROC/FC. 2022047/ 04.02.2022//RFB/4337692;;;;DRAFT DINAMIC CONSTRUCT SRL;RO43OTPV120001427418RO01;OTPVROBU * NEOBT * "30-05-2024","30-05-2024","Incasare OP - canal electronic;f 2024103;ARGENTA SRL;RO86BTRL01401202H76370XX;BTRLRO22;REF: 014ZEXA24151017X","014ZEXA24151017X","","1,184.24 ","2,184.24 " * BT24 * 2024-06-05,2024-06-05,"Incasare OP - canal electronic;F 2024131;MIDIA GREEN ENERGY SA;RO87BTRL01401202716668XX;BTRLRO22;REF: 414ZEXA2415702DU",414ZEXA2415702DU,,"797.30","12,013.14" IF m.tnTip = 1 && lista de tranzactii mexplicatie = Alltrim(C_TMP_I.explicatie) ELSE mexplicatie = Alltrim(C_TMP_I.tipt) + ';' + Alltrim(C_TMP_I.explicatie) ENDIF Do Case Case LEFT(ALLTRIM(LOWER(NVL(mexplicatie,''))), 8) = "comision" OR ; 'comision-atm'$LOWER(NVL(mexplicatie,'')) OR ; 'comision procesare ridicare numerar'$LOWER(NVL(mexplicatie,'')) OR ; 'pachet izi'$LOWER(NVL(mexplicatie,'')) OR ; 'pachet pj'$LOWER(NVL(mexplicatie,'')) Replace tip_2 With This.cTipComisioane Case 'retragere de numerar'$ALLTRIM(LOWER(NVL(mexplicatie,''))) Replace tip_2 With This.cTipDepunere Case 'transfer intern'$ALLTRIM(LOWER(NVL(mexplicatie,''))) Replace tip_2 With This.cTipTransfer Otherwise Replace tip_2 With "" Endcase * platile la Trezorerie (referinta structurata /RFB/) au 3 campuri suplimentare inaintea tertului lnPozBuget = Iif(';/RFB/' $ m.mexplicatie, 3, 0) mtert = ALLTRIM(syGETWORDNUM(m.mexplicatie, 3 + lnPozBuget, ';')) miban = ALLTRIM(syGETWORDNUM(m.mexplicatie, 4 + lnPozBuget, ';')) mcf = "" IF "C.I.F.:" $ m.mexplicatie mcf = getdigitsfromstring(Alltrim(Substr(m.mexplicatie, At("C.I.F.:", m.mexplicatie) + 7, 13)), 4, 1, ".") IF Alltrim(mcf) == Alltrim(gofirma.codfiscalfro) mcf = "" ENDIF ENDIF lcDescriereFacturi = ALLTRIM(syGETWORDNUM(m.mexplicatie, 2, ';')) lcFacturi = '' lnResults = GetRegExpAllNumbers(m.lcDescriereFacturi, @m.lcFacturi) IF "TID:" $ m.lcDescriereFacturi AND "valoare tranzactie:" $ m.lcDescriereFacturi * comerciantul din textul EPOS, nu titularul contului propriu lcComerciant = Substr(m.lcDescriereFacturi, At("TID:", m.lcDescriereFacturi) + 4) lcComerciant = Substr(lcComerciant, At(" ", lcComerciant) + 1) lcComerciant = Alltrim(Substr(lcComerciant, 1, At("valoare tranzactie:", lcComerciant) - 1)) Do While !Empty(lcComerciant) And Isdigit(Right(lcComerciant, 1)) lcComerciant = Alltrim(Left(lcComerciant, Rat(" ", lcComerciant))) Enddo IF !Empty(lcComerciant) mtert = lcComerciant ENDIF ENDIF Replace tert With mtert, iban With miban, cf With mcf, documente WITH m.lcFacturi mtextoriginal = C_TMP_I.data_t + " " + Chr(13) + Alltrim(C_TMP_I.suma_d) + "," + Alltrim(C_TMP_I.suma_c) + " " + Chr(13) + Alltrim(mexplicatie) Replace explicatie With mexplicatie, original With mtextoriginal Endscan ENDPROC && csvBT * Procedure csvBT_original Lparameters pselectedfile Local mtextoriginal, misgilimele This.cIBAN = 'BT' mtextoriginal = "" misgilimele = .F. mfilestr = Filetostr(pselectedfile) Strtofile(mfilestr, m.gcTempPath + "BTTMP.csv") lnfilehandle = Fopen(pselectedfile) Do While !Feof(lnfilehandle) mrand = Fgets(lnfilehandle, 1024) If '""' $ mrand misgilimele = .T. If ';",' $ mrand mpozatm1 = At( ';",', mrand) + 1 mrandfinal = Substr(mrand, mpozatm1, 200) mpozvirgulaatm = At( ',', mrandfinal, 2) mrand = Left(mrand, mpozatm1) + '",,""' + Substr(mrand, mpozatm1 + mpozvirgulaatm, 50) Endif mrand = Strtran(mrand, '""";;;;', '""') mrand = Strtran(mrand, '""";;;', '""') mrand = Strtran(mrand, '""";;', '""') mrand = Strtran(mrand, '""";', '""') mrand = Strtran(mrand, '""', '^') mrand = Strtran(mrand, '"', '') mrand = Strtran(mrand, '^', '"') Endif If Substr(mrand, 3, 1) == '-' .Or. Substr(mrand, 3, 1) == '/' .Or. Substr(mrand, 3, 1) == '.' .Or. Left(mrand, 2) == '20' .Or. Left(mrand, 2) == '21' mldata = setdategerman(Left(mrand, At(',', mrand))) mrand1 = Alltrim(Substr(mrand, At(',', mrand, 2) + 1, 1000)) mrand1 = EliminVirguleDintreGhilimele(mrand1, '"') mnrpctvirg = Occurs(';', mrand1) mpozfinexpl1 = At(';', mrand1) Do Case Case mnrpctvirg = 0 mpozfinexpl1 = At(',', mrand1, 1) mpozfinexpl2 = mpozfinexpl1 mpozfinexpl3 = mpozfinexpl1 mpozfinexpl4 = mpozfinexpl1 mpozfinexpl5 = mpozfinexpl1 mpozfinexpl6 = mpozfinexpl5 Case mnrpctvirg = 1 mpozfinexpl2 = At(';', mrand1, 1) mpozfinexpl3 = At(';', mrand1, 1) mpozfinexpl4 = At(';', mrand1, 1) mpozfinexpl5 = At(';', mrand1, 1) mpozfinexpl6 = mpozfinexpl5 Case mnrpctvirg = 2 mpozfinexpl2 = At(';', mrand1, 2) mpozfinexpl3 = At(';', mrand1, 2) mpozfinexpl4 = At(';', mrand1, 2) mpozfinexpl5 = At(';', mrand1, 2) mpozfinexpl6 = mpozfinexpl5 Case mnrpctvirg = 3 mpozfinexpl2 = At(';', mrand1, 2) mpozfinexpl3 = At(';', mrand1, 2) mpozfinexpl4 = At(';', mrand1, 2) mpozfinexpl5 = At(';', mrand1, 3) mpozfinexpl6 = mpozfinexpl5 Case mnrpctvirg = 4 mpozfinexpl2 = At(';', mrand1, 2) mpozfinexpl3 = At(';', mrand1, 2) mpozfinexpl4 = At(';', mrand1, 3) mpozfinexpl5 = At(';', mrand1, 4) mpozfinexpl6 = mpozfinexpl5 Otherwise mpozfinexpl2 = At(';', mrand1, 2) mpozfinexpl3 = At(';', mrand1, 3) mpozfinexpl4 = At(';', mrand1, 4) mpozfinexpl5 = At(';', mrand1, 5) mpozfinexpl6 = At(';', mrand1, 6) Endcase mlexplicatie1 = Substr(mrand1, 1, mpozfinexpl1 - 1) mlexplicatie2 = Substr(mrand1, mpozfinexpl1 + 1, mpozfinexpl2 - mpozfinexpl1 - 1) mpoz3 = Substr(mrand1, mpozfinexpl3 + 1, mpozfinexpl4 - mpozfinexpl3 - 1) mpoz4 = Substr(mrand1, mpozfinexpl4 + 1, mpozfinexpl5 - mpozfinexpl4 - 1) mpoz5 = Substr(mrand1, mpozfinexpl5 + 1, mpozfinexpl6 - mpozfinexpl5 - 1) If (mpoz5 = "RO" .Or. misgilimele) .And. mpoz4 <> "RO" .And. mnrpctvirg <> 5 mltert = mpoz4 mlcont = mpoz5 Else mltert = mpoz3 mlcont = mpoz4 Endif mrand2 = Substr(mrand1, At(',', mrand1, 2) + 1, 1000) mpozvirgulaexpl4 = At( ',', mrand2, 2) If mrand2 = "," mlsumad = "" mlsumac = Strtran(Strtran(Substr(mrand2, 2, mpozvirgulaexpl4 - 2), '"', ''), ',', '') Else mlsumad = Strtran(Strtran(Substr(mrand2, 1, mpozvirgulaexpl4 - 1), '"', ''), ',', '') mlsumac = "" Endif If mldata >= Ctod("01.01.2015") Insert Into c_iex (Data) Values (mldata) If Val(mlsumad) <> 0 mltip = "D" mlsuma = Abs(Val(mlsumad)) Else mltip = "C" mlsuma = Abs(Val(mlsumac)) Endif If "Comision " $ mrand2 .Or. "Comision " $ mlexplicatie1 Replace tip_2 With "COM" In c_iex Endif If mltip = "D" Replace tip With mltip, ip With "I", suma With mlsuma In c_iex Else Replace tip With mltip, ip With "P", suma With mlsuma In c_iex Endif Replace tert With Upper(mltert), explicatie With Iif(Empty(mlexplicatie2), mlexplicatie1, mlexplicatie2), ; iban With mlcont, original With mrand1 In c_iex Endif Endif Enddo Fclose(lnfilehandle) Endproc * Procedure csvCEC Lparameters pselectedfile Local mtextoriginal This.cIBAN = 'CEC' mtextoriginal = "" Create Cursor C_TMP_I (c1 C (10), c2 C (10), c3 C (10), d1 C (10), moneda C (3), s1 C (10), s2 C (10), data_t C (10), data_v C (10), suma C (15), tip_op C (100), nr C (16), c4 C (10), c5 C (10), c6 C (10), c7 C (10), c8 C (10), c9 C (10), c10 C (10), c11 C (10), explicatie1 C (200), explicatie2 C (200), explicatie3 C (200), explicatie4 C (200), explicatie5 C (200)) mfilestr = Filetostr(pselectedfile) mfilestr = Strtran(mfilestr, '"', '') Strtofile(mfilestr, m.gcTempPath + "CECTMP.csv") Select C_TMP_I Append From (m.gcTempPath + "CECTMP.csv") Delimited With Char ";" Delete For Empty(Ctod(C_TMP_I.data_t)) Scan For !Empty(data_t) .And. !Empty(setdategerman(C_TMP_I.data_t)) Select c_iex Insert Into c_iex (Data) Values (setdategerman(C_TMP_I.data_t)) If "-" $ C_TMP_I.suma Replace tip With "D" Else Replace tip With "C" Endif Replace suma With This.setsuma(C_TMP_I.suma) mexplicatie = Alltrim(C_TMP_I.explicatie1) + Alltrim(C_TMP_I.explicatie2) + Alltrim(C_TMP_I.explicatie3) + Alltrim(C_TMP_I.explicatie4) + Alltrim(C_TMP_I.explicatie5) Do Case Case "comision" $ Lower(mexplicatie) .Or. "Abonament Internet Banking" $ mexplicatie Replace tip_2 With "COM" Otherwise Replace tip_2 With "" Endcase mtert = "" miban = "" mcf = "" mpoziban = 0 mlenexpl = 0 If "Iban Platitor" $ mexplicatie mpoziban = At( "Iban Platitor", mexplicatie) mlenexpl = Len( "Iban Platitor" ) + 1 miban = Substr(mexplicatie, mpoziban + mlenexpl, 24) Endif If "Iban Beneficiar" $ mexplicatie mpoziban = At( "Iban Beneficiar", mexplicatie) mlenexpl = Len( "Iban Beneficiar" ) + 1 miban = Substr(mexplicatie, mpoziban + mlenexpl, 24) Endif If mpoziban <> 0 mexplicatie2 = Substr(mexplicatie, 1, mpoziban - 1) + Substr(mexplicatie, mpoziban + mlenexpl + 1, 300) Else mexplicatie2 = mexplicatie Endif If tip = "C" If "Platitor " $ mexplicatie2 mtert1 = Alltrim(Substr(mexplicatie2, At( "Platitor ", mexplicatie2) + 9, 100)) If "," $ mtert1 mtert = Left(mtert1, At( ",", mtert1) - 1) Else mtert = mtert1 Endif Endif If "CUI/CNP Platitor" $ mexplicatie2 mcf = Alltrim(Str(Val(Alltrim(Substr(mexplicatie2, At( "CUI/CNP Platitor", mexplicatie2) + 17, 13))), 13, 0)) Endif Else If "Beneficiar " $ mexplicatie2 mtert1 = Alltrim(Substr(mexplicatie2, At( "Beneficiar ", mexplicatie2) + 11, 100)) If "," $ mtert1 mtert = Left(mtert1, At( ",", mtert1) - 1) Else mtert = mtert1 Endif Endif If "CUI/CNP Beneficiar" $ mexplicatie2 mcf = Alltrim(Str(Val(Alltrim(Substr(mexplicatie2, At( "CUI/CNP Beneficiar", mexplicatie2) + 19, 13))), 13, 0)) Endif Endif mcf1 = getdigitsfromstring(mcf, 4, 1, ".") If Empty(mcf1) mcf1 = getdigitsfromstring(mcf, 13, 2, ".") Endif Replace tert With mtert, iban With miban, cf With mcf1, nr With C_TMP_I.nr mtextoriginal = C_TMP_I.data_t + " " + Chr(13) + C_TMP_I.suma + " " + Chr(13) + Alltrim(C_TMP_I.nr) + " " + Chr(13) + Alltrim(mexplicatie) If Occurs(",", mexplicatie) > 0 mexplicatie = Left(mexplicatie, At(",", mexplicatie) - 1) Endif Replace explicatie With mexplicatie, original With mtextoriginal Endscan Endproc * Procedure csvCreditEurope Lparameters pselectedfile Local mtextoriginal lnLinii = Alines(This.aLinii, Filetostr(m.pselectedfile), 1) lcLinie = This.aLinii[2] This.cIBAN = syGETWORDNUM(m.lcLinie, 5, ',') IF EMPTY(this.cIBAN) This.cIBAN = 'CreditEurope' ENDIF mtextoriginal = "" Create Cursor C_TMP_I (data_t C (16), data_v C (16), referinta C (20), explicatie C (200), suma_d C (15), suma_c C (15), sold C (15)) mfilestr = Filetostr(pselectedfile) mfilestr = EliminVirguleDintreGhilimele(mfilestr, '"') mfilestr = Strtran(mfilestr, '"', '') Strtofile(mfilestr, m.gcTempPath + "CreditEuropeTMP.csv") Append From (m.gcTempPath + "CreditEuropeTMP.csv") Csv Scan For !Empty(data_t) .And. !Empty(setdategerman(C_TMP_I.data_t)) Select c_iex Insert Into c_iex (Data) Values (setdategerman(Alltrim(C_TMP_I.data_t))) If !EMPTY(VAL(Alltrim(C_TMP_I.suma_d))) Replace tip With "D" Replace suma With This.setsuma(C_TMP_I.suma_d) Else Replace tip With "C" Replace suma With This.setsuma(C_TMP_I.suma_c) Endif mexplicatie = Alltrim(C_TMP_I.explicatie) Do Case Case "comision" $ Lower(mexplicatie) Replace tip_2 With "COM" Otherwise Replace tip_2 With "" Endcase mtert = "" miban = "" mcf = "" mpoztertstart = At(" - ", mexplicatie) + 3 mpoztertfin = At(" : ", mexplicatie) If mpoztertstart > 0 .And. mpoztertfin > 0 mtert = Alltrim(Substr(mexplicatie, mpoztertstart, mpoztertfin - mpoztertstart)) Endif Replace tert With mtert, iban With miban, cf With mcf mtextoriginal = C_TMP_I.data_t + " " + Chr(13) + Alltrim(C_TMP_I.suma_d) + "," + Alltrim(C_TMP_I.suma_c) + " " + Chr(13) + Alltrim(mexplicatie) Replace explicatie With mexplicatie, original With mtextoriginal Endscan Endproc * Procedure csvFanCourier Lparameters pselectedfile Local mtextoriginal This.cIBAN = 'FanCourier' *:Global mfilestr mtextoriginal = "" Create Cursor C_TMP_I (oras C (60), data_awb C (10), suma C (15), nr_awb C (60), expeditor C (60), tert C (100), continut C (60), pc C (60), data_t C (10), card C (20), pe C (60), ramburs C (20), Retur C (20), data_v C (10)) mfilestr = Filetostr(pselectedfile) mfilestr = Strtran(mfilestr, '""""', '') mfilestr = Strtran(mfilestr, '"""', '""') If Occurs('""', Left(mfilestr, At(Chr(13), mfilestr))) >= 4 mfilestr = EliminVirguleDintreGhilimele(mfilestr, '""') Else mfilestr = EliminVirguleDintreGhilimele(mfilestr, '"') Endif mfilestr = Strtran(mfilestr, '"', '') Strtofile(mfilestr, m.gcTempPath + "FANTMP.csv") Select C_TMP_I Append From (m.gcTempPath + "FANTMP.csv") Csv Delete For Empty(Ctod(C_TMP_I.data_t)) Scan For .Not. Empty(data_t) .And. .Not. Empty(setdategerman(C_TMP_I.data_t)) Select c_iex Insert Into c_iex (Data) Values (setdategerman(C_TMP_I.data_t)) Replace tip With "C", suma With This.setsuma(C_TMP_I.suma), tert With Upper(C_TMP_I.tert) mcf = getdigitsfromstring(Alltrim(C_TMP_I.tert), 4, 1, ".") If !EMPTY(Alltrim(mcf)) REPLACE cf WITH mcf Endif mtextoriginal = Alltrim(C_TMP_I.data_t) + " " + Chr(13) + Alltrim(C_TMP_I.suma) + Chr(13) + Alltrim(C_TMP_I.oras) + " " + "AWB " + Alltrim(C_TMP_I.nr_awb) + " " + Alltrim(C_TMP_I.continut) + Chr(13) + Alltrim(C_TMP_I.tert) + Chr(13) + Alltrim(C_TMP_I.pe) + " " + "AWB " + Alltrim(C_TMP_I.ramburs) + " " + Alltrim(C_TMP_I.Retur) + " " + Alltrim(C_TMP_I.card) Replace explicatie With C_TMP_I.tert, original With mtextoriginal Endscan Endproc * * Procedure csvFunCourier Lparameters pselectedfile Local mtextoriginal This.cIBAN = 'FanCourier' *:Global mfilestr mtextoriginal = "" Create Cursor C_TMP_I (oras C (60), data_awb C (10), suma C (15), nr_awb C (60), expeditor C (60), tert C (100), continut C (60), pc C (60), data_t C (10), pe C (60), ramburs C (20), Retur C (20), card C (20)) mfilestr = Filetostr(pselectedfile) mfilestr = Strtran(mfilestr, '""""', '') mfilestr = Strtran(mfilestr, '"""', '""') If Occurs('""', Left(mfilestr, At(Chr(13), mfilestr))) >= 4 mfilestr = EliminVirguleDintreGhilimele(mfilestr, '""') Else mfilestr = EliminVirguleDintreGhilimele(mfilestr, '"') Endif mfilestr = Strtran(mfilestr, '"', '') Strtofile(mfilestr, m.gcTempPath + "FUNTMP.csv") Select C_TMP_I Append From (m.gcTempPath + "FUNTMP.csv") Csv Delete For Empty(Ctod(C_TMP_I.data_t)) Scan For .Not. Empty(data_t) .And. .Not. Empty(setdategerman(C_TMP_I.data_t)) Select c_iex Insert Into c_iex (Data) Values (setdategerman(C_TMP_I.data_t)) Replace tip With "C", suma With This.setsuma(C_TMP_I.suma), tert With Upper(C_TMP_I.tert) mtextoriginal = Alltrim(C_TMP_I.data_t) + " " + Chr(13) + Alltrim(C_TMP_I.suma) + Chr(13) + Alltrim(C_TMP_I.oras) + " " + "AWB " + Alltrim(C_TMP_I.nr_awb) + " " + Alltrim(C_TMP_I.continut) + Chr(13) + Alltrim(C_TMP_I.tert) + Chr(13) + Alltrim(C_TMP_I.pe) + " " + "AWB " + Alltrim(C_TMP_I.ramburs) + " " + Alltrim(C_TMP_I.Retur) + " " + Alltrim(C_TMP_I.card) Replace explicatie With C_TMP_I.tert, original With mtextoriginal Endscan Endproc * Procedure csvFunCourier2 Lparameters pselectedfile Local mtextoriginal This.cIBAN = 'FanCourier' mtextoriginal = "" Create Cursor C_TMP_I (nr_awb C (60), data_awb C (10), tert C (100), oras C (60), expeditor C (60), oras_exp C (60), suma C (15), iban C (24), data_t C (10), continut C (60)) mfilestr = Filetostr(pselectedfile) mfilestr = Strtran(mfilestr, '""""', '') mfilestr = Strtran(mfilestr, '"""', '""') If Occurs('""', Left(mfilestr, At(Chr(13), mfilestr))) >= 4 mfilestr = EliminVirguleDintreGhilimele(mfilestr, '""') Else mfilestr = EliminVirguleDintreGhilimele(mfilestr, '"') Endif mfilestr = Strtran(mfilestr, '"', '') Strtofile(mfilestr, m.gcTempPath + "FUNTMP.csv") Select C_TMP_I Append From (m.gcTempPath + "FUNTMP.csv") Csv Delete For Empty(Ctod(C_TMP_I.data_t)) Scan For !Empty(data_t) .And. !Empty(setdategerman(C_TMP_I.data_t)) Select c_iex Insert Into c_iex (Data) Values (setdategerman(C_TMP_I.data_t)) Replace tip With "C", suma With This.setsuma(C_TMP_I.suma), tert With Upper(C_TMP_I.tert) mtextoriginal = Alltrim(C_TMP_I.data_t) + " " + Chr(13) + Alltrim(C_TMP_I.suma) + Chr(13) + Alltrim(C_TMP_I.oras) + " " + "AWB " + Alltrim(C_TMP_I.nr_awb) + " " + Alltrim(C_TMP_I.continut) + Chr(13) + Alltrim(C_TMP_I.tert) Replace explicatie With C_TMP_I.tert, original With mtextoriginal Endscan Endproc * Procedure csvGaranti Lparameters pselectedfile Local mtextoriginal This.cIBAN = 'Garanti' mtextoriginal = "" Create Cursor C_TMP_I (data_t C (16), explicatie C (254), suma C (15), sold C (15)) Append From (pselectedfile) Delimited With Char ";" Scan For !Empty(data_t) .And. !Empty(setdategerman(C_TMP_I.data_t)) Select c_iex Insert Into c_iex (Data) Values (setdategerman(Alltrim(C_TMP_I.data_t))) If "-" $ C_TMP_I.suma Replace tip With "D" Else Replace tip With "C" Endif Replace suma With ABS(This.setsuma(C_TMP_I.suma)) mexplicatie = STRTRAN(Alltrim(C_TMP_I.explicatie), ' ', ' ',1,100,1) && elimin spatiile duble mexplicatie = STRTRAN(Alltrim(mexplicatie ), ' ', ' ',1,100,1) && elimin spatiile duble mexplicatie = STRTRAN(Alltrim(mexplicatie ), ' ', ' ',1,100,1) && elimin spatiile duble mexplicatie = STRTRAN(Alltrim(mexplicatie ), ' ', ' ',1,100,1) && elimin spatiile duble mexplicatie = STRTRAN(Alltrim(mexplicatie ), ' ', ' ',1,100,1) && elimin spatiile duble Do Case Case "comision" $ Lower(mexplicatie) lcTip2 = This.cTipComisioane Case "dobanda" $ Lower(mexplicatie) lcTip2 = This.cTipDobanzi Case "lichidare depozit" $ Lower(mexplicatie) lcTip2 = This.cTipTransfer Case "constituire depozit" $ Lower(mexplicatie) lcTip2 = This.cTipTransfer Otherwise lcTip2 = "" Endcase mtert = "" miban = "" mcf = "" mpoziban = 0 mlenexpl = 0 If "IBAN platitor:" $ mexplicatie mpoziban = At( "IBAN platitor:", mexplicatie) mlenexpl = Len( "IBAN platitor:" ) + 1 miban = Substr(mexplicatie, mpoziban + mlenexpl, 24) Endif If "IBAN ordonator:" $ mexplicatie mpoziban = At( "IBAN ordonator:", mexplicatie) mlenexpl = Len( "IBAN ordonator:" ) + 1 miban = Substr(mexplicatie, mpoziban + mlenexpl, 24) Endif If "IBAN beneficiar:" $ mexplicatie mpoziban = At( "IBAN beneficiar:", mexplicatie) mlenexpl = Len( "IBAN beneficiar:" ) + 1 miban = Substr(mexplicatie, mpoziban + mlenexpl, 24) Endif If mpoziban <> 0 mexplicatie2 = Substr(mexplicatie, 1, mpoziban - 1) Else mexplicatie2 = mexplicatie Endif If tip = "C" If "Platitor: " $ mexplicatie2 mpoztertstart = At( "Platitor: ", mexplicatie2) + 10 Else mpoztertstart = At( "Ordonator: ", mexplicatie2) + 11 Endif If "Platitor: " $ mexplicatie2 .Or. "Ordonator: " $ mexplicatie2 If mpoziban > mpoztertstart mtert1 = Alltrim(Substr(mexplicatie2, mpoztertstart, mpoziban - mpoztertstart)) Else mtert1 = Alltrim(Substr(mexplicatie2, mpoztertstart, 100)) Endif If "," $ mtert1 mtert = Left(mtert1, At( ",", mtert1) - 1) Else mtert = mtert1 Endif Endif Else mpoztertstart = At( "Beneficiar: ", mexplicatie2) + 12 If "Beneficiar: " $ mexplicatie2 If mpoziban > mpoztertstart mtert1 = Alltrim(Substr(mexplicatie2, mpoztertstart, mpoziban - mpoztertstart)) Else mtert1 = Alltrim(Substr(mexplicatie2, mpoztertstart, 100)) Endif If "," $ mtert1 mtert = Left(mtert1, At( ",", mtert1) - 1) Else mtert = mtert1 Endif Endif Endif mposslash = At("/", mtert) && taie prefixul structurat "N/" din numele tertului If mposslash > 1 .And. Empty(Chrtran(Left(mtert, mposslash - 1), "0123456789", "")) mtert = Substr(mtert, mposslash + 1) Endif If "Cod fiscal:" $ mexplicatie mcftext = Alltrim(Substr(mexplicatie, At("Cod fiscal:", mexplicatie) + 12, 13)) mposslashcf = At("/", mcftext) && cod fiscal structurat ("N/RO/oras,...") pe incasari, nu e CUI If mposslashcf > 1 .And. Empty(Chrtran(Left(mcftext, mposslashcf - 1), "0123456789", "")) mcf = "" Else mcf = getdigitsfromstring(mcftext, 4, 1, ".") If Alltrim(mcf) == Alltrim(gofirma.codfiscalfro) mcf = "" Endif Endif Endif Replace tert With mtert, iban With miban, cf With mcf, tip_2 With m.lcTip2 mtextoriginal = C_TMP_I.data_t + " " + Chr(13) + C_TMP_I.suma + " " + Chr(13) + Alltrim(mexplicatie) If Occurs("Detalii:", mexplicatie) > 0 mexplicatie = Alltrim(Substr(mexplicatie, At("Detalii:", mexplicatie) + 8, 200)) If Left(mexplicatie, 5) == "/ROC/" mexplicatie = Substr(mexplicatie, 6) Endif If "/URI/" $ mexplicatie && retine doar textul dintre /URI/ si urmatorul "/" mposuri = At("/URI/", mexplicatie) + 5 mposslashuri = At("/", Substr(mexplicatie, mposuri)) If mposslashuri > 0 mexplicatie = Substr(mexplicatie, mposuri, mposslashuri - 1) Else mexplicatie = Substr(mexplicatie, mposuri) Endif Endif Endif Replace explicatie With mexplicatie, original With mtextoriginal Endscan Endproc * Procedure csvGaranti_2 Lparameters pselectedfile Local mtextoriginal This.cIBAN = 'Garanti' mtextoriginal = "" Create Cursor C_TMP_I (data_t C (16), data_v C (16), tert C (60), iban C (36), explicatie C (200), suma C (15), sold C (15)) Append From (pselectedfile) Csv Scan For !Empty(data_t) .And. !Empty(setdategerman(C_TMP_I.data_t)) Select c_iex Insert Into c_iex (Data) Values (setdategerman(Alltrim(C_TMP_I.data_t))) If "-" $ C_TMP_I.suma Replace tip With "D" Else Replace tip With "C" Endif Replace suma With ABS(This.setsuma(C_TMP_I.suma)) mexplicatie = Alltrim(C_TMP_I.explicatie) Do Case Case "comision" $ Lower(mexplicatie) lcTip2 = This.cTipComisioane Case "dobanda" $ Lower(mexplicatie) lcTip2 = This.cTipDobanzi Case "lichidare depozit" $ Lower(mexplicatie) lcTip2 = This.cTipTransfer Case "constituire depozit" $ Lower(mexplicatie) lcTip2 = This.cTipTransfer Otherwise lcTip2 = "" Endcase mtert = Alltrim(C_TMP_I.tert) miban = Alltrim(C_TMP_I.iban) Replace tert With mtert, iban With miban, tip_2 WITH m.lcTip2 mtextoriginal = C_TMP_I.data_t + " " + Chr(13) + mtert + " " + Chr(13) + miban + " " + Chr(13) + C_TMP_I.suma + " " + Chr(13) + Alltrim(mexplicatie) If Occurs("Detalii:", mexplicatie) > 0 mexplicatie = Substr(mexplicatie, At("Detalii:", mexplicatie) + 8, 200) Endif Replace explicatie With mexplicatie, original With mtextoriginal Endscan Endproc * Procedure csvIdea Lparameters pselectedfile Local mtextoriginal This.cIBAN = 'Idea' mtextoriginal = "" Create Cursor C_TMP_I (data_t C (10), data_v C (10), referinta C (10), explicatie C (150), tert C (100), suma C (15)) Append From (pselectedfile) Csv Scan For !Empty(data_t) .And. !Empty(setdategerman(C_TMP_I.data_t)) Select c_iex Insert Into c_iex (Data) Values (setdategerman(C_TMP_I.data_t)) If "-" $ C_TMP_I.suma Replace tip With "D" Else Replace tip With "C" Endif Replace suma With This.setsuma(Strtran(Strtran(C_TMP_I.suma, "+", ""), "-", "")) Do Case Case "comis" $ Lower(C_TMP_I.explicatie) .Or. "administrare cont" $ Lower(C_TMP_I.explicatie) Replace tip_2 With "COM" Otherwise Replace tip_2 With "" Endcase mexplicatie = C_TMP_I.explicatie mtert = "" miban = "" If Occurs(":", C_TMP_I.tert) > 0 mtert = Upper(Substr(C_TMP_I.tert, At(":", C_TMP_I.tert) + 2, 100)) Else mtert = Upper(C_TMP_I.tert) Endif Replace tert With mtert mtextoriginal = C_TMP_I.data_t + " " + Chr(13) + C_TMP_I.suma + " " + Chr(13) + C_TMP_I.referinta + " " + Chr(13) + Alltrim(C_TMP_I.explicatie) + " " + Chr(13) + Alltrim(C_TMP_I.tert) Replace explicatie With mexplicatie, original With mtextoriginal Endscan Endproc * Procedure csvIng Lparameters pselectedfile, pltipfisier Local mtextoriginal This.cIBAN = 'ING' mtextoriginal = "" If pltipfisier = 1 Create Cursor C_TMP_I (text1 C (200), field1 C (10), detalii2 C (200), detalii C (200), debit C (15), field3 C (100), credit C (15), credit2 C (15)) Else Create Cursor C_TMP_I (text1 C (200), field1 C (10), detalii2 C (200), detalii C (200), field4 C (10), debit C (15), field3 C (100), credit C (15), credit2 C (15)) Endif Append From (pselectedfile) Csv Replace detalii With detalii2 For Empty(detalii) Replace credit With credit2 For Empty(credit) Locate Select C_TMP_I Do While !Eof() Select C_TMP_I If !Empty(text1) mtextoriginal = Alltrim(text1) If '""' $ text1 mldatatext = Left(text1, At( ",", text1) - 1) Else mldatatext = Alltrim(text1) Endif mldata = setdategerman(mldatatext) If mldata >= Ctod("01.01.2015") Insert Into c_iex (Data) Values (mldata) Select C_TMP_I If '""' $ text1 mloccurence3 = At(",", text1, 3) mloccurence4 = At(",", text1, 4) mlexplicatie1 = Substr(text1, mloccurence3 + 1, mloccurence4 - mloccurence3) mloccurence5 = At(',', text1, 5) mlsumadc = Substr(text1, mloccurence5 + 1, 100) mloccurence1 = At('""', text1, 1) mloccurence2 = At('""', text1, 2) mlsuma = Val(Strtran(Strtran(Substr(text1, mloccurence1 + 2, mloccurence2 - mloccurence1 - 2), ".", ""), ",", ".")) If mlsumadc = '""' mltip = "D" Else mltip = "C" Endif If "comisio" $ Lower(text1) Replace tip_2 With "COM" In c_iex Endif Else mtextoriginal = mtextoriginal + Chr(13) + Alltrim(debit) + " " + Alltrim(field3) + " " + Alltrim(credit) mdebit = Thisform.setsuma(debit) + Thisform.setsuma(field3) If mdebit > 0 mltip = "D" mlsuma = mdebit Else mltip = "C" mlsuma = Thisform.setsuma(credit) Endif If "comisio" $ Lower(detalii) Replace tip_2 With "COM" In c_iex Endif Endif mltert = "" mlcont = "" mlexplicatie2 = "" Skip If mltip = "D" Replace tip With mltip, ip With "I", suma With mlsuma In c_iex Do While Empty(text1) .And. !Eof() mtextoriginal = mtextoriginal + Chr(13) + Alltrim(detalii) If "Detalii:" $ detalii mlexplicatie2 = Alltrim(Strtran(detalii, "Detalii:", "")) Endif If "Terminal:" $ detalii mltert = Alltrim(Strtran(detalii, "Terminal:", "")) Endif If "Beneficiar:" $ detalii mltert = Alltrim(Strtran(detalii, "Beneficiar:", "")) Endif If "In contul:" $ detalii mlcont = Alltrim(Strtran(detalii, "In contul:", "")) Endif Skip Enddo Else Replace tip With mltip, ip With "P", suma With mlsuma In c_iex Do While Empty(text1) .And. !Eof() mtextoriginal = mtextoriginal + Chr(13) + Alltrim(detalii) If "Detalii:" $ detalii mlexplicatie2 = Alltrim(Strtran(detalii, "Detalii:", "")) Endif If "Ordonator:" $ detalii mltert = Alltrim(Strtran(detalii, "Ordonator:", "")) Endif If "Din contul:" $ detalii mlcont = Alltrim(Strtran(detalii, "Din contul:", "")) Endif Skip Enddo Endif Replace tert With Upper(mltert), explicatie With mlexplicatie2, iban With mlcont, original With mtextoriginal In c_iex Loop Else Skip Endif Else Skip Endif Enddo Endproc * Procedure csvIngbusiness Lparameters pselectedfile, pldelimitator, tnTipFisier Local mtextoriginal, mdataop, lcTipTransfer This.cIBAN = 'INGBussiness' mtextoriginal = "" IF m.tnTipFisier = 1 Create Cursor C_TMP_I (nr_cont C (24), data_t C (10), suma C (15), cod_valuta C (3), tip_tran C (150), tert C (100), ; adresa C (100), iban C (24), banca C (200), explicatie C (200), sold C (15), cf c(20)) ELSE * are in plus la inceput sold_i si sold_f Create Cursor C_TMP_I (sold_i C(20), sold_f C(20), nr_cont C (24), data_t C (10), suma C (15), cod_valuta C (3), tip_tran C (150), tert C (100), ; adresa C (100), iban C (24), banca C (200), explicatie C (200), sold C (15), cf c(20)) ENDIF If pldelimitator = ';' Append From (mSelectedFile) Delimited With Char ";" Else mfilestr = Filetostr(pselectedfile) If '""' $ mfilestr mfilestr = Strtran(mfilestr, '"""', '""') mfilestr = EliminVirguleDintreGhilimele(mfilestr, '""', ".") mfilestr = Strtran(mfilestr, '"', '') Endif Strtofile(mfilestr, m.gcTempPath + "INGTmp.csv") Append From (m.gcTempPath + "INGTmp.csv") Delimited With Character, Endif Scan For !Empty(data_t) Select c_iex If Alltrim(C_TMP_I.data_t) = "202" mdataop = Substr(C_TMP_I.data_t, 7, 2) + "." + Substr(C_TMP_I.data_t, 5, 2) + "." + Substr(C_TMP_I.data_t, 1, 4) Else mdataop = Alltrim(C_TMP_I.data_t) Endif If !Empty(Ctod(mdataop)) Insert Into c_iex (Data) Values (setdategerman(mdataop)) msuma = This.setsuma(C_TMP_I.suma) If "-" $ C_TMP_I.suma Replace tip With "D" Else Replace tip With "C" Endif Replace suma With Abs(msuma) lcTipTransfer = Lower(C_TMP_I.tip_tran) Do Case Case "comision" $ m.lcTipTransfer Replace tip_2 With This.cTipComisioane Case 'retragere numerar'$m.lcTipTransfer OR 'depunere numerar'$m.lcTipTransfer Replace tip_2 With This.cTipDepunere Case 'transfer intern'$m.lcTipTransfer Replace tip_2 With This.cTipTransfer Otherwise Replace tip_2 With "" ENDCASE Replace tert With Upper(C_TMP_I.tert), cf WITH ALLTRIM(NVL(C_TMP_I.cf,'')) mexplicatie = Alltrim(C_TMP_I.explicatie) mtextoriginal = C_TMP_I.data_t + " " + Chr(13) + Alltrim(C_TMP_I.suma) + " " + Chr(13) + Alltrim(C_TMP_I.tip_tran) + " " + Chr(13) + Alltrim(C_TMP_I.tert) + Chr(13) + Alltrim(C_TMP_I.iban) + " " + Chr(13) + mexplicatie Replace explicatie With mexplicatie, original With mtextoriginal, iban With C_TMP_I.iban Endif Endscan Endproc * Procedure csvIntesa Lparameters pselectedfile, pisextras Local mtextoriginal This.cIBAN = 'Intesa' mtextoriginal = "" If pisextras = 1 Create Cursor C_TMP_I (data_v C (10), data_t C (10), detalii C (200), Curs C (10), nr C (16), tip C (1), suma C (24)) Else Create Cursor C_TMP_I (data_v C (11), nr C (10), detalii C (200), tert C (10), suma C (24)) Endif mfilestr = Filetostr(pselectedfile) mlen = Len(mfilestr) mfilestr = EliminVirguleDintreGhilimele(mfilestr, '"') mfilestr = Strtran(mfilestr, '"', '') Strtofile(mfilestr, m.gcTempPath + "IntesaTMP.csv") Append From (m.gcTempPath + "IntesaTMP.csv") Csv Scan For !Empty(data_v) mdatatranz = setdategerman(Lower(C_TMP_I.data_v)) If !Empty(mdatatranz) msuma = Thisform.setsuma(C_TMP_I.suma) If msuma <> 0 Select c_iex Insert Into c_iex (Data) Values (mdatatranz) If pisextras = 1 Replace tip With C_TMP_I.tip Else If msuma > 0 Replace tip With "D" Else Replace tip With "C" Endif Endif Replace suma With Abs(msuma) Do Case Case "comision" $ Lower(C_TMP_I.detalii) .Or. "com." $ Lower(C_TMP_I.detalii) Replace tip_2 With "COM" Otherwise Replace tip_2 With "" Endcase miban = getibanfromstring(C_TMP_I.detalii, 1) mtert = "" If "-" $ C_TMP_I.detalii .And. Occurs( "/", C_TMP_I.detalii) >= 2 mpoz1 = At( "-", C_TMP_I.detalii) + 2 mpoz2 = At( "/", C_TMP_I.detalii, 2) mtert = Alltrim(Substr(C_TMP_I.detalii, mpoz1, mpoz2 - mpoz1)) Else If C_TMP_I.detalii = "Incasare" .And. Occurs( "/ ", C_TMP_I.detalii) >= 2 mpoz1 = At( "/ ", C_TMP_I.detalii) + 2 mpoz2 = At( "/ ", C_TMP_I.detalii, 2) - 1 mtert = Substr(C_TMP_I.detalii, mpoz1, mpoz2 - mpoz1) If "," $ mtert mtert = Left(mtert, At( ",", mtert) - 1) Endif Endif Endif If "CUI" $ mtert mtert = Left(mtert, At("CUI", mtert) - 1) Endif mexplicatie = C_TMP_I.detalii If ":" $ C_TMP_I.detalii mpoz1 = At(":", C_TMP_I.detalii) + 2 mexplicatie = Alltrim(Substr(C_TMP_I.detalii, mpoz1, 150)) Endif Replace tert With mtert If "CUI" $ C_TMP_I.detalii mpoz1 = At("CUI", C_TMP_I.detalii) + 4 Replace cf With getdigitsfromstring(Substr(C_TMP_I.detalii, mpoz1, 16), 4, 1, ".") Endif mtextoriginal = C_TMP_I.data_v + Chr(13) + Alltrim(C_TMP_I.suma) + " " + Chr(13) + Alltrim(C_TMP_I.nr) + " " + Chr(13) + Alltrim(C_TMP_I.detalii) Replace explicatie With mexplicatie, original With mtextoriginal, iban With miban Endif Endif Endscan Endproc * Procedure csvPaypal Lparameters pselectedfile Local mtextoriginal This.cIBAN = 'PayPal' mtextoriginal = "" Create Cursor C_TMP_I (data_t C (10), c1 C (10), c2 C (10), detalii1 C (100), cod_valuta C (16), suma C (16), fee C (10), net C (100), ; balance C (10), c3 C (10), email C (60), nume C (100), banca C (10), iban C (24), c5 C (10), c6 C (10), c7 C (10), c8 C (100)) Append From (mSelectedFile) Csv Delete For Empty(C_TMP_I.data_t) Scan For !Empty(data_t) Select c_iex If C_TMP_I.data_t = "202" .Or. !"/" $ C_TMP_I.data_t mdata = setdategerman(C_TMP_I.data_t) Else Set Date To AMERICAN mdata = Ctod(C_TMP_I.data_t) Set Date To German Endif Insert Into c_iex (Data) Values (mdata) If "-" $ C_TMP_I.suma Replace tip With "D" Else Replace tip With "C" Endif Replace suma With This.setsuma(C_TMP_I.suma) Do Case Case "comision" $ Lower(C_TMP_I.detalii1) .Or. "COMMISSION" $ Upper(C_TMP_I.detalii1) Replace tip_2 With "COM" Otherwise Replace tip_2 With "" Endcase Replace tert With Upper(C_TMP_I.nume), cod_valuta With C_TMP_I.cod_valuta mexplicatie = Alltrim(C_TMP_I.detalii1) mtextoriginal = C_TMP_I.data_t + " " + Chr(13) + C_TMP_I.suma + " " + Chr(13) + Alltrim(C_TMP_I.iban) + " " + Chr(13) + Alltrim(C_TMP_I.nume) + " " + Alltrim(C_TMP_I.cod_valuta) + " " + Chr(13) + Alltrim(C_TMP_I.email) + " " + Chr(13) + mexplicatie Replace explicatie With mexplicatie, original With mtextoriginal, iban With C_TMP_I.iban, email With C_TMP_I.email mfee = This.setsuma(C_TMP_I.fee) If mfee > 0 Insert Into c_iex (Data, tip, suma, tip_2, explicatie) Values (mdata, "D", mfee, "COM", "Comision") Endif Endscan Endproc * Procedure csvPayu Lparameters pselectedfile Local mtextoriginal, mfilestr, mlen, ij, mpas This.cIBAN = 'PayU' mtextoriginal = "" Create Cursor C_TMP_I (c01 C (1), c02 C (1), c03 C (1), c04 C (1), c05 C (1), c06 C (1), c07 C (1), ; c08 C (1), c09 C (1), c10 C (1), Data C (10), c12 C (1), c13 C (1), c14 C (1), suma C (15), c16 C (1), ; c17 C (1), c18 C (1), c19 C (1), c20 C (1), c21 C (1), c22 C (1), c23 C (1), c24 C (1), ; firma C (150), client C (150), adresa C (160), telefon C (16), email C (64), oras C (24), ; c60 C (1), c61 C (1), c62 C (1), cnp C (13), cf C (13), nr_i C (15), banca C(60), iban C(250), referinta C(60)) Select C_TMP_I Append From (pselectedfile) Csv Scan For !Empty(Data) Select c_iex Insert Into c_iex (Data) Values (setdategerman(C_TMP_I.Data)) Replace tip With "C", suma With This.setsuma(C_TMP_I.suma) mtert = "" mcf = "" If !Empty(C_TMP_I.firma) mtert = Upper(Alltrim(C_TMP_I.firma)) Else mtert = Upper(Alltrim(C_TMP_I.client)) Endif If !Empty(C_TMP_I.cf) mcf = Alltrim(C_TMP_I.cf) Else mcf = Alltrim(C_TMP_I.cnp) Endif Replace tert With mtert, cf With mcf, iban With C_TMP_I.iban, tel With C_TMP_I.telefon, email With C_TMP_I.email mexplicatie = Alltrim(C_TMP_I.referinta) mtextoriginal = C_TMP_I.Data + Chr(13) + Alltrim(C_TMP_I.firma) + Alltrim(C_TMP_I.client) + Chr(13) + Alltrim(C_TMP_I.cnp) + Alltrim(C_TMP_I.cf) + Chr(13) + Alltrim(C_TMP_I.telefon) + Chr(13) + Alltrim(C_TMP_I.email) + Chr(13) + Alltrim(C_TMP_I.suma) + Chr(13) + Alltrim(C_TMP_I.oras) + " " + Alltrim(C_TMP_I.adresa) Replace explicatie With mexplicatie, original With mtextoriginal Endscan Endproc * Procedure csvStripe Lparameters pselectedfile Local mtextoriginal, mfilestr, mlen, ij, mpas This.cIBAN = 'Stripe' mtextoriginal = "" Create Cursor C_TMP_I (DataC C (25), tip C (30), comanda C (30), client C (150), status C(50), Data C (10), suma C (15), ; comision C (15), sumaneta C (15), referinta c(50)) Select C_TMP_I Append From (pselectedfile) Csv Scan For !Empty(Data) lcData = ALLTRIM(data) ldData = {} lnLuna = VAL(GETWORDNUM(m.lcData,1,'/')) lnZi = VAL(GETWORDNUM(m.lcData,2,'/')) lnAn = VAL(GETWORDNUM(m.lcData,3,'/')) IF BETWEEN(m.lnZi, 1, 31) AND BETWEEN(m.lnLuna, 1, 12) AND BETWEEN(m.lnAn, 2000,2999) TRY ldData = DATE(m.lnAn, m.lnLuna, m.lnZi) CATCH * ENDTRY ENDIF SELECT c_iex Insert Into c_iex (Data) Values (m.ldData) Replace tip With "C", suma With This.setsuma(C_TMP_I.suma) mtert = Upper(Alltrim(C_TMP_I.client)) Replace tert With mtert mexplicatie = Alltrim(C_TMP_I.tip) + ' ' + Alltrim(C_TMP_I.comanda) mtextoriginal = C_TMP_I.Data + Chr(13) + Alltrim(C_TMP_I.client) + Chr(13) + Alltrim(C_TMP_I.suma) + Chr(13) + Alltrim(C_TMP_I.comanda) Replace explicatie With mexplicatie, original With mtextoriginal Endscan Endproc * Procedure csvRaiffeisen Lparameters pselectedfile, pdelimiter Local mtextoriginal This.cIBAN = 'Raiffeisen' mtextoriginal = "" Create Cursor C_TMP_I (data_t C (10), data_v C (10), debit C (15), credit C (15), nr C (15), cf C (15), ordonator C (100), beneficiar C (100), ; nume C(100), banca C (100), iban C (24), detalii C (200)) If pdelimiter = ";" Append From (mSelectedFile) Delimited With Char ";" Else Append From (mSelectedFile) Csv Endif Delete For Empty(Ctod(C_TMP_I.data_t)) Scan For !Empty(data_t) Select c_iex Insert Into c_iex (Data) Values (setdategerman(C_TMP_I.data_t)) If !Empty(C_TMP_I.debit) Replace tip With "D" msuma = This.setsuma(C_TMP_I.debit) Else Replace tip With "C" msuma = This.setsuma(C_TMP_I.credit) Endif Replace suma With msuma Do Case Case "comision" $ Lower(C_TMP_I.detalii) Replace tip_2 With "COM" Otherwise Replace tip_2 With "" Endcase Replace nr With C_TMP_I.nr, tert With Upper(C_TMP_I.nume), cf With Upper(C_TMP_I.cf) mexplicatie = Alltrim(C_TMP_I.detalii) mtextoriginal = C_TMP_I.data_t + " " + Chr(13) + Alltrim(C_TMP_I.debit) + Alltrim(C_TMP_I.credit) + " " + Chr(13) + Alltrim(C_TMP_I.nr) + Chr(13) + Alltrim(C_TMP_I.iban) + " " + Chr(13) + Alltrim(C_TMP_I.nume) + " " + Alltrim(C_TMP_I.cf) + " " + Chr(13) + mexplicatie Replace explicatie With mexplicatie, original With mtextoriginal, iban With C_TMP_I.iban Endscan Endproc * Procedure csvUnicredit Lparameters pselectedfile, pdelimiter Local mtextoriginal This.cIBAN = 'Unicredit' mtextoriginal = "" Create Cursor C_TMP_I (Cont C (24), suma C (15), valuta C (16), data_t C (10), data_v C (10), banca C (10), banca_nume C (100), ; adresa C (10), cont1 C(10), iban C (24), nume C(100), adr1 C (10), adr2 C (10), adr3 C (10), detalii1 C (100), detalii2 C (100), ; detalii3 C (100), detalii4 C (100), detalii5 C (100), detalii6 C (100), detalii7 C (100), detalii8 C (100), detaliip1 C (100), detaliip2 C (100), detaliip3 C (100), ; detaliip4 C (100), detaliip5 C (100), detaliip6 C (100), ; cf C (15), nr C (15), camp2 C (10), camp3 C (10), camp4 C (10), plafon C (15)) If File(m.pselectedfile) lnLinii = Alines(This.aLinii, Filetostr(m.pselectedfile), 1) lnLinii = Iif(Empty(m.lnLinii), 0, m.lnLinii) This.nLinii = m.lnLinii lcLinie = This.aLinii[2] This.cIBAN = syGETWORDNUM(m.lcLinie, 2, ';') This.cValuta = syGETWORDNUM(m.lcLinie, 3, ';') This.nSoldInitial = Val(Strtran(Strtran(syGETWORDNUM(m.lcLinie, 4, ';'), '.', '', 1, 10, 1), ',', '.', 1, 1, 1)) This.nSoldFinal = Val(Strtran(Strtran(syGETWORDNUM(m.lcLinie, 5, ';'), '.', '', 1, 10, 1), ',', '.', 1, 1, 1)) Endif Do Case Case pdelimiter = ";" Append From (mSelectedFile) Delimited With Char ";" Case pdelimiter = Chr(10) .Or. Empty(pdelimiter) Append From (mSelectedFile) Delimited With Char Tab Otherwise Append From (mSelectedFile) Csv Endcase Delete For Empty(Ctod(C_TMP_I.data_t)) Scan For !Empty(data_t) .And. !Empty(setdategerman(C_TMP_I.data_t)) Select c_iex Insert Into c_iex (Data) Values (setdategerman(C_TMP_I.data_t)) If "-" $ C_TMP_I.suma Replace tip With "D" Else Replace tip With "C" Endif Replace suma With This.setsuma(C_TMP_I.suma) Do Case Case "comision" $ Lower(C_TMP_I.detalii1) .Or. "transfond fee" $ Lower(C_TMP_I.detalii1) .Or. ; "COMMISSION" $ Upper(C_TMP_I.detalii1) Or ; ' FEE' $ Upper(C_TMP_I.detalii1) Or 'FEE/' $ Upper(C_TMP_I.detalii1) Or Upper(C_TMP_I.detalii1) = 'FEE' lcTip2 = "COM" Case 'CASH DEPOSIT' $ Upper(C_TMP_I.detalii1) lcTip2 = This.cTipDepunere Case 'BUGETUL DE STAT' $ Upper(C_TMP_I.nume) lcTip2 = This.cTipBuget Case 'PROMISSORY NOTE' $ Upper(C_TMP_I.detaliip1) Or 'PROMISSORY NOTE' $ Upper(C_TMP_I.detalii1) lcTip2 = This.cTipEfecteComerciale Otherwise lcTip2 = This.cTipTerti Endcase Replace nr With C_TMP_I.nr, tert With C_TMP_I.nume, cf With C_TMP_I.cf, tip_2 With m.lcTip2 mexplicatie = Alltrim(Alltrim(C_TMP_I.detalii1) + " " + Alltrim(C_TMP_I.detalii2) + " " + Alltrim(C_TMP_I.detalii3) + " " + ; Alltrim(C_TMP_I.detalii4) + " " + Alltrim(C_TMP_I.detalii5) + " " + ; Alltrim(C_TMP_I.detalii6) + " " + Alltrim(C_TMP_I.detalii7) + " " + Alltrim(C_TMP_I.detalii8) + " " + ; Alltrim(C_TMP_I.detaliip1) + " " + Alltrim(C_TMP_I.detaliip2) + " " + Alltrim(C_TMP_I.detaliip3) + " " + ; Alltrim(C_TMP_I.detaliip4) + " " + Alltrim(C_TMP_I.detaliip5) + " " + Alltrim(C_TMP_I.detaliip6)) mtextoriginal = C_TMP_I.data_t + " " + Chr(13) + C_TMP_I.suma + " " + Chr(13) + Alltrim(C_TMP_I.iban) + " " + Chr(13) + Alltrim(C_TMP_I.nume) + " " + Alltrim(C_TMP_I.cf) + " " + Chr(13) + mexplicatie + " " + Chr(13) + Alltrim(C_TMP_I.nr) * Array sau lista cu numere de facturi separate prin "," daca exista in descriere * (?:( \d+)(?![\.\d])(?!2021).) spatiu apoi cifre, fara . si cifra si fara anul curent (sa excluda datele) lcFacturi = '' lcDescriereFacturi = m.mexplicatie lnResults = GetRegExpAllNumbers(m.lcDescriereFacturi, @m.lcFacturi) Replace explicatie With mexplicatie, original With mtextoriginal, iban With C_TMP_I.iban, documente With m.lcFacturi Endscan Endproc * Procedure csvMobilPay Lparameters pselectedfile Local mtextoriginal, mdata, mexplicatie, msuma, mcomanda, lcTip, lcTip2, lcNr This.cIBAN = 'MobilPay' mtextoriginal = "" Create Cursor C_TMP_I (c1 C (4), c2 C (24), Id C (24), ; data_v C (24), data_o C(10), suma C (24), creditat C (24), comision ; C (10), tva_comis C (10), moneda C (3), c9 C (24), ; c10 C (24), prenume C (36), nume C (36), email C (60), ; tel C (20), descriere C (100)) Append From (mSelectedFile) Delimited With Char, *Locate For .Not. Empty(data_v) Scan For .Not. Empty(data_v) mdata = setdategerman(C_TMP_I.data_v) msuma = This.setsuma(C_TMP_I.suma) mcomision = This.setsuma(C_TMP_I.comision) + This.setsuma(C_TMP_I.tva_comis) lcNr = DTOS(mdata) lcTip2 = '' IF msuma = 0 AND mcomision <> 0 msuma = -ABS(mcomision) lcTip2 = This.cTipComisionDecont ENDIF If !Empty(mdata) And msuma <> 0 Select c_iex Insert Into c_iex (Data) Values (mdata) If msuma < 0 lcTip = "D" Else lcTip = "C" ENDIF * comisioanele au suma negativa msuma = ABS(msuma) mexplicatie = Alltrim(C_TMP_I.descriere) && "Plata comanda SOWB21009885 de la Safetyone" mcomanda = ALLTRIM(STREXTRACT(mexplicatie, 'plata comanda ', ' ', 1, 1+2)) mtextoriginal = Alltrim(C_TMP_I.Id) + " " + C_TMP_I.data_v + " " + Chr(13) + ; Alltrim(C_TMP_I.suma) + " " + Chr(13) + Alltrim(C_TMP_I.nume) + " " + ; Alltrim(C_TMP_I.prenume) + Chr(13) + Alltrim(C_TMP_I.email) + " " + Chr(13) + Alltrim(C_TMP_I.tel) Replace explicatie With mexplicatie, original With mtextoriginal, tel With C_TMP_I.tel, email With C_TMP_I.email, tip_2 WITH m.lcTip2, comenzi WITH mcomanda, ; tert With Upper(Alltrim(C_TMP_I.nume)) + " " + Upper(Alltrim(C_TMP_I.prenume)), tip WITH m.lcTip, suma With msuma, nr WITH m.lcNr Endif Endscan Endproc * Procedure txtPosta Lparameters pselectedfile Local mtextoriginal This.cIBAN = 'POSTA' *:Global mexplicatie, msuma mtextoriginal = "" Create Cursor C_TMP_I (c1 C (24), c2 C (24), nr C (24), data1 C (10), oficiu C (36), tert C (64), adresa C (150), suma C (24), linie C (1), explicatie C (200), data_v C (10)) Append From (mSelectedFile) Delimited With Char ";" Scan For !Empty(data_v) Select c_iex Insert Into c_iex (Data) Values (setdategerman(C_TMP_I.data_v)) msuma = This.setsuma(C_TMP_I.suma) Replace tip With "C", suma With msuma, nr With C_TMP_I.nr mexplicatie = Alltrim(C_TMP_I.explicatie) Replace tert With Upper(C_TMP_I.tert) mtextoriginal = C_TMP_I.data_v + " " + C_TMP_I.c2 + " " + C_TMP_I.nr + " " + Chr(13) + Alltrim(C_TMP_I.suma) + " " + Chr(13) + Alltrim(C_TMP_I.tert) + " " + Chr(13) + Alltrim(C_TMP_I.adresa) + Chr(13) + Alltrim(C_TMP_I.explicatie) Replace explicatie With mexplicatie, original With mtextoriginal Endscan Endproc * Function setsuma Lparameters plsumatext Local ii plsumatext = Alltrim(plsumatext) mlen = Len(plsumatext) For ii = 1 To mlen If !Inlist(Substr(plsumatext, ii, 1), " ", ",", ".", "-", "+", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9") plsumatext = Left(plsumatext, ii - 1) Exit Endif Endfor Do Case Case "." $ Right(Alltrim(plsumatext), 3) Return Val(Strtran(plsumatext, ",", "")) Case "," $ Right(Alltrim(plsumatext), 3) Return Val(Strtran(Strtran(plsumatext, ".", ""), ",", ".")) Otherwise Return Val(Strtran(plsumatext, ",", "")) Endcase Endfunc && SetSuma * * Nu am verificat ce face Function actsume Local mnrrec, lcSelect lcSelec = Select() Select match Do Case Case achitat < neachitat_real Replace is_total With 0 Case achitat = neachitat_real Replace is_total With 1 Case achitat > Total .And. Total > 0 Select (m.lcSelect) Return .F. Endcase If .Not. Eof() mnrrec = Recno() Endif Scan Replace neachitat With neachitat_real - achitat Endscan Sum achitat, neachitat To lnAchitat, lnNeachitat If Type("mNrRec") = "N" Goto mnrrec Endif lnRamas = c_iex.suma - m.lnAchitat If m.lnRamas = 0 Replace asociat With 1 In c_iex Else Replace asociat With 0 In c_iex Endif Select (m.lcSelect) Return .T. Endfunc && ActSume * Enddefine && ExtrasBanca_General * Function ValidCNP Lparameters lpcnp If Len(Alltrim(lpcnp)) <> 13 Return .F. Endif n1 = Val(Substr(lpcnp, 1, 1)) n2 = Val(Substr(lpcnp, 2, 1)) n3 = Val(Substr(lpcnp, 3, 1)) n4 = Val(Substr(lpcnp, 4, 1)) n5 = Val(Substr(lpcnp, 5, 1)) n6 = Val(Substr(lpcnp, 6, 1)) n7 = Val(Substr(lpcnp, 7, 1)) n8 = Val(Substr(lpcnp, 8, 1)) n9 = Val(Substr(lpcnp, 9, 1)) n10 = Val(Substr(lpcnp, 10, 1)) n11 = Val(Substr(lpcnp, 11, 1)) n12 = Val(Substr(lpcnp, 12, 1)) n13 = Val(Substr(lpcnp, 13, 1)) C = Mod((n1 * 2 + n2 * 7 + n3 * 9 + n4 * 1 + n5 * 4 + n6 * 6 + n7 * 3 + n8 * 5 + n9 * 8 + n10 * 2 + n11 * 7 + n12 * 9), 11) If C = 10 C = 1 Endif If C = n13 Return .T. Else Return .F. Endif Endfunc * Function GetDataCNP Lparameters plcnp Local mlan mlan = Substr(plcnp, 2, 2) If Val(mlan) > 20 .And. !Inlist(Left(plcnp, 1), "5", "6") mlan = "19" + mlan Else mlan = "20" + mlan Endif Return Ctod(Substr(plcnp, 6, 2) + "." + Substr(plcnp, 4, 2) + "." + mlan) Endfunc * Function verifcf Lparameters plcfisc Local mlsuma, mlrest plcfisc = getnrfromstring(plcfisc) If Len(Alltrim(plcfisc)) = 13 If !ValidCNP(plcfisc) Return .F. Else Return .T. Endif Else If Len(Alltrim(plcfisc)) < 2 .Or. Len(Alltrim(plcfisc)) > 9 .Or. plcfisc = "0" Return .F. Endif Endif plcfisc = Padl(Alltrim(plcfisc), 10, "0") mlsuma = 0 For I = 1 To 10 mlsuma = mlsuma + Val(Substr(plcfisc, I, 1)) * Val(Substr("753217532", I, 1)) Endfor mlrest = Mod((mlsuma * 10), 11) If mlrest = 10 mlrest = 0 Endif If Val(Substr(plcfisc, 10, 1)) <> mlrest Return .F. Else Return .T. Endif Endfunc * Function NormalizeazaDenumire Lparameters tcDenumire Local lcD, lcUltimulCuvant lcD = Alltrim(Nvl(m.tcDenumire, "")) lcD = Strtran(Strtran(Strtran(Strtran(lcD, Chr(195), "A"), Chr(227), "A"), Chr(194), "A"), Chr(226), "A") lcD = Strtran(Strtran(lcD, Chr(206), "I"), Chr(238), "I") lcD = Strtran(Strtran(lcD, Chr(170), "S"), Chr(186), "S") lcD = Strtran(Strtran(lcD, Chr(222), "T"), Chr(254), "T") lcD = Upper(Strtran(lcD, ".", "")) lcD = Strtran(Strtran(lcD, ",", " "), "-", " ") Do While " " $ lcD lcD = Strtran(lcD, " ", " ") Enddo lcD = Alltrim(lcD) lcUltimulCuvant = Getwordnum(lcD, Getwordcount(lcD)) IF Inlist(lcUltimulCuvant, "SRL", "SA", "PFA", "II", "IF", "SNC", "SCS") AND Getwordcount(lcD) > 1 lcD = Alltrim(Substr(lcD, 1, Len(lcD) - Len(lcUltimulCuvant))) ENDIF IF Getwordnum(lcD, 1) == "SC" AND Getwordcount(lcD) > 1 lcD = Alltrim(Substr(lcD, At(" ", lcD) + 1)) ENDIF Return lcD Endfunc * * -------------------------------------------------------------------- * Cauta partenerul dupa denumire normalizata (fara diacritice/punctuatie/forma juridica) * -------------------------------------------------------------------- Function GetPartenerByDenumireNormalizata Lparameters tcDenumire Private pcDenumireLike Local lcDenNorm, lcSql, llSucces, loPartener loPartener = NULL lcDenNorm = NormalizeazaDenumire(m.tcDenumire) IF Empty(m.lcDenNorm) OR Len(Getwordnum(m.lcDenNorm, 1)) < 3 Return loPartener ENDIF * prefiltru: rateaza candidatul daca primul cuvant din denumirea din baza are diacritice (LIKE e pe coloana bruta, nu normalizata) pcDenumireLike = "%" + Alltrim(Getwordnum(m.lcDenNorm, 1)) + "%" lcSql = [select id_part, denumire from nom_parteneri where sters = 0 and inactiv = 0 ] + ; [and upper(denumire) like ?pcDenumireLike order by id_part] llSucces = goExecutor.oExecuta(m.lcSql, "cDenNormTemp") IF m.llSucces Select cDenNormTemp Scan IF NormalizeazaDenumire(denumire) == m.lcDenNorm loPartener = Createobject("Empty") AddProperty(loPartener, "id_part", id_part) AddProperty(loPartener, "denumire", Alltrim(Nvl(denumire, ""))) EXIT ENDIF Endscan Use In (Select("cDenNormTemp")) ENDIF Return loPartener Endfunc * * -------------------------------------------------------------------- * Contul IBAN al unui procesator de plati/Trezorerie/curier, care nu se salveaza pe partener * -------------------------------------------------------------------- Function EsteIbanInListaNeagra Lparameters tcIban Local lcIban lcIban = Upper(Chrtran(Alltrim(Nvl(m.tcIban, '')), ' ', '')) If Len(m.lcIban) < 8 Return .F. Endif * codul de banca al Trezoreriei Statului ocupa pozitiile 5-8 din IBAN If Substr(m.lcIban, 5, 4) == 'TREZ' Return .T. Endif Return .F. 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, * IBAN-ul nu e deja pe alt partener activ si nu e din lista neagra * -------------------------------------------------------------------- Function PoateSalvaIbanPePartener Lparameters tnIdPartener, tcIban Private pnIdPartener, pcIban Local lcSql, lnExistent If Empty(m.tnIdPartener) Or Empty(m.tcIban) Or EsteIbanInListaNeagra(m.tcIban) Return .F. Endif pnIdPartener = m.tnIdPartener pcIban = Upper(Chrtran(Alltrim(m.tcIban), ' ', '')) lnExistent = 0 lcSql = [select count(*) as nr from nom_parteneri where id_part = ?pnIdPartener ] + ; [and cont_banca is not null and trim(cont_banca) <> ''] If goExecutor.oSelect2Value(m.lcSql, @lnExistent) < 0 Or m.lnExistent > 0 Return .F. && partenerul are deja un cont bancar salvat Endif lnExistent = 0 lcSql = [select count(*) as nr from nom_parteneri where trim(upper(cont_banca)) = ?pcIban ] + ; [and id_part <> ?pnIdPartener and sters = 0 and inactiv = 0] If goExecutor.oSelect2Value(m.lcSql, @lnExistent) < 0 Or m.lnExistent > 0 Return .F. && contul e deja pe alt partener Endif Return .T. Endfunc * * -------------------------------------------------------------------- * Cand denumirea gasita se potriveste la mai multi parteneri activi, alege cel cu facturi * neachitate pe cont (luna curenta); daca niciunul sau mai multi au, intoarce 0 (necompletat) * -------------------------------------------------------------------- Function AlegePartenerDenumireAmbigua Lparameters tnIdPartener, tcDenumire, tcTip Private pcDenumire, pcCont Local lcSql, llSucces, lcGrupIdLista, lnRezultat pcDenumire = Upper(Alltrim(m.tcDenumire)) pcCont = Iif(Upper(Alltrim(m.tcTip)) = "D", "401", "4111") lcSql = [select id_part from nom_parteneri where trim(upper(denumire)) = ?pcDenumire and sters = 0 and inactiv = 0] llSucces = goExecutor.oExecuta(m.lcSql, "cDenumireAmbigua") If !m.llSucces Or Reccount("cDenumireAmbigua") <= 1 If Used("cDenumireAmbigua") Use In (Select("cDenumireAmbigua")) Endif Return m.tnIdPartener Endif lcGrupIdLista = "" Select cDenumireAmbigua Scan lcGrupIdLista = m.lcGrupIdLista + Iif(Empty(m.lcGrupIdLista), "", ",") + Transform(id_part) Endscan Use In (Select("cDenumireAmbigua")) lcSql = [select p.id_part from nom_parteneri p where p.sters = 0 and p.inactiv = 0 and p.id_part in (] + m.lcGrupIdLista + [) ] + ; [and exists (select 1 from ireg_parteneri i where i.an = ?gnAn and i.luna = ?gnLuna ] + ; [and i.id_part = p.id_part and i.cont = ?pcCont ] + m.gcCondSucursala + ; [and (i.precdeb + i.debit - i.preccred - i.credit) <> 0)] llSucces = goExecutor.oExecuta(m.lcSql, "cCuFacturi") lnRezultat = 0 If m.llSucces And Reccount("cCuFacturi") = 1 Select cCuFacturi lnRezultat = id_part Endif If Used("cCuFacturi") Use In (Select("cCuFacturi")) Endif Return m.lnRezultat Endfunc * * -------------------------------------------------------------------- * Text normalizat pentru cheia invatata din istoric: fara diacritice/punctuatie/forma juridica * (NormalizeazaDenumire), fara cuvinte scurte/cu cifre (sume, date, numere de document, referinte) - * denumirea e la coada textului ('explicatie+denumire+cod_fiscal', OPI CreeazaNote), deci iau * ultimele 3 cuvinte utile ramase, nu primele (primele sunt aproape mereu referinta operatiei) * -------------------------------------------------------------------- Function TextIstoricNormalizat Lparameters tcText Local lcD, lcTok, lcRez, lnW, lnI, lnUtile Dimension laUtile(1) lcD = NormalizeazaDenumire(m.tcText) lnUtile = 0 lnW = Getwordcount(m.lcD) For lnI = 1 To m.lnW lcTok = Getwordnum(m.lcD, m.lnI) If Len(m.lcTok) >= 3 And Chrtran(m.lcTok, '0123456789', '') == m.lcTok lnUtile = m.lnUtile + 1 Dimension laUtile(m.lnUtile) laUtile(m.lnUtile) = m.lcTok Endif Endfor * sufix juridic ramas la coada (dupa ce cifrele/referintele au fost deja scoase) If m.lnUtile > 0 And Inlist(laUtile(m.lnUtile), "SRL", "SA", "PFA", "II", "IF", "SNC", "SCS") lnUtile = m.lnUtile - 1 Endif If m.lnUtile < 2 Return '' Endif lcRez = '' For lnI = Max(1, m.lnUtile - 2) To m.lnUtile lcRez = m.lcRez + Iif(Empty(m.lcRez), '', ' ') + laUtile(m.lnI) Endfor Return m.lcRez Endfunc * * -------------------------------------------------------------------- * Cauta id_part in cursorul cCheieInvatata (construit o singura data per import) dupa cheia * invatata din textul brut al liniei curente; 0 daca cursorul lipseste sau cheia nu e cunoscuta * -------------------------------------------------------------------- Function CautaPartenerDinIstoric Lparameters tcTextBrut Local lcCheie If !Used("cCheieInvatata") Return 0 Endif lcCheie = TextIstoricNormalizat(m.tcTextBrut) If Empty(m.lcCheie) Return 0 Endif If Seek(m.lcCheie, "cCheieInvatata", "cheie") Return cCheieInvatata.id_part Endif Return 0 Endfunc * Function SoldMT940 Lparameters tcRand Return Iif(Substr(m.tcRand, 6, 1) = 'D', -1, 1) * Val(Strtran(Substr(m.tcRand, 16), ',', '.')) Endfunc * Function getnrfromstring Lparameters plstr Local mlenstr mlenstr = Len(Alltrim(plstr)) Do While Isalpha(plstr) .Or. Left(plstr, 1) == " " .Or. Left(plstr, 1) == "&" .Or. Left(plstr, 1) == "/" .Or. Left(plstr, 1) == "-" .Or. Left(plstr, 1) == "_" .Or. Left(plstr, 1) == "." .Or. Left(plstr, 1) == ":" plstr = Rtrim(Substr(plstr, 2, mlenstr)) Enddo Return plstr Endfunc * Function getdigitsfromstring Lparameters plstr, plnrdigits, pltip, plseparator Local mlenstr, ii, mreturnnrintermed, mreturnnrfinal mlenstr = Len(Alltrim(plstr)) mreturnnrintermed = "" mreturnnrfinal = "" For ii = 1 To mlenstr mcurentchar = Substr(plstr, ii, 1) If Isdigit(mcurentchar) .Or. (pltip = 3 .And. Inlist(mcurentchar, ".", ",")) mreturnnrintermed = mreturnnrintermed + mcurentchar Else If pltip = 1 .Or. pltip = 2 mreturnnrintermed = "" Endif Endif If Len(mreturnnrintermed) >= plnrdigits Do Case Case pltip = 1 If Len(mreturnnrintermed) <= 12 .And. verifcf(mreturnnrintermed) .And. !Isdigit(Substr(plstr, ii + 1, 1)) mreturnnrfinal = mreturnnrintermed Exit Endif Case pltip = 2 If ValidCNP(mreturnnrintermed) mreturnnrfinal = mreturnnrintermed Exit Endif Case pltip = 3 mreturnnrintermed = Strtran(mreturnnrintermed, plseparator, "") If Val(mreturnnrintermed) > 0 mreturnnrfinal = mreturnnrintermed Exit Endif Endcase Endif Endfor Return mreturnnrfinal Endfunc * Function getibanfromstring Lparameters plstr, plpoz Local mlenstr, ii, mreturnnrintermed, mreturnnrfinal mlenstr = Len(Alltrim(plstr)) mreturnnrintermed = "" mreturnnrfinal = "" misok = .F. For ii = 1 To mlenstr mcurentchar = Substr(plstr, ii, 1) If misok If Len(mreturnnrintermed) < 24 mreturnnrintermed = mreturnnrintermed + mcurentchar Else Exit Endif Else If mcurentchar == "R" .And. mreturnnrintermed = "" .And. Substr(plstr, ii + 1, 1) == "O" mreturnnrintermed = mreturnnrintermed + mcurentchar Else If mcurentchar == "O" .And. mreturnnrintermed = "R" mreturnnrintermed = mreturnnrintermed + mcurentchar Else If !misok .And. Inlist(mcurentchar, "1", "2", "3", "4", "5", "6", "7", "8", "9", "0") .And. mreturnnrintermed = "RO" .And. Len(mreturnnrintermed) <= 3 mreturnnrintermed = mreturnnrintermed + mcurentchar If plpoz = 1 misok = .T. Else mreturnnrintermed = "" plpoz = plpoz - 1 Endif Else mreturnnrintermed = "" Endif Endif Endif Endif Endfor If verifiban(mreturnnrintermed) Return mreturnnrintermed Else Return "" Endif Endfunc * Function getnumberincrement Lparameters pactualnumber Local mstartchr, mintermed mstartchr = "" mintermed = Alltrim(pactualnumber) mlennr = Len(mintermed) Do While Isalpha(mintermed) .Or. Left(mintermed, 1) == " " .Or. Left(mintermed, 1) == "-" .Or. Left(mintermed, 1) == "." .Or. Left(mintermed, 1) == "/" mstartchr = mstartchr + Left(mintermed, 1) mintermed = Rtrim(Substr(mintermed, 2, 16)) Enddo Return Round(Val(Strtran(Strtran(mintermed, "e", ""), "E", "")), 0) Endfunc * Function GetSerieIncrement Lparameters pactualnumber Local mstartchr, mintermed mstartchr = "" mintermed = Alltrim(pactualnumber) mlennr = Len(mintermed) Do While Isalpha(mintermed) .Or. Inlist(Left(mintermed, 1), " ", ".", "/", "-") mstartchr = mstartchr + Left(mintermed, 1) mintermed = Rtrim(Substr(mintermed, 2, 16)) Enddo Return mstartchr Endfunc * * Function setdategerman Lparameters pldatatext Local mdatar, mlzi, mlluna, mlan, mlunatext, lcSetDate *:Global mlocc, mlocc1 lcSetDate = Set("Date") If "ian" $ pldatatext .Or. "feb" $ pldatatext .Or. "mar" $ pldatatext .Or. "apr" $ pldatatext .Or. "mai" $ pldatatext .Or. "iun" $ pldatatext .Or. "iul" $ pldatatext .Or. "aug" $ pldatatext .Or. "sep" $ pldatatext .Or. "oct" $ pldatatext .Or. "noi" $ pldatatext .Or. "dec" $ pldatatext .Or. "jan" $ pldatatext .Or. "may" $ pldatatext .Or. "jun" $ pldatatext .Or. "jul" $ pldatatext .Or. "nov" $ pldatatext mlocc = At(" ", pldatatext, 2) mlocc1 = At(" ", pldatatext, 1) If mlocc = 0 mlocc = At("-", pldatatext, 2) mlocc1 = At("-", pldatatext, 1) If mlocc = 0 mlocc = At(".", pldatatext, 2) mlocc1 = At(".", pldatatext, 1) Endif Endif mlzi = Substr(pldatatext, 1, mlocc1 - 1) mlunatext = Lower(Substr(pldatatext, mlocc1 + 1, mlocc - 3)) mlluna = "" Do Case Case mlunatext = "ian" .Or. mlunatext = "jan" mlluna = "01" Case mlunatext = "feb" mlluna = "02" Case mlunatext = "mar" mlluna = "03" Case mlunatext = "apr" mlluna = "04" Case mlunatext = "mai" .Or. mlunatext = "may" mlluna = "05" Case mlunatext = "iun" .Or. mlunatext = "jun" mlluna = "06" Case mlunatext = "iul" .Or. mlunatext = "jul" mlluna = "07" Case mlunatext = "aug" mlluna = "08" Case mlunatext = "sep" mlluna = "09" Case mlunatext = "oct" mlluna = "10" Case mlunatext = "noi" .Or. mlunatext = "nov" mlluna = "11" Case mlunatext = "dec" mlluna = "12" Endcase mlan = Substr(pldatatext, mlocc + 1, 4) mdatar = Ctod(mlzi + "." + mlluna + "." + mlan) Else pldatatext = Substr(pldatatext, 1, 10) If "," $ pldatatext pldatatext = Left(pldatatext, At(",", pldatatext) - 1) Endif mdatar = {} If Substr(pldatatext, 3, 1) == '/' .Or. Substr(pldatatext, 2, 1) == '/' mdatar = Ctod(Strtran(pldatatext, "/", ".")) Else If Left(pldatatext, 3) == '201' .Or. Left(pldatatext, 3) == '202' Set Date To Japan If "-" $ pldatatext .Or. "/" $ pldatatext mdatar = Ctod(Strtran(pldatatext, "-", "/" )) Else mdatar = Ctod(Substr(pldatatext, 1, 4) + "/" + Substr(pldatatext, 5, 2) + "/" + Substr(pldatatext, 7, 2)) Endif Set Date To German Else mdatar = Ctod(pldatatext) Endif Endif Endif Set Date &lcSetDate Return mdatar Endfunc * Function EliminVirguleDintreGhilimele Lparameters plstring, pltipghilimele, plinlocuitor Local mnrghilimele, mlen, mstartghilimele, ij mlen = Len(plstring) mnrghilimele = Len(pltipghilimele) mstartghilimele = 0 For ij = 1 To mlen If Substr(plstring, ij, mnrghilimele) = pltipghilimele If mstartghilimele = 0 mstartghilimele = 1 Else mstartghilimele = 0 Endif Endif If Substr(plstring, ij, 1) = ',' .And. mstartghilimele = 1 If Type("plInlocuitor") = "C" plstring = Substr(plstring, 1, ij - 1) + plinlocuitor + Alltrim(Substr(plstring, ij + 1, 2000000)) Else plstring = Substr(plstring, 1, ij - 1) + Alltrim(Substr(plstring, ij + 1, 2000000)) Endif mlen = mlen - 1 ij = ij - 1 Endif Endfor Return plstring Endfunc * -------------------------------------------------------------------- * Intoarce numarul de rezultate * Parametrul tcItems (OUT) o lista cu numere separate prin virgula din textul original * -------------------------------------------------------------------- Function GetRegExpAllNumbers Lparameters tcSourceString, tcItems * tcSourceString: Bld. Stefan cel Mare 14 Tirgu Neamt * tcPattern: [A-Za-z\s]+$ = (caracter sau spatiu) de cel putin o data la sfarsitul liniei = Tirgu Neamt * tcPattern: \d+[A-Za-z\s]+$ = oricate cifre (caracter sau spatiu) de cel putin o data la sfarsitul liniei = 14 Tirgu Neamt * taItems "A">taItems : array cu rezultatele (OUT) taItems[1..Result] sau taItems "C" lista facturi separate prin virgula Local lnResults, lcPattern, lcAn, lcAn2, lcSourceString *!* lcRegExp = "(\d)+" *!* lcRegExp = "(?select id_part from nom_parteneri where replace(UPPER(cod_fiscal),' ', '') = replace(UPPER(?pcCodFiscal), ' ', '') and sters = 0 and inactiv = 0??cCursor=>cClientiROA]) Local lcAdresa, lcAdreseParteneri, lcApart, lcBanca, lcBloc, lcCod_fiscal, lcCodpostal, lcCont_Banca Local lcCorespDel, lcDA_apare, lcDenumire, lcDenumire_adresa, lcEmail, lcEtaj, lcFax, lcIdPart Local lcIdString, lcId_Judet, lcId_categ_ent, lcId_loc, lcId_loc_inreg, lcId_tara, lcId_util, lcItem Local lcJudet, lcJudetBucuresti, lcLocalitate, lcMesaj, lcMotiv_inactiv, lcNumar, lcNume, lcPrefix Local lcPrenume, lcPrincipala, lcReg_comert, lcScara, lcSelect, lcSql, lcSqlCod, lcSqlDenumire Local lcSqlInsert, lcSqlPart, lcStrada, lcSufix, lcTara, lcTelefon1, lcTelefon2, lcTip_persoana Local lcWeb, lcinactiv, llCallBack, llSucces, lnIdJudet, lnIdJudetBucuresti, lnIdLocalitateBucuresti Local lnIdTaraRO, lnItem, lnItems, lnSucces Local lcCuiNorm Private pnIdAdresa, pcCodFiscal, pcDenumire, pnIdPart, pnNrAdrese, pnIdJudet llCallBack = Type('toCallBackForm') = 'O' And Pemstatus(m.toCallBackForm, 'trace', 5) pnIdJudet = 0 pcCodFiscal = '' pcDenumire = '' pnIdPart = 0 pnNrAdrese = 0 lcSelect = Select() lcSqlPart = [select id_part, cod_fiscal, denumire from nom_parteneri where sters = 0 and inactiv = 0] llSucces = goExecutor.oExecuta(m.lcSqlPart, 'cParteneriSql') If !m.llSucces Return m.llSucces Endif *!* 20.08.2026 sursa nu poate fi si destinatie la INTO CURSOR (eroare 24 - alias deja folosit) Select id_part, cod_fiscal, denumire, Padr(NormalizeazaCUI(cod_fiscal), Len(cod_fiscal), ' ') As cui_norm From cParteneriSql Into Cursor cParteneriROA Readwrite Use In (Select('cParteneriSql')) Index On cui_norm Tag cuinorm lcAdreseParteneri = [select id_adresa, id_part, localitate, id_loc, judet, id_judet, tara, id_tara from vadrese_parteneri] llSucces = goExecutor.oExecuta(m.lcAdreseParteneri, 'cAdreseROA') If !m.llSucces Use In (Select('cParteneriROA')) Return m.llSucces Endif *!* lcSqlCod = [select MAX(id_part) as id_part from nom_parteneri where replace(UPPER(cod_fiscal),' ', '') = ?pcCodFiscal and sters = 0 and inactiv = 0] *!* lcSqlDenumire = [select MAX(id_part) as id_part from nom_parteneri where denumire = ?pcDenumire and sters = 0 and inactiv = 0] Select (m.tcCursorParteneri) Scan pcCodFiscal = Alltrim(Upper(Strtran(cod_fiscal, ' ', ''))) pcDenumire = Alltrim(Upper(denumire)) IF LEN(m.pcCodFiscal) <= 3 pcCodFiscal = '' ENDIF pnIdPart = 0 lcAdresa = Iif(Type(m.tcCursorParteneri + '.adresa') = 'C', Strtran(Alltrim(Upper(Nvl(adresa, ''))), Chr(13), ' '), '') * Preciziei (Strada), Nr. 6M, Complex rezidential TEN BLOCKS Bl. 8B, Sc. 1, Et. 6, Ap. 32, Cod Postal 062203, Bucuresti, Romania * Doinei (Strada), Nr. 94, Et. 2, Ap. 12 int 412, Cod Postal 077086, Fundeni, Romania * Lieberman Partners Srl Braniste Valeriu (Strada), Nr. 37-39, Et. 2, Ap. 8, Cod Postal 030715, Bucuresti, Romania Wait Window 'Import parteneri... Caut partenerul ' + Transform(Recno()) + '/' + Transform(Reccount()) Nowait Select cParteneriROA If !Empty(m.pcCodFiscal) Locate For Alltrim(Strtran(cod_fiscal, ' ', '')) = m.pcCodFiscal *!* lnSucces = goExecutor.oSelect2Value(m.lcSqlCod, @pnIdPart) If !Found() lcCuiNorm = NormalizeazaCUI(m.pcCodFiscal) If !Empty(m.lcCuiNorm) Seek m.lcCuiNorm Order cuinorm Endif Endif Else Locate For Alltrim(Upper(denumire)) = m.pcDenumire *!* lnSucces = goExecutor.oSelect2Value(m.lcSqlDenumire, @pnIdPart) Endif *!* If m.lnSucces = -1 *!* Thisform.trace('Eroare la selectia din clienti ROA ' + goExecutor.oPrelucrareEroare()) *!* Exit *!* Endif If Found() pnIdPart = cParteneriROA.id_part Endif If !Empty(Nvl(m.pnIdPart, 0)) Select (m.tcCursorParteneri) Replace id_part With m.pnIdPart lcMesaj = 'Partener existent ' + Alltrim(denumire) + ' CUI: ' + Alltrim(cod_fiscal) + ' ID: ' + Alltrim(Transform(id_part)) If m.llCallBack m.toCallBackForm.trace(m.lcMesaj) Endif Else * Adaugare clienti Select (m.tcCursorParteneri) lcDenumire = Left(Nvl(Strtran(Alltrim(Upper(denumire)), ['], ['']), ""), 100) lcNume = Left(Nvl(Strtran(Alltrim(Upper(nume)), ['], ['']), ""), 100) lcPrenume = Left(Nvl(Strtran(Alltrim(Upper(prenume)), ['], ['']), ""), 100) If Empty(m.lcNume) lcNume = m.lcDenumire lcPrenume = '' Endif lcCod_fiscal = Upper(Alltrim(cod_fiscal)) IF LEN(m.lcCod_fiscal) <= 3 lcCod_fiscal = '' ENDIF lcReg_comert = Nvl(Alltrim(Upper(reg_com)), "") lcId_loc_inreg = 'NULL' lcId_categ_ent = 'NULL' lcPrefix = "" lcSufix = "" lcTip_persoana = Iif(!Empty(m.lcCod_fiscal) And Len(m.lcCod_fiscal) < 13, "1", "2") lcBanca = "" lcCont_Banca = "" lcinactiv = "0" lcMotiv_inactiv = "" lcIdString = "16" lcCorespDel = "" lcId_util = "-3" lcSqlInsert = [begin pack_def.adauga_partener('] + m.lcDenumire + [','] + m.lcNume + [','] + m.lcPrenume + [','] + m.lcCod_fiscal + [','] + ; M.lcReg_comert + [',] + m.lcId_loc_inreg + [,] + m.lcId_categ_ent + [,'] + m.lcPrefix + [','] + m.lcSufix + [',] + ; M.lcTip_persoana + [,'] + m.lcBanca + [','] + m.lcCont_Banca + [',] + m.lcinactiv + [,'] + m.lcMotiv_inactiv + [',] + ; M.lcId_util + [,'] + m.lcIdString + [','] + m.lcCorespDel + [',?@pnIdPart); end;] llSucces = goExecutor.oExecuta(m.lcSqlInsert) If !Empty(Nvl(m.pnIdPart, 0)) Select (m.tcCursorParteneri) Replace id_part With m.pnIdPart INSERT INTO cParteneriROA (id_part, cod_fiscal, denumire, cui_norm) VALUES (m.pnIdPart, m.lcCod_fiscal, m.lcDenumire, NormalizeazaCUI(m.lcCod_fiscal)) If m.llCallBack m.toCallBackForm.trace('Client nou ' + Alltrim(denumire) + ' CUI: ' + Alltrim(cod_fiscal) + ' ID: ' + Alltrim(Transform(id_part))) Endif Else Select (m.tcCursorParteneri) lcMesaj = 'Eroare la adaugarea in clienti ROA ' + Alltrim(denumire) + ' CUI: ' + Alltrim(cod_fiscal) + Chr(13) + Chr(10) + goExecutor.oPrelucrareEroare() If m.llCallBack m.toCallBackForm.trace(m.lcMesaj) Endif *AMessagebox(m.lcMesaj, 0 + 48, _Screen.Caption ) Exit Endif && !Empty(Nvl(m.pnIdPart,0)) Endif && !Empty(Nvl(m.pnIdPart, 0)) *********************************** * Adresa partener *********************************** If !Empty(m.lcAdresa) Calculate Cnt(id_adresa) For id_part = m.pnIdPart To m.pnNrAdrese In cAdreseROA *!* pnNrAdrese = 0 *!* lnSucces = goExecutor.oSelect2Value([SELECT COUNT(*) as nr FROM adrese_parteneri WHERE id_part = ?pnIdPart], @pnNrAdrese) *!* If m.lnSucces < 0 *!* lcMesaj = goExecutor.cEroare *!* Thisform.trace(m.lcMesaj) *!* AMessagebox(m.lcMesaj, 0 + 48, _Screen.Caption ) *!* Exit *!* Endif lcIdPart = Alltrim(Str(m.pnIdPart)) lcDenumire_adresa = "" lcDA_apare = "0" lcStrada = "" lcNumar = "" lcBloc = "" lcScara = "" lcApart = "" lcEtaj = "" lcId_loc = "NULL" lcLocalitate = "" lcId_Judet = "NULL" lcCodpostal = "NULL" lcId_tara = "NULL" lcTelefon1 = "" lcTelefon2 = "" lcFax = "" lcEmail = "" lcWeb = "" lcPrincipala = Iif(m.pnNrAdrese = 0, "1", "0") lcinactiv = "0" lcId_util = "-3" lnItems = Getwordcount(m.lcAdresa, ',') For lnItem = 1 To m.lnItems lcItem = Alltrim(Getwordnum(m.lcAdresa, m.lnItem, ',')) Do Case Case m.lnItem = 1 && strada lcStrada = Left(Alltrim(m.lcItem), 150) Case 'NR.' $ m.lcItem && nr strada lcNumar = Left(Alltrim(Strtran(m.lcItem, 'NR.', '')), 10) Case 'BL.' $ m.lcItem lcBloc = Left(Alltrim(Strtran(m.lcItem, 'BL.', '')), 30) Case 'SC.' $ m.lcItem lcScara = Left(Alltrim(Strtran(m.lcItem, 'SC.', '')), 10) Case 'ET.' $ m.lcItem lcEtaj = Left(Alltrim(Strtran(m.lcItem, 'ET.', '')), 20) Case 'AP.' $ m.lcItem lcApart = Left(Alltrim(Strtran(m.lcItem, 'AP.', '')), 10) Case 'COD POSTAL' $ m.lcItem lcCodpostal = Alltrim(Str(Int(Val(Left(Alltrim(Strtran(m.lcItem, 'COD POSTAL', '')), 20))))) Case 'LOC.' $ m.lcItem lcLocalitate = Alltrim(Strtran(m.lcItem, 'LOC.', '')) Case 'JUD.' $ m.lcItem lcJudet = Alltrim(Strtran(m.lcItem, 'JUD.', '')) Case m.lnItem = m.lnItems - 1 And Empty(m.lcLocalitate) lcLocalitate = m.lcItem Case m.lnItem = m.lnItems lcTara = m.lcItem Endcase Endfor lnIdJudetBucuresti = 10 lcJudetBucuresti = "BUCURESTI" lnIdLocalitateBucuresti = 1759 lnIdTaraRO = 1 If m.lcLocalitate = 'BUCURESTI' lcLocalitate = 'BUCURESTI SECTORUL 1' Endif If Empty(m.lcLocalitate) lcLocalitate = 'BUCURESTI SECTORUL 1' Endif If Empty(m.lcJudet) lcJudet = m.lcJudetBucuresti Endif * caut adresa dupa localitate. daca nu o gasesc, o adaug Select cAdreseROA Locate For id_part = m.pnIdPart And localitate = m.lcLocalitate If !Found() pnIdJudet = 0 llSucces = goExecutor.oSelecteaza2Value([select j.id_judet, j.id_tara from syn_nom_judete j where j.judet = '] + m.lcJudet + [' and j.inactiv = 0 and j.sters = 0], @m.pnIdJudet) If m.llSucces If Empty(Nvl(m.pnIdJudet, 0)) llSucces = goExecutor.oSelecteaza2Value([select j.id_judet, j.id_tara from syn_nom_judete j where j.judet like '%] + m.lcJudetBucuresti + [%' and j.inactiv = 0 and j.sters = 0], @m.pnIdJudet) If m.llSucces lnIdJudet = m.pnIdJudet Else lnIdJudet = m.lnIdJudetBucuresti Endif Else lnIdJudet = m.pnIdJudet Endif Else If m.llCallBack m.toCallBackForm.trace(goExecutor.cEroare) Endif lnIdJudet = m.lnIdJudetBucuresti Endif lcSql = [select l.id_loc, l.id_judet, j.id_tara from syn_nom_localitati l left join syn_nom_judete j on l.id_judet = j.id_judet where l.id_judet = ] + Alltrim(Str(m.lnIdJudet)) + [ and l.localitate = '] + m.lcLocalitate + [' and l.inactiv = 0 and l.sters = 0 order by l.localitate] lnSucces = goExecutor.oExecuta(m.lcSql, 'cLocalitateTemp') If m.llSucces If Reccount('cLocalitateTemp') > 0 Select cLocalitateTemp Go Top lcId_loc = Alltrim(Str(id_loc)) lcId_Judet = Alltrim(Str(id_judet)) lcId_tara = Alltrim(Str(id_tara)) Use In (Select('cLocalitateTemp')) Else Use In (Select('cLocalitateTemp')) lcSql = [select l.id_loc, l.id_judet, j.id_tara from syn_nom_localitati l left join syn_nom_judete j on l.id_judet = j.id_judet where l.id_judet = ] + Alltrim(Str(m.lnIdJudet)) + [ and l.inactiv = 0 and l.sters = 0 order by l.localitate] llSucces = goExecutor.oExecuta(m.lcSql, 'cLocalitateTemp') If m.llSucces Select cLocalitateTemp Go Top lcId_loc = Alltrim(Str(id_loc)) lcId_Judet = Alltrim(Str(id_judet)) lcId_tara = Alltrim(Str(id_tara)) Else If m.llCallBack m.toCallBackForm.trace(goExecutor.cEroare) Endif Endif Use In (Select('cLocalitateTemp')) Endif Else If m.llCallBack m.toCallBackForm.trace(goExecutor.cEroare) Endif Endif If Empty(Nvl(m.lcId_loc, '')) lcId_loc = Alltrim(Str(m.lnIdLocalitateBucuresti)) lcId_Judet = Alltrim(Str(m.lnIdJudetBucuresti)) lcId_tara = Alltrim(Str(m.lnIdTaraRO)) Endif && llSucces If m.lcId_loc <> 'NULL' pnIdAdresa = 0 *!* * caut adresa dupa localitate. daca nu o gasesc, o adaug *!* lcSql = [SELECT id_adresa FROM adrese_parteneri where sters = 0 and inactiv = 0 and id_loc = ] + m.lcId_loc + [ AND id_part = ] + m.lcIdPart *!* lnSucces = goExecutor.oSelect2Value(m.lcSql, @pnIdAdresa) *!* If m.lnSucces < 0 *!* lcMesaj = goExecutor.cEroare *!* Thisform.trace(m.lcMesaj) *!* AMessagebox(m.lcMesaj, 0 + 48, _Screen.Caption ) *!* Exit *!* Endif If Empty(Nvl(m.pnIdAdresa, 0)) lcSql = [begin pack_def.adauga_adresa_partener2(] + m.lcIdPart + [,'] + m.lcDenumire_adresa + [',] + m.lcDA_apare + [,] + ; ['] + m.lcStrada + [','] + m.lcNumar + [','] + ; M.lcBloc + [','] + m.lcScara + [','] + m.lcApart + [','] + m.lcEtaj + [',] + m.lcId_loc + [,'] + m.lcLocalitate + [',] + m.lcId_Judet + [,] + m.lcCodpostal + [,] + m.lcId_tara + [,'] + ; M.lcTelefon1 + [','] + m.lcTelefon2 + [','] + m.lcFax + [','] + m.lcEmail + [','] + m.lcWeb + [',] + ; M.lcPrincipala + [,] + m.lcinactiv + [,] + m.lcId_util + [,?@pnIdAdresa); end;] llSucces = goExecutor.oExecuta(m.lcSql) If !m.llSucces lcMesaj = goExecutor.cEroare If m.llCallBack m.toCallBackForm.trace(m.lcMesaj) Endif * AMessagebox(m.lcMesaj, 0 + 48, _Screen.Caption ) Exit Endif Endif && empty(m.pnIdAdresa) Endif && m.lcId_loc <> 'NULL' Endif && !found() Endif && !empty(m.lcAdresa) Endscan && tcCursorParteneri Use In (Select('cParteneriROA')) Use In (Select('cAdreseROA')) Select (m.lcSelect) Return m.llSucces Endproc && CompleteazaParteneriROA Procedure CompleteazaValutaROA Lparameters tcCursorValuta, toCallBackForm * tcCursorValuta: numele cursorului cValuta (valuta) * toCallBackForm: referinta la un formular cu metoda Trace(tcMesaj) optional Local lcMesaj, lcSelect, lcSql, lcValuta, llCallBack, llSucces, lnIdValuta lcSelect = Select() llCallBack = Type('toCallBackForm') = 'O' And Pemstatus(m.toCallBackForm, 'trace', 5) lcSql = [select id_valuta, nume_val as valuta from vnom_valute] llSucces = goExecutor.oExecuta(m.lcSql, 'cValuteROA') If !m.llSucces If m.llCallBack lcMesaj = goExecutor.cEroare m.toCallBackForm.trace(m.lcMesaj) Endif Return m.llSucces Endif Select (m.tcCursorValuta) Scan lcValuta = Alltrim(Upper(Strtran(valuta, ' ', ''))) lnIdValuta = 0 Wait Window 'Import valute ... Caut valuta' + Transform(Recno()) + '/' + Transform(Reccount()) Nowait Select cValuteROA If !Empty(m.lcValuta) Locate For Alltrim(Strtran(valuta, ' ', '')) = m.lcValuta If Found() lnIdValuta = cValuteROA.id_valuta Select (m.tcCursorValuta) Replace id_valuta With m.lnIdValuta Endif && found Endif && empty Endscan && tcCursorValuta Use In (Select('cValuteROA')) Select (m.lcSelect) Return m.llSucces Endproc