EDUTEK Posted July 17, 2018 Report Share Posted July 17, 2018 Boa tarde eu uso cobrebem para fazer boletos e remessa, mas pelo que vi o cobrebem está sem atualização desde 2009, e tem uma série de cooperativas de credito que emitem boletos agora, e o cobrebem não contempla elas, qual ferramenta vocês estão usando agora para emissão de boletos : preciso emitir boleto para a CrediSIS se alguem tiver o link e exemplos de como estão fazendo isso eu agradeço, pois faz tempo que não mexo com isso. Quote Link to comment Share on other sites More sharing options...
Wellington Vieira Posted July 17, 2018 Report Share Posted July 17, 2018 Boa tarde, Se não for incomodar também gostaria de exemplos de como estão fazendo. Agradeço Quote Link to comment Share on other sites More sharing options...
dorneles Posted July 17, 2018 Report Share Posted July 17, 2018 essa solucao da tecnospeed é interessante, vc emite o boleto dentro do seu sistema, e ela ja envia para o banco e pega os retorno, sem vc precisar entrar no site do banco. https://tecnospeed.com.br/boleto/?utm_campaign=news_17072018&utm_medium=email&utm_source=RD Station Quote Link to comment Share on other sites More sharing options...
marcioe Posted July 18, 2018 Report Share Posted July 18, 2018 Mas até onde sei o https://tecnospeed.com.br, é um serviço cobrado por boleto emitido. Era meio inviável financeiramente falando, (para os meus clientes em específico) Então usei a ACBR, e estou até o momento satisfeito com a ferramenta. Quote Link to comment Share on other sites More sharing options...
dorneles Posted July 18, 2018 Report Share Posted July 18, 2018 o valor +- R$ 200 ate 1000 boleto, tem varios pacote mas o diferencial é o envio automatico para o banco Quote Link to comment Share on other sites More sharing options...
EDUTEK Posted July 18, 2018 Author Report Share Posted July 18, 2018 Ok no caso do ACBR, onde baixo e pego exemplos ? Quote Link to comment Share on other sites More sharing options...
marcioe Posted July 18, 2018 Report Share Posted July 18, 2018 me adiciona no skype que passo o pouco que sei na BOA Quote Link to comment Share on other sites More sharing options...
dorneles Posted July 18, 2018 Report Share Posted July 18, 2018 001 //////////////////////////////////////////////////////////////////////////////// 002 // Programa: ACBR.PRG // 003 // Funcao..: FUNCAO AcbrMonitor/Boleto Em: 15/06/2016 // 004 // // 005 // Programador...: DORNELES // 006 // Skype.........: soft.tres // 007 // soft-tres@uol.com.br // 008 // www.soft-tres.com.br // 009 //////////////////////////////////////////////////////////////////////////////// 010 011 #include "fivewin.ch" 012 #include "fileio.ch" 013 #INCLUDE ".\Include\RetornoI.Ch" 014 015 #define ETX chr(3) 016 #define CR chr(13) 017 #define LF chr(10) 018 019 Static sENDER := '' ,; 020 SEM_ERRO := .F. ,; 021 RET_IMP := '' 022 023 Static sSOCKET 024 025 //////////////////////////////////////////////////////////////////////////////// 026 #IFDEF __PLATFORM__Linux 027 #DEFINE PATH_DEL '/' 028 #DEFINE DIR_DEL '' 029 #DEFINE K_GO_TOP 409 030 #DEFINE K_GO_BOTTOM 417 031 #ELSE 032 #DEFINE PATH_DEL '\' 033 #DEFINE DIR_DEL ':' 034 #DEFINE K_GO_TOP chr(31) 035 #DEFINE K_GO_BOTTOM chr(30) 036 #ENDIF 037 038 * MODO DA WINDOW * 039 #define SW_HIDE 0 040 #define SW_SHOWNORMAL 1 041 #define SW_NORMAL 1 042 #define SW_SHOWMINIMIZED 2 043 #define SW_SHOWMAXIMIZED 3 044 #define SW_MAXIMIZE 3 045 #define SW_SHOWNOACTIVATE 4 046 #define SW_SHOW 5 047 #define SW_MINIMIZE 6 048 #define SW_SHOWMINNOACTIVE 7 049 #define SW_SHOWNA 8 050 #define SW_RESTORE 9 051 052 * DEFAULT -> Caso a variavel seja nula substitui pelo valor passado. 053 #command DEFAULT <p> TO <val> [,<pn> TO <valn>] ; 054 => ; 055 <p> = iif(<p> = NIL,<val>,<p>) ; 056 [;<pn> = iif(<pn> = NIL,<valn>,<pn>)] 057 058 * ADEL_VET -> Apaga um elemento do vetor e reajusta o seu tamanho 059 #DEFINE ADEL_VET(VET,NUM) adel(VET,NUM) ; asize(VET,len(VET) - 1) 060 061 * AINS_VET -> Insere in elemento em um vetor 062 #define AINS_VET(vetor,n_elem,conteudo) ; 063 iif(n_elem > len(vetor),aadd(vetor,conteudo),vetor[n_elem] := conteudo) 064 065 * COMPILE -> Transforma uma varivel em um bloco de codigo 066 #define COMPILE(c_expr) &("{||"+c_expr+"}") 067 068 //////////////////////////////////////////////////////////////////////////////// 069 Function ACBR_INIT(ENDERECO) // Abre a comunicação com o ACBrmonitor 070 * ENDERECO -> Diretorio ( quando usando TXT) Ex: C:\ACBR\ 071 //////////////////////////////////////////////////////////////////////////////// 072 Local P, RET := .T., TFIM, IP, PORTA, RESP 073 074 if ! empty(sENDER) // J est aberto... 075 return .t. 076 endif 077 078 SEM_ERRO := .F. 079 sENDER := alltrim(ENDERECO) 080 IP := '' 081 PORTA := 0 082 083 P := at(':',sENDER) 084 if P = 0 085 P := len(sENDER)+1 086 endif 087 IP := substr(sENDER,1,P-1) 088 if empty(IP) 089 RET := .F. 090 else 091 PORTA := val(substr(sENDER,P+1)) 092 if PORTA = 0 093 PORTA := 3434 094 endif 095 inetinit() 096 RET := .F. 097 TFIM := Seconds() + 5 /// Tenta conectar durante 5 segundos /// 098 do while Seconds() < TFIM .and. ! RET 099 sSOCKET := inetconnect(IP,PORTA) 100 RET := (ineterrorcode(sSOCKET) = 0) 101 SysWait(0.2) 102 enddo 103 endif 104 if RET 105 106 TRY 107 InetSetTimeout( sSOCKET, 300 ) // Timeout de Recepção 3 seg // 108 RESP := InetRecvEndBlock( sSOCKET, ETX ) 109 CATCH 110 END 111 112 RET := ('Conectado' $ RESP ) // Recebeu as boas vindas ? 113 114 endif 115 if ! RET 116 sENDER := '' 117 endif 118 return RET 119 //////////////////////////////////////////////////////////////////////////////// 120 function ACBR_BOL_Comando( cIndice, cDados ) 121 //////////////////////////////////////////////////////////////////////////////// 122 LOCAL ret_line := "chr(13)+chr(10)" 123 LOCAL cTcpIp := "1" 124 LOCAL lReturn := .T. 125 126 // Checar se o ACBR está instalado... 127 cPath := "C:\ACBrMonitorPLUS" 128 IF ! lIsDir(cPath) 129 MsgInfo("O ACBrMonitor não está instalado", "Aviso") 130 RETURN(.F.) 131 ENDIF 132 133 cTcpIp := GetPvProfString( "ACBrMonitor", "Modo_TCP", " ", "C:\ACBrMonitorPLUS\ACBrMonitor.ini") 134 cIsTxt := GetPvProfString( "ACBrMonitor", "Modo_TXT", " ", "C:\ACBrMonitorPLUS\ACBrMonitor.ini") 135 c_Gate := GetPvProfString( "ACBrMonitor", "TCP_Porta", "3434", "C:\ACBrMonitorPLUS\ACBrMonitor.ini") 136 c_Ende := "" 137 IF cTcpIp = "1" ; c_Ende := "127.0.0.1:"+c_Gate ; ENDIF 138 IF cIsTxt = "1" ; c_Ende := "C:\ACBrMonitorPLUS" ; ENDIF 139 IF EMPTY(c_Ende) ; MSGINFO("Detectado erro de configuração no ACBrMonitor","Aviso"); RETURN .F. ; ENDIF 140 cDirDoMonitor := cPath 141 errfile := "ENT.CMD" 142 cDados := iif(ValType(cDados)#"C","",cDados) 143 cBuffer := cIndice + iif( len( cDados )=0,"()","(" + cDados + ")") 144 145 IF cIsTxt = "1" 146 147 errhandle := FCREATE(errfile) 148 FWRITE(errhandle,cBuffer+&ret_line.) 149 FCLOSE(errhandle) 150 FERASE( cDirDoMonitor+"\ENT.TXT" ) 151 FERASE( cDirDoMonitor+"\SAI.TXT" ) 152 COPY FILE &(errfile) TO &(cDirDoMonitor+"\"+errfile) 153 FRENAME( cDirDoMonitor+"\"+errfile, cDirDoMonitor+"\ENT.TXT" ) 154 155 ELSEIF cTcpIp = "1" 156 157 TRY 158 IF ! ACBR_INIT(c_Ende) 159 SysRefresh() 160 ACBR_END() 161 SysRefresh() 162 MsgAlert("Erro ao tentar abrir a porta de comunicação!","Aviso!") 163 lReturn := .F. 164 ENDIF 165 CATCH 166 END 167 168 IF !lReturn 169 RETURN(.F.) 170 ENDIF 171 172 SysRefresh() 173 IF ! ACBR_ABERTA() ; RETURN .F. ; ENDIF 174 SysRefresh() 175 ACBR_COMANDO( cBuffer ) 176 SysRefresh() 177 ENDIF 178 179 RETURN(.T.) 180 //////////////////////////////////////////////////////////////////////////////// 181 Function ACBR_ABERTA() // Retorna .t. se a COM ja est aberta 182 //////////////////////////////////////////////////////////////////////////////// 183 return ! empty(sENDER) 184 //////////////////////////////////////////////////////////////////////////////// 185 Function IBR_OK(RESP) // Retorna .T. se a String inicia com OK: 186 //////////////////////////////////////////////////////////////////////////////// 187 return (substr(RESP,1,3) == 'OK:') 188 //////////////////////////////////////////////////////////////////////////////// 189 Function ACBR_END() // Fecha a porta da Impressora 190 * Encerra a comunicacao com a impressora, nao precisa de parametros 191 //////////////////////////////////////////////////////////////////////////////// 192 if ! empty(sENDER) 193 inetsendall( sSocket, 'ACBR.bye' ) 194 endif 195 if sSOCKET <> NIL 196 inetclose(sSOCKET) 197 inetdestroy(sSOCKET) 198 inetcleanup() 199 SysWait(0.2) 200 sSOCKET := NIL 201 endif 202 sENDER := '' 203 return(.t.) 204 //////////////////////////////////////////////////////////////////////////////// 205 Function ACBR_COMANDO(CMD,VET_PARAM,ESPERA,TENTA) 206 * Funcao de uso interno para enviar os comandos e 207 * registrar os erros retornados. Exibe os erros se existirem 208 //////////////////////////////////////////////////////////////////////////////// 209 Local REQ, RESP, TEMPOR, TINI, TFIM, BLOCO, BYTES, I, TIPO_PARAM 210 211 if empty(sENDER) 212 if ! SEM_ERRO 213 MsgAlert('ACBrMonitor n†o foi inicializado.',"Aviso") 214 endif 215 return '' 216 endif 217 218 DEFAULT VET_PARAM to {} ,; 219 ESPERA to 900 ,; // 5 minutos 220 TENTA to .t. 221 222 RET_IMP := '' 223 c_Cmmd := SUBSTR(CMD,1,AT("(",CMD)-1) 224 SysRefresh() 225 226 //////// Transmitindo o comando ///////// 227 CMD := ALLTRIM(CMD)+CRLF+"."+CRLF // Requisitos do ACBR 228 229 TRY 230 InetSetTimeout( sSOCKET, 300 ) // Timeout de Envio 3 seg // 231 CATCH 232 END 233 234 if inetsendall( sSOCKET, CMD ) <= 0 235 RET_IMP := 'ERRO: Nao foi possivel transmitir dados para o ACBrMonitor|'+; 236 '('+AllTrim(Str(InetErrorCode( sSOCKET )))+') '+; 237 InetErrorDesc( sSOCKET ) + ETX 238 endif 239 240 TINI := Seconds() 241 do while (right(RET_IMP,1) <> ETX) 242 243 SysRefresh() 244 BLOCO := space(64) 245 246 //////// Lendo a resposta //////// 247 TRY 248 InetSetTimeout( sSOCKET, 300 ) 249 BYTES := inetrecv(sSOCKET, @BLOCO, 64) 250 CATCH 251 END 252 253 RET_IMP += left(BLOCO,BYTES) 254 255 if Seconds() > (TINI + ESPERA) 256 if ! TENTA 257 RET_IMP := 'ERRO: Sem resposta do ACBrMonitor em '+alltrim(str(ESPERA))+; 258 ' segundos (TimeOut)' + ETX 259 else 260 if ALERT('O ACBrMonitor n†o est respondendo. '+; 261 'Deseja tentar novamente ?',{'SIM','NAO'}) # 1 262 RET_IMP := 'ERRO: Sem resposta do ACBrMonitor em '+alltrim(str(ESPERA))+; 263 ' segundos (TimeOut)' + ETX 264 else 265 TINI := Seconds() 266 endif 267 endif 268 endif 269 enddo 270 271 do while right(RET_IMP,1) $ CR+LF+ETX // Remove sinalizadores do final 272 RET_IMP := left(RET_IMP,len(RET_IMP)-1) 273 enddo 274 275 return RET_IMP 276 //////////////////////////////////////////////////////////////////////////////// 277 FUNCTION ACBR_GravaCedente() 278 //////////////////////////////////////////////////////////////////////////////// 279 LOCAL cLinha := "" 280 LOCAL cArquivo := "C:\ACBrMonitorPLUS\Cedente.ini" 281 LOCAL lCloseEmp := .F. 282 LOCAL lCloseCon := .F. 283 284 IF FILE(cArquivo) 285 FErase(cArquivo) 286 ENDIF 287 288 IF SELECT("Empresa") = 0 289 IF !AbreDbfNtx({"Empresa"}) 290 RETURN(.F.) 291 ENDIF 292 lCloseEmp := .T. 293 ENDIF 294 295 IF SELECT("Convenio") = 0 296 IF !AbreDbfNtx({"Convenio"}) 297 RETURN(.F.) 298 ENDIF 299 lCloseCon := .T. 300 ENDIF 301 302 SELECT Empresa 303 SET ORDE TO 1 304 ClearMyFilter() 305 SetMyFilter(cCod_Emp,cCod_Emp) 306 307 SELECT Convenio 308 SET ORDE TO 3 309 SetMyFilter("1") 310 Convenio->(DbGoTop()) 311 312 cLinha := "[Cedente]"+CRLF 313 cLinha += "Nome="+Empresa->nm_empresa+CRLF 314 cLinha += "CNPJCPF="+TRANSF(Empresa->cnpjcpf,"@R 99.999.999/9999-99")+CRLF 315 cLinha += "Logradouro="+Empresa->endereco+CRLF 316 cLinha += "Numero="+TRANSF(Empresa->nro,"99999")+CRLF 317 cLinha += "Bairro="+Empresa->bairro+CRLF 318 cLinha += "Cidade="+Empresa->cidade+CRLF 319 cLinha += "CEP="+TRANSF(Empresa->cep,"@R 99.999-999")+CRLF 320 cLinha += "Complemento="+CRLF 321 cLinha += "UF="+Empresa->uf+CRLF 322 cLinha += "RespEmis=0"+CRLF //[0] Cliente Emite [1] Banco Emite [2] Banco Reemite [3] Banco não Reemite 323 cLinha += "TipoPessoa=1"+CRLF //[0] Pessoa Física [1] Pessoa Juridica [2] Outros 324 cLinha += "CodigoCedente="+LTRIM(Convenio->codcedente)+CRLF 325 cLinha += "LayoutBol="+TRANSF(Convenio->idlayout,"9")+CRLF //[0] Padrão [1] Carnê [2] - Fatura (Não implementado = Padrão) [3] Padrão Entrega 326 cLinha += "Modalidade=3"+CRLF 327 cLinha += "CaracTitulo=0"+CRLF //[0] Cobrança Simples [1] Cobrança Vinculada [2] Cobrança Caucionada [3] Cobrança Descontada [4] Cobrança Vendor 328 cLinha += "Convenio="+LTRIM(Convenio->nroconveni)+CRLF 329 cLinha += ""+CRLF 330 cLinha += "[Conta]"+CRLF 331 cLinha += "Conta="+LTRIM(TRANS(Convenio->nroconta,"@!"))+CRLF 332 cLinha += "DigitoConta="+LTRIM(TRANS(Convenio->digconta,"9"))+CRLF 333 cLinha += "Agencia="+LTRIM(TRANS(Convenio->nroage,"@!"))+CRLF 334 cLinha += "DigitoAgencia="+LTRIM(TRANS(Convenio->digage,"@!"))+CRLF 335 cLinha += ""+CRLF 336 cLinha += "[Banco]"+CRLF 337 cLinha += "Numero="+LEFT(TRANS(Convenio->nrobancodv,"@!"),3)+CRLF 338 cLinha += "CNAB=0"+CRLF 339 cLinha += "IndiceACBr="+LTRIM(TRANS(Convenio->idbanco,"99"))+CRLF 340 341 /* INDICEACBR 342 Este campo não é obrigatório, desde que o número do banco seja informado. 343 Caso ambos sejam informados, o Número terá prioridade. 344 1 - Banco do Brasil 345 2 - Santander 346 3 - Caixa Econômica Federal (Convênio SIGCB) 347 4 - Caixa Econômica Federal (Convênio SICOB) 348 5 - Bradesco 349 6 - Itaú 350 7 - Banco Mercantil 351 8 - Sicred 352 9 - Bancoob 353 10 - Banrisul 354 11- HSBC 355 12- Banestes 356 13- Banco do Nordeste 357 14- Banco BRB */ 358 359 FWriteLine(cArquivo , cLinha ) 360 FClose(cArquivo) 361 362 IF lCloseEmp 363 CloseFile("Empresa") 364 ENDIF 365 366 IF lCloseCon 367 CloseFile("Convenio") 368 ENDIF 369 370 RETURN(.T.) 371 //////////////////////////////////////////////////////////////////////////////// 372 FUNCTION ACBR_GravaTitulo() 373 //////////////////////////////////////////////////////////////////////////////// 374 LOCAL cLinha := "" 375 LOCAL cArquivo := "C:\ACBrMonitorPLUS\titulos.ini" 376 LOCAL nNroTitulo:=0 377 378 IF FILE(cArquivo) 379 FErase(cArquivo) 380 ENDIF 381 382 DbSelectArea("aTitulos") 383 aTitulos->(DbGoTop()) 384 385 WHILE aTitulos->(!EOF()) 386 387 nNroTitulo++ 388 cLinha += "[titulo"+LTRIM(STR(nNroTitulo,2))+"]"+CRLF 389 cLinha += "NumeroDocumento="+LTRIM(aTitulos->NUMERODOC)+CRLF 390 cLinha += "NossoNumero="+LTRIM(aTitulos->NOSSONUME)+CRLF 391 cLinha += "Carteira="+LTRIM(aTitulos->carteira)+CRLF 392 cLinha += "ValorDocumento="+STRTRAN(LTRIM(TRANSF(aTitulos->VALORDOC,"999,999,999.99")),".",",")+CRLF 393 cLinha += "Vencimento="+LTRIM(TRANSF(aTitulos->DTVCTO,"@D"))+CRLF 394 cLinha += "DataDocumento="+LTRIM(TRANSF(aTitulos->DTEMISSAO,"@D"))+CRLF 395 cLinha += "DataProcessamento="+LTRIM(TRANSF(aTitulos->DTPROCESSA,"@D"))+CRLF 396 cLinha += "DataAbatimento="+LTRIM(TRANSF(aTitulos->DTABATIMEN,"@D"))+CRLF 397 cLinha += "DataDesconto="+LTRIM(TRANSF(aTitulos->DTDESCONTO,"@D"))+CRLF 398 cLinha += "DataProtesto="+LTRIM(TRANSF(aTitulos->DTPROTESTO,"@D"))+CRLF 399 cLinha += "PercentualMulta="+LTRIM(TRANSF(aTitulos->PERMULTA,"99.99"))+CRLF 400 cLinha += "LocalPagamento=Pagavel em qualquer agência bancaria mesmo após o vencimento"+CRLF 401 cLinha += "EspecieDoc="+LTRIM(TRANSF(aTitulos->ESPECIE,"@!"))+CRLF 402 cLinha += "EspecieMod="+LTRIM(TRANSF(aTitulos->MOEDA,"@!"))+CRLF 403 cLinha += "Sacado.NomeSacado="+LTRIM(aTitulos->CLIENTE)+ " / "+TRANS(aTitulos->ID_CLIENTE,"99999")+CRLF 404 cLinha += "Sacado.CNPJCPF="+LTRIM(aTitulos->CNPJCPF)+CRLF 405 cLinha += "Sacado.Pessoa="+aTitulos->pessoa+CRLF 406 cLinha += "Sacado.Logradouro="+LTRIM(aTitulos->ENDERECO)+CRLF 407 cLinha += "Sacado.Numero="+LTRIM(TRANSF(aTitulos->NRO,"99999"))+CRLF 408 cLinha += "Sacado.Bairro="+LTRIM(aTitulos->BAIRRO)+CRLF 409 cLinha += "Sacado.Complemento="+CRLF 410 cLinha += "Sacado.Cidade="+LTRIM(aTitulos->CIDADE)+CRLF 411 cLinha += "Sacado.UF="+LTRIM(aTitulos->ESTADO)+CRLF 412 cLinha += "Sacado.CEP="+LTRIM(TRANSF(aTitulos->CEP,"@r 99.999-999"))+CRLF 413 cLinha += "Sacado.Email="+LTRIM(aTitulos->EMAIL)+CRLF 414 cLinha += "Mensagem="+aTitulos->MENSAGEM+CRLF 415 cLinha += "Aceite="+LTRIM(aTitulos->ACEITE)+CRLF 416 cLinha += "OcorrenciaOriginal=0"+CRLF 417 cLinha += "Parcela=1"+CRLF 418 cLinha += "TotalParcelas=1"+CRLF 419 cLinha += "SeuNumero="+LTRIM(aTitulos->NOSSONUME)+CRLF+CRLF 420 421 aTitulos->(DbSkip()) 422 END 423 424 FWriteLine(cArquivo , cLinha ) 425 FClose(cArquivo) 426 427 RETURN(.T.) 428 //////////////////////////////////////////////////////////////////////////////// 429 FUNCTION CriaTmpTitulo() 430 //////////////////////////////////////////////////////////////////////////////// 431 LOCAL xxArq1 := {} 432 433 IF SELECT("aTitulos") <> 0 434 CloseFile("aTitulos",.T.) 435 ENDIF 436 437 aadd( xxArq1, { 'ID_CLIENTE', 'N', 5, 0 } ) 438 aadd( xxArq1, { 'CLIENTE ', 'C', 40, 0 } ) 439 aadd( xxArq1, { 'FANTASIA ', 'C', 20, 0 } ) 440 aadd( xxArq1, { 'LOGRADOR ', 'C', 3, 0 } ) 441 aadd( xxArq1, { 'ENDERECO ', 'C', 40, 0 } ) 442 aadd( xxArq1, { 'NRO ', 'N', 5, 0 } ) 443 aadd( xxArq1, { 'CEP ', 'C', 9, 0 } ) 444 aadd( xxArq1, { 'BAIRRO ', 'C', 15, 0 } ) 445 aadd( xxArq1, { 'CIDADE ', 'C', 60, 0 } ) 446 aadd( xxArq1, { 'ESTADO ', 'C', 2, 0 } ) 447 aadd( xxArq1, { 'CNPJCPF ', 'C', 20, 0 } ) 448 aadd( xxArq1, { 'PESSOA ', 'C', 1, 0 } ) //0 - Pessoa Física 1 - Pessoa Juridica 449 aadd( xxArq1, { 'EMAIL ', 'C', 80, 0 } ) 450 451 aadd( xxArq1, { 'NUMERODOC' , 'C', 20, 0 } ) //Numero Doc 452 aadd( xxArq1, { 'NOSSONUME' , 'C', 20, 0 } ) //Nosso Numero 453 aadd( xxArq1, { 'CARTEIRA' , 'C', 03, 0 } ) //Carteira 454 455 aadd( xxArq1, { 'VALORDOC' , 'N', 16, 2 } ) //Valor do Boleto 456 aadd( xxArq1, { 'VALMULTA' , 'N', 16, 2 } ) //texto com o valor da multa 457 aadd( xxArq1, { 'VALJUROS' , 'N', 16, 2 } ) //texto com o valor do juros 458 aadd( xxArq1, { 'VALDESCT' , 'N', 16, 2 } ) //texto com o valor do desconto 459 aadd( xxArq1, { 'PERMULTA' , 'N', 16, 2 } ) //Percendual de multa 460 461 aadd( xxArq1, { 'DTVCTO' , 'D', 08, 0 } ) //Data Vencimento 462 aadd( xxArq1, { 'DTEMISSAO ', 'D', 08, 0 } ) //Data Emissao 463 aadd( xxArq1, { 'DTPROCESSA', 'D', 08, 0 } ) //Data Processamento 464 aadd( xxArq1, { 'DTABATIMEN', 'D', 08, 0 } ) //Data ABATIMENTO 465 aadd( xxArq1, { 'DTDESCONTO', 'D', 08, 0 } ) //Data Processamento 466 aadd( xxArq1, { 'DTPROTESTO', 'D', 08, 0 } ) //Data Protesto 467 468 aadd( xxArq1, { 'ESPECIE' , 'C', 3, 0 } ) //Especie 469 aadd( xxArq1, { 'ACEITE' , 'C', 1, 0 } ) //Aceite 470 aadd( xxArq1, { 'MOEDA' , 'C', 2, 0 } ) //MOEDA 471 aadd( xxArq1, { 'MENSAGEM' , 'C',300, 0 } ) //MENSAGEM 472 473 HB_DBCreateTemp("aTitulos",xxArq1,"DBFCDX") 474 475 RETURN(.T.) 476 //////////////////////////////////////////////////////////////////////////////// 477 FUNCTION ACBF_SHOW() 478 //////////////////////////////////////////////////////////////////////////////// 479 LOCAL hWnd 480 If ( hWnd := SeekACBR() ) == 0 481 If ( hWnd := SeekACBR() ) == 0 482 BringWindowToTop( hWnd ) 483 ShowWindow( hWnd, 8 ) // SW_RESTORE ) 484 ENDIF 485 Else 486 BringWindowToTop( hWnd ) 487 ShowWindow( hWnd, 8 ) // SW_RESTORE ) 488 Endif 489 Return Nil 490 //////////////////////////////////////////////////////////////////////////////// 491 STATIC FUNCTION SeekACBR() 492 //////////////////////////////////////////////////////////////////////////////// 493 494 LOCAL aCaptions := { 'ACBrMonitorPLUS', 'ACBrMonitor', 'ACBrMonitorPLUS','ACBrMonitorPLUS' } 495 LOCAL nPos, hWnd 496 For nPos = 1 to Len(aCaptions) 497 If ( hWnd := FindWindow( 0, aCaptions[nPos] ) ) > 0 498 Return hWnd 499 EndIf 500 Next 501 Return hWnd 502 //////////////////////////////////////////////////////////////////////////////// 503 FUNCTION ACBR_Imprimir_Boleto() 504 //////////////////////////////////////////////////////////////////////////////// 505 506 ACBR_GravaCedente() 507 508 ACBR_GravaTitulo() 509 510 ** ACBF_SHOW() 511 512 IF !ACBR_INIT("localhost:3434") 513 MsgStop("Erro de comunicação com o ACBR","ATENÇÃO !!!") 514 ENDIF 515 516 cCmd := "bAltTab" 517 **ACBR_BOL_Comando( "ACBr.Run", ["]+cCmd+["] ) 518 519 cCmd := "ACBrMonitorPLUS" 520 // ACBR_BOL_Comando( "ACBr.AppActivate", ["]+cCmd+["] ) 521 522 cCmd := "" 523 //LIMPAR LISTA 524 ACBR_BOL_Comando( "BOLETO.LimparLista", ["]+cCmd+["] ) 525 526 //CONFIGURAR CEDENTE 527 cCmd := "C:\ACBrMonitorPLUS\cedente.ini" 528 ACBR_BOL_Comando( "BOLETO.ConfigurarDados", ["]+cCmd+["] ) 529 530 cCmd := "%{TAB}" 531 ACBR_BOL_Comando( "ACBr.SendKeys", ["]+cCmd+["] ) 532 533 cArquivo := "C:\ACBrMonitorPLUS\titulos.ini" 534 535 cImprime := "I" //IMPRIMIR 536 cImprime := "E" //EMAIL 537 cImprime := "P" //PDF 538 cImprime := "" 539 IF Convenio->email 540 cImprime := "E" 541 ENDIF 542 543 cCmd := ["]+cArquivo+[","]+cImprime 544 ACBR_BOL_Comando( "BOLETO.IncluirTitulos",cCmd+["]) 545 546 cCmd := "" 547 //ACBR_NFE_Comando( "BOLETO.GerarPDF", cCmd ) 548 ACBR_BOL_Comando( "BOLETO.Imprimir", cCmd ) 549 //ACBR_NFE_Comando( "BOLETO.GerarHTML", cCmd ) 550 551 //cCmd := "bAltTab" 552 //ACBR_BOL_Comando( "ACBr.Run", ["]+cCmd+["] ) 553 554 // cCmd := "ACBrMonitor.exe" 555 // ACBR_BOL_Comando( "ACBr.AppExists", ["]+cCmd+["] ) 556 557 ACBR_END() 558 559 RETURN(.T.) 560 //////////////////////////////////////////////////////////////////////////////// 561 FUNCTION ACBR_Remessa_Boleto(nNroRemessa) 562 //////////////////////////////////////////////////////////////////////////////// 563 ACBR_GravaCedente() 564 565 ACBR_GravaTitulo() 566 567 IF !ACBR_INIT("localhost:3434") 568 MsgStop("Erro de comunicação com o ACBR","ATENÇÃO !!!") 569 ENDIF 570 571 cCmd := "" 572 //LIMPAR LISTA 573 ACBR_BOL_Comando( "BOLETO.LimparLista", ["]+cCmd+["] ) 574 575 //CONFIGURAR CEDENTE 576 cCmd := "C:\ACBrMonitorPLUS\cedente.ini" 577 ACBR_BOL_Comando( "BOLETO.ConfigurarDados", ["]+cCmd+["] ) 578 579 cArquivo := "C:\ACBrMonitorPLUS\titulos.ini" 580 cImprime := "" 581 cCmd := ["]+cArquivo+[","]+cImprime 582 ACBR_BOL_Comando( "BOLETO.IncluirTitulos",cCmd+["]) 583 584 cCmd := "" 585 ACBR_BOL_Comando( "BOLETO.GerarRemessa","c:\remessa\",nNroRemessa,STRZERO(nNroRemessa,6)+".rem" ) 586 ACBR_END() 587 588 RETURN(.T.) 589 //////////////////////////////////////////////////////////////////////////////// 590 Function ACBR_Retorno_Boleto() 591 //////////////////////////////////////////////////////////////////////////////// 592 LOCAL nIDR := 0 593 LOCAL nItem := 0 594 LOCAL nValor := 0 595 LOCAL aFiles := cGetFile("Arquivos (*.ret) |*.RET|" ,"Selecione o Arquivo!") 596 LOCAL nLinhas := 0 597 LOCAL nTotRec := 0 598 LOCAL cLinha := "" 599 LOCAL aRetorno := {} 600 LOCAL oTxt 601 LOCAL nRat 602 603 fErase("C:\Retorno\Retorno.ini") 604 605 IF EMPTY(ALLTRIM(aFiles)) 606 MsgStop("ERRO na Abertura do Arquivo!","Atenção") 607 RETURN(.T.) 608 ENDIF 609 610 IF !ACBR_INIT("localhost:3434") 611 MsgStop("Erro de comunicação com o ACBR","ATENÇÃO !!!") 612 RETURN(.T.) 613 ENDIF 614 615 cCmd := "" 616 ACBR_BOL_Comando( "BOLETO.LimparLista", ["]+cCmd+["] ) 617 618 cFile := cFileName(aFiles) 619 nRat := Rat( "\", aFiles ) 620 621 SELECT RetLog 622 SET ORDE TO 2 623 RetLog->(DbSeek(cFile)) 624 625 IF FOUND() 626 MsgStop("Arquivo Retorno já foi processado!","ATENÇÃO !!!") 627 SELECT RetLog 628 ORDDESCEND(,, .T.) 629 RetLog->(DbGoTop()) 630 RETURN(.F.) 631 ENDIF 632 633 cPasta := Subs( aFiles, 1, nRat )//"c:\retorno\" 634 cArquivo := cFile 635 cCmd := cPasta+[","]+cArquivo 636 ACBR_BOL_Comando( "BOLETO.LerRetorno", ["]+cCmd+["] ) 637 638 ACBR_END() 639 640 SELECT ReTitulo 641 SET ORDE TO 2 642 SetMyFilter("1") 643 644 ReTitulo->(DbGoBottom()) 645 ReTitulo->(DbSkip()) 646 aRetorno := ReTitulo->(InitData()) 647 648 aFiles := "C:\Retorno\Retorno.ini" 649 650 IF !FILE(aFiles) 651 MsgStop("ERRO na Abertura do Arquivo/Retorno!","Atenção") 652 RETURN(.T.) 653 ENDIF 654 655 nIDR := PsqControle( Retorno->(dbf()) ) 656 657 oTxt := TTxtFile():New( ALLTRIM(aFiles) ) 658 nLinhas := oTxt:nTLines 659 nTotRec := oTxt:nTLines 660 oTxt:Gotop() 661 662 FOR i = 1 TO nLinhas 663 664 cLinha := oTxt:cLine 665 666 IF AT("Vencimento=", cLinha) <> 0 667 aRetorno.ret_dtvcto := CTOD(Subs(cLinha,12,10)) 668 ELSEIF AT("DataDocumento=", cLinha) <> 0 669 //DataDocumento=30/12/1899 //2 670 //aRetorno.ret_dtvcto := CTOD(Subs(cLinha,12,10)) 671 ELSEIF AT("NumeroDocumento=", cLinha) <> 0 672 aRetorno.ret_numerodoc := Subs(cLinha,17,10) 673 ELSEIF AT("DataProcessamento=", cLinha) <> 0 674 aRetorno.ret_data := CTOD(Subs(cLinha,19,10)) 675 ELSEIF AT("NossoNumero=", cLinha) <> 0 676 aRetorno.ret_nossonro := Subs(cLinha,13,17) 677 ELSEIF AT("ValorDocumento=", cLinha) <> 0 678 aRetorno.ret_vltitulo := ConverteCartValor(Subs(cLinha,15,15)) 679 ELSEIF AT("DataOcorrencia=", cLinha) <> 0 680 aRetorno.ret_dtocorrenc := CTOD(Subs(cLinha,15,10)) 681 ELSEIF AT("DataCredito=", cLinha) <> 0 682 aRetorno.ret_dtcredito := CTOD(Subs(cLinha,12,10)) 683 ELSEIF AT("ValorDespesaCobranca=", cLinha) <> 0 684 aRetorno.ret_vltaxa := ConverteCartValor(Subs(cLinha,11,15)) 685 ELSEIF AT("ValorAbatimento=", cLinha) <> 0 686 //aRetorno.ret_vltitulo := VAL(Subs(cLinha,16,15)) 687 ELSEIF AT("ValorDesconto=", cLinha) <> 0 688 aRetorno.ret_vldesconto := ConverteCartValor(Subs(cLinha,15,15)) 689 ELSEIF AT("ValorMoraJuros=", cLinha) <> 0 690 aRetorno.ret_vljuros := ConverteCartValor(Subs(cLinha,16,15)) 691 ELSEIF AT("ValorIOF=", cLinha) <> 0 692 //ValorIOF=0 //13 693 ELSEIF AT("ValorOutrasDespesas=", cLinha) <> 0 694 //ValorOutrasDespesas=0 //14 695 ELSEIF AT("ValorOutrosCreditos=", cLinha) <> 0 696 aRetorno.ret_vlmulta := ConverteCartValor(Subs(cLinha,20,15)) 697 ELSEIF AT("ValorRecebido=", cLinha) <> 0 698 //ValorRecebido=237,61 //16 699 aRetorno.ret_vlpago := ConverteCartValor(Subs(cLinha,15,15)) 700 ELSEIF AT("DescricaoTipoOcorrencia=", cLinha) <> 0 701 702 aRetorno.ret_id_ocorren := Subs(cLinha,25,2) 703 aRetorno.ret_nm_ocorren := Subs(cLinha,28,50) 704 705 IF VAL(aRetorno.ret_id_ocorren) = 6 .OR. VAL(aRetorno.ret_id_ocorren) = 17 //ver nos outros bancos se é esses mesmo codigos 706 707 SELECT Receber 708 SET ORDE TO 10 709 Receber->(DbSeek(aRetorno.ret_nossonro)) 710 711 IF FOUND() 712 aRetorno.ret_id_cliente := Receber->id_cliente 713 aRetorno.ret_nm_cliente := Receber->nm_cliente 714 aRetorno.ret_vltitulo := Receber->valor 715 aRetorno.ret_id_conta := Receber->id_conta 716 nValor += Receber->valor 717 ELSE 718 aRetorno.ret_id_cliente := 99999 719 aRetorno.ret_nm_cliente := "CLIENTE SEM IDENTIFICACAO" 720 ENDIF 721 722 nItem++ 723 aRetorno.ret_id_retorno := nIDR 724 aRetorno.ret_dt_retorno := DATE() 725 aRetorno.ret_status := "1" 726 727 IF aRetorno.ret_id_cliente <> 99999 .AND. aRetorno.ret_vlpago <> 0 728 aRetorno.ret_seleciona:= .T. 729 ENDIF 730 731 SELECT ReTitulo 732 SET ORDE TO 2 733 IF ReTitulo->(AddRec(10)) 734 ReTitulo->(ReplData(aRetorno)) 735 ReTitulo->(FINALI()) 736 ENDIF 737 738 ENDIF 739 740 ReTitulo->(DbGoBottom()) 741 ReTitulo->(DbSkip()) 742 aRetorno := ReTitulo->(InitData()) 743 744 ENDIF 745 746 oTxt:skip() 747 748 NEXT 749 750 /*Os códigos de movimento '06', '09' e '17' estão relacionados com a descrição C047-C. Domínio: 751 752 '02' = Entrada Confirmada 753 '03' = Entrada Rejeitada 754 '04' = Transferência de Carteira/Entrada 755 '05' = Transferência de Carteira/Baixa 756 '06' = Liquidação 757 '07' = Confirmação do Recebimento da Instrução de Desconto 758 '08' = Confirmação do Recebimento do Cancelamento do Desconto 759 '09' = Baixa 760 '11' = Títulos em Carteira (Em Ser) 761 '12' = Confirmação Recebimento Instrução de Abatimento 762 '13' = Confirmação Recebimento Instrução de Cancelamento Abatimento 763 '14' = Confirmação Recebimento Instrução Alteração de Vencimento 764 '15' = Franco de Pagamento 765 '17' = Liquidação Após Baixa ou Liquidação Título Não Registrado 766 '19' = Confirmação Recebimento Instrução de Protesto 767 '20' = Confirmação Recebimento Instrução de Sustação/Cancelamento de Protesto 768 '23' = Remessa a Cartório (Aponte em Cartório) 769 '24' = Retirada de Cartório e Manutenção em Carteira 770 '25' = Protestado e Baixado (Baixa por Ter Sido Protestado) 771 '26' = Instrução Rejeitada 772 '27' = Confirmação do Pedido de Alteração de Outros Dados 773 '28' = Débito de Tarifas/Custas */ 774 775 SELECT RetLog 776 ORDDESCEND(,, .T.) 777 RetLog->(DbGoTop()) 778 779 SELECT ReTitulo 780 SET ORDE TO 2 781 ClearMyFilter() 782 SetMyFilter("1") 783 784 RETURN(.T.) 785 //////////////////////////////////////////////////////////////////////////////// 786 STATIC FUNCTION ConverteCartValor(vValor) 787 //////////////////////////////////////////////////////////////////////////////// 788 RETURN(VAL(STRTRAN(vValor,",","."))) 789 //////////////////////////////////////////////////////////////////////////////// Quote Link to comment Share on other sites More sharing options...
marcioe Posted July 18, 2018 Report Share Posted July 18, 2018 é uma boa ferramenta. Vale a pena investir no aprendizado. A outra solução achamos que seria meio cara demais. 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.