HASA
ACBRMONITORPLUS TCP/IP
Moderador: Moderadores
ACBRMONITORPLUS TCP/IP
- Boa tarde, uso o acbr com troca de arquivos TXT, agora estava tentando usar a troca de informações via tcp/ip na tentativa de agilizar o processo, algum colega teria como dar alguma dica ?
´
HASA
HASA
ACBRMONITORPLUS TCP/IP
tbm quero!
acompanhando...
acompanhando...
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
ACBRMONITORPLUS TCP/IP
Quando instala o ACBr tem uma pasta com exemplos e tem um deles de como fazer esta comunicação via Sockets, já tentaram?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
ACBRMONITORPLUS TCP/IP
Não seria interessante via hbnetio?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
ACBRMONITORPLUS TCP/IP
Não dá pra usar o hbnetio pra isso
Tem q acessar o ACBr via porta X pre definida ele
E enviar o comando e ler a resposta
Tem q acessar o ACBr via porta X pre definida ele
E enviar o comando e ler a resposta
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
ACBRMONITORPLUS TCP/IP
É que você poderia ter o aplicativo Harbour na máquina do ACBR, e comunicar o Harbour pelo hbnetio.
Aliás, nem precisa hbnetio pra isso, poderia ser dbf ou mysql, ou qualquer outra coisa.
Aliás, nem precisa hbnetio pra isso, poderia ser dbf ou mysql, ou qualquer outra coisa.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
ACBRMONITORPLUS TCP/IP
Sim nesse caso sim, mas o X da questão é comunicar com o ACBR sem ser por troca de arquivo TXT e sim via TCP
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
ACBRMONITORPLUS TCP/IP
- Pessoal acho que o Kapiaba deu a letra, vejam:
http://fivewin.com.br/index.php?/files/ ... 0-acbrprg/
HASA
)
http://fivewin.com.br/index.php?/files/ ... 0-acbrprg/
HASA
ACBRMONITORPLUS TCP/IP
Show de Bola... da pra usar ai para as outras funcionalidades...
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
ACBRMONITORPLUS TCP/IP
Na verdade achei o link mas... ainda não tive tempo de testar ou adequar para Minigui, as vezes os código de FiveWin chamam recursos da lib especicificamente e temos que traduzir para funções da Minigui, pretento ver isso até o finalk de semana ok.
:xau
HASA
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
ACBRMONITORPLUS TCP/IP
Hasa, não lembro se é este mesmoo, já que o link de download quebrou no fivewin brasil.
Código: Selecionar todos
////////////////////////////////////////////////////////////////////////////////
// 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,",",".")))
////////////////////////////////////////////////////////////////////////////////
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
ACBRMONITORPLUS TCP/IP
Qualquer coisa que faltar, chame o Dorneles(autor), se quiser o skype dele, me chame no skype porfa. abs.
ACBRMONITORPLUS TCP/IP
A rotina funciona, só não sei como tratar qdo fica demorando o retorno do ACBr pra ele ficar aguardando, pq da tipo Timeout da conexão Socket... queria q ficasse tentando X tempo.
Exemplo em TXT mando aguardar o retorno até 5 min pq dependendo o tamanho do arquivo TXT de uma NFCe por exemplo demora mais tempo o retorno do componente...
Queria adotar a mesma metodologia, se bem q nem sei se a lógica seria igual.
Alguém sabe?
Exemplo em TXT mando aguardar o retorno até 5 min pq dependendo o tamanho do arquivo TXT de uma NFCe por exemplo demora mais tempo o retorno do componente...
Queria adotar a mesma metodologia, se bem q nem sei se a lógica seria igual.
Alguém sabe?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.