Página 1 de 1

Financ compatível com DBF

Enviado: 24 Mai 2007 17:12
por Eliane
Tenho um sistema em Clipper52e e trabalho com o MS-Money. Interligá-los é uma novela. Preciso importar dados para o Money, mas este somente aceita importar dados do Quicken.
Preciso de um financ (caixa,bancos) que aceite o formato DBF. Alguém conhece algum sistema ou tem algum para vender ?

Enviado: 24 Mai 2007 17:27
por rochinha
Amiguinha

Tempos atras postei algo relacionado ao tema pois uso o arquivo estilo MONEY do Unibanco.

Veja em:

https://pctoledo.org/forum/viewto ... hlight=xml

Enviado: 24 Mai 2007 20:10
por Pablo César
Você é um gênio Rochinha !. Fiquei curioso de saber no início do seu código menciona:

Código: Selecionar todos

cIDt := SeekIniDt("OFX\"+aDIRECTORY[I,1]) 
cFDt := SeekFimDt("OFX\"+aDIRECTORY[I,1]) 
Poderia postar ou explicar como funcionam essas funções (SeekIniDt e SeekFimDt) ?

Eliane, você poderia postar parte (digamos um trecho) do arquivo só para ver o formato ?. E conseguiu fazer o seu TBROWSE ? (só pra saber).

Um clip-abraço :)Pos

Enviado: 30 Mai 2007 15:07
por rochinha
Amiguinhos

Desculpem minha demora em responder mas perdi meu pai recentemente e estou numa correria louca para resolver problemas de heranças e dividas, auxiliando minha madrasta..

Mas tentarei estar devolvendo as respostas o mais rapido que puder.

Quanto as funções foi falha minha não inclui-las no post mas estarei resolvendo isto.

Enviado: 01 Jun 2007 17:42
por rochinha
Amiguinhos

Como prometido:

Código: Selecionar todos

Function PegaOFX()
        M->REGISTRO := RECNO()
        M->DESDE    := DATA
        M->IDCONTA  := IDCONTA

        Mensagem('Verificando arquivos de retorno...')
        aDIRECTORY := DIRECTORY("OFX\*.OFX")
        aOFXes     := {}
        FOR I = 1 TO LEN(aDIRECTORY)
            cIDt := SeekIniDt("OFX\"+aDIRECTORY[I,1])
            cFDt := SeekFimDt("OFX\"+aDIRECTORY[I,1])
            AADD( aOFXes, PADR(aDIRECTORY[I,1],13)+" "+cIDt+" "+cFDt )
        NEXT

        SELE SALDO
        M->IDOFX := SPACE(15) // ALLTRIM(M->IDCONTA) + ".OFX"
        M->DESDE   := DATE()
        M->ATE     := DATE()
        DEFINE DIALOG oDlg RESOURCE "dlgCXAbre" TITLE "Integracao bancaria"
          REDEFINE SAY oSay ID 099 OF oDlg
          REDEFINE SAY oSay ID 100 OF oDlg
          REDEFINE COMBOBOX oGet101 VAR M->IDOFX ID 101 ITEMS aOFXes OF oDlg 
                            oGet101:bKeyDown := {|nKey,nFlags|if(nKey==VK_RETURN,(oGet101:LostFocus(oGet101),oGet102:SetFocus()),),nil}
          REDEFINE GET oGet102 VAR M->DESDE ID 102 OF oDlg
          REDEFINE GET oGet103 VAR M->ATE   ID 103 OF oDlg
          REDEFINE BUTTON ID 5 OF oDlg ACTION ( lSave := .t. , oDlg:End() ) DEFAULT
          REDEFINE BUTTON ID 2 OF oDlg ACTION ( lSave := .f. , oDlg:End() )
        ACTIVATE DIALOG oDlg CENTERED
        IF !EMPTY(M->IDOFX)
           //PSQOFX(M->IDOFX)
           //CLOSE DATABASES
           //ARQ_PRN1 := ".\BANCOS\" + M->IDOFX
           ARQ_PRN1 := "OFX\" + ALLTRIM(SUBSTR( M->IDOFX, 1, 14 ))
           DBCREATE( "NFOFX2", { { "LI_NHA"  , "C",255, 0 } } )
           DBCREATE( "NFOFX3", { { "IDBANCO"   , "C",20, 0 } , ;
                                 { "IDCONTA"   , "C",20, 0 } , ;
                                 { "AGENCIA"   , "C", 6, 0 } , ;
                                 { "DATA"      , "D", 8, 0 } , ;
                                 { "HISTORICO" , "C",45, 0 } , ;
                                 { "DOCUMENTO" , "C",10, 0 } , ;
                                 { "VALOR"     , "N",14, 2 } , ;
                                 { "CREDITO"   , "N",14, 2 } , ;
                                 { "DEBITO"    , "N",14, 2 } , ;
                                 { "TIPO"      , "C", 1, 0 } , ;
                                 { "CONCILIADO", "D", 8, 0 } , ;
                                 { "FECHAMENTO", "L", 1, 0 } } )
           USE NFOFX3 NEW
           USE NFOFX2 NEW
           APPEND FROM &ARQ_PRN1 SDF
           GO TOP
           M->BANKID   := ''
           M->ACCTID   := ''
           M->TRNTYPE  := ''
           M->DTPOSTED := ''
           M->TRNAMT   := ''
           M->FITID    := ''
           M->CHECKNUM := ''
           M->MEMORAND := ''
           M->CABECA   := .F.
           Mensagem('Verificando registros...')
           DO WHILE .NOT. EOF()
              IF '<BANKID>' $ LI_NHA
                 M->BANKID := SUBSTR(LI_NHA,9,05)
              ENDIF
              IF '<ACCTID>' $ LI_NHA
                 M->ACCTID := SUBSTR(LI_NHA,9,15)
              ENDIF
              IF '<TRNTYPE>' $ LI_NHA
                 M->TRNTYPE := SUBSTR(LI_NHA,10,40)
              ENDIF
              IF '<DTPOSTED>' $ LI_NHA
                 M->DTPOSTED := CTOD(SUBSTR(LI_NHA,17,2)+'/'+;
                                     SUBSTR(LI_NHA,15,2)+'/'+;
                                     SUBSTR(LI_NHA,11,4))
              ENDIF
              IF '<TRNAMT>' $ LI_NHA
                 M->TRNAMT := VAL(SUBSTR(LI_NHA,9,15))
              ENDIF
              IF '<FITID>' $ LI_NHA
                 M->FITID := SUBSTR(LI_NHA,8,15)
              ENDIF
              IF '<CHECKNUM>' $ LI_NHA
                 M->CHECKNUM := SUBSTR(LI_NHA,11,15)
              ENDIF
              IF '<MEMO>' $ LI_NHA
                 M->MEMORAND := SUBSTR(LI_NHA,7,40)
              ENDIF
              IF '<STMTTRN>' $ LI_NHA
                 SELE NFOFX3
                 APPEND BLANK
                 SELE NFOFX2
              ENDIF
              IF '</STMTTRN>' $ LI_NHA
                 SELE NFOFX3
                 REPLACE IDBANCO    WITH M->BANKID
                 REPLACE IDCONTA    WITH SUBSTR(M->ACCTID,5,9)
                 REPLACE AGENCIA    WITH SUBSTR(M->ACCTID,1,4)
                 REPLACE DATA       WITH M->DTPOSTED
                 REPLACE HISTORICO  WITH STRTRAN(M->MEMORAND,'*','')
                 REPLACE DOCUMENTO  WITH M->CHECKNUM
                 REPLACE VALOR      WITH IIF(M->TRNAMT<0,M->TRNAMT*-1,M->TRNAMT)
                 REPLACE CREDITO    WITH IIF(M->TRNTYPE='C',M->TRNAMT,0)
                 REPLACE DEBITO     WITH IIF(M->TRNTYPE='D',IIF(M->TRNAMT<0,M->TRNAMT*-1,M->TRNAMT),0)
                 REPLACE TIPO       WITH M->TRNTYPE
                 REPLACE CONCILIADO WITH CTOD('  /  /  ')
                 REPLACE FECHAMENTO WITH .F.
                 SELE NFOFX2
              ENDIF
              SKIP
           ENDDO
           SELE NFOFX3
           APPEND BLANK
           SELE NFOFX2
        ENDIF
        SELE NFOFX3; USE
        SELE NFOFX2; USE
        SELE CORRENTE
        USE
        USE CORRENTE EXCLUSIVE
        Mensagem('Adicionando registros ao movimento...')
        APPEND FROM NFOFX3 FOR DATA >= M->DESDE .AND. DATA <= M->ATE
        USE
        USE CORRENTE SHARED NEW
        SET ORDER TO 1
        return .t.

FUNCTION PSQOFX(OFX)
   //IF FILE( ".\BANCOS\"+ALLTRIM(OFX) )
   IF FILE( ALLTRIM(OFX) )
      RETURN .T.
   ENDIF
   MsgStop("Arquivo "+ALLTRIM(OFX)+" n„o encontrado!")
   RETURN .F.

FUNCTION SeekIniDt( cText )
   DBCREATE( "NFOFX0", { { "LI_NHA"  , "C",255, 0 } } )
   USE NFOFX0 NEW
   APPEND FROM &cText SDF
   GO TOP
   cIDt := ''
   DO WHILE .NOT. EOF()
      IF '<DTSTART>' $ LI_NHA
         cIDt := SUBSTR(LI_NHA,10,10)
         EXIT
      ENDIF
      SKIP
   ENDDO        
   //cIDt := CTOD(SUBSTR(cIDt,7,2)+"/"+SUBSTR(cIDt,5,2)+"/"+SUBSTR(cIDt,1,4))
   cIDt := SUBSTR(cIDt,7,2)+"/"+SUBSTR(cIDt,5,2)+"/"+SUBSTR(cIDt,1,4)
   USE
   return cIDt

FUNCTION SeekFimDt( cText )
   DBCREATE( "NFOFX0", { { "LI_NHA"  , "C",255, 0 } } )
   USE NFOFX0 NEW
   APPEND FROM &cText SDF
   GO TOP
   cFDt := ''
   DO WHILE .NOT. EOF()
      IF '<DTEND>' $ LI_NHA
         cFDt := SUBSTR(LI_NHA,08,10)
         EXIT
      ENDIF
      SKIP
   ENDDO
   //cFDt := CTOD(SUBSTR(cFDt,7,2)+"/"+SUBSTR(cFDt,5,2)+"/"+SUBSTR(cFDt,1,4))
   cFDt := SUBSTR(cFDt,7,2)+"/"+SUBSTR(cFDt,5,2)+"/"+SUBSTR(cFDt,1,4)
   USE
   return cFDt