Ir para conteúdo
  • Cadastre-se

Marcos Leonardo Martins

Membros
  • Total de ítens

    15
  • Registro em

  • Última visita

Posts postados por Marcos Leonardo Martins

  1. Boa tarde,

    Hoje ao tentar ler um retorno da Caixa Federal, obtive o seguinte erro:

    Agencia\Conta do arquivo inválido

    Verifiquei o arquivo ACBrBancoCaixa.pas e pude ver que a variável rAgencia pega o número da agência do arquivo, com 5 dígitos.

    Porém, no ACBrBoleto.pas, o tamanho máximo de agência está limitado a 4.

    Isso ocasiona o erro, pois nessa caso, a agência é 04025 e o componente lê 4025.

    Tem como mudar ou é um bug mesmo ?

    Abaixo os códigos:

    constructor TACBrBancoClass.create(AOwner: TACBrBanco);
    begin
       inherited create;
    
       fpAOwner                := AOwner;
       fpDigito                := 0;
       fpNome                  := 'Não definido';
       fpNumero                := 0;
       fpTamanhoMaximoNossoNum := 10;
       fpTamanhoAgencia        := 4;
       fpTamanhoConta          := 10;
       fpCodigosMoraAceitos    := '12';
       fpCodigosGeracaoAceitos := '0123456789';
       fpModulo                := TACBrCalcDigito.Create;
       fpOrientacoesBanco      := TStringList.Create;
    end;

     

    if (not LeCedenteRetorno) and ((rAgencia <> OnlyNumber(Cedente.Agencia)) or
              (rConta+rDigitoConta  <> OnlyNumber(Cedente.CodigoCedente))) then
             raise Exception.Create(ACBrStr('Agencia\Conta do arquivo inválido'));

     

  2. Boa tarde !

    Estou tendo um problema com a leitura de retornos do Banco do Brasil, usando o layout CNAB 400.

    Alguns registros do arquivo de retorno estão vindo com o comando 03, que de acordo com o manual do banco é COMANDO RECUSADO.

    Ao ler o retorno, estou usando a propriedade Titulo.OcorrenciaOriginal.Descricao para pegar a descrição do comando, porém, mesmo sendo 03, volta como 02 - Entrada Confirmada.

    Vasculhando o arquivo ACBRBancoBrasil.pas, verifiquei que o problema parece ser em duas funções:

    function TACBrBancoBrasil.CodOcorrenciaToTipo(const CodOcorrencia:
       Integer ) : TACBrTipoOcorrencia;
    begin
       Result := toTipoOcorrenciaNenhum;
    
      if (ACBrBanco.ACBrBoleto.LayoutRemessa = c240) then
      begin
        case CodOcorrencia of
          03: Result := toRetornoRegistroRecusado;
          04: Result := toRetornoTransferenciaCarteiraEntrada;
          05: Result := toRetornoTransferenciaCarteiraBaixa;
          15: Result := toRetornoBaixadoFrancoPagamento;
          17: Result := toRetornoLiquidadoSemRegistro;
          20: Result := toRetornoRecebimentoInstrucaoSustarProtesto;
          24: Result := toRetornoRetiradoDeCartorio;
          25: Result := toRetornoBaixaPorProtesto;
          26: Result := toRetornoInstrucaoRejeitada;
          27: Result := toRetornoAlteracaoUsoCedente;
          28: Result := toRetornoDebitoTarifas;
          29: Result := toRetornoOcorrenciasDoSacado;
          30: Result := toRetornoAlteracaoDadosRejeitados;
          50: Result := toRetornoChequePendenteCompensacao;
        end;
      end
      else
      begin
        case CodOcorrencia of
          03: Result := toRetornoComandoRecusado;
          05: Result := toRetornoLiquidadoSemRegistro;
          07: Result := toRetornoLiquidadoPorConta;
          08: Result := toRetornoLiquidadoSaldoRestante;
          10: Result := toRetornoBaixaSolicitada;
          15: Result := toRetornoLiquidadoEmCartorio;
          16: Result := toRetornoConfirmacaoAlteracaoJurosMora;
          20: Result := toRetornoDebitoEmConta;
          21: Result := toRetornoNomeSacadoAlterado;
          22: Result := toRetornoEnderecoSacadoAlterado;
          24: Result := toRetornoProtestoSustado;
          25: Result := toRetornoJurosDispensados;
          28: Result := toRetornoManutencaoTituloVencido;
          31: Result := toRetornoDescontoConcedido;
          32: Result := toRetornoDescontoCancelado;
          33: Result := toRetornoDescontoRetificado;
          34: Result := toRetornoAlterarDataDesconto;
          35: Result := toRetornoRecebimentoInstrucaoAlterarJuros;
          36: Result := toRetornoRecebimentoInstrucaoDispensarJuros;
          37: Result := toRetornoDispensarIndexador;
          38: Result := toRetornoDispensarPrazoLimiteRecebimento;
          39: Result := toRetornoAlterarPrazoLimiteRecebimento;
          46: Result := toRetornoChequePendenteCompensacao;
          72: Result := toRetornoTipoCobrancaAlterado;
          96: Result := toRetornoDespesasProtesto;
          97: Result := toRetornoProtestoSustado;
          98: Result := toRetornoDebitoCustasAntecipadas;
        end;
      end;
    
      if (Result <> toTipoOcorrenciaNenhum) then
        Exit;
    
      case CodOcorrencia of
        02: Result := toRetornoRegistroConfirmado;
        06: Result := toRetornoLiquidado;
        09: Result := toRetornoBaixaAutomatica;
        11: Result := toRetornoTituloEmSer;
        12: Result := toRetornoAbatimentoConcedido;
        13: Result := toRetornoAbatimentoCancelado;
        14: Result := toRetornoVencimentoAlterado;
        19: Result := toRetornoRecebimentoInstrucaoProtestar;
        23: Result := toRetornoEntradaEmCartorio;
        44: Result := toRetornoChequeDevolvido;
      else
        Result := toRetornoOutrasOcorrencias;
      end;
    end;

    Nessa função, ao ler as posições 109 a 110 do arquivo de retorno, o ACBr atribui o tipo toRetornoComandoRecusado quando o conteúdo é 03. Até aí tudo bem...o problema vem na outra função:

    function TACBrBancoBrasil.TipoOCorrenciaToCod (
       const TipoOcorrencia: TACBrTipoOcorrencia ) : String;
    begin
       Result := '';
    
       if (ACBrBanco.ACBrBoleto.LayoutRemessa = c240) then
       begin
         case TipoOcorrencia of
           toRetornoTransferenciaCarteiraEntrada        : Result := '04';
           toRetornoTransferenciaCarteiraBaixa          : Result := '05';
           toRetornoBaixaAutomatica                     : Result := '09';
           toRetornoBaixadoFrancoPagamento              : Result := '15';
           toRetornoLiquidadoSemRegistro                : Result := '17';
           toRetornoRecebimentoInstrucaoSustarProtesto  : Result := '20';
           toRetornoRetiradoDeCartorio                  : Result := '24';
           toRetornoBaixaPorProtesto                    : Result := '25';
           toRetornoInstrucaoRejeitada                  : Result := '26';
           toRetornoAlteracaoUsoCedente                 : Result := '27';
           toRetornoDebitoTarifas                       : Result := '28';
           toRetornoOcorrenciasDoSacado                 : Result := '29';
           toRetornoAlteracaoDadosRejeitados            : Result := '30';
           toRetornoChequePendenteCompensacao           : Result := '50';
         end;
       end
        else
        begin
          case TipoOcorrencia of
            toRetornoLiquidadoSemRegistro               : Result := '05';
            toRetornoLiquidadoPorConta                  : Result := '08';
            toRetornoLiquidadoSaldoRestante             : Result := '08';
            toRetornoBaixaSolicitada                    : Result := '10';
            toRetornoLiquidadoEmCartorio                : Result := '15';
            toRetornoConfirmacaoAlteracaoJurosMora      : Result := '16';
            toRetornoDebitoEmConta                      : Result := '20';
            toRetornoNomeSacadoAlterado                 : Result := '21';
            toRetornoEnderecoSacadoAlterado             : Result := '22';
            toRetornoProtestoSustado                    : Result := '24';
            toRetornoJurosDispensados                   : Result := '25';
            toRetornoManutencaoTituloVencido            : Result := '28';
            toRetornoDescontoConcedido                  : Result := '31';
            toRetornoDescontoCancelado                  : Result := '32';
            toRetornoDescontoRetificado                 : Result := '33';
            toRetornoAlterarDataDesconto                : Result := '34';
            toRetornoRecebimentoInstrucaoAlterarJuros   : Result := '35';
            toRetornoRecebimentoInstrucaoDispensarJuros : Result := '36';
            toRetornoDispensarIndexador                 : Result := '37';
            toRetornoDispensarPrazoLimiteRecebimento    : Result := '38';
            toRetornoAlterarPrazoLimiteRecebimento      : Result := '39';
            toRetornoChequePendenteCompensacao          : Result := '46';
            toRetornoTipoCobrancaAlterado               : Result := '72';
            toRetornoDespesasProtesto                   : Result := '96';
            toRetornoDespesasSustacaoProtesto                    : Result := '97';
            toRetornoDebitoCustasAntecipadas            : Result := '98';
          end;
        end;
    
        if (Result <> '') then
        Exit;
    
        case TipoOcorrencia of
          toRetornoRegistroConfirmado                   : Result := '02';
          toRetornoRegistroRecusado                     : Result := '03';
          toRetornoLiquidado                            : Result := '06';
          toRetornoTituloEmSer                          : Result := '11';
          toRetornoAbatimentoConcedido                  : Result := '12';
          toRetornoAbatimentoCancelado                  : Result := '13';
          toRetornoVencimentoAlterado                   : Result := '14';
          toRetornoRecebimentoInstrucaoProtestar        : Result := '19';
          toRetornoEntradaEmCartorio                    : Result := '23';
          toRetornoChequeDevolvido                      : Result := '44';
        else
          Result := '02';
        end;
    end;

    Nessa função, o ACBr não está jogando '03' para quando for toRetornoComandoRecusado e sim quando for toRetornoRegistroRecusado. Porém, verificando o ACBRBancoBrasil.pas, toRetornoRegistroRecusado só existe no layout CNAB240.

    Gostaria que isso fosse verificado, por favor, para ver se é bug mesmo ou algum outro problema.

    Obrigado.

  3. Bom dia !

    Estou passando por um problema estranho.

    Tenho um cliente que passou a reclamar que suas remessas estavam dando erro de COMANDO RECUSADO  ao receber o retorno. Porém, nada foi alterado na aplicação que gera as remessas.

    Eu resolvi pegar os dados do cliente e gerei através do Demo do ACBr boleto uma remessa e validei no www.bb.com.br/leiautes, sob orientação do 0800 729 0500, que é a central BB.

    Os dados que usei e o erro que dá estão anexados. É bem estranho, visto que não foi alterado nada na aplicação.

    Obrigado

    Dados.jpg

    Erros.jpg

  4. Boa tarde, Daniel

    Realizei um Update dos fontes hoje pela manhã.

    O passo a passo no Demo foi bem simples: utilizei todas as opções que vem sugeridas

     

    AbreCupom: Teste|Teste

    VendeItem: (3 vezes)

    Código: 111222333
    Descrição: "TESTE DE PRODUTO"

    Qtd: 1

    PrecoUnitario: 1

    Unidade: UN

    SubTotalizaCupom: 0

    EfetuaPagamento: 3

    FechaCupom: "Componentes ACBr|http://acbr.sourceforge.net"

    • Curtir 1
  5. Boa tarde,

    Atualizei o sistema em um cliente e comecei a obter esse erro ao passar informações para o comando FechaCupom.

    Fazendo testes, se eu passo FechaCupom() sem nenhum parâmetro, tenho a impressão correta, sem erros.

    Mas se eu coloco um texto qualquer, por exemplo, FechaCupom('Ola Mundo'), tenho o erro 0204 - Campos em falta.

    Após testar minha aplicação, executei o mesmo teste com o ABCrECFDemo e obtive o mesmo erro.

    A impressora usada no cliente e nos testes é uma EPSON TM-81

     

    Alguém passa ou passou por algo parecido ?

     

  6. Esse erro começou do nada, porém ao que me parece está tudo OK.

     

    Me dá essa rejeição:

     

    Falha na validação dos dados da nota 399 '6405' violates enumeration constraint of '1101 1102 1111 1113 1116 1117 1118 1120 1121 1122 1124 1125 1126 1151 1152 1153 1154 1201 1202 1203 1204 1205 1206 1207...'.
    (11:11:01) the element '{http://www.portalfiscal.inf.br/nfe}CFOP'with value '6405' failed to parse.

     

    Segue em anexo o XML:

     

    teste.xml

    teste.xml

  7. Boa tarde,

     

    Estou realizando impressão de etiquetas para os Correios usando o ACBrETQ. Quando envio texto e código de barras apenas, a impressora para certinho na divisão de etiquetas da bobina. Ou seja, está totalmente calibrada. Mas, se eu enviar junto à essas informações uma imagem (necessita da impressão da chancela), a impressora perde isso. No momento que imprime a imagem, ela para imediatamente depois, não deixando na divisão da bobina. Alguém já viu algo parecido ?

    With ACBrETQ1 Do
       Begin
       //Imprime Imagem Pré-Carregada
       ImprimirImagem(11,1100,50,'SEDEX');
    
       //Informações de Nota, Pedido e Peso da Caixa
       ImprimirTexto(orNormal,3,1,1,1000,50,'NF: '+
       iif(FrmNFCorreios.QryPedidosVEN_NF.AsInteger<>0,FrmNFCorreios.QryPedidosVEN_NF.AsString,''));
       ImprimirTexto(orNormal,3,1,1,1000,320,'PEDIDO: '+
       FrmNFCorreios.QryPedidosVEN_NUMERO.AsString);
       ImprimirTexto(orNormal,3,1,1,1000,665,'PESO(KG): '+FormatFloat('0.000',EdtPeso.Value));
       ImprimirTexto(orNormal,3,1,1,930,380,CodigoRastreio[X-1]);
    
       //Codigo de Rastreio em código de barras
       ImprimirBarras(orNormal,'E','3','3',550,170,'A'+CodigoRastreio[X-1],180,becNAO);
    
       Imprimir(1,300);
       Desativar;
       End;
    
×
×
  • 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.