marcioe Posted January 24, 2018 Report Share Posted January 24, 2018 Olá amigos, alguem teria algum Source que possa disponibilizar para realizar a leitura do Arquivo de Retorno do banco, usando o ACBrMonitorPLUS. Antecipadamente Agradeço. Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted January 28, 2018 Report Share Posted January 28, 2018 STATIC FUNCTION BolRetorno() ACBR_Pegar_Retorno() RETURN NIL //////////////////////////////////////////////////////////////////////////////// Function ACBR_Pegar_Retorno() LOCAL cRetDir := GetPvProfString("BOLETO", "DirArquivoRetorno", "", cACBrFld+"\"+cACBrIni), nSlc := SELECT() LOCAL lLerRet := GetPvProfString("BOLETO", "LerCedenteRetorno", "0", cACBrFld+"\"+cACBrIni) LOCAL aFiles := "" LOCAL cLinha := "" LOCAL aRetorno := {} LOCAL oTxt, nRat LOCAL cF_ini := ALLTRIM(GetPvProfString( "ACESSOS", "ACBrIniFi", " ", ".\siscom.ini")) IF FILE(cF_ini) ; ACBr_Ler_Ini(cF_Ini) ; ENDIF // Forçar leitura do arquivo .ini IF ! lIsDir( cRetDir ) SysRefresh() ; MsgAlert("Diretório Arquivo Retorno (DirArquivoRetorno) não definido no "+cACBrFld+"\"+cACBrIni, "Atenção") RETURN(.f.) ENDIF IF lLerRet <> "1" SysRefresh() ; MsgAlert("Ler Dados Cedente Retorno (LerCedenteRetorno) não habilitado no "+cACBrFld+"\"+cACBrIni, "Atenção") RETURN(.f.) ENDIF USE BANCOS SHARED NEW ordListClear() OrdListAdd("BANCOS", "BANCOD", "BANNOM") IF ! SelectBanco() // Posiciona no registro do Banco, caso existam vários. CLOSE BANCOS SELECT(nSlc) RETURN(.f.) ENDIF ACBR_GravaCedente() CLOSE BANCOS SELECT( nSlc ) IF FILE(cRetDir+"\Retorno.ini") IF fErase(cRetDir+"\Retorno.ini") = -1 MsgStop("Favor excluir o arquivo "+cRetDir+"\Retorno.ini"+" manualmente.","Atenção") RETURN(.F.) ENDIF ENDIF aFiles := cGetFile("Retornos(*.ret)|*.RET|Retornos(*.rst)|*.RST" ,"Selecione o Arquivo!", , cRetDir) IF EMPTY(ALLTRIM(aFiles)) MsgStop("ERRO na Abertura do Arquivo!","Atenção") RETURN(.F.) ENDIF cMD5ret := HB_MD5File(aFiles) IF RetJaProc( cMD5ret ) nOpc := MyAlert("Arquivo já processado. O que gostaria de fazer?", {"Ver", "Porcessar", "Retornar"}, "Já processado") IF nOpc < 1 .OR. nOpc > 2 ; RETURN(.F.) ; ENDIF IF nOpc = 1 ; CntChkRet(aFiles) ; RETURN(.F.) ; ENDIF ENDIF cCmd := "" //LIMPAR LISTA IF ! ACBR_BOL_Comando("BOLETO.LimparLista", ["]+cCmd+["] ) ; RETURN .F. ; ENDIF //CONFIGURAR CEDENTE cCmd := cACBrFld+"\cedente.ini" IF ! ACBR_BOL_Comando("BOLETO.ConfigurarDados", ["]+cCmd+["] ) ; RETURN .F. ; ENDIF cCmd := "" IF ! ACBR_BOL_Comando( "BOLETO.LimparLista", ["]+cCmd+["] ) ; RETURN .F. ; ENDIF nRat := Rat( "\", aFiles ) cFld := Subs( aFiles, 1, nRat ) cCmd := cFld+[","]+cFileName(aFiles) IF ! ACBR_BOL_Comando( "BOLETO.LerRetorno", ["]+cCmd+["] ) ; RETURN .F. ; ENDIF ACBR_END() SysWait(0.5) ; SysRefresh() // Dar tempo para o ACBr salvar o arquivo nTenta := 0 WHILE ! FILE(cRetDir+"\Retorno.ini") SysWait(0.5) ; SysRefresh() // Dar tempo para o ACBr salvar o arquivo IF FILE(cRetDir+"\Retorno.ini") ; EXIT ; ENDIF nTenta ++ ; IF nTenta > 10 ; EXIT ; ENDIF // Não esperar mais que 5 segundos. END SysWait(0.5) ; SysRefresh() // Dar tempo para o ACBr salvar o arquivo IF ! FILE(cRetDir+"\Retorno.ini") MsgStop("ERRO na leitura do Arquivo/Retorno!","Atenção") RETURN(.T.) ENDIF STORE "" TO ret_numerodoc, ret_nossonro, ret_id_ocorren, ret_nm_ocorren, ret_mot_rejeic STORE 0 TO ret_vltitulo, ret_vltaxa, ret_vlabatim, ret_vldesconto, ret_vljuros, ret_vlmulta, ret_vlpago STORE CTOD(" ") TO ret_dtvcto, ret_data, ret_dtocorrenc, ret_dtcredito oTxt := TTxtFile():New( cRetDir+"\Retorno.ini" ) oTxt:Gotop() FOR i = 1 TO oTxt:RecCount() // oTxt:nTLines cLinha := oTxt:cLine IF AT("Vencimento=", cLinha) <> 0 ret_dtvcto := CTOD(Subs(cLinha,12,10)) ELSEIF AT("DataDocumento=", cLinha) <> 0 // DataDocumento=FileDate(aFiles) ELSEIF AT("NumeroDocumento=", cLinha) <> 0 ret_numerodoc := ALLTRIM(Subs(cLinha,17,15)) ELSEIF AT("DataProcessamento=", cLinha) <> 0 ret_data := CTOD(Subs(cLinha,19,10)) ELSEIF AT("NossoNumero=", cLinha) <> 0 ret_nossonro := ALLTRIM(Subs(cLinha,13,17)) ELSEIF AT("ValorDocumento=", cLinha) <> 0 ret_vltitulo := ConverteCartValor(Subs(cLinha,16,15)) ELSEIF AT("DataOcorrencia=", cLinha) <> 0 ret_dtocorrenc := CTOD(Subs(cLinha,16,10)) ELSEIF AT("DataCredito=", cLinha) <> 0 ret_dtcredito := CTOD(Subs(cLinha,13,10)) ELSEIF AT("ValorDespesaCobranca=", cLinha) <> 0 ret_vltaxa := ConverteCartValor(Subs(cLinha,22,15)) ELSEIF AT("ValorAbatimento=", cLinha) <> 0 ret_vlabatim := ConverteCartValor(Subs(cLinha,17,15)) ELSEIF AT("ValorDesconto=", cLinha) <> 0 ret_vldesconto := ConverteCartValor(Subs(cLinha,15,15)) ELSEIF AT("ValorMoraJuros=", cLinha) <> 0 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 ret_vlmulta := ConverteCartValor(Subs(cLinha,21,15)) ELSEIF AT("ValorRecebido=", cLinha) <> 0 // ValorRecebido=237,61 // 16 ret_vlpago := ConverteCartValor(Subs(cLinha,15,15)) ELSEIF AT("DescricaoTipoOcorrencia=", cLinha) <> 0 ret_id_ocorren := Subs(cLinha,25,2) ret_nm_ocorren := Subs(cLinha,28,80) /* Tabela de ocorrências 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 */ ELSEIF AT("MotivoRejeicao", cLinha) <> 0 ret_mot_rejeic := ALLTRIM(Subs(cLinha,15,80)) AADD(aRetorno, {ret_dtvcto, ret_numerodoc, ret_data, ret_nossonro, ret_vltitulo, ret_dtocorrenc, ret_dtcredito,; ret_vltaxa, ret_vlabatim, ret_vldesconto, ret_vljuros, ret_vlmulta, ret_vlpago, ret_id_ocorren,; ret_nm_ocorren, ret_mot_rejeic}) STORE "" TO ret_numerodoc, ret_nossonro, ret_id_ocorren, ret_nm_ocorren, ret_mot_rejeic STORE 0 TO ret_vltitulo, ret_vltaxa, ret_vlabatim, ret_vldesconto, ret_vljuros, ret_vlmulta, ret_vlpago STORE CTOD(" ") TO ret_dtvcto, ret_data, ret_dtocorrenc, ret_dtcredito ENDIF oTxt:skip() NEXT oTxt:Close() IF LEN(aRetorno) > 0 // Excluir qualquer registro referente ao arquivo .ret REMRET->(DBSELECTAREA()) REMRET->(DBSETORDER(3)) IF REMRET->(DBSEEK( cMD5ret )) WHILE ! REMRET->(EOF()) IF REMRET->ITEM02 <> cMD5ret ; EXIT ; ENDIF TRY REMRET->(RLOCK()) REMRET->(DBDELETE()) REMRET->(DBUNLOCK()) CATCH oErr END REMRET->(DBSKIP()) END ENDIF REMRET->(dbGoBottom()) FOR nOc := 1 TO LEN(aRetorno) REMRET->(DBAPPEND()) REPLACE REMRET->IDUNIC WITH GeraIdUnico() // ID único (Salvo em vendas e itens de vendas) REPLACE REMRET->ITEM01 WITH aRetorno[nOc,02] // Número do documento REPLACE REMRET->ITEM02 WITH cMD5ret // MD5 do arquivo .ret processado REPLACE REMRET->ITEM03 WITH aRetorno[nOc,02] // Número do documento REPLACE REMRET->ITEM04 WITH aRetorno[nOc,14] // ID da ocorrência - Veja Tabela de ocorrências em ACBR_Pegar_Retorno() REPLACE REMRET->ITEM05 WITH aRetorno[nOc,15] // Descrição da ocorrência REPLACE REMRET->ITEM06 WITH aRetorno[nOc,01] // Vencimento REPLACE REMRET->ITEM07 WITH aRetorno[nOc,03] // Data do processamento REPLACE REMRET->ITEM08 WITH aRetorno[nOc,05] // Valor do documento REPLACE REMRET->ITEM09 WITH aRetorno[nOc,06] // Data da ocorrência REPLACE REMRET->ITEM10 WITH aRetorno[nOc,07] // Data do crédito REPLACE REMRET->ITEM11 WITH aRetorno[nOc,08] // Valor despesa cobrança REPLACE REMRET->ITEM12 WITH aRetorno[nOc,09] // Valor do abatimento REPLACE REMRET->ITEM13 WITH aRetorno[nOc,10] // Valor do desconto REPLACE REMRET->ITEM14 WITH aRetorno[nOc,11] // Valor Mora Juros REPLACE REMRET->ITEM15 WITH aRetorno[nOc,12] // Valor Multa REPLACE REMRET->ITEM16 WITH aRetorno[nOc,13] // Valor Recebido NEXT REMRET->(dbGoTop()) CntChkRet(aFiles) ELSE SysRefresh() ; MsgAlert("Arquivo de retorno sem ocorrências válidas","Aviso") ENDIF SELECT(nSlc) RETURN(.T.) Adapte à sua necessidade. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.