Jump to content
Fivewin Brasil

Emissão de Boletos


EDUTEK

Recommended Posts

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.

 

 

 

Link to comment
Share on other sites

 

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 ////////////////////////////////////////////////////////////////////////////////
Link to comment
Share on other sites

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...