Ir para conteúdo
  • Cadastre-se

dev botao

Como Selecionar Outro Banco Para Imprimir Boleto


jairo
  • Este tópico foi criado há 2983 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Olá amigos,

 

Sou novato no delhpi, e implantei o ACBRBoleto na minha aplicação, Já estou imprimindo o boleto para o banrisul mas preciso imprimir boletos para outros bancos.

Como faço para imprimir boletos para outros bancos, onde devo selecionar ou modificar algo para a impressão sair com o layout de outros bancos.

Por favor me ajudem...

Obrigado desde já.

Link para o comentário
Compartilhar em outros sites

Amigo segue minha procedure para geração de boletos, faço um select e imprimo conforme cadastro.

 

 

 

var
  Titulo    : TACBrTitulo;
  I, SeqR  : Integer;
  NossoNu, NumDc : String;
  quTitulos, quGeral: TADOQuery;
  ACBrBoleto1 : TACBrBoleto;
  ACBrBoletoFCFR1 : TACBrBoletoFCFR;
begin
  quTitulos            := TADOQuery.Create(nil);
  quTitulos.Connection := frmPrincipal.BD;
 
  quGeral            := TADOQuery.Create(nil);
  quGeral.Connection := frmPrincipal.BD;
 
  ACBrBoleto1 := TACBrBoleto.Create(nil);
  ACBrBoletoFCFR1 := TACBrBoletoFCFR.Create(nil);
 
  quTitulos.SQL.Add('SELECT T0.DTLANCAMENTO, T0.NRNOTA, T2.LOCALPAGAMENTO, T1.DTVENCIMENTO, T1.NOSSONUM, T1.NUMDOC NUMDOCP, ');
  quTitulos.SQL.Add('T1.VALORPARCELA, T1.LINHA, T2.ESPECIEDOC, T2.ESPECIE, T2.ACEITE, T2.NOSSONUMERO, T2.CARTEIRA, ');
  quTitulos.SQL.Add('T2.AGENCIA, T2.DIGITOAG, T2.CONTACORRENTE, T2.DIGITOCC, T2.LAYOUT, T2.CAMINHOREMESSA, ');
  quTitulos.SQL.Add('T2.CONVENIO, T2.CODIGOCEDENTE, T2.TAMANHONOSSONUM, T2.CNAB, T2.NOMEARQ, T2.CODIGO TIPOCOB,');
  quTitulos.SQL.Add('T2.MSG1, T2.MSG2, T2.NDIASPROTESTO, T2.CARACTBOLETO, T2.NUMDOC, T3.PESSOA, ');
  quTitulos.SQL.Add('T3.NOME, T3.PESSOA, CASE WHEN T3.PESSOA = 0 THEN ');
  quTitulos.SQL.Add('T3.CNPJ WHEN T3.PESSOA = 1 THEN ');
  quTitulos.SQL.Add('T3.CPF ELSE T3.CNPJESTRANGEIRO END CNPJCPF, ');
  quTitulos.SQL.Add('T3.NOME, T3.PESSOA, T3.RUACOB, T3.NOCOB, T3.BAIRROCOB, T3.CEPCOB,');
  quTitulos.SQL.Add('T4.NOME CIDADE, T5.NOME ESTADO');
  quTitulos.SQL.Add('FROM NOTAVENCAB T0');
  quTitulos.SQL.Add('INNER JOIN NOTAVENPARCEL T1 ON (T1.CODIGO = T0.CODIGO AND T1.CODEMP = T0.CODEMP)');
  quTitulos.SQL.Add('INNER JOIN TIPOCOB T2 ON (T2.CODIGO = T0.TIPOCOB)');
  quTitulos.SQL.Add('INNER JOIN NEGOCIO T3 ON (T3.CODIGO = T0.CODNEGOCIO)');
  quTitulos.SQL.Add('LEFT OUTER JOIN CIDADE T4 ON (T4.CODIGO = T3.CIDADECOB)');
  quTitulos.SQL.Add('LEFT OUTER JOIN ESTADO T5 ON (T5.CODIGO = T3.ESTADOCOB)');
  quTitulos.SQL.Add('WHERE T0.CODIGO = '+ CodigoDoc +' AND T0.CODEMP = '+frmPrincipal.EmpAtiva);
  quTitulos.Open;
 
  {Dados do cedente}
  ACBrBoleto1.Banco.TipoCobranca := TACBrTipoCobranca(quTitulos.FieldByName('LAYOUT').AsInteger);
  ACBrBoleto1.Cedente.Nome := frmPrincipal.NomeEmp;
  ACBrBoleto1.Cedente.CNPJCPF := frmPrincipal.CNPJ;
  ACBrBoleto1.Cedente.CodigoCedente := quTitulos.FieldByName('CODIGOCEDENTE').AsString;
  ACBrBoleto1.Cedente.Convenio := quTitulos.FieldByName('CONVENIO').AsString;
  ACBrBoleto1.Cedente.Agencia := quTitulos.FieldByName('AGENCIA').AsString;
  ACBrBoleto1.Cedente.AgenciaDigito := quTitulos.FieldByName('DIGITOAG').AsString;
  ACBrBoleto1.Cedente.Conta := quTitulos.FieldByName('CONTACORRENTE').AsString;
  ACBrBoleto1.Cedente.ContaDigito := quTitulos.FieldByName('DIGITOCC').AsString;
  ACBrBoleto1.ACBrBoletoFC := ACBrBoletoFCFR1;
  ACBrBoletoFCFR1.FastReportFile := ExtractFilePath(Application.ExeName)+ '\Reports\BoletoFR.fr3';
  ACBrBoleto1.Banco.TamanhoMaximoNossoNum := quTitulos.FieldByName('TAMANHONOSSONUM').AsInteger;
  ACBrBoleto1.DirArqRemessa := quTitulos.FieldByName('CAMINHOREMESSA').AsString;
  ACBrBoleto1.NomeArqRemessa := IntToStr(SeqR) + quTitulos.FieldByName('NOMEARQ').AsString;
  ACBrBoleto1.LayoutRemessa := iif(quTitulos.FieldByName('CNAB').AsInteger = 240, c240, c400);
  ACBrBoleto1.Cedente.TipoInscricao := iif(quTitulos.FieldByName('PESSOA').AsInteger = 0, pJuridica, pFisica);
  ACBrBoleto1.Cedente.CaracTitulo := TAcbrCaracTitulo(quTitulos.FieldByName('CARACTBOLETO').AsInteger);
 
   while (not quTitulos.Eof) do
   begin
    if (not Reimpressao) then
    begin
      quGeral.SQL.Clear;
      quGeral.SQL.Add('SELECT MAX(CAST(T1.NOSSONUM AS NUMERIC(30,0))) +1 MAXNOSSONUM, ');
      quGeral.SQL.Add('MAX(CAST(T1.NUMDOC AS NUMERIC(30,0))) +1 MAXNUMDOC  FROM NOTAVENCAB T0 ');
      quGeral.SQL.Add('INNER JOIN NOTAVENPARCEL T1 ON (T1.CODIGO = T0.CODIGO AND T1.CODEMP = T0.CODEMP) ');
      quGeral.SQL.Add('WHERE T0.CODEMP = '+frmPrincipal.EmpAtiva);
      quGeral.SQL.Add('AND T0.TIPOCOB = '+quTitulos.FieldByName('TIPOCOB').AsString);
      quGeral.Open;
      if quGeral.FieldByName('MAXNOSSONUM').AsFloat > quTitulos.FieldByName('NOSSONUMERO').AsFloat then
        NossoNu := quGeral.FieldByName('MAXNOSSONUM').AsString
      else
        NossoNu := quTitulos.FieldByName('NOSSONUMERO').AsString;
 
      if quGeral.FieldByName('MAXNUMDOC').AsFloat > quTitulos.FieldByName('NUMDOC').AsFloat then
        NumDc := quGeral.FieldByName('MAXNUMDOC').AsString
      else
        NumDc := quTitulos.FieldByName('NUMDOC').AsString;
    end
    else
    begin
      NossoNu := quTitulos.FieldByName('NOSSONUMERO').AsString;
      NumDc := quTitulos.FieldByName('NUMDOCP').AsString;
    end;
 
    Titulo:= ACBrBoleto1.CriarTituloNaLista;
 
    with Titulo do
    begin
      LocalPagamento    := quTitulos.FieldByName('LOCALPAGAMENTO').AsString;
      Vencimento        := IncMonth(quTitulos.FieldByName('DTVENCIMENTO').AsDateTime ,I);
      DataDocumento     := quTitulos.FieldByName('DTLANCAMENTO').AsDateTime;
      NumeroDocumento   := padR(NumDc,6,'0');
      EspecieDoc        := quTitulos.FieldByName('ESPECIEDOC').AsString;
      EspecieMod        := quTitulos.FieldByName('ESPECIE').AsString;
      Aceite            := iif(quTitulos.FieldByName('ACEITE').AsString = 'S', atSim, atNao);
      DataProcessamento := Now;
      NossoNumero       := NossoNu;
      Carteira          := quTitulos.FieldByName('CARTEIRA').AsString;
      ValorDocumento    := quTitulos.FieldByName('VALORPARCELA').AsFloat;;
      Sacado.NomeSacado := quTitulos.FieldByName('NOME').AsString;
      Sacado.CNPJCPF    := quTitulos.FieldByName('CNPJCPF').AsString;
      Sacado.Logradouro := quTitulos.FieldByName('RUACOB').AsString;
      Sacado.Numero     := quTitulos.FieldByName('NOCOB').AsString;
      Sacado.Bairro     := quTitulos.FieldByName('BAIRROCOB').AsString;
      Sacado.Cidade     := quTitulos.FieldByName('CIDADE').AsString;
      Sacado.UF         := quTitulos.FieldByName('ESTADO').AsString;
      Sacado.CEP        := quTitulos.FieldByName('CEPCOB').AsString;
      ValorAbatimento   := 0;
      if quTitulos.FieldByName('NDIASPROTESTO').AsInteger > 0 then
        DataProtesto      := quTitulos.FieldByName('DTVENCIMENTO').AsDateTime + quTitulos.FieldByName('NDIASPROTESTO').AsInteger;
      Mensagem.Text  := Msg;
      Instrucao1        := '00';
      Instrucao2        := '00';
      Mensagem.Add(quTitulos.FieldByName('MSG1').AsString);
      Mensagem.Add(quTitulos.FieldByName('MSG2').AsString);
      ACBrBoleto1.AdicionarMensagensPadroes(Titulo,Mensagem);
     end;
 
    if (not Reimpressao) then
    begin
      quGeral.SQL.Clear;
      quGeral.SQL.Add('UPDATE NOTAVENPARCEL ');
      quGeral.SQL.Add('SET NOSSONUM = '+''''+Titulo.NossoNumero+''',');
      quGeral.SQL.Add('RMSEXPORTADO = ''N'', ');
      quGeral.SQL.Add('SEQRMSMAX = 0,');
      quGeral.SQL.Add('NUMDOC = '+''''+Titulo.NumeroDocumento+'''');
      quGeral.SQL.Add('WHERE CODIGO = '+CodigoDoc);
      quGeral.SQL.Add('AND CODEMP = '+frmPrincipal.EmpAtiva);
      quGeral.SQL.Add('AND LINHA = '+quTitulos.FieldByName('LINHA').AsString);
      quGeral.ExecSQL;
    end;
 
     quTitulos.Next;
   end;
  ACBrBoleto1.Imprimir;
  quTitulos.Free;
  quGeral.Free;
  ACBrBoleto1.Free;
  ACBrBoletoFCFR1.Free;
 
Link para o comentário
Compartilhar em outros sites

Amigo,

Como estava gerando e imprimindo boletos apenas para o Banrisul, informava o número do banco e o dígito diretamente na propriedade do componente acbrboleto, porém agora como quero poder efetuar o processo para outros bancos não estou conseguindo limpar estas propriedades do componente e nem via código informar os valores corretos para estas propriedades, o que está me impedindo de emitir boletos para outros bancos.

Sabes me informar como proceder nesta situação ?

Abraço

Link para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia.

 

Você simplesmente precisa alterar a propriedade TipoCobranca, as demais serão alteradas pelo próprio componente automaticamente.

 

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

OI,

Desculpe em retornar...

O problema é que não estou conseguindo via codigo informar o tipoCobranca da CAIXA para o componente, uso um radiogroup para informar qual o banco será utilizado para cobrar, do banrisul gera a impressão do boleto na tela, mas quando tento fazer para a CAIXA ele não vai, diz : Carteira Inválida, utilize "RG" ou "SR".

Como fazer para certar isso ???

Link para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia.

 

Basta informar a carteira conforme a mensagem exibida, RG para carteira registrada e SR para carteira sem registro.

 

Att

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

Bom dia.

 

Basta informar a carteira conforme a mensagem exibida, RG para carteira registrada e SR para carteira sem registro.

 

Att

Bom dia,

 

Mas quando a cobrança for "CR", Cobrança Rápida (onde o cedente emite e entrega o boleto ao sacado, e depois é enviada a remessa ao banco para registrar os títulos), esta opção não aceita, só RG e SR.

Se puder me ajudar...

Aguardo

Link para o comentário
Compartilhar em outros sites

  • Administradores

Boa tarde,

 

Mas neste caso a cobrança é registrada também...

 

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia.

 

Existe alguma coisa que ficará diferente se você informar RG?

 

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

Não, ficará igual...O problema agora é que com esta tentativa de selecionar o banco para emissão de boletos, o boleto que já estava sendo impresso para o Banrisul não está mais funcionando corretamente, o banco me enviou o seguinte e-mail para ser corrigido:

 

 

"             - A linha digitável e código de barras contem somente 46 dígitos quando o correto é 47.

              Verifique as especificações da linha digitável e código de barras no leiaute;"

 

Meus arquivos estão atualizados pelo svn, mudaram alguma coisa ?

Link para o comentário
Compartilhar em outros sites

Por favor me ajudem !!!!

 

Além do problema mencionado sobre a linha digitável, hoje no início do dia, mesmo sem alterar os meus fontes, quando vou compilar o programa com a impressão do boleto, agora não finaliza mais a compilação!

Carrega 2 erros conforme imagem anexa e descrição abaixo, mesmo sem fazer referencia ao componente para caixa economica federeal no programa, apenas atualizei a pasta ACBrBoleto pelo SVN.

 

"[DCC Error] ACBrCaixaEconomicaSICOB.pas(75): E2137 Method 'CalcularTamMaximoNossoNumero' not found in base class"

 

Me ajudem por favor !!!

 

post-3293-0-78279700-1361038952_thumb.pn

post-3293-0-78279700-1361038952_thumb.pn

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Seus fontes não estão sincronizados com os do SVN... em caso de dúvidas apague toda a pasta e baixe novamente... (tb será necessário proceder a instalação desde o inicio)

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Seus fontes não estão sincronizados com os do SVN... em caso de dúvidas apague toda a pasta e baixe novamente... (tb será necessário proceder a instalação desde o inicio)

Boa tarde,

 

Deverei então instalar o componente ACBrBoleto novamente ? Terá mais algum componente que devo instalar novamente ?

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...
  • Membros Pro

Estou tendo um problema semelhante ao reportado no Tópico.

Estou utilizando o Trunk2.

Estou gerando os boletos para Caixa Registrada(RG) e para HSBC sem Registro (CNR).

Quando gero boleto para apenas um Banco não tenho problemas.

Mas, quando tento gerar para um outro banco me retorna o erro de Carteira Inválida.

Se sair do form da aplicação e retornar gera normalmente, desde que seja para apenas um Banco.

Estou fazendo o debug e a carteira está sendo substituida via código corretamente.

Meu código está assim:

        if pACBrBoleto.Cedente.TipoCarteira = tctSimples then
          begin
            if pACBrBoleto.Banco.TipoCobranca = cobCaixaEconomica then Carteira      :=  'SR';
            if pACBrBoleto.Banco.TipoCobranca = cobHSBC           then Carteira      :=  'CNR';
          end
        else
          begin
            if pACBrBoleto.Banco.TipoCobranca = cobCaixaEconomica then Carteira      :=  'RG';
            if pACBrBoleto.Banco.TipoCobranca = cobHSBC           then Carteira      :=  'CSB';
          end;
 

 

erro_boletoACBR.jpg

Link para o comentário
Compartilhar em outros sites

  • Administradores

Boa noite.

Você chegou a debugar o código para ver o TipoCobranca no momento da atribuição das carteiras?

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Oi Juliana,

Muito obrigado pela atenção.

Fiz o debug no código e as carteiras e TipoCobrança estão sendo setadas corretamente. 

Pelo menos mostra no debug e também em um showmessage que fiz para tirar a dúvida.

O ACBrBoleto não possui um comando Clear, semelhante o ACBrNfe?

 

 

Editado por icozeira
Link para o comentário
Compartilhar em outros sites

  • Administradores

Bom dia.

Não possui este comando..você tentou limpar a carteira antes da atribuição?

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Bom Dia Juliana,

Infelizmente não consegui ainda.

Na chamada do Componente estou configurando assim:

ACBrBoleto1.Banco.TipoCobranca := cobNenhum;

Depois antes de alimentar a Carteira, logo no início, estou fazendo o seguinte:

with pTitulo do
     begin
        Carteira          := ''; // Limpando a carteira

 

 

Link para o comentário
Compartilhar em outros sites

  • Administradores

Boa tarde.

Tente gerar um programa de exemplo para que possamos testar o problema ocorrendo.

Att.

 

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Juliana Boa Noite,

Consegui resolver o problema.

Não é possível dar Clear no Componente ACBrBoleto, mas, tenho que dar Clear na Lista de boletos.

Estava passando batido.

Quando do inicio da emissão, foi só fazer o seguinte:

ACBrBoleto1.ListadeBoletos.Clear;

Resolveu o problema.

Muito obrigado pela tua atenção Juliana.

E pode dar como resolvido o tópico.

Editado por icozeira
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 3 meses depois ...

 vc precisa fazer um if ou um case

    if caixa then

begin

ACBrBoleto1.ListadeBoletos.Clear;

   ACBrBoleto1.Banco.TipoCobranca := cobCaixaEconomica;
   ACBrBoleto1.LayoutRemessa:=c240;

end;

if itau then

begin

ACBrBoleto1.ListadeBoletos.Clear;

   ACBrBoleto1.Banco.TipoCobranca := cobItau
   ACBrBoleto1.LayoutRemessa:=c240;

end;

eu faço assim!

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2983 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

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

The popup will be closed in 10 segundos...