Ir para conteúdo
  • Cadastre-se

Pesquisar na Comunidade

Showing results for tags 'CNAB240'.

  • Search By Tags

    Digite tags separadas por vírgulas
  • Search By Author

Tipo de Conteúdo


Fóruns

  • Fórum Aberto - ACBr
    • Notícias do ACBr
    • Equipamentos testados
    • Base de Conhecimento
    • Dúvidas Gerais sobre o ACBr
    • ACBrSerial
    • ACBrSAT
    • ACBrNFe
    • ACBrDFe
    • Dúvidas sobre TEF
    • Dúvidas sobre PIX
    • ACBrMonitor PLUS
    • ACBrTXT
    • ACBrBoleto
    • ACBrDiversos
    • ACBrTCP
    • ACBrFramework
    • ACBrLIB
  • ACBr Pro
    • Dúvidas gerais
    • Duvidas Privadas
    • ACBrMonitorPLUS
    • NFe/NFCe - Nota Fiscal Eletrônica
    • DFe - Documentos Fiscais Eletrônicos
    • SAT / MFE
    • TEF
    • Boleto
    • ACBrSPED
    • ACBrTXT
    • Paf-ECF
    • Requisitos Fiscais por UF
    • ACBrLIB
  • Outros Assuntos
    • Boteco do ACBr
    • Legislação Fiscal e Tributária
    • Object Pascal - Delphi & Lazarus
    • Banco de Dados
    • Classificados
    • Dúvidas não relacionadas ao ACBr

Categorias

  • ACBr Pro
    • ACBrLib - PRO
    • ACBrMonitorPLUS - PRO
    • Utilitários - PRO
    • Dia do ACBr 1a edição
    • Dia do ACBr 2a edição
    • ACBrLib Android - Pro
  • Download Livre
    • ACBrLib - DEMO
    • ACBrMonitorPLUS - DEMO
    • Demos / Testes / Utilitários
    • Apresentações - Palestras
    • ACBrLib Android - Demo

Calendários

  • Eventos - Palestras - Webinars
  • Prazos SEFAZ
  • Calendário da Comunidade
  • ACBr Papo Pro
  • Feriados Nacionais

Find results in...

Find results that contain...


Data de Criação

  • Início

    End


Data de Atualização

  • Início

    End


Filter by number of...

Data de Registro

  • Início

    End


Grupo


Website URL

  1. edulamy

    Boleto 450-FITBank

    Boa tarde a todos. Vocês poderiam incluir este layout no acbrBoleto? Documentação_Cnab_Fit_Cob2.pdf
  2. Hoje nosso amigo @Souza relatou que as remessas passaram a ser rejeitadas pelo motivo: Código do Convenio estava sendo informada no Header do arquivo. Nossa moderadora @Gr@c@ nos informou: O rejeição reportada foi resolvida conf. orientação acima. Então fiquem atentos, caso aconteça com você, favor seguir estas instruções. Link do tópico onde foi mencionado: Obrigado @Gr@c@ pela ajuda essencial ! Obrigado @Souza por reportar !
  3. Prezados Estou realizando a homologação do boleto Unicred e encontrei o tópico fechado com ajustes na identificação do número documento e nosso número. Utilizei a rotina criada pelo @vinizioWOW para realizar a leitura e obtive sucesso na identificação do título liquidado. Me coloco à disposição para realizar novos testes e ajustes. ACBrBancoUnicredES.pas retorno boleto.pdf
  4. Olá, pessoal, tudo bem? Mais uma vez eu perturbando vocês por aqui. Estou implementando a emissão de boletos pelo AcBrLib, antes eu emitia pela Tecnospeed, e estou com problemas com alguns bancos em relação à emissão da remessa. O Sicoob, por exemplo, que usa o leiaute de remessa CNAB240, está apresentando duas divergências em relação ao "Código do Convênio no Banco" e ao "Dígito Verificador da Ag/Conta", este último indo em branco, mas o valor default precisa ir 0 (e que está informado no AcBrLib.ini). Eu vou anexar os arquivos para vocês analisarem, pois eu já configurei de inúmeras formas estes dois campo, e mesmo assim a remessa não aprova no validador, embora pense que esteja configurando algo de errado. O endereço do validador que estou usando é este aqui: https://www.sicoob.com.br/web/sicoob/validador-cnab Abaixo eu descrevo quais campos eu preenchi para a validação do arquivo: O arquivo de validação em PDF está em anexo, com o nome "retorno validador sicoob.pdf" Aguardo retorno, e muito obrigado. ACBrLib.ini boleto.pdf remessa.txt retorno validador sicoob.pdf
  5. Boa Tarde, Tudo Bem ! Estou tendo um problema na hora de registrar o NossoNumero no arquivo Remessa (Banco do Brasil). Eu preciso passar para o arquivo apenas Zeros, no caso ficaria assim '00000000000000000000' o NossoNumero. PadRight(ANossoNumero+aDV, 20, ' ') + // 38 a 57 - Nosso número - identificação do título no banco -> Linha do código aonde registra a informação no arquivo (ACBrBancoBrasil). Mesmo eu passando a tag NossoNumero = ' ', existe uma função que passa o numero do convenio para o NossoNumero . Função -> TACBrBancoBrasil.FormataNossoNumero. if ((ACBrTitulo.Carteira = '16') or (ACBrTitulo.Carteira = '18')) and (Length(AConvenio) = 6) and (wTamNossoNum = 17) then ANossoNumero := PadLeft(ANossoNumero, 17, '0') else if Length(AConvenio) <= 4 then ANossoNumero := PadLeft(AConvenio, 4, '0') + PadLeft(ANossoNumero, 7, '0') else if (Length(AConvenio) > 4) and (Length(AConvenio) <= 6) then ANossoNumero := PadLeft(AConvenio, 6, '0') + PadLeft(ANossoNumero, 5, '0') else if (Length(AConvenio) = 7) then ANossoNumero := PadLeft(AConvenio, 7, '0') + RightStr(ANossoNumero, 10); Nesse caso como eu poderia proceder, é possível passar em banco ou apenas zeros ? Muito obrigado ! Atenciosamente um Desenvolvedor em desenvolvimento !.
  6. lukas1056

    Boleto Unicred ES

    Oi pessoal, estava realizando testes de geração de boletos do "Unicredi ES" e ao mandar para o banco os boletos e o arquivo de remessa para validação, me retornaram que no "segmento P" na posição 221 a 221( Operação de Protesto) não estava habilitada e deveria ser enviado o codigo "3 - Não protestar", entretando nas configurações nao era informada nenhuma informação de protesto (Dias corridos ou uteis). Visualizando o fonte verifiquei que ao não informar um Tipo a funçao abaixo assume que sejam "Dias Corridos", pois nao há outras opções no Type "TipoDiasProtesto". Então adicionei ao Type "diNenhum", para que seja possivel entrar no Result := 3; Desde já agradeço a atenção.. ACBrBoletoConversao.rar
  7. Bom dia. Alguém teve algum problema ou sabe o motivo que os retornos do banco Santander, CNAB240, em alguns casos, quando vem a liquidação, o valor de crédito está vindo zerado?
  8. Bom dia! Na validação da remessa cnab240 para o Banrisul veio uma critica do emitente do boleto como sendo "emissão própria" sendo que o emitente deveria ser o banco. Verificando os fontes vi que estava fixo na transação "1020" conforme imagem onde a coluna "2" se refere ao emitente do boleto. Fiz o ajuste seguindo a configuração do Banco do Brasil usando varável "ATipoBoleto" que trata a propriedade do responsável pela emissão do boleto e modifiquei a linha destacada usando a varável. {Pegando Tipo de Boleto} ATipoBoleto := '1'; case ACBrBoleto.Cedente.ResponEmissao of tbCliEmite : ATipoBoleto := '2'; tbBancoEmite : ATipoBoleto := '1'; end; Linha modificada no layout: '10' + ATipoBoleto + '0' + Em anexo a unit com o ajuste. Marcos Grupo MHE ACBrBancoBanrisul.pas
  9. Estou gerando uma remessa do Santander, e o sequencial do lote do segmento P parece se comportar errado. Esta começando com o lote 1, corretamente, e depois, pula para o 5, ignorando o 2, 3 e 4. Vendo os fontes, o preenchimento ocorre da seguinte forma: function TACBrBancoSantander.GerarRegistroTransacao240(ACBrTitulo: TACBrTitulo): String; ....... ISequencia := (ACBrBoleto.ListadeBoletos.IndexOf(ACBrTitulo) * 4) + 1; O mesmo acontece no trailer do lote e do arquivo, essa multiplicação por 4. Desta forma, o banco me retornou que os totais estão incorretos. "REGISTRO DETALHE - SEGMENTO P REMESSA Posição 09 - 013 Nº seqüencial do registro de lote SEQUENCIAL DEVE INICIAR EM '00001' E SOMAR '1' A CADA LINHA ATÉ O FINAL DO LOTE, LINHA 4." Para corrigir, eu removi o " * 4", do sequencial do segmento P, e do trailer do arquivo e lote. 29052020143508_000005.txt
  10. Boa tarde! Na leitura do Retorno não está previsto o código '5-Remessa Rejeitada', conforme o manual da Caixa Econômica. O que impossibilita a leitura do retorno para detalhar o motivo do erro ao usuário. Segue do manual e do fonte com o ajuste necessário. Manual: http://www.caixa.gov.br/Downloads/cobranca-caixa/Manual_de_Leiaute_de_Arquivo_Eletronico_CNAB_240.pdf Atenciosamente!
  11. Boa tarde, Recentemente homologuei um cliente com o Banco Sicredi via CNAB240 que não gostaria que fosse cobrado valor de multa, porém, recebi uma rejeição ao tentar enviar código de multa como '0' (isento) e verifiquei que atualmente não é possível informar um valor de multa zerado. Esta situação ocorre pois o banco Sicredi somente aceita o envio do código de multa como '2' (percentual), conforme consta no manual no campo de código de multa "O Sicredi apenas aceita o campo multa preenchido com percentual.", porém, no trecho de código onde é preenchido a informação, não esta sendo possível informar código de multa '2' (percentual) e valor de 0% de multa, pois se eu informar percentual de multa como zero será automaticamente informado o código de multa como '0' (isento). IfThen((PercentualMulta > 0), IfThen(MultaValorFixo,'1','2'), '0') + // 66 Código da multa - 1 valor fixo / 2 valor percentual / 0 Sem Multa Como sugestão, gostaria de solicitar que este trecho fosse alterado para informar o valor '2' fixo, já que é a única opção disponível para o banco. '2' + // 66 Código da multa - 2 valor percentual Infelizmente não consigo anexar o manual neste tópico devido ao tamanho do mesmo, segue link disponibilizado pelo próprio Sicredi abaixo (informação referente ao código de multa encontra-se no início da página 55): https://www.sicredi.com.br/html/para-voce/recebimentos/cobranca/arquivos/manual-cnab-240-v1.3.pdf Código fonte com a alteração mencionada (aplicada na linha 1833) encontra-se em anexo. Atenciosamente, Datamicro Sistemas. ACBrBancoSicredi.pas
  12. Amigos, alguém pode me ajudar com essa dúvida? No arquivo de retorno do Banco do Brasil, CNAB240, alguns títulos liquidados estão vindo no registro detalhe T, posição 16 à 17 com a ocorrência 06, e na posição 214 à 223, o motivo vem como 99. O que significa esse motivo da ocorrência = 99? Obs.: já conferi no leiaute da Febraban CNAB240, e no leiaute de particularidades do BB e não encontrei a descrição desse motivo. Também entrei em contato com o suporte da Cobrança do BB, e me orientaram enviar um e-mail para [email protected] com a dúvida, porém já faz 15 dias úteis (sendo que o prazo para resposta era de 5 dias úteis) que enviei o e-mail e não tive resposta do BB.
  13. Claudiomir

    Erro campo 72 sicoob

    Saudações. Estou em minha "saga" particular para implementar no banco Sicoob. Ao enviar a remessa no validador do sicoob ele me retorna um erro na posição 72. Informando que o valor deve ser 0 e não vazio. A posição informada vem logo após o ultimo campo onde é informado o digito da conta. Ficaria entre o dígito da conta e a primeira letra do nome do Emitente. Eu realmente não entendo. Abro a remessa, substituo o "vazio" por "zero" e a remessa é aceita. Na geração desses valores, estou esquecendo de preencher algo? Alguma propriedade que devo ativar? CNAB 240 Código Abaixo: fprinci.ACBrBoleto1.ACBrBoletoFC.Filtro := fiNenhum; fprinci.ACBrBoletoFCFR1.DirLogo := extractfilepath(application.ExeName) + 'logo'; fprinci.ACBrBoleto1.DirArqRemessa := fprinci.cfgcfgcaminhoremessabanco.AsString; fprinci.ACBrBoleto1.DirArqRetorno := fprinci.cfgcfgcaminhoremessabanco.AsString; fprinci.ACBrBoleto1.ListadeBoletos.Clear; fprinci.ACBrBoleto1.cedente.Agencia := self.ctactanragencia.AsString; fprinci.ACBrBoleto1.cedente.AgenciaDigito := self.ctactadgagencia.AsString; fprinci.ACBrBoleto1.cedente.Conta := self.ctacatnrconta.AsString; fprinci.ACBrBoleto1.cedente.ContaDigito := self.ctactadgconta.AsString; fprinci.ACBrBoleto1.cedente.Convenio := self.ctactaconvenio.AsString; fprinci.ACBrBoleto1.cedente.CNPJCPF := fprinci.cfgcfgdoc1.AsString; fprinci.ACBrBoleto1.cedente.TipoInscricao := pJuridica; fprinci.ACBrBoleto1.cedente.Logradouro := fprinci.cfgcfgendereco.AsString; fprinci.ACBrBoleto1.cedente.NumeroRes := fprinci.cfgcfgnumero.AsString; fprinci.ACBrBoleto1.cedente.Bairro := fprinci.cfgcfgbairro.AsString; fprinci.ACBrBoleto1.cedente.Cidade := fprinci.cfgcfgcidade.AsString; fprinci.ACBrBoleto1.cedente.UF := fprinci.cfgcfguf.AsString; fprinci.ACBrBoleto1.cedente.CEP := fprinci.cfgcfgcep.AsString; fprinci.ACBrBoleto1.cedente.CodigoCedente := self.ctactacodigocedente.AsString; fprinci.ACBrBoleto1.cedente.NumeroRes := ''; fprinci.ACBrBoleto1.cedente.Nome := self.ctactabeneficiario.AsString; fprinci.ACBrBoleto1.cedente.Modalidade := self.ctactamodalidade.AsString; No aguardo de qualquer idéia. Claudiomir Posição Inicial: 72 - Valor informado diverge do valor default definido para o campo: 0
  14. Recebi um e-mail com o arquivo em anexo do Supervisor do Sicoob Credilivre, dizendo que uma remessa gerada pelo acbr não foi aceita e que o padrão do arquivo foi alterado. O que devo fazer? exemplo cnab240.txt
  15. Boa tarde a todos da comunidade. A minha situação é a seguinte: Realizo todo meu processo de gestão de cobrança pelo AcbrBoleto no banco Itaú e outros, porem no itau temos o desconto de titulo quando descontado o titulo é baixado do cobrança e vai pro empréstimos solicitamos ao Itaú e passamos a receber o arquivo de retorno referente aos descontados[04-EMPRESTIMO], porem na leitura do retorno a identificação do tipo do serviço é ignorada, ou melhor não temos uma propriedade do componente AcbrBoleto para carregarmos qual serviço estamos tratando. Gostaria de saber dos moderadores e responsáveis se seria viável e interessante o desenvolvimento desta propriedade. Desde já gostaria de me por a disposição para desenvolver uma versão de teste para comunidade.
  16. Boa tarde amigos, estou num projeto novo agora e gostaria de saber se alguém tem pelo menos um registro de exemplo do arquivo de remessa do Bradesco cnab 240. Pois está difícil iniciar aqui. Não entendi muito bem como se faz. Grato
  17. Prezado(as); Estou tendo problemas ao enviar arquivo remessa CNAB 240 banco SAFRA, Já homologado desde Dezembro de 2018, as quantidades de caracteres contém os 240 caracteres e não foi alterado nada no código. Alguém sabe se mudou ou se teve atualização do layout ? Já enviei o arquivo para o banco e eles estão analisando. Criei até um validador de caracteres e um contador de linhas e está tudo como deveria. Obrigado, qualquer notícia [email protected], agradeço desde já.
  18. Bom dia! Estou implementando o boleto da CEF e percebi que no arquivo ACBrBoleto, o método LeRetorno contém um teste que lança uma exceção se o código remessa/retorno for diferente de '2'. procedure TACBrBoleto.LerRetorno(AStream: TStream); ... case Length(SlRetorno.Strings[0]) of 240 : begin if (Copy(SlRetorno.Strings[0],143,1) <> '2') then Raise Exception.Create( ACBrStr( NomeArq + sLineBreak + 'Não é um arquivo de Retorno de cobrança com layout CNAB240') ); ... Porém existem outros casos que podem ser tratados e por conta desse teste eu não consigo tratá-los na unit ACBrBancoCaixa. Não seria melhor transferir esse teste para dentro das units de cada banco? Pois dessa forma cada banco poderia implementar o tratamento para estes outros casos. Att.
  19. Boa tarde, Recebi um manual do bancoob com atualização em 10/02/2017. Neste manual há uma alteração no header na posição 72. "Dígito Verificador da Ag/Conta: Preencher com zeros" Segue em anexo a unit alterada e o manual. Grato LAYOUT BANCOOB atualizado.rar ACBrBancoBancoob.pas
  20. Olá. Estou fazendo a homologação do boleto e remessa no Sicredi, leiaute CNAB240, e foi retornado a rejeição no segmento R, posição 18, que o código do desconto está inválido, foi informado 0 quando deveria ser informado 1, 2, 3 ou 7. No caso os boletos não tem desconto, porém no leiaute do Sicredi informa que em caso de não houver desconto, o código dever ser 1, 2, 3 ou 7 e o campo do valor de desconto zerado. Pelo que vi nos fontes, quando o valor e data do desconto não existe, o código do desconto é levado como 0, só que para o Sicredi (748 - código do Banco) dessa forma não fica correto. Como faço para sair o código do desconto como 1, 2, 3 ou 7, e continuar levando a data e valor do desconto zerados? Já existe alguma coisa pronta sobre isso, ou devo alterar os fontes e enviar para ser analisado? Obs.: alterei o valor da posição 18 do segmento R para 1 manualmente no arquivo e dessa forma o mesmo foi validado pelo Sicredi.
  21. Olá. Fazendo a validação do boleto e remessa do Sicredi 748, leiaute CNAB240, carteira A, encontrei as seguintes rejeições: 1 - Quando tiver informado o sacador/avalista no documento, levar na remessa no registro detalhe Q, na posição 155 à 169 o CPF ou CNPJ do sacador/avalista sem pontos, barras e traços, alinhando o número a direita e coloca zeros a esquerda para preencher o campo. Validação: Como o sistema está gerando: Como deveria ser: 2 - No registro detalhe R, nas posições 100 à 139 e 140 à 179 levar em branco. Validação: Como o sistema está gerando: Como deve ser: A minha pergunta é: Já existe alguma coisa pronta sobre isso, ou devo alterar os fontes e enviar para ser analisado? Obs.: fiz as alterações manuais no arquivo remessa e enviei para o Sicredi, o arquivo foi validado. Em anexo arquivo com erro e arquivo alterado manualmente. 57300D05 - corrigido.CRM 57300D05 - com erro.CRM
  22. Bom dia, Tive a necessidade de efetuar algumas alterações referente a remessa do CNAB240 do banco Bradesco. Conforme consta no manual, há a possibilidade de enviar o código de desconto e código de mora 1, 2, 3. Em anexo o arquivo e manual. Grato desde já. ACBrBancoBradesco.pas CNAB240_2018.pdf
  23. Segundo o Manual CNAB240 Sicredi, página 46, no registro de transação do arquivo de remessa o caractere 118 deve conter um dos seguintes valores: '1' = Valor por dia ‘2’ = Taxa Mensal '3' = Isento Problema: O ACBr está informando '1' se tiver valor e '3' se não tiver valor, não sendo possível informar a opção '2' referente à Taxa Mensal. Sugiro lermos o campo "CodigoMoraJuros" do ACBr definir esta informação corretamente. Arquivo ACBrBancoSicredi.pas, linha 1691
  24. Boa tarde pessoal, tive que alterar um padrão de cnab400 para cnab240 para um cliente. A remessa está ok, porém gerei o boleto teste e encaminhei para analisarem e me retornaram divergências no código de barras. Alguém utiliza o cnab240 e está conseguindo gerar normal? Estou com Acbr atualizado. Segue o retorno que obtive:
  25. Boa tarde Colegas, Estou utilizando o ACBr para envio da remessa e retorno do banco Santander, mas no processamento do retorno encontrei um problema, ou talvez foi feito para ser assim (MotivoRejeicaoComando - somente motivos de rejeição). Primeiro resumidamente é que o Motivo que vem no arquivo quando é liquidação ou baixa(Ocorrência 06 ou 09) ou não está entrando na rotina Titulo.MotivoRejeicaoComando.Add. Assim não temos disponíveis os motivos das ocorrências na baixa/liquidação. Versão mais detalhada: procedure TACBrBancoSantander.LerRetorno240 Layout: Santander - CNAB 240 - Layout de Arquivo - Padrão 240 – Cobrança - Versão 2.8.3 - Setembro/2017 Nota 41 - Indica que o código de ocorrência 03(03 - Entrada rejeitada), 26(26 - instrução rejeitada) e 30(30 - alteração de dados rejeitada) estão relacionados com a nota 41-a E os códigos 06(liquidação), 09(baixa) e 17 estão relacionados com a nota 41-C - Ai temos uma relação - Códigos de rejeições de 01 a 64 associados ao códigos de movimento 03, 26 e 30 - E temos uma relação de Código de liquidação/baixa de 01 a 13 associados ao código de movimento 06, 09 e 17 Bom, analisando um arquivo de retorno do Santander, no segmento, T, na coluna 209(Motivo), quando a ocorrência vem 06(Liquidação) veio os motivos 03(No próprio banco) e 04(Compensação eletrônica). Ai analisando o arquivo do Acbr ( ACBrBancoSantander.pas ) verifiquei que na leitura do retorno na procedure TACBrBancoSantander.LerRetorno240 - DoVerOcorrencia Só tem a tratativa dos motivos das ocorrências 03, 26 e 30, as quais estão ligadas somente as rejeições. if MatchText(AOcorrencia, ['03', '26', '30']) then Mas eu preciso dos motivos das ocorrências 06, 09 e 17, principalmente da 06 e 09 Então minha sugestão de alteração do código seria: if MatchText(AOcorrencia, ['03', '06', '09', '17', '26', '30']) then begin pMotivoRejeicao:= 209; for I:= 0 to 4 do begin CodMotivo:= StrToIntDef(copy(Linha,pMotivoRejeicao,2),0); if CodMotivo > 0 then begin Titulo.MotivoRejeicaoComando.Add(copy(Linha, pMotivoRejeicao, 2)); Titulo.DescricaoMotivoRejeicaoComando.Add(CodMotivoRejeicaoToDescricao( Titulo.OcorrenciaOriginal.Tipo,CodMotivo)); end; Inc(pMotivoRejeicao, 2); end; if AOcorrencia = '03' then Tipo:= toRetornoRegistroRecusado else if AOcorrencia = '26' then Tipo := toRetornoInstrucaoRejeitada else if AOcorrencia = '30' then Tipo := toRetornoAlteracaoDadosRejeitados else if MatchText(AOcorrencia, ['06', '09']) then Tipo := CodOcorrenciaToTipo(StrToInt(AOcorrencia)) else if AOcorrencia = '17' then Tipo := toRetornoLiquidadoAposBaixaOuNaoRegistro end Ou seja incluir no primeiro if o '06', '09', '17'... E colocar no if do Tipo adicionar o 06 , 09 e 17. os quais puxei de baixo onde ele entrava antes. Ver a possibilidade de alteração para que possamos ter os motivos nas ocorrências: (09-baixa ou 06-liquidação) ou se MotivoRejeicaoComando é somente para rejeições e não tem a opção de pegar o motivo quando da baixa. Mas iria enviar o arquivo em anexo do fonte atualizado (2018.05.30) com a alteração mencionada, caso MotivoRejeicaoComando não seja somente rejeição. Mas fui testar a modificação e ai descobri que os códigos de motivos que retornam são os códigos do layout 400. Layout: PRODUTOS RECEBIMENTOS - CNAB 400 (padrão Santander) - Com Registro - Versão 2.17 – Outubro/2017 Página 22 - Nota 13: Códigos de Ocorrências - temos os códigos com 3 dígitos - e na 240 temos com dois dígitos o motivo. Então, seguindo o padrão do ACBrBancoBrasil.pas eu cadastrei os códigos dos motivos para o CNAB 240. Então tive que mudar na procedure TACBrBancoSantander.LerRetorno240 - DoVerOcorrencia Esse código : if AOcorrencia = '03' then Tipo:= toRetornoRegistroRecusado else if AOcorrencia = '26' then Tipo := toRetornoInstrucaoRejeitada else if AOcorrencia = '30' then Tipo := toRetornoAlteracaoDadosRejeitados else if MatchText(AOcorrencia, ['06', '09']) then Tipo := CodOcorrenciaToTipo(StrToInt(AOcorrencia)) else if AOcorrencia = '17' then Tipo := toRetornoLiquidadoAposBaixaOuNaoRegistro; Antes do código da rejeição, pois é necessário saber o Tipo na rotina CodMotivoRejeicaoToDescricao, então ficou assim esse trecho: if MatchText(AOcorrencia, ['03', '06', '09', '17', '26', '30']) then begin if AOcorrencia = '03' then Tipo:= toRetornoRegistroRecusado else if AOcorrencia = '26' then Tipo := toRetornoInstrucaoRejeitada else if AOcorrencia = '30' then Tipo := toRetornoAlteracaoDadosRejeitados else if MatchText(AOcorrencia, ['06', '09']) then Tipo := CodOcorrenciaToTipo(StrToInt(AOcorrencia)) else if AOcorrencia = '17' then Tipo := toRetornoLiquidadoAposBaixaOuNaoRegistro; pMotivoRejeicao:= 209; for I:= 0 to 4 do begin CodMotivo:= StrToIntDef(copy(Linha,pMotivoRejeicao,2),0); if CodMotivo > 0 then begin Titulo.MotivoRejeicaoComando.Add(copy(Linha, pMotivoRejeicao, 2)); Titulo.DescricaoMotivoRejeicaoComando.Add(CodMotivoRejeicaoToDescricao( Titulo.OcorrenciaOriginal.Tipo,CodMotivo)); end; Inc(pMotivoRejeicao, 2); end; Bom agora a mudança no procedimento CodMotivoRejeicaoToDescricao somente a parte do else para o CNAB 240: else // 240 begin case TipoOcorrencia of toRetornoComandoRecusado: //03 (Entrada rejeitada) case CodMotivo of 01: Result:='Codigo do banco invalido'; 02: Result:='Codigo do registro detalhe invalido'; 03: Result:='Codigo do segmento invalido'; 04: Result:='Codigo do movimento nao permitido para carteira'; 05: Result:='Codigo de movimento invalido'; 06: Result:='Tipo/numero de inscricao do beneficiário invalidos'; 07: Result:='Agencia/Conta/DV invalido'; 08: Result:='Nosso numero invalido'; 09: Result:='Nosso numero duplicado'; 10: Result:='Carteira invalida'; 11: Result:='Forma de cadastramento do titulo invalido'; 12: Result:='Tipo de documento invalido'; 13: Result:='Identificacao da emissao do bloqueto invalida'; 14: Result:='Identificacao da distribuicao do bloqueto invalida'; 15: Result:='Caracteristicas da cobranca incompativeis'; 16: Result:='Data de vencimento invalida'; 17: Result:='Data de vencimento anterior a data de emissao'; 18: Result:='Vencimento fora do prazo de operacao'; 19: Result:='Titulo a cargo de Bancos Correspondentes com vencimento inferior XX dias'; 20: Result:='Valor do titulo invalido'; 21: Result:='Especie do titulo invalida'; 22: Result:='Especie nao permitida para a carteira'; 23: Result:='Aceite invalido'; 24: Result:='Data da emissao invalida'; 25: Result:='Data da emissao posterior a data'; 26: Result:='Codigo de juros de mora invalido'; 27: Result:='Valor/Taxa de juros de mora invalido'; 28: Result:='Codigo do desconto invalido'; 29: Result:='Valor do desconto maior ou igual ao valor do titulo '; 30: Result:='Desconto a conceder nao confere'; 31: Result:='Concessao de desconto - ja existe desconto anterior'; 32: Result:='Valor do IOF invalido'; 33: Result:='Valor do abatimento invalido'; 34: Result:='Valor do abatimento maior ou igual ao valor do titulo'; 35: Result:='Abatimento a conceder nao confere'; 36: Result:='Concessao de abatimento - ja existe abatimento anterior'; 37: Result:='Codigo para protesto invalido'; 38: Result:='Prazo para protesto invalido'; 39: Result:='Pedido de protesto nao permitido para o titulo'; 40: Result:='Titulo com ordem de protesto emitida'; 41: Result:='Pedido de cancelamento/sustacao para titulos sem instrucao de protesto'; 42: Result:='Codigo para baixa/devolucao invalido'; 43: Result:='Prazo para baixa/devolucao invalido'; 44: Result:='Codigo da moeda invalido'; 45: Result:='Nome do pagador nao informado'; 46: Result:='Tipo/numero de inscricao do pagador invalidos'; 47: Result:='Endereco do pagador nao informado'; 48: Result:='CEP invalido'; 49: Result:='CEP sem praca de cobranca /nao localizado'; 50: Result:='CEP referente a um Banco Correspondente'; 51: Result:='CEP incompativel com a unidade da federacao'; 52: Result:='Unidade da federacao invalida'; 53: Result:='Tipo/numero de inscricao do sacador/avalista invalidos'; 54: Result:='Sacador/Avalista nao informado'; 55: Result:='Nosso numero no Banco Correspondente nao informado'; 56: Result:='Codigo do Banco Correspondente nao informado'; 57: Result:='Codigo da multa invalido'; 58: Result:='Data da multa invalida'; 59: Result:='Valor/Percentual da multa invalido'; 60: Result:='Movimento para titulo nao cadastrado'; 61: Result:='Alteracao da agencia cobradora/dv invalida'; 62: Result:='Tipo de impressao invalido'; 63: Result:='Entrada para titulo ja cadastrado'; 64: Result:='Numero da linha invalido'; 65: Result:='A espécie de título não permite a instrução'; 72: Result:='Entrada de título Sem Registro'; 90: Result:='Identificador/Quantidade de Parcelas de carnê invalido'; 92: Result:='Data de Desconto Inválida'; end; toRetornoLiquidadoSemRegistro, toRetornoLiquidado, toRetornoLiquidadoPorConta, toRetornoLiquidadoSaldoRestante, toRetornoLiquidadoEmCartorio: // 05, 06, 07, 08 e 15 (Liquidado) case CodMotivo of 01: Result:='01-Por saldo'; 02: Result:='02-Por conta'; 03: Result:='03-No próprio banco'; 04: Result:='04-Compensação eletrônica'; 05: Result:='05-Compensação convencional'; 06: Result:='06-Arquivo magnético'; 07: Result:='07-Após feriado local'; 08: Result:='08-Em cartório'; 09: Result:='09-Pagamento Parcial'; end; else Result := IntToStrZero(CodMotivo, 2) + ' - Outros Motivos'; end; //case TipoOcorrencia end; //else 240 Assim eu consegui ler código do motivo quando a ocorrência vem como liquidado. Como disse não sei se o MotivoRejeicaoComando utiliza somente rejeição, mas a julgar pelo fonte do banco do Brasil, acredito que não, assim esse correção seria interessante. Estou enviando o fonte do Acbr do Santander para análise para verificar a possível alteração. Caso precisem dos manuais também posso disponibiliza-los aqui. Nos testes que fiz aqui deram certo. Abraços, Rodrigo ACBrBancoSantander.pas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.