Hasa, não lembro se é este mesmoo, já que o link de download quebrou no fivewin brasil.
////////////////////////////////////////////////////////////////////////////////
// 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,",",".")))
////////////////////////////////////////////////////////////////////////////////