HASA Posted April 4, 2017 Report Share Posted April 4, 2017 Tarde Kapi, file not found :-( http://fivewin.com.br/index.php?/files/file/1120-acbrprg/ Quote Link to comment Share on other sites More sharing options...
kapiaba Posted April 4, 2017 Report Share Posted April 4, 2017 Já reportei ao Mister Gilmer, mas acho que o programador Web dele, não conseguiu solucionar. Sorry. Quote Link to comment Share on other sites More sharing options...
HASA Posted April 5, 2017 Author Report Share Posted April 5, 2017 Putzzz, tem como enviar ? eu posto nessa mensagem que referencei tu. http://www.pctoledo.com.br/forum/viewtopic.php?f=20&t=18200 HASA Quote Link to comment Share on other sites More sharing options...
kapiaba Posted April 5, 2017 Report Share Posted April 5, 2017 //////////////////////////////////////////////////////////////////////////////// // 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,",","."))) //////////////////////////////////////////////////////////////////////////////// Quote Link to comment Share on other sites More sharing options...
HASA Posted April 6, 2017 Author Report Share Posted April 6, 2017 Valeuuuuu! HASA Quote Link to comment Share on other sites More sharing options...
Ladinilson Posted April 9, 2017 Report Share Posted April 9, 2017 HASA, Estou a implantar também no meu sistema, tens como me mostrar os exemplo de uso? Emissão, remessa, retorno e tudo mais se for possível meu caro. Obrigado Quote Link to comment Share on other sites More sharing options...
HASA Posted April 10, 2017 Author Report Share Posted April 10, 2017 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 Quote Link to comment Share on other sites More sharing options...
Ladinilson Posted April 10, 2017 Report Share Posted April 10, 2017 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! Quote Link to comment Share on other sites More sharing options...
HASA Posted April 10, 2017 Author Report Share Posted April 10, 2017 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. HASA Quote Link to comment Share on other sites More sharing options...
fladimir Posted December 15, 2017 Report Share Posted December 15, 2017 Bom dia, com relação a isto, a rotina testei e funcionou (grato Dorneles), agora como tratar a espera do retorno? Pq por exemplo em TXT mando esperar 5 minutos, pq tem casos de q demora mais o retorno, agora via TCP/IP da uns X segundos e já da timeout... tipo muito pouco... como tratar isso? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.