Jump to content
Fivewin Brasil

ACBR.PRG EMISSAO DE BOLETO - ACBR


HASA

Recommended Posts

////////////////////////////////////////////////////////////////////////////////
//  Programa: ACBR.PRG                                                        //
//  Funcao..: FUNCAO AcbrMonitor/Boleto                       Em: 15/06/2016  //
//                                                                            //
//  Programador...: DORNELES                                                  //
//  Skype.........: soft.tres                                                 //
//  soft-tres@uol.com.br                                                      //
//  www.soft-tres.com.br                                                      //
////////////////////////////////////////////////////////////////////////////////
	#include "fivewin.ch"
#include "fileio.ch"
#INCLUDE ".\Include\RetornoI.Ch"
	#define  ETX chr(3)
#define  CR  chr(13)
#define  LF  chr(10)
	Static sENDER   := ''  ,;
       SEM_ERRO := .F. ,;
       RET_IMP  := ''
	Static sSOCKET
	////////////////////////////////////////////////////////////////////////////////
#IFDEF __PLATFORM__Linux
 #DEFINE PATH_DEL '/'
 #DEFINE DIR_DEL ''
 #DEFINE K_GO_TOP    409
 #DEFINE K_GO_BOTTOM 417
#ELSE
 #DEFINE PATH_DEL '\'
 #DEFINE DIR_DEL ':'
 #DEFINE K_GO_TOP    chr(31)
 #DEFINE K_GO_BOTTOM chr(30)
#ENDIF
	* MODO DA WINDOW  *
#define SW_HIDE 0  
#define SW_SHOWNORMAL 1  
#define SW_NORMAL 1  
#define SW_SHOWMINIMIZED 2  
#define SW_SHOWMAXIMIZED 3  
#define SW_MAXIMIZE 3  
#define SW_SHOWNOACTIVATE 4  
#define SW_SHOW 5  
#define SW_MINIMIZE 6  
#define SW_SHOWMINNOACTIVE 7  
#define SW_SHOWNA 8  
#define SW_RESTORE 9
	* DEFAULT -> Caso a variavel seja nula substitui pelo valor passado.
#command DEFAULT <p> TO <val> [,<pn> TO <valn>]                     ;
         =>                                                         ;
         <p> = iif(<p> = NIL,<val>,<p>)                             ;
         [;<pn> = iif(<pn> = NIL,<valn>,<pn>)]
	* ADEL_VET -> Apaga um elemento do vetor e reajusta o seu tamanho
#DEFINE  ADEL_VET(VET,NUM) adel(VET,NUM) ; asize(VET,len(VET) - 1)
	* AINS_VET -> Insere in elemento em um vetor
#define AINS_VET(vetor,n_elem,conteudo)                             ;
 iif(n_elem > len(vetor),aadd(vetor,conteudo),vetor[n_elem] := conteudo)
	* COMPILE -> Transforma uma varivel em um bloco de codigo
#define COMPILE(c_expr) &("{||"+c_expr+"}")
	////////////////////////////////////////////////////////////////////////////////
Function ACBR_INIT(ENDERECO)   // Abre a comunicação com o ACBrmonitor
   * ENDERECO -> Diretorio ( quando usando TXT)  Ex: C:\ACBR\
////////////////////////////////////////////////////////////////////////////////
   Local P, RET := .T., TFIM, IP, PORTA, RESP
	   if ! empty(sENDER)  // J  est  aberto...
      return .t.
   endif
	   SEM_ERRO := .F.
   sENDER   := alltrim(ENDERECO)
   IP       := ''
   PORTA    := 0
	   P := at(':',sENDER)
   if P = 0
      P := len(sENDER)+1
   endif
   IP    := substr(sENDER,1,P-1)
   if empty(IP)
      RET := .F.
   else
      PORTA := val(substr(sENDER,P+1))
      if PORTA = 0
         PORTA := 3434
      endif
      inetinit()
      RET := .F.
      TFIM := Seconds() + 5             /// Tenta conectar durante 5 segundos ///
      do while Seconds() < TFIM .and. ! RET
         sSOCKET := inetconnect(IP,PORTA)
         RET     := (ineterrorcode(sSOCKET) = 0)
         SysWait(0.2)
      enddo
   endif
   if RET
   
       TRY
          InetSetTimeout( sSOCKET, 300 )   // Timeout de Recepção 3 seg //
          RESP := InetRecvEndBlock( sSOCKET, ETX )
       CATCH
        END
    
      RET  := ('Conectado' $ RESP )   // Recebeu as boas vindas ?
      
   endif
   if ! RET
      sENDER := ''
   endif
return RET
////////////////////////////////////////////////////////////////////////////////
function ACBR_BOL_Comando( cIndice, cDados )
////////////////////////////////////////////////////////////////////////////////
   LOCAL ret_line := "chr(13)+chr(10)"
   LOCAL cTcpIp   := "1"
   LOCAL lReturn  := .T.
   
   // Checar se o ACBR está instalado...
   cPath := "C:\ACBrMonitorPLUS"
   IF ! lIsDir(cPath)
      MsgInfo("O ACBrMonitor não está instalado", "Aviso")
      RETURN(.F.)
   ENDIF
   
   cTcpIp := GetPvProfString( "ACBrMonitor", "Modo_TCP", " ", "C:\ACBrMonitorPLUS\ACBrMonitor.ini")
   cIsTxt := GetPvProfString( "ACBrMonitor", "Modo_TXT", " ", "C:\ACBrMonitorPLUS\ACBrMonitor.ini")
   c_Gate := GetPvProfString( "ACBrMonitor", "TCP_Porta", "3434", "C:\ACBrMonitorPLUS\ACBrMonitor.ini")
   c_Ende := ""
   IF cTcpIp = "1" ; c_Ende := "127.0.0.1:"+c_Gate ; ENDIF
   IF cIsTxt = "1" ; c_Ende := "C:\ACBrMonitorPLUS" ; ENDIF
   IF EMPTY(c_Ende) ; MSGINFO("Detectado erro de configuração no ACBrMonitor","Aviso"); RETURN .F. ; ENDIF
   cDirDoMonitor := cPath
   errfile  := "ENT.CMD"
   cDados   := iif(ValType(cDados)#"C","",cDados)
   cBuffer := cIndice + iif( len( cDados )=0,"()","(" + cDados + ")")
	   IF cIsTxt = "1"
   
      errhandle := FCREATE(errfile)
      FWRITE(errhandle,cBuffer+&ret_line.)
      FCLOSE(errhandle)
      FERASE( cDirDoMonitor+"\ENT.TXT" )
      FERASE( cDirDoMonitor+"\SAI.TXT" )
      COPY FILE &(errfile) TO &(cDirDoMonitor+"\"+errfile)
      FRENAME( cDirDoMonitor+"\"+errfile, cDirDoMonitor+"\ENT.TXT" )
      
   ELSEIF cTcpIp = "1"
   
       TRY
          IF ! ACBR_INIT(c_Ende) 
              SysRefresh()
              ACBR_END()
              SysRefresh()
                MsgAlert("Erro ao tentar abrir a porta de comunicação!","Aviso!") 
                lReturn  := .F. 
           ENDIF
       CATCH
        END
            
        IF !lReturn 
           RETURN(.F.)
        ENDIF
    
      SysRefresh()
      IF ! ACBR_ABERTA() ; RETURN .F. ; ENDIF
      SysRefresh()
      ACBR_COMANDO( cBuffer )
      SysRefresh()
   ENDIF
   
   RETURN(.T.)   
////////////////////////////////////////////////////////////////////////////////   
Function ACBR_ABERTA()   // Retorna .t. se a COM ja est  aberta
////////////////////////////////////////////////////////////////////////////////
return ! empty(sENDER)
////////////////////////////////////////////////////////////////////////////////
Function IBR_OK(RESP)   // Retorna .T. se a String inicia com OK:
////////////////////////////////////////////////////////////////////////////////
return (substr(RESP,1,3) == 'OK:')
////////////////////////////////////////////////////////////////////////////////
Function ACBR_END()   // Fecha a porta da Impressora
   * Encerra a comunicacao com a impressora, nao precisa de parametros
////////////////////////////////////////////////////////////////////////////////
   if ! empty(sENDER)
      inetsendall( sSocket, 'ACBR.bye' )
   endif
   if sSOCKET <> NIL
      inetclose(sSOCKET)
      inetdestroy(sSOCKET)
      inetcleanup()
      SysWait(0.2)
      sSOCKET := NIL
   endif
   sENDER  := ''
    return(.t.)
////////////////////////////////////////////////////////////////////////////////
Function ACBR_COMANDO(CMD,VET_PARAM,ESPERA,TENTA)
   * Funcao de uso interno para enviar os comandos e
   * registrar os erros retornados. Exibe os erros se existirem
////////////////////////////////////////////////////////////////////////////////
   Local REQ, RESP, TEMPOR, TINI, TFIM, BLOCO, BYTES, I, TIPO_PARAM
	   if empty(sENDER)
      if ! SEM_ERRO
         MsgAlert('ACBrMonitor n†o foi inicializado.',"Aviso")
      endif
      return ''
   endif
	   DEFAULT VET_PARAM   to {} ,;
           ESPERA      to 900 ,; // 5 minutos
           TENTA       to .t.
	   RET_IMP  := ''
   c_Cmmd := SUBSTR(CMD,1,AT("(",CMD)-1)
   SysRefresh()
	   //////// Transmitindo o comando /////////
   CMD := ALLTRIM(CMD)+CRLF+"."+CRLF // Requisitos do ACBR
   
   TRY
       InetSetTimeout( sSOCKET, 300 )  // Timeout de Envio 3 seg //
   CATCH
    END    
       
   if inetsendall( sSOCKET, CMD ) <= 0
      RET_IMP := 'ERRO: Nao foi possivel transmitir dados para o ACBrMonitor|'+;
                 '('+AllTrim(Str(InetErrorCode( sSOCKET )))+') '+;
                 InetErrorDesc( sSOCKET ) + ETX
   endif
	   TINI   := Seconds()
   do while (right(RET_IMP,1) <> ETX)
   
      SysRefresh()                               
      BLOCO := space(64)
      
      //////// Lendo a resposta ////////
      TRY
          InetSetTimeout( sSOCKET, 300 )
            BYTES   := inetrecv(sSOCKET, @BLOCO, 64)
      CATCH
        END    
	      RET_IMP += left(BLOCO,BYTES)
	      if Seconds() > (TINI + ESPERA)
         if ! TENTA
            RET_IMP := 'ERRO: Sem resposta do ACBrMonitor em '+alltrim(str(ESPERA))+;
                       ' segundos (TimeOut)' + ETX
         else
            if ALERT('O ACBrMonitor n†o est  respondendo. '+;
                     'Deseja tentar novamente ?',{'SIM','NAO'}) # 1
               RET_IMP := 'ERRO: Sem resposta do ACBrMonitor em '+alltrim(str(ESPERA))+;
                          ' segundos (TimeOut)' + ETX
            else
               TINI := Seconds()
            endif
         endif
      endif
   enddo
	   do while right(RET_IMP,1) $ CR+LF+ETX   // Remove sinalizadores do final
      RET_IMP := left(RET_IMP,len(RET_IMP)-1)
   enddo
	return RET_IMP
////////////////////////////////////////////////////////////////////////////////
FUNCTION ACBR_GravaCedente()
////////////////////////////////////////////////////////////////////////////////
    LOCAL cLinha    := ""
    LOCAL cArquivo  := "C:\ACBrMonitorPLUS\Cedente.ini"
    LOCAL lCloseEmp := .F.
    LOCAL lCloseCon := .F.
    
    IF FILE(cArquivo)
       FErase(cArquivo)
    ENDIF   
                             
    IF SELECT("Empresa") = 0
       IF !AbreDbfNtx({"Empresa"})
          RETURN(.F.)
       ENDIF
       lCloseEmp := .T.
    ENDIF
	    IF SELECT("Convenio") = 0
       IF !AbreDbfNtx({"Convenio"})
          RETURN(.F.)
       ENDIF
       lCloseCon := .T.
    ENDIF
    
    SELECT Empresa
    SET ORDE TO 1
    ClearMyFilter()
    SetMyFilter(cCod_Emp,cCod_Emp)
    
    SELECT Convenio
    SET ORDE TO 3 
    SetMyFilter("1")
    Convenio->(DbGoTop())
	   cLinha := "[Cedente]"+CRLF
   cLinha += "Nome="+Empresa->nm_empresa+CRLF
    cLinha += "CNPJCPF="+TRANSF(Empresa->cnpjcpf,"@R 99.999.999/9999-99")+CRLF
    cLinha += "Logradouro="+Empresa->endereco+CRLF
    cLinha += "Numero="+TRANSF(Empresa->nro,"99999")+CRLF
    cLinha += "Bairro="+Empresa->bairro+CRLF
    cLinha += "Cidade="+Empresa->cidade+CRLF
    cLinha += "CEP="+TRANSF(Empresa->cep,"@R 99.999-999")+CRLF
    cLinha += "Complemento="+CRLF
    cLinha += "UF="+Empresa->uf+CRLF
    cLinha += "RespEmis=0"+CRLF    //[0] Cliente Emite  [1] Banco Emite    [2] Banco Reemite [3] Banco não Reemite
    cLinha += "TipoPessoa=1"+CRLF  //[0] Pessoa Física  [1] Pessoa Juridica [2] Outros
    cLinha += "CodigoCedente="+LTRIM(Convenio->codcedente)+CRLF
    cLinha += "LayoutBol="+TRANSF(Convenio->idlayout,"9")+CRLF   //[0] Padrão         [1] Carnê     [2] - Fatura (Não implementado = Padrão)    [3] Padrão Entrega
    cLinha += "Modalidade=3"+CRLF
    cLinha += "CaracTitulo=0"+CRLF //[0] Cobrança Simples [1] Cobrança Vinculada [2] Cobrança Caucionada [3] Cobrança Descontada [4] Cobrança Vendor
    cLinha += "Convenio="+LTRIM(Convenio->nroconveni)+CRLF
    cLinha += ""+CRLF
    cLinha += "[Conta]"+CRLF
    cLinha += "Conta="+LTRIM(TRANS(Convenio->nroconta,"@!"))+CRLF
    cLinha += "DigitoConta="+LTRIM(TRANS(Convenio->digconta,"9"))+CRLF
    cLinha += "Agencia="+LTRIM(TRANS(Convenio->nroage,"@!"))+CRLF
    cLinha += "DigitoAgencia="+LTRIM(TRANS(Convenio->digage,"@!"))+CRLF
    cLinha += ""+CRLF
    cLinha += "[Banco]"+CRLF
    cLinha += "Numero="+LEFT(TRANS(Convenio->nrobancodv,"@!"),3)+CRLF
    cLinha += "CNAB=0"+CRLF
    cLinha += "IndiceACBr="+LTRIM(TRANS(Convenio->idbanco,"99"))+CRLF
    
                 /* INDICEACBR
                    Este campo não é obrigatório, desde que o número do banco seja informado.
               Caso ambos sejam informados, o Número terá prioridade.
               1 - Banco do Brasil
               2 - Santander
               3 - Caixa Econômica Federal (Convênio SIGCB)
               4 - Caixa Econômica Federal (Convênio SICOB)
               5 - Bradesco
               6 - Itaú
               7 - Banco Mercantil
               8 - Sicred
               9 - Bancoob
               10 - Banrisul
               11- HSBC
               12- Banestes
               13- Banco do Nordeste
               14- Banco BRB     */
               
    FWriteLine(cArquivo  , cLinha )
   FClose(cArquivo)
   
   IF lCloseEmp 
      CloseFile("Empresa")
   ENDIF
	   IF lCloseCon
       CloseFile("Convenio")
   ENDIF
   
    RETURN(.T.)
////////////////////////////////////////////////////////////////////////////////    
FUNCTION ACBR_GravaTitulo()
////////////////////////////////////////////////////////////////////////////////    
    LOCAL cLinha    := ""
    LOCAL cArquivo  := "C:\ACBrMonitorPLUS\titulos.ini"
    LOCAL nNroTitulo:=0
    
    IF FILE(cArquivo)
       FErase(cArquivo)
    ENDIF   
	   DbSelectArea("aTitulos") 
   aTitulos->(DbGoTop())
   
   WHILE aTitulos->(!EOF())
   
           nNroTitulo++
          cLinha += "[titulo"+LTRIM(STR(nNroTitulo,2))+"]"+CRLF
          cLinha += "NumeroDocumento="+LTRIM(aTitulos->NUMERODOC)+CRLF
          cLinha += "NossoNumero="+LTRIM(aTitulos->NOSSONUME)+CRLF
          cLinha += "Carteira="+LTRIM(aTitulos->carteira)+CRLF
          cLinha += "ValorDocumento="+STRTRAN(LTRIM(TRANSF(aTitulos->VALORDOC,"999,999,999.99")),".",",")+CRLF
          cLinha += "Vencimento="+LTRIM(TRANSF(aTitulos->DTVCTO,"@D"))+CRLF
          cLinha += "DataDocumento="+LTRIM(TRANSF(aTitulos->DTEMISSAO,"@D"))+CRLF
          cLinha += "DataProcessamento="+LTRIM(TRANSF(aTitulos->DTPROCESSA,"@D"))+CRLF
          cLinha += "DataAbatimento="+LTRIM(TRANSF(aTitulos->DTABATIMEN,"@D"))+CRLF
          cLinha += "DataDesconto="+LTRIM(TRANSF(aTitulos->DTDESCONTO,"@D"))+CRLF
          cLinha += "DataProtesto="+LTRIM(TRANSF(aTitulos->DTPROTESTO,"@D"))+CRLF
          cLinha += "PercentualMulta="+LTRIM(TRANSF(aTitulos->PERMULTA,"99.99"))+CRLF
          cLinha += "LocalPagamento=Pagavel em qualquer agência bancaria mesmo após o vencimento"+CRLF
          cLinha += "EspecieDoc="+LTRIM(TRANSF(aTitulos->ESPECIE,"@!"))+CRLF
          cLinha += "EspecieMod="+LTRIM(TRANSF(aTitulos->MOEDA,"@!"))+CRLF
          cLinha += "Sacado.NomeSacado="+LTRIM(aTitulos->CLIENTE)+ " / "+TRANS(aTitulos->ID_CLIENTE,"99999")+CRLF
          cLinha += "Sacado.CNPJCPF="+LTRIM(aTitulos->CNPJCPF)+CRLF
          cLinha += "Sacado.Pessoa="+aTitulos->pessoa+CRLF
          cLinha += "Sacado.Logradouro="+LTRIM(aTitulos->ENDERECO)+CRLF
          cLinha += "Sacado.Numero="+LTRIM(TRANSF(aTitulos->NRO,"99999"))+CRLF
          cLinha += "Sacado.Bairro="+LTRIM(aTitulos->BAIRRO)+CRLF
          cLinha += "Sacado.Complemento="+CRLF
          cLinha += "Sacado.Cidade="+LTRIM(aTitulos->CIDADE)+CRLF
          cLinha += "Sacado.UF="+LTRIM(aTitulos->ESTADO)+CRLF
          cLinha += "Sacado.CEP="+LTRIM(TRANSF(aTitulos->CEP,"@r 99.999-999"))+CRLF
          cLinha += "Sacado.Email="+LTRIM(aTitulos->EMAIL)+CRLF
          cLinha += "Mensagem="+aTitulos->MENSAGEM+CRLF
          cLinha += "Aceite="+LTRIM(aTitulos->ACEITE)+CRLF
          cLinha += "OcorrenciaOriginal=0"+CRLF
          cLinha += "Parcela=1"+CRLF
          cLinha += "TotalParcelas=1"+CRLF
          cLinha += "SeuNumero="+LTRIM(aTitulos->NOSSONUME)+CRLF+CRLF
          
           aTitulos->(DbSkip())
    END
	    FWriteLine(cArquivo  , cLinha )
   FClose(cArquivo)
	    RETURN(.T.)
////////////////////////////////////////////////////////////////////////////////    
FUNCTION CriaTmpTitulo()
////////////////////////////////////////////////////////////////////////////////
LOCAL xxArq1    := {}
	IF SELECT("aTitulos") <> 0
    CloseFile("aTitulos",.T.)
ENDIF    
	aadd( xxArq1, { 'ID_CLIENTE', 'N',  5,  0 } )
aadd( xxArq1, { 'CLIENTE   ', 'C', 40,  0 } )
aadd( xxArq1, { 'FANTASIA  ', 'C', 20,  0 } )
aadd( xxArq1, { 'LOGRADOR  ', 'C',  3,  0 } )
aadd( xxArq1, { 'ENDERECO  ', 'C', 40,  0 } )
aadd( xxArq1, { 'NRO       ', 'N',  5,  0 } )
aadd( xxArq1, { 'CEP       ', 'C',  9,  0 } )
aadd( xxArq1, { 'BAIRRO    ', 'C', 15,  0 } )
aadd( xxArq1, { 'CIDADE    ', 'C', 60,  0 } )
aadd( xxArq1, { 'ESTADO    ', 'C',  2,  0 } )
aadd( xxArq1, { 'CNPJCPF   ', 'C', 20,  0 } )
aadd( xxArq1, { 'PESSOA    ', 'C',  1,  0 } ) //0 - Pessoa Física  1 - Pessoa Juridica
aadd( xxArq1, { 'EMAIL     ', 'C', 80,  0 } )
	aadd( xxArq1, { 'NUMERODOC' , 'C', 20,  0 } ) //Numero Doc
aadd( xxArq1, { 'NOSSONUME' , 'C', 20,  0 } ) //Nosso Numero
aadd( xxArq1, { 'CARTEIRA'  , 'C', 03,  0 } ) //Carteira
	aadd( xxArq1, { 'VALORDOC'  , 'N', 16,  2 } ) //Valor do Boleto
aadd( xxArq1, { 'VALMULTA'  , 'N', 16,  2 } ) //texto com o valor da multa
aadd( xxArq1, { 'VALJUROS'  , 'N', 16,  2 } ) //texto com o valor do juros
aadd( xxArq1, { 'VALDESCT'  , 'N', 16,  2 } ) //texto com o valor do desconto
aadd( xxArq1, { 'PERMULTA'  , 'N', 16,  2 } ) //Percendual de multa
	aadd( xxArq1, { 'DTVCTO'    , 'D', 08,  0 } ) //Data Vencimento
aadd( xxArq1, { 'DTEMISSAO ', 'D', 08,  0 } ) //Data Emissao
aadd( xxArq1, { 'DTPROCESSA', 'D', 08,  0 } ) //Data Processamento
aadd( xxArq1, { 'DTABATIMEN', 'D', 08,  0 } ) //Data ABATIMENTO
aadd( xxArq1, { 'DTDESCONTO', 'D', 08,  0 } ) //Data Processamento
aadd( xxArq1, { 'DTPROTESTO', 'D', 08,  0 } ) //Data Protesto
	aadd( xxArq1, { 'ESPECIE'   , 'C',  3,  0 } ) //Especie
aadd( xxArq1, { 'ACEITE'    , 'C',  1,  0 } ) //Aceite
aadd( xxArq1, { 'MOEDA'     , 'C',  2,  0 } ) //MOEDA
aadd( xxArq1, { 'MENSAGEM'  , 'C',300,  0 } ) //MENSAGEM
	HB_DBCreateTemp("aTitulos",xxArq1,"DBFCDX")
	RETURN(.T.)
////////////////////////////////////////////////////////////////////////////////
FUNCTION ACBF_SHOW()
////////////////////////////////////////////////////////////////////////////////
LOCAL hWnd
   If ( hWnd := SeekACBR() ) == 0
       If ( hWnd := SeekACBR() ) == 0
             BringWindowToTop( hWnd )
           ShowWindow( hWnd, 8 ) //  SW_RESTORE )
       ENDIF
   Else
       BringWindowToTop( hWnd )
       ShowWindow( hWnd, 8 ) //  SW_RESTORE )
   Endif
Return Nil
////////////////////////////////////////////////////////////////////////////////    
STATIC FUNCTION SeekACBR()
////////////////////////////////////////////////////////////////////////////////    
	    LOCAL aCaptions := { 'ACBrMonitorPLUS', 'ACBrMonitor', 'ACBrMonitorPLUS','ACBrMonitorPLUS' }
    LOCAL nPos, hWnd
    For nPos = 1 to Len(aCaptions)
        If ( hWnd := FindWindow( 0, aCaptions[nPos] ) ) > 0
            Return hWnd
        EndIf
    Next
Return hWnd
////////////////////////////////////////////////////////////////////////////////    
FUNCTION ACBR_Imprimir_Boleto()
////////////////////////////////////////////////////////////////////////////////    
	    ACBR_GravaCedente()
    
   ACBR_GravaTitulo()
	  ** ACBF_SHOW()
	    IF !ACBR_INIT("localhost:3434")
        MsgStop("Erro de comunicação com o ACBR","ATENÇÃO !!!")
    ENDIF
    
   cCmd           := "bAltTab"
   **ACBR_BOL_Comando( "ACBr.Run", ["]+cCmd+["] )
   
   cCmd           := "ACBrMonitorPLUS"   
//    ACBR_BOL_Comando( "ACBr.AppActivate", ["]+cCmd+["] )
    
   cCmd           := ""
   //LIMPAR LISTA
   ACBR_BOL_Comando( "BOLETO.LimparLista", ["]+cCmd+["] )
    
   //CONFIGURAR CEDENTE
   cCmd       := "C:\ACBrMonitorPLUS\cedente.ini"
   ACBR_BOL_Comando( "BOLETO.ConfigurarDados", ["]+cCmd+["] )
	    cCmd           := "%{TAB}" 
    ACBR_BOL_Comando( "ACBr.SendKeys", ["]+cCmd+["] )
	   cArquivo         := "C:\ACBrMonitorPLUS\titulos.ini"
   
   cImprime         := "I" //IMPRIMIR 
   cImprime         := "E" //EMAIL
   cImprime         := "P" //PDF
   cImprime         := ""  
   IF Convenio->email
       cImprime         := "E"  
   ENDIF    
	   cCmd             := ["]+cArquivo+[","]+cImprime
   ACBR_BOL_Comando( "BOLETO.IncluirTitulos",cCmd+["]) 
             
   cCmd           := ""
   //ACBR_NFE_Comando( "BOLETO.GerarPDF", cCmd )
   ACBR_BOL_Comando( "BOLETO.Imprimir", cCmd )
   //ACBR_NFE_Comando( "BOLETO.GerarHTML", cCmd )
   
   //cCmd           := "bAltTab"
   //ACBR_BOL_Comando( "ACBr.Run", ["]+cCmd+["] )
   
//   cCmd           := "ACBrMonitor.exe"   
//    ACBR_BOL_Comando( "ACBr.AppExists", ["]+cCmd+["] )
	    ACBR_END()
    
    RETURN(.T.)
////////////////////////////////////////////////////////////////////////////////    
FUNCTION ACBR_Remessa_Boleto(nNroRemessa)
////////////////////////////////////////////////////////////////////////////////    
    ACBR_GravaCedente()
    
   ACBR_GravaTitulo()
	    IF !ACBR_INIT("localhost:3434")
        MsgStop("Erro de comunicação com o ACBR","ATENÇÃO !!!")
    ENDIF
       
   cCmd           := ""
   //LIMPAR LISTA
   ACBR_BOL_Comando( "BOLETO.LimparLista", ["]+cCmd+["] )
    
   //CONFIGURAR CEDENTE
   cCmd       := "C:\ACBrMonitorPLUS\cedente.ini"
   ACBR_BOL_Comando( "BOLETO.ConfigurarDados", ["]+cCmd+["] )
                 
   cArquivo         := "C:\ACBrMonitorPLUS\titulos.ini"
   cImprime         := ""
   cCmd             := ["]+cArquivo+[","]+cImprime
   ACBR_BOL_Comando( "BOLETO.IncluirTitulos",cCmd+["]) 
   
   cCmd           := ""
   ACBR_BOL_Comando( "BOLETO.GerarRemessa","c:\remessa\",nNroRemessa,STRZERO(nNroRemessa,6)+".rem" )
    ACBR_END()
    
    RETURN(.T.)
////////////////////////////////////////////////////////////////////////////////    
Function ACBR_Retorno_Boleto()  
////////////////////////////////////////////////////////////////////////////////
LOCAL nIDR      := 0
LOCAL nItem     := 0
LOCAL nValor    := 0
LOCAL aFiles    :=  cGetFile("Arquivos (*.ret) |*.RET|" ,"Selecione o Arquivo!")
LOCAL nLinhas   := 0
LOCAL nTotRec     := 0
LOCAL cLinha    := ""
LOCAL aRetorno  := {}
LOCAL oTxt      
LOCAL nRat
	fErase("C:\Retorno\Retorno.ini")
	IF EMPTY(ALLTRIM(aFiles))
    MsgStop("ERRO na Abertura do Arquivo!","Atenção")
   RETURN(.T.)
ENDIF
	IF !ACBR_INIT("localhost:3434")
   MsgStop("Erro de comunicação com o ACBR","ATENÇÃO !!!")
   RETURN(.T.)
ENDIF
       
cCmd           := ""
ACBR_BOL_Comando( "BOLETO.LimparLista", ["]+cCmd+["] )
	cFile := cFileName(aFiles)
nRat  := Rat( "\", aFiles )
	SELECT RetLog
SET ORDE TO 2
RetLog->(DbSeek(cFile))
	IF FOUND()
   MsgStop("Arquivo Retorno já foi processado!","ATENÇÃO !!!")
   SELECT RetLog
    ORDDESCEND(,, .T.) 
    RetLog->(DbGoTop())
   RETURN(.F.)
ENDIF
	cPasta         := Subs( aFiles, 1, nRat )//"c:\retorno\"
cArquivo           := cFile 
cCmd           := cPasta+[","]+cArquivo
ACBR_BOL_Comando( "BOLETO.LerRetorno", ["]+cCmd+["] )
	ACBR_END()
	SELECT ReTitulo
SET ORDE TO 2
SetMyFilter("1")
	ReTitulo->(DbGoBottom())
ReTitulo->(DbSkip())
aRetorno  := ReTitulo->(InitData())
	aFiles := "C:\Retorno\Retorno.ini"
	IF !FILE(aFiles)
    MsgStop("ERRO na Abertura do Arquivo/Retorno!","Atenção")
   RETURN(.T.)
ENDIF
	nIDR := PsqControle( Retorno->(dbf()) ) 
	oTxt      := TTxtFile():New( ALLTRIM(aFiles) )
nLinhas   := oTxt:nTLines
nTotRec     := oTxt:nTLines
oTxt:Gotop()    
 
FOR i = 1 TO nLinhas
   
         cLinha := oTxt:cLine
       
      IF      AT("Vencimento=", cLinha) <> 0
               aRetorno.ret_dtvcto       := CTOD(Subs(cLinha,12,10))
      ELSEIF AT("DataDocumento=", cLinha) <> 0    
                 //DataDocumento=30/12/1899 //2
                 //aRetorno.ret_dtvcto  := CTOD(Subs(cLinha,12,10))
        ELSEIF AT("NumeroDocumento=", cLinha) <> 0                
                 aRetorno.ret_numerodoc  := Subs(cLinha,17,10)
        ELSEIF AT("DataProcessamento=", cLinha) <> 0                            
                 aRetorno.ret_data           := CTOD(Subs(cLinha,19,10))
        ELSEIF AT("NossoNumero=", cLinha) <> 0                                
                 aRetorno.ret_nossonro   := Subs(cLinha,13,17)
        ELSEIF AT("ValorDocumento=", cLinha) <> 0                                            
                 aRetorno.ret_vltitulo   := ConverteCartValor(Subs(cLinha,15,15))
        ELSEIF AT("DataOcorrencia=", cLinha) <> 0                                                        
                  aRetorno.ret_dtocorrenc := CTOD(Subs(cLinha,15,10))
        ELSEIF AT("DataCredito=", cLinha) <> 0                                                                    
                 aRetorno.ret_dtcredito  := CTOD(Subs(cLinha,12,10))
        ELSEIF AT("ValorDespesaCobranca=", cLinha) <> 0                                                                                
                 aRetorno.ret_vltaxa     := ConverteCartValor(Subs(cLinha,11,15))
        ELSEIF AT("ValorAbatimento=", cLinha) <> 0                                                                                            
                 //aRetorno.ret_vltitulo  := VAL(Subs(cLinha,16,15))
        ELSEIF AT("ValorDesconto=", cLinha) <> 0            
                 aRetorno.ret_vldesconto := ConverteCartValor(Subs(cLinha,15,15))
        ELSEIF AT("ValorMoraJuros=", cLinha) <> 0                        
                 aRetorno.ret_vljuros := ConverteCartValor(Subs(cLinha,16,15))
        ELSEIF AT("ValorIOF=", cLinha) <> 0                                    
                 //ValorIOF=0      //13
        ELSEIF AT("ValorOutrasDespesas=", cLinha) <> 0                                                
                 //ValorOutrasDespesas=0 //14
        ELSEIF AT("ValorOutrosCreditos=", cLinha) <> 0                                                            
                 aRetorno.ret_vlmulta := ConverteCartValor(Subs(cLinha,20,15))
        ELSEIF AT("ValorRecebido=", cLinha) <> 0                                                                        
                 //ValorRecebido=237,61      //16
                 aRetorno.ret_vlpago := ConverteCartValor(Subs(cLinha,15,15))
        ELSEIF AT("DescricaoTipoOcorrencia=", cLinha) <> 0                                                                                    
        
                 aRetorno.ret_id_ocorren := Subs(cLinha,25,2)
                 aRetorno.ret_nm_ocorren := Subs(cLinha,28,50)                 
                 
                 IF VAL(aRetorno.ret_id_ocorren) = 6 .OR. VAL(aRetorno.ret_id_ocorren) = 17 //ver nos outros bancos se é esses mesmo codigos
                 
                     SELECT Receber
                     SET ORDE TO 10
                    Receber->(DbSeek(aRetorno.ret_nossonro))
             
                     IF FOUND()
                        aRetorno.ret_id_cliente := Receber->id_cliente
                         aRetorno.ret_nm_cliente := Receber->nm_cliente
                         aRetorno.ret_vltitulo   := Receber->valor
                         aRetorno.ret_id_conta   := Receber->id_conta
                         nValor += Receber->valor
                     ELSE
                        aRetorno.ret_id_cliente := 99999
                         aRetorno.ret_nm_cliente := "CLIENTE SEM IDENTIFICACAO"
                    ENDIF
                    
                    nItem++
                    aRetorno.ret_id_retorno   := nIDR
                    aRetorno.ret_dt_retorno   := DATE()
                    aRetorno.ret_status       := "1"
                    
                    IF aRetorno.ret_id_cliente <> 99999 .AND. aRetorno.ret_vlpago <> 0
                     aRetorno.ret_seleciona:= .T.
                  ENDIF   
                  
                  SELECT ReTitulo
                     SET ORDE TO 2
                  IF ReTitulo->(AddRec(10))
                       ReTitulo->(ReplData(aRetorno))
                       ReTitulo->(FINALI())
                  ENDIF     
                  
              ENDIF
              
                 ReTitulo->(DbGoBottom())
                 ReTitulo->(DbSkip())
                 aRetorno  := ReTitulo->(InitData())
              
        ENDIF
            
        oTxt:skip()
            
NEXT
	/*Os códigos de movimento '06', '09' e '17' estão relacionados com a descrição C047-C. Domínio: 
	'02' = Entrada Confirmada 
'03' = Entrada Rejeitada 
'04' = Transferência de Carteira/Entrada 
'05' = Transferência de Carteira/Baixa 
'06' = Liquidação 
'07' = Confirmação do Recebimento da Instrução de Desconto 
'08' = Confirmação do Recebimento do Cancelamento do Desconto 
'09' = Baixa 
'11' = Títulos em Carteira (Em Ser) 
'12' = Confirmação Recebimento Instrução de Abatimento 
'13' = Confirmação Recebimento Instrução de Cancelamento Abatimento 
'14' = Confirmação Recebimento Instrução Alteração de Vencimento 
'15' = Franco de Pagamento 
'17' = Liquidação Após Baixa ou Liquidação Título Não Registrado 
'19' = Confirmação Recebimento Instrução de Protesto 
'20' = Confirmação Recebimento Instrução de Sustação/Cancelamento de Protesto 
'23' = Remessa a Cartório (Aponte em Cartório) 
'24' = Retirada de Cartório e Manutenção em Carteira 
'25' = Protestado e Baixado (Baixa por Ter Sido Protestado) 
'26' = Instrução Rejeitada 
'27' = Confirmação do Pedido de Alteração de Outros Dados 
'28' = Débito de Tarifas/Custas */
	SELECT RetLog
ORDDESCEND(,, .T.) 
RetLog->(DbGoTop())
	SELECT ReTitulo
SET ORDE TO 2
ClearMyFilter()
SetMyFilter("1")
	RETURN(.T.)
////////////////////////////////////////////////////////////////////////////////
STATIC FUNCTION ConverteCartValor(vValor)
////////////////////////////////////////////////////////////////////////////////
RETURN(VAL(STRTRAN(vValor,",",".")))
////////////////////////////////////////////////////////////////////////////////


 

Link to comment
Share on other sites

 

Bom dia, Ladinilson, meu interesse na comunicação tcp/ip é para enviar NF-e, fico devendo essa parte do boleto, eu envio via troca de txt e quero ver se por tcp fica mais rapido, ok.

HASA

?????????????????????????

Ué, o tópico e o interesse não era boletos por Acbr?

Não entendi nada!

 

Link to comment
Share on other sites

Haaaaa, explico, no forum do Toledo http://www.pctoledo.com.br/forum/viewtopic.php?f=20&t=18200 eu postei quanto a comunicação tcp/ip o Kapi postou o link com o titulo ACBR.PRG EMISSAO DE BOLETO - ACBR que se referia a troca de arquivos com o acbr por tcp/ip, ocorre que o link estava quebrado e eu postei aqui para que o Kapi corrigi-se o link e o restante está ai pra cima ok.

Falha minha ao entitular essa mensagem o correto é link QUEBRADO DOWNLOAD ACBR.PRG EMISSAO DE BOLETO - ACBR.

:unsure:

HASA 

Link to comment
Share on other sites

  • 8 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...