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