Ir para conteúdo
  • Cadastre-se

romerofartura

Membros Pro
  • Total de ítens

    15
  • Registro em

  • Última visita

Posts postados por romerofartura

  1. Bom dia, fiz o ajuste a algum tempo, já estão em produção e funcionando. Atualizei o componente e alguns ajustes ainda foram necessários, outros verifiquei que foram feitos.
    Segue o que ajustei, se for possível atualizar o componente ajudaria a quem mais for utilizar.

    Versão do manual 67.126 v018 micro
    https://www.caixa.gov.br/Downloads/cobranca-caixa/Manual_de_Leiaute_de_Arquivo_Eletronico_CNAB_400.pdf

    REMESSA CNAB 400

    HEADER - REGISTROS TIPO 0
    Quando a versão do layout for nula nas posições 101 a 103 o código do beneficiário nas posições 31 a 37 será com 7 casas sendo a última em branco e NÃO 0. Pág. 20, NE004 pág. 35.
    Como já possui o tratamento do código do cedente para ajustar em 6 ou 7 dígitos na 

    function TACBrCaixaEconomica.DefineCodigoCedente(const ACBrCedente: TACBrCedente): String;


    Ao sair desta função sugiro apenas alterar a linha PadRight(ACodCedente, 7, '0') para PadRight(ACodCedente, 7, ' ');

     

    DETALHES - REGISTROS TIPO 1
    Posição 32 a 56 X(25) - Identificação do título na empresa é alfanumérico. Pág. 21, NE014 pág. 37.
    Hoje os valores permitem somente números conforme a Linha 1040:

    PadLeft(OnlyNumber(ACBrTitulo.SeuNumero), 25)

    Tirar a função OnlyNumber.

     

    Posição 57 a 58 - Modalidade de identificação. pág 21, NE015.
    Se a CAIXA for responsável pela emissão do boleto: o campo Nosso Número (posições 57-73) pode ser preenchido com zeros. Nesse caso, a numeração será feita pelo Banco.
    Hoje as validações das posições 57 a 58 não contemplam a modalidade 00;

     

    MENSAGENS - REGISTROS TIPO 2
    Posições 22 a 28 segue a mesma regra de validação do HEADER (código do beneficiário) pág. 23 NE004. pág. 35. Já descrita no primeiro tópico desta mensagem.
     

    Por favor validem e se for possível a atualização ficarei grato.

    Obrigado.

  2. Ontem instalamos o bartender pego no site da elgin para ver se poderia ser a etiqueta com problemas, mas imprimiu normalmente na Elgin L42Pro sem pular.
    Hoje, após ver a resposta aqui no fórum conectei no cliente para fazer o procedimento proposto, mas antes de qualquer ajuste tentei uma impressão sem alterar nada, e por incrível que pareça funcionou perfeitamente.  Coisas de informática!
    Como as duas impressoras estão no mesmo PC, pode ter sido algum arquivo do bartender que atualizou ao ser instalado ou ao imprimir por ele a detecção da etiqueta foi feita corretamente.
    Mas de qualquer forma funcionou.

    Quanto a zebra por hora não vamos mais usar, depois passamos ela em outro PC para testes.

    Obrigado pela atenção.

    • Curtir 1
  3. Boa tarde, estou com problemas na impressão de etiquetas pelo ACBrETQ quem puder dar uma orientação que eu possa seguir.
    Nas impressoras Elgin L42Pro em PPLB e na na Zebra GC420t em EPL2 (configurando para cada sua posição vertical e horizontal correta) ela imprime uma etiqueta e pula outra, seja quantas etiquetas eu mandar. 
    Já fiz reset e calibração da etiqueta  nas duas e continua o mesmo problema.

    Fiz na minha impressora Argox OS 214Plus em PPLA e a função funciona sem pular (porém usei outra etiqueta, não tenho em mãos a mesma do cliente).

    Segue a função caso eu esteja fazendo algo errado ou alguma sugestão do que possa ser.

     

      try
        acbr_Etiqueta.Desativar;
        acbr_Etiqueta.DPI           := TACBrETQDPI(FConfiguracaoPDV.IMP_TERMICA.TERMICA_DPI);
        acbr_Etiqueta.Modelo        := TACBrETQModelo(FConfiguracaoPDV.IMP_TERMICA.TERMICA_MODELO);
        acbr_Etiqueta.LimparMemoria := (FConfiguracaoPDV.IMP_TERMICA.TERMICA_LMEMORIA = 0);
        acbr_Etiqueta.Porta         := FConfiguracaoPDV.IMP_TERMICA.TERMICA_PORTA;
        acbr_Etiqueta.Temperatura   := 10;
        acbr_Etiqueta.Velocidade    := -1;
        acbr_Etiqueta.Unidade       := etqMilimetros;
        acbr_Etiqueta.Origem     := TACBrETQOrigem(cbbOrigem.ItemIndex);
    
        if chkFeed.Checked then
          acbr_Etiqueta.BackFeed := bfOn
        else
          acbr_Etiqueta.BackFeed := bfOff;
    
        acbr_Etiqueta.Ativar;
        Result := True;
      except
        on E:Exception do
          ShowMessage('Erro ativando impressora térmica.'+ sLineBreak + e.ToString());
      end;
    
    
      FDM_Etiquetas.First;
          while not FDM_Etiquetas.Eof do
          begin
              acbr_Etiqueta.IniciarEtiqueta;
    
              FDQ_EtiqConfLn.First;
              while not FDQ_EtiqConfLn.Eof do
              begin
                ORIENTACAO := OrientacaoRetornar(FDQ_EtiqConfLn.FieldByName('ORIENTACAO').AsInteger);
                EAN_BARRA_LARGA  := FDQ_EtiqConfLn.FieldByName('EAN_BARRA_LARGA').AsInteger;
                EAN_BARRA_FINA  := FDQ_EtiqConfLn.FieldByName('EAN_BARRA_FINA').AsInteger;
                EAN_ALTURA  := FDQ_EtiqConfLn.FieldByName('EAN_ALTURA').AsInteger;
                EAN_EXIBE_CODIGO  := FDQ_EtiqConfLn.FieldByName('EAN_EXIBE_CODIGO').AsInteger;
    
    
                EAN_TIPO := FDQ_EtiqConfLn.FieldByName('EAN_TIPO').AsString;
                FONTE := FDQ_EtiqConfLn.FieldByName('FONTE').AsInteger;
                MULTIPLICADORH := FDQ_EtiqConfLn.FieldByName('MULTIPLICADORH').AsInteger;
                MULTIPLICADORV := FDQ_EtiqConfLn.FieldByName('MULTIPLICADORV').AsInteger;
                VERTICAL := FDQ_EtiqConfLn.FieldByName('VERTICAL').AsInteger;
                HORIZONTAL := FDQ_EtiqConfLn.FieldByName('HORIZONTAL').AsInteger;
                SUBFONTE := FDQ_EtiqConfLn.FieldByName('SUBFONTE').AsInteger;
                REVERSO := FDQ_EtiqConfLn.FieldByName('REVERSO').AsInteger;
                TEXTO_LIVRE := FDQ_EtiqConfLn.FieldByName('TEXTO_LIVRE').AsString;
    
    
                if ((FDQ_EtiqConfLn.FieldByName('CAMPO').AsString = 'CODBARRAS') and (FDQ_EtiqConfLn.FieldByName('TIPO').AsInteger in [3..5])) then
                begin
                  TipoEAN    := EAN_Tratar2(FDM_Etiquetas.FieldByName('CODBARRAS').AsString, acbr_Etiqueta.Modelo);
    
                  if (EAN_EXIBE_CODIGO = 1) then
                    exibeCodigo := becSIM
                  else
                    exibeCodigo := becNAO;
    
                  acbr_Etiqueta.ImprimirBarras(ORIENTACAO, TipoEAN, EAN_BARRA_LARGA, EAN_BARRA_FINA, VERTICAL, HORIZONTAL, FDM_Etiquetas.FieldByName('CODBARRAS').AsString, EAN_ALTURA, exibeCodigo);
    
                end
                else
                begin
                  nomeCampo      := FDQ_EtiqConfLn.FieldByName('CAMPO').AsString;
                  textoVlr       := ifThen((nomeCampo = 'PRVISTA'), 'R$ ', '');
                  texto          := Copy(textoVlr + FDM_Etiquetas.FieldByName(nomeCampo).AsString, 0, 29); //textoVlr + copy(FDM_Etiquetas.FieldByName(nomeCampo).AsString, 1, 20)
    
                  if (nomeCampo = 'TEXTO_LIVRE') then
                    texto := FDQ_EtiqConfLn.FieldByName('TEXTO_LIVRE').AsString;
    
                  acbr_Etiqueta.ImprimirTexto(ORIENTACAO, FONTE, MULTIPLICADORH, MULTIPLICADORV, VERTICAL, HORIZONTAL, texto);
                end;
    
                FDQ_EtiqConfLn.Next;
              end;
    
             //acbr_Etiqueta.FinalizarEtiqueta(FDM_Etiquetas.FieldByName('QTDE').AsInteger, FConfiguracaoPDV.IMP_TERMICA.TERMICA_AVANCO);
             acbr_Etiqueta.Imprimir(FDM_Etiquetas.FieldByName('QTDE').AsInteger, FConfiguracaoPDV.IMP_TERMICA.TERMICA_AVANCO);
            FDM_Etiquetas.Next;
          end;
    
          //acbr_Etiqueta.Imprimir(1, FConfiguracaoPDV.IMP_TERMICA.TERMICA_AVANCO);
          acbr_Etiqueta.Desativar;

     

  4. Bom dia, após a atualização do componente a DANFE passou a imprimir descentralizada, está bem para a esquerda.
    Fiz o teste em mais de um equipamento inclusive em equipamentos de clientes e todos apresentaram a mesma impressão fora do centro.
    Seria algum problema no componente ou configuração que agora passou a ser necessária?
    Obrigado.
     

    35200413251001000150550010000009501613053625.pdf

  5. Bom dia!

    O arquivo de remessa CNAB 240 do SICREDI de um cliente nosso estava sendo rejeitado quando tentava usar o "tipo de Documento" como "DSI" o componente estava alterando para 99 "Outros" e no caso da conta ou carteira dele acontece a rejeição. 
    Fiz alteração na Unit e enviei o arquivo para o banco e foi validado. Estou disponibilizando para conferência pelos administradores e posterior publicação se possível.

    Unit ACBrBancoSicredi.pas em GerarREgistroTranscacao240.


    Tenho o manual do banco caso precise, mas como é maior que 2mb não consigo postar aqui.

     

    De acordo com o Layout enviado pelo SICREDI, as opções de "Espécie do Título" são:
    '03' = DMI duplicata mercantil por indicação 
    '05' = DSI duplicata de serviço por indicação 
    '06' = DR duplicata rural 
    '07' = LC letra de câmbio 
    '12' = NP nota promissória 
    '13' = NPR nota promissória rural 
    '16' = NS nota de seguro 
    '17' = RC recibo 
    '19' = ND nota de débito 
    ‘32’ = Boleto Proposta 
    '99' = Outros 

    //Código REMOVIDO
     {Espécie}
        {if (EspecieDoc = 'DM') then
          Especie := '03'
        else if (EspecieDoc = 'DMI') then
          Especie := '03'
        else
          Especie := '99';}

    //Código ADICIONADO
        case AnsiIndexStr(EspecieDoc, ['DMI', 'DSI', 'DR', 'LC', 'NP', 'NPR', 'NS', 'RC', 'ND', 'BP']) of
          0 : Especie := '03'; //DMI duplicata mercantil por indicação
          1 : Especie := '05'; //DSI duplicata de serviço por indicação
          2 : Especie := '06'; //DR duplicata rural
          3 : Especie := '07'; //LC letra de câmbio
          4 : Especie := '12'; //NP nota promissóri
          5 : Especie := '13'; //NPR nota promissória rural
          6 : Especie := '16'; //NS nota de seguro
          7 : Especie := '17'; //RC recibo
          8 : Especie := '19'; //ND nota de débito
          9 : Especie := '32'; //Boleto Proposta
        else
          Especie := '99'; //Outros
        end;
     

    ACBrBancoSicredi.pas

    • Curtir 1
  6. Mando assim veja se tem algo diferente. 

    DM.ACBrBoleto1.LayoutRemessa := c240;
    
     with DM.ACBrBoleto1.Banco do
      begin
        Nome   := DmFd.FDQ_Boletos.FieldByName('BANCO_NOME').AsString;
        Numero := StrToInt(DmFd.FDQ_Boletos.FieldByName('BANCO_NRO').AsString);
      	
    	case DmFd.FDQ_Boletos.FieldByName('BANCO_NRO').AsInteger of
            1 : TipoCobranca := cobBancoDoBrasil;
           33 : TipoCobranca := cobSantander;
          104 : TipoCobranca := cobCaixaEconomica;
          237 : TipoCobranca := cobBradesco;
          341 : TipoCobranca := cobItau;
          748 : TipoCobranca := cobSicred;
          756 : TipoCobranca := cobBancoob; //SICOOB
        end;
      end;
    
      with DM.ACBrBoleto1.Cedente do //Beneficiario
      begin
         Agencia       := DmFd.FDQ_Boletos.FieldByName('AGENCIA_NRO').AsString;
         AgenciaDigito := DmFd.FDQ_Boletos.FieldByName('AGENCIA_NRO_DIG').AsString;
         Conta         := DmFd.FDQ_Boletos.FieldByName('CONTA').AsString;
         ContaDigito   := DmFd.FDQ_Boletos.FieldByName('CONTA_DIG').AsString;
         Convenio      := DmFd.FDQ_Boletos.FieldByName('CONVENIO').AsString;
    //       Modalidade    := IBDS_boleto.FieldByName('CONVENIO').AsString;
         CodigoCedente := DmFd.FDQ_Boletos.FieldByName('CEDENTE_COD').AsString;
         Nome          := DmFd.FDQ_Boletos.FieldByName('CEDENTE_NOME').AsString;
         CNPJCPF       := so_numeros(Dm.empCNPJ);
         Logradouro    := tira_acento(trim(Dm.empEnder));
         NumeroRes     := trim(Dm.empNro);
         Complemento   := tira_acento(trim(Dm.empCompl));
         Bairro        := tira_acento(trim(Dm.empBairro));
         Cidade        := tira_acento(Dm.empCid);
         UF            := Dm.empUF;
         CEP           := Dm.empCEP;
    
         case StrToInt(DmFd.FDQ_Boletos.FieldByName('BANCO_NRO').AsString) of
           756 : Modalidade := '01';
           001 : Modalidade := '027';
         end;
    
         if (Length(CNPJCPF) = 11) then
           TipoInscricao := pFisica
         else
           TipoInscricao := pJuridica;     
      end;
    
      DM.ACBrBoleto1.ListadeBoletos.Clear;
    
      for I := 0 to NrTitulos - 1 do
      begin
        Abrir(emp, Boletos[i]); //Abre a tabela do boleto coms os dados
        Titulo := DM.ACBrBoleto1.CriarTituloNaLista;
    
        with Titulo do
        begin
          DataProcessamento := Now;
          DataDocumento     := DmFd.FDQ_Boletos.FieldByName('DATA_INC').AsDateTime;
          Vencimento        := DmFd.FDQ_Boletos.FieldByName('DT_VENCTO').AsDateTime;
          Carteira          := DmFd.FDQ_Boletos.FieldByName('CARTEIRA').AsString;
          NumeroDocumento   := DmFd.FDQ_Boletos.FieldByName('N_DOC').AsString;
          NossoNumero       := DmFd.FDQ_Boletos.FieldByName('N_NUMERO').AsString;
          SeuNumero         := DmFd.FDQ_Boletos.FieldByName('CODIGO').AsString; //DmFd.FDQ_Boletos.FieldByName('COD_CONTA').AsString;
          EspecieDoc        := DmFd.FDQ_Boletos.FieldByName('ESPECIE').AsString;
          //EspecieMod        := '01'; Aqui para BANCOOP, se precisar
          ValorDocumento    := DmFd.FDQ_Boletos.FieldByName('VALOR').AsFloat;
          ValorDesconto     := DmFd.FDQ_Boletos.FieldByName('DESCONTO').AsFloat; //VALOR, Se percentual calcular o valor na hora de gerar o boleto e passar o valor.
          DataDesconto      := 0; //AQUI Adicionar
          ValorAbatimento   := 0; //AQUI Adicionar
    
          PercentualMulta   := DmFd.FDQ_Boletos.FieldByName('MULTA').AsFloat; //Percentual
          ValorMoraJuros    := DmFd.FDQ_Boletos.FieldByName('JUROS').AsFloat; //VALOR, Se percentual calcular o valor na hora de gerar o boleto e passar o valor.
          //DataMoraJuros     := DmFd.FDQ_Boletos.FieldByName('DT_JUROS').AsFloat; //AQUI Adicionar. 0 A contar do atraso
          DataBaixa         := DmFd.FDQ_Boletos.FieldByName('DT_VENCTO').AsDateTime + 90;
    
          case DM.ACBrBoleto1.Banco.TipoCobranca of
            cobBancoob :
            begin
              CodigoMora  := '2'; //SICOOB
    
              if (ValorMoraJuros > 0) then
                Instrucao1 := '01'; //Mandar a instrução 01 já na remessa. 01 - Cobrar juros e 07 não protestar
            end;
          end;
    
          DataProtesto := DmFd.FDQ_Boletos.FieldByName('DT_PROT').AsDateTime; //Mandar data como zero, sem protesto
          if (DataProtesto > 0) then
            TipoDiasProtesto := diCorridos;
    
          case AnsiIndexStr(DmFd.FDQ_Boletos.FieldByName('ACEITE').AsString, ['A', 'S', 'N', 'B'])  of
            0 : Aceite := atAceite;
            1 : Aceite := atSim;
            2 : Aceite := atNao;
            3 : Aceite := atBNao;
          end;
    
          Sacado.NomeSacado := tira_acento(DmFd.FDQ_Boletos.FieldByName('SACADO').AsString);
          Sacado.CNPJCPF    := DmFd.FDQ_Boletos.FieldByName('CPF_CNPJ').AsString;
          Sacado.Logradouro := tira_acento(DmFd.FDQ_Boletos.FieldByName('ENDERECO').AsString);
          Sacado.Numero     := DmFd.FDQ_Boletos.FieldByName('NRO').AsString;
          Sacado.Bairro     := tira_acento(DmFd.FDQ_Boletos.FieldByName('BAIRRO').AsString);
          Sacado.Cidade     := tira_acento(DmFd.FDQ_Boletos.FieldByName('NOMECID').AsString);
          Sacado.UF         := DmFd.FDQ_Boletos.FieldByName('UF').AsString;
          LocalPagamento    := tira_acento(DmFd.FDQ_Boletos.FieldByName('LOC_PAGTO').AsString);
    
          if (remessa > 0) then //remesa 0 impressão e 1 remessa
            Sacado.CEP := so_numeros(DmFd.FDQ_Boletos.FieldByName('CEP').AsString)
          else
            Sacado.CEP := DmFd.FDQ_Boletos.FieldByName('CEP').AsString;
    
          if (Length( so_numeros(Sacado.CNPJCPF)) = 11) then
            Sacado.Pessoa := pFisica
          else
            Sacado.Pessoa := pJuridica;
    
          if (remessa = 0) then ////remesa 0 impressão e 1 remessa
          begin
            if (Trim(DmFd.FDQ_Boletos.FieldByName('INSTRUCOES').AsString) <> '') then
              Mensagem.Text := tira_acento(DmFd.FDQ_Boletos.FieldByName('INSTRUCOES').AsString);
    
            if (Trim(DmFd.FDQ_Boletos.FieldByName('INSTRUCOES2').AsString) <> '') then
              Mensagem.Text := Mensagem.Text + tira_acento(DmFd.FDQ_Boletos.FieldByName('INSTRUCOES2').AsString);
    
            if (Trim(DmFd.FDQ_Boletos.FieldByName('INSTRUCOES3').AsString) <> '') then
              Mensagem.Text := Mensagem.Text + tira_acento(DmFd.FDQ_Boletos.FieldByName('INSTRUCOES3').AsString);
          end;
    
          DM.ACBrBoleto1.AdicionarMensagensPadroes(Titulo, Mensagem);
          //ACBrBoleto.Banco.MontarCampoNossoNumero()
        end;
      end;
    
      DM.ACBrBoleto1.ChecarDadosObrigatorios;
      
    if (remessa = 0) then //0 Imprimir  e 1 remessa
      begin
        DM.ACBrBoleto1.Imprimir;
        DM.ACBrBoleto1.GerarPDF;
      end
      else
        DM.ACBrBoleto1.GerarRemessa(remessa);

    Minha função de emissão é basicamente esta. Veja se te ajuda.

    • Curtir 1
  7. Boa tarde.

    Verifique se a carteira é esta mesmo, porque as carteiras sem registros (Carteira :=SR) não vão mais existir.

    Na minha homologação foi usada a carteira RG (com registro). Fique atento também ao gerar a remessa dê preferência pelo no CNAB240. 

    Na homologação que estou fazendo para o SICREDI, vei a orientação, pois a FEBRABAN, segundo eles vai descontinuar o CNAB 400 este ano.

    No mais as informações parecem esta corretas.

  8. Boa tarde. Meu cliente acabou por não usar a CEF, mas foi homologado com ressalva. Segue transcrição abaixo.

    " Corrigir a distância entre o fim da folha e o código de barras, de acordo com item 4.2.10.1 do MO67.119 - "Posição: 12mm desde a margem inferior da Ficha de compensação até o centro do código de barras" (foi necessário cortar a folha ao fim da margem para leitura do código de barras);
     

    Quanto aos cálculos todos foram aplicados corretamente. Enviei os 20 boletos que eles pedem com dígitos verificadores diferentes e aprovaram.

    Aliás (Juliana), aproveito o post para que verifique a possibilidade de aplicar estas alterações no fonte, caso já não tenham sido feitas, possivelmente irá ajudar muitos usuários. Depois delas já consegui homologar, além da CEF o BB e Itaú e estou no aguardo do SICREDI, mas ao que tudo indica vai passar.
    As alterações principais solicitadas nas homologações foram no layout mesmo, pouca coisa. A linha "corte aqui" abaixo do código de barras, foi o que resolveu, mas veio a ressalva). O ideal seria posicionar a 12mm, o que ainda irei fazer.

    Segue as alterações dos fontes novamente. Agradeço a todos que interagiram e se dispuseram a ajudar.

    ACBrBancoBrasil.pas

    ACBrBancoCaixa.pas

    ACBrBoleto.pas

    ACBrBoletoFCFortesFr.dfm

    ACBrBoletoFCFortesFr.pas

  9. Bom dia pessoal, estou tendo problemas com a homologação do Boleto impresso na Caixa Econômica Federal - SIGCB. 
    A principal é o layout que estou modificando e assim que homologar posto o arquivo a quem interessar.
    Antes da modificação do Layout foram necessárias duas pequenas alterações nos fonte, que ao meu ver não vão interferir nos outros bancos, mas segue sugestão para análise, e se possível que seja adicionada ao projeto.

    O aceite tem que ser "A" e não "S". Também existe mais uma opção possível em outros Bancos que é a "B", Banco do Nordeste.
    No arquivo ACBrBoleto.pas, na linha:
     

    TACBrAceiteTitulo = (atSim, atNao);

    Modificar para:

    TACBrAceiteTitulo = (atSim, atNao, atAceite, atBNao);

     

    No arquivo \FC\Fortes\ACBrBoletoFCFortesFr.pas (aqui uso somente fortes) mudar a linha:

    txtAceite.Caption := IfThen((atSim = Titulo.Aceite), 'A', 'N');


    para:

    case Titulo.Aceite of
      atSim    : txtAceite.Caption := 'S';
      atNao    : txtAceite.Caption := 'N';
      atAceite : txtAceite.Caption := 'A';
      atBnao   : txtAceite.Caption := 'B';
    end;


    O mesmo para a linha com txtAceite2.Caption.

    Outro problema sempre me ocorreu (em qualquer banco),é a duplicação das instruções, principalmente quando se usa os campos abaixo 
    Titulo.PercentualMulta e Titulo.ValorMoraJuros.

    No arquivo \FC\Fortes\ACBrBoletoFCFortesFr.pas removendo a linha (:

    ACBrBoletoFC.ACBrBoleto.AdicionarMensagensPadroes(Titulo,MensagemPadrao);


    Esta duplicação não ocorre (efetuei o teste pelo demo).
    Segue sugestões, caso não interfiram no componente seriam bem vindas.
    Obrigado a todos.

×
×
  • 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.