Jump to content

Luciano Rodrigues Pereira

Membros
  • Content Count

    61
  • Joined

  • Last visited

Community Reputation

8 Neutral

About Luciano Rodrigues Pereira

  • Rank
    Membro

Profile Information

  • Sexo
    Masculino
  • Localização
    Petrolina/PE

Recent Profile Visitors

828 profile views
  1. Acho que não, mas são 20 posições na remessa e retorno, mas todos os cálculos são 9, só na montagem do arquivo é que são 20. Mas eu resolvi só com um rigthstr sem mexer no tamanhonossonumero = 9. Curioso como estava em desacordo com o manual do banco, tanto o layout de remessa quanto o do retorno, até as posições e tamanho de nosso número e outros campos em LerRetorno240. Mas vou arredondar tudo esse fds e depois de uns 15 dias em produção fazendo as trocas de arquivo eu publico aqui o novo pas. Também, quase ninguém deve usar esse banco...
  2. Os boletos e a remessa já foram homologados com sucesso. Estou resolvendo o retorno. A cobrança já está em produção, mas a rotina de LeRetorno240 está totalmente desconforme com o manual do banco. Já estou finalizando os ajustes, mas ficou uma dúvida. Quando vou processar o retorno dá "Tamanho máximo do Nosso Número é 9". Está setado realmente para 9, os cálculos para o boleto e remessa são 9 mesmo (com o digito), mas o nosso número no arquivo de remessa e retorno tem 20 posições. Então acho que não posso setar o fpTamanhoMaximoNossoNumero para 20 né? não vai dar problemas no MontarNossoNumero por exemplo? Inclusive o tal de ASBACE (que é usado na rotina para montar o código de barras) usa o MontarNossoNumero com 9 posições (com o dígito). Então como faço para resolver esse erro do retorno?
  3. Gostaria de saber como faço para que o ACBrBoleto carregue o arquivo .fr3 correspondente a propriedade Layout informada no componente ACBrBoletoFCFR. Por mais que eu mude o Layout só puxa o padrão. E como o ACBr sabe em qual pasta estão os fr3 se não tem uma propriedade para informar a pasta como tem o DirLogo? Eu estou fazendo: FastReportFile:= PathReports + 'Boleto' + Ifthen(LayoutBol = 'LCARNE', 'Carne', ifthen(LayoutBol = 'LFATURA', 'Fatura', ifthen(LayoutBol = 'LPADRAOENTREGA', 'FR', ''))) + '.fr3'; Mas creio que seja totalmente desnecessário, porque senão para que serveria a propriedade Layout? Mas se eu não informo nada na propriedade FastRePortFile dá "Caminho ou o arquivo de impressão não assinalado". Se eu informo só o caminho dos arquivos fr3 dá "invalid file format" Então fica minha dúvida: Como informar a pasta dos arquivos .fr3 para que o ACBr carregue o arquivo .fr3 correspondente à propriedade Layout?
  4. O ACBrBancoBanese não estava de acordo com o Manual do banco, inclusive no cálculo do digito verificador do nosso número, então fiz algumas mudanças no mesmo. Fiz os testes e homologuei a remessa e os boletos junto ao banco. A homologação foi feita com sucesso. Seguem as alterações realizadas e o arquivo ACBrBancoBanese.pas com as alterações realizadas. Seria bom subir o pas não? function TACBrBancoBanese.CalcularDigitoVerificador( const ACBrTitulo: TACBrTitulo ): String; var ADigitoNossoNumero : string; begin Modulo.CalculoPadrao; Modulo.MultiplicadorFinal := 13; Modulo.Documento := ACBrTitulo.NossoNumero; Modulo.Calcular; AdigitoNossoNumero :=IntToStr(Modulo.DigitoFinal); Result:= AdigitoNossoNumero; end; // NÃO LEVAVA EM CONTA A AGÊNCIA NO DOCUMENTO (AAANNNNNNNN) E PARA QUE MultiplicadorFinal:= 13 ? // TROCADO POR function TACBrBancoBanese.CalcularDigitoVerificador( const ACBrTitulo: TACBrTitulo ): String; begin Modulo.CalculoPadrao; Modulo.Documento:= PadLeft(ACBrTitulo.ACBrBoleto.Cedente.Agencia, 3, '0') + RightStr(ACBrTitulo.NossoNumero, 8); Modulo.Calcular; Result:= IntToStr(Modulo.DigitoFinal); end function TACBrBancoBanese.MontarCampoNossoNumero ( const ACBrTitulo: TACBrTitulo ) : String; begin ACBrTitulo.NossoNumero := IntToStrZero( StrToIntDef((Trim(ACBrTitulo.NossoNumero)+Trim(CalcularDigitoVerificador(ACBrTitulo))),0) ,Self.TamanhoMaximoNossoNum); Result := ACBrTitulo.NossoNumero; end; // ACBrTitulo.NossoNumero:= ... MODIFICA O NOSSO NÚMERO, ACRESCENTANDO O DIGITO AO MESMO. // E SE VC PRECISAR CHAMAR A FUNÇÃO UMA SEGUNDA VEZ (PARA GRAVAR O NOSSO NRO MONTADO POR EXEMPLO) VAI BUGAR // PORQUE VC ESTARÁ CRIANDO UM NOVO NOSSONUMERO (AGORA COM O DIGITO) PARA CALCULAR UM NOVO DIGITO // TROCADO POR function TACBrBancoBanese.MontarCampoNossoNumero ( const ACBrTitulo: TACBrTitulo ) : String; begin result:= IntToStrZero( StrToIntDef((Trim(ACBrTitulo.NossoNumero)+Trim(CalcularDigitoVerificador(ACBrTitulo))),0) ,Self.TamanhoMaximoNossoNum); end; function TACBrBancoBanese.CalcularCampoASBACE(const ACBrTitulo: TACBrTitulo): string; ANossoNumero := Copy(Trim(ACBrTitulo.NossoNumero), 1, ACBrTitulo.ACBrBoleto.Banco.TamanhoMaximoNossoNum); // TROCADO POR ANossoNumero := MontarCampoNossoNumero(ACBrTitulo); ACBrBancoBanese.pas
  5. Atualizei o ACBr e agora quando vou compilar minha aplicação está dando o seguinte erro: Unit Jsons not found em Fontes\ACBrTCP\ACBrIBGE.pas na linha --> uses strutils, dateutils, blcksock, Jsons, ACBrUtil; Como faço para corrigir?
  6. Tem razão, a Unicredi está com um número próprio de compensação nacional. Peça a Agência do seu cliente para lhe mandar a logo. Vou ver mais tarde aqui se tenho, caso tenha lhe mando.
  7. Veja o número do banco no seu boleto ou em um talão de cheques da cooperativa, 759 é Sicredi. Se for outro procure no Google a relação dos números dos bancos e identifique qual essa unicredi está usando. Aí vc vai usar a logo do banco em questão. Não só a logo, mas todo o layout em questão.
  8. Como já expliquei, não existe o banco Unicredi, mas sim a cooperativa Unicredi. Leia minha resposta anterior. Sou especialista em Gestão de Cooperativas Financeiras e Conselheiro Fiscal de uma Unicredi, mas se não concorda comigo, tudo bem. Veja o número do banco no seu boleto ou em um talão de cheques da cooperativa, 759 é Sicredi. Se for outro procure no Google a relação dos números dos bancos e identifique qual essa unicredi está usando.
  9. Não existe o banco Unicredi. Unicredi é uma cooperativa financeira. As únicas cooperativas que tem banco próprio são o Sicredi e o Sicoob. As demais usam os serviços desses bancos.
  10. Vc deve usar o Sicredi, pois a Unicred usa os serviços do Sicredi, uma vez que a cooperativa Unicredi não tem banco próprio. A não ser que está cooperativa use outro banco cooperado para fazer seus serviços bancários
  11. Não pode saltar a sequencia. Não precisa ser o número do Sequencial igual ao dia, até mesmo porque eu posso ter mais de uma remessa no mesmo dia, mas se a última que você mandou foi a 10, a próxima tem de ser a 11. O ideal mesmo é mandar o Sicredi desabilitar essa função de Verificar Sequencia do Arquivo na carteira de cobrança do cliente. Existe essa possibilidade lá, eu vi pessoalmente no terminal do cara, lá dentro da agência.
  12. Não é a sequencia do nosso número, mas a sequencia do arquivo de remessa. O arquivo de remessa também tem um sequencial no Header do Arquivo, no CNAB240 são as posições 158 a 163, no CNAB400 as posições 111 a 117. Enfrentei esse problema aqui com minha cooperativa que mudou o sistema de cobrança (era Unicred e virou Sicredi) e tive de reiniciar o sequencia do arquivo (começar de 1 novamente). Veja qual foi o último número sequencial do seu cliente ou pergunte ao suporte da Cobrança do Sicredi. No sistema da Sicredi no cadastro da carteira de cobrança também tem a opção dele não verificar esse sequencial da remessa, você pode também pedir ao Sicredi para configurar a carteira de cobrança de seu cliente para não verificar esse sequencial.
  13. Coloque multa e juros na mesma linha ou use o corpo da mensagem como um campo memo (se já não for, eu acho que já é).
  14. Você vai fazer algo como ACBrBoleto1.LerRetorno; for i := 0 to ACBrBoleto1.ListadeBoletos.Count-1 do with ACBrBoleto1.ListadeBoletos.Objects do begin // Acrescenta na Tabela Temporária cds_Previa.Insert; cds_Previa.FieldByName('DT_OCORRENCIA').AsDateTime:= DataOcorrencia; cds_Previa.FieldByName('NOSSO_NUMERO').AsString:= NossoNumero; cds_Previa.FieldByName('SEU_NUMERO').AsString:= SeuNumero; cds_Previa.FieldByName('SACADO').AsString:= Sacado.NomeSacado; cds_Previa.FieldByName('DT_VENCIMENTO').AsDateTime:= Vencimento; cds_Previa.FieldByName('VL_TITULO').AsCurrency:= ValorDocumento; cds_Previa.FieldByName('VL_DESCONTO').AsCurrency:= ValorDesconto + ValorAbatimento; cds_Previa.FieldByName('VL_TAXA').AsCurrency:= ValorDespesaCobranca; cds_Previa.FieldByName('VL_MULTAJUROS').AsCurrency:= ValorMoraJuros; cds_Previa.FieldByName('VL_OUTROSACR').AsCurrency:= ValorOutrasDespesas; cds_Previa.FieldByName('VL_RECEBIDO').AsCurrency:= ValorRecebido; cds_Previa.FieldByName('TIPO_OCORRENCIA').AsString:= TipoOcorrenciaToStr(OcorrenciaOriginal.Tipo); cds_Previa.FieldByName('OCORRENCIA_ORIG').AsString:= OcorrenciaOriginal.Descricao; cds_Previa.FieldByName('MOTIVO_REJEICAO').AsString:= DescricaoMotivoRejeicaoComando.Text; Depois você executa uma USP no seu banco para processar as baixas dm.AdoSP.ProcedureName:= 'usp_ProcessaRetorno'; dm.AdoSP.Parameters.Refresh; dm.AdoSP.Parameters.ParamByName('@ID_CARTEIRA').Value := dsCarteira.DataSet.FieldByName('ID').AsInteger; dm.AdoSP.ExecProc; E como você vai identificar quais foram os que forma pagos? Aqueles cujo TIPO_OCORRENCIA = 'toRetornoLiquidado' são os que foram pagos, aí é só baixar. Espero ter ajudado.
  15. Não tem segredo. Teste vc mesmo, tentando pagar um boleto pelo seu bankline do celular mesmo (é só não confirmar o pagamento). Uma coisa é teste, outra é produção. Se o boleto foi realmente registrado, veio a confirmação do registro através de um retorno. O cliente tb pode verificar no próprio site do banco se o boleto consta lá como registrado (ou baixado).
×
×
  • Create New...