Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

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á.

Postado

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;
 
Postado

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

Postado

Boa noite!

Alguém sabe me informar porque não consigo alterar as propriedades do componente ACBrBoleto.Banco.Nome, ACBrBoleto.Banco.Numero, ACBrBoleto.Banco.Digito, etc ???

Estou precisando muito poder gerar boletos para mais de 1 banco !!

  • Administradores
Postado

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 !!

Postado

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 ???

  • Administradores
Postado

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 !!

Postado
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

  • Administradores
Postado

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 !!

  • Administradores
Postado

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 !!

  • 4 semanas depois ...
Postado

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 ?

Postado

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

  • Fundadores
Postado

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.

Postado

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 ?

  • 2 anos depois...
  • Membros Pro
Postado

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

  • Administradores
Postado

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 !!

  • Membros Pro
Postado (editado)

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
  • Administradores
Postado

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 !!

  • Membros Pro
Postado

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

 

 

  • Administradores
Postado

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 !!

  • Membros Pro
Postado (editado)

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
  • 3 meses depois ...
Postado

 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!

  • Este tópico foi criado há 3196 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.