Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

 Toda vez que pego nova versão do ACBR tenho que mudar o codigo dessa unit  "ACBrBancoCaixaSICOB"

 Algum administrador poderia alterar essa procedure no fontes originais

function TACBrCaixaEconomicaSICOB.CalcularTamMaximoNossoNumero(
  const Carteira: String; NossoNumero: String): Integer;
var
  wTamNossoNumero: Integer;
begin
   Result := 15;  não pode começar em 15  o correto é  :::
   Result := length(NossoNumero);   Veja de acordo com o manual quando for sem registro deve ter 11 posições considerando o digito e para isso dar certo tem que mudar essa linha .

   wTamNossoNumero:= length(NossoNumero);

   if ((wTamNossoNumero >= 8)  and (wTamNossoNumero <= 10)) or
      ((wTamNossoNumero >= 14) and (wTamNossoNumero <= 15)) then
      Result := wTamNossoNumero;
end;

O nosso numero SR deve ficar assim    "8200003103.2"

O manual já foi postado pelo colega no link

 

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

Se o erro não tiver naquela função vai estão nessa aqui.

Pois quando o tamanho for 10 nunca vai receber o 82 na frente do nosso numero

function TACBrCaixaEconomicaSICOB.FormataNossoNumero(const ACBrTitulo :TACBrTitulo): String;
var
  ANossoNumero: String;
  wTamNossoNum: Integer;
begin
   with ACBrTitulo do
   begin

      ANossoNumero := OnlyNumber(NossoNumero);
      wTamNossoNum := CalcularTamMaximoNossoNumero(Carteira,ANossoNumero);

      if (wTamNossoNum = 10) or (wTamNossoNum = 15) then    //   Aqui tem erro por quando tiver 10 não vai colocar o 82 na frente
         ANossoNumero:= ANossoNumero
      else
       begin
         if Carteira = 'SR' then
          begin
            if wTamNossoNum = 14 then
               ANossoNumero:= '8'+ padr(Copy(ANossoNumero,Length(ANossoNumero)-13,14),14)
            else
              ANossoNumero:= '82'+ padr(Copy(ANossoNumero,Length(ANossoNumero)-7,8),8);
          end
         else
            ANossoNumero:= '9' + padR(Copy(ANossoNumero,Length(ANossoNumero)-8,9),9,'0');
       end;
   end;
   Result := ANossoNumero;
end;

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Estimado,

Boa tarde! Utilizo o componente da maneira que está e não ocorre problema. Quando tiver 10 ou 15 posições (direto) significa que o nosso número foi passado para o componente com o 82 ou com 8 na frente (ou seja, formatado). Eu , por exemplo, já formato o número antes de passar pro componente. E sim, pode-se colocar como default 15 posições (que é o tamanho máximo permitido pelas cobranças da Caixa). Dá uma estudada no fonte aí e vai ajeitando a máscara do nosso número pra jogar no componente, tipo:

// configuro
    ACBrBoleto.Banco.TipoCobranca := cobCaixaSicob;
    ACBrBoleto.Banco.Numero          := 104;
    ACBrBoleto.Banco.Digito          := 0;
    ACBrBoleto.Banco.Nome            := 'Caixa Economica Federal';
    ACBrBoleto.Banco.TamanhoMaximoNossoNum := 15;
// formato nosso número
    ....
    sMascaraNNum := '800000000000000'; // sem registro, nosso número 15 posições, eu defini isso em parâmetros do meu sistema
    ..
    
    TituloACBr.NossoNumero := FormatFloat(sMascaraNNum,nNossoNum);
    nNossoNum := nNossoNum + 1;
    ....

Qualquer coisa avise-nos,

Até mais,

-- 

Alexandre de Oliveira

Diretor de T.I.

xx16 3811 0155

www.consultatec.com.br - [email protected]

image.png.744a897bbf36127e428c6e687ef05731.png

 

Link para o comentário
Compartilhar em outros sites

Colega  "aocampioni"

Da forma como você eu também já fiz porém assim terei que ficar fazendo definições do nosso numero dentro de minha aplicação sendo com o componente já faz isso
Eu fiz um quebra galho aqui colocando o 82 na frente mais não é algo elegante sendo que o componente já formata o nosso numero para a gente.
Pelo que percebi de outros banco o componente faz certinho apenas esse CaixaSicoob esta errado.

 Peço aos administradores por favor atualizar o componente com minha correção pois postei o erro e a solução.

Grato.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Boa tarde estimado luciano_f,

Eu não crio várias definições, eu crio uma tela com parâmetros quando estou no cadastro de locais de cobrança do meu sistema e configuro conforme o banco do cliente me passa as configurações e, então, uma rotina minha usa essas configurações para montar o boleto e a remessa do cliente .

Considere fazer então como está no exemplo do próprio ACBr. Quando a função CalcularTamMaximoNossoNumero receber o seu número e você desejar que o 82 seja incluído automaticamente passe desta maneira:

TituloACBr.NossoNumero := IntToStrZero(nNossoNum,8); // função do próprio acbrutil

Assim, wTamNossoNumero:= length(NossoNumero); será igual a 8 e quando o componente entrar em FormataNossoNumero, carteira SR, ele irá colocar o 82 na frente. Para carteira registrada pode-se usar dessa mesma maneira, o componente irá compor com o 9 na frente e colocar mais 1 zero antes de formar o nosso número.

De qualquer modo (meu modo ou o exemplo do acbr) você deve 'formatar' o tamanho do campo nosso número, de acordo com que o banco passar (por isso tenho um campo máscara do nosso número na minha tela de configurações), só assim o componente irá trabalhar 'sozinho'.

Qualquer coisa a mais vá postando aí,

Até mais,

 

 

Sem título.jpg

Editado por aocampioni

-- 

Alexandre de Oliveira

Diretor de T.I.

xx16 3811 0155

www.consultatec.com.br - [email protected]

image.png.744a897bbf36127e428c6e687ef05731.png

 

Link para o comentário
Compartilhar em outros sites

 Colega  "aocampioni"  se eu definir dessa forma que você disse terei problemas na captura do nosso numero no arquivo retorno do banco

pois como irei definir o tamanho do nosso numero como 8 ele não vai pegar os 10 dígitos na captura já fiz o testes.

dessa forma eu terei eu criar dois campos de configurações um para Tamanho do nosso numero de Envio que seria 8 digitos

e outro campo para ler o retorno que seria 10 dígitos.

E ainda terei que fazer algo como você você criar um campo do Inicio do Nosso numero onde na configuração tem que informar o Inicio do Nosso Numero 82

Vejo que o problema é simples de resolver pois se trata de algo errado dentro do código do componente que acredito que os administradores poderiam alterar sem nós que ficar fazendo mudanças na aplicação.

 Veja não estou querendo ser folgado e pendido muito pois vejo que se trata de um erro na Unit  "ACBrBancoCaixaSICOB.pas"

Para ter certeza do que estou falando eu fiz um teste com o RLBoleto e o mesmo não tem esse problema.

Link para o comentário
Compartilhar em outros sites

  • Administradores

Boa noite.

Se você tem a unit alterada, por favor anexe ao tópico. 

 Toda vez que pego nova versão do ACBR tenho que mudar o codigo dessa unit  "ACBrBancoCaixaSICOB"

 Algum administrador poderia alterar essa procedure no fontes originais

function TACBrCaixaEconomicaSICOB.CalcularTamMaximoNossoNumero(
  const Carteira: String; NossoNumero: String): Integer;
var
  wTamNossoNumero: Integer;
begin
   Result := 15;  não pode começar em 15  o correto é  :::
   Result := length(NossoNumero);   Veja de acordo com o manual quando for sem registro deve ter 11 posições considerando o digito e para isso dar certo tem que mudar essa linha .

   wTamNossoNumero:= length(NossoNumero);

   if ((wTamNossoNumero >= 8)  and (wTamNossoNumero <= 10)) or
      ((wTamNossoNumero >= 14) and (wTamNossoNumero <= 15)) then
      Result := wTamNossoNumero;
end;

O nosso numero SR deve ficar assim    "8200003103.2"

O manual já foi postado pelo colega no link

 

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,

Ok estimado, tentei ajudar da melhor forma possível.  Sob o meu ponto de vista não há erros na UNIT do banco.

Até mais,

Colega eu fico muito agradecido pela sua ajuda tanto que olhando sua tela de cadastro do Boleto eu tive uma noção melhor de como melhorar meu sistema e inclusive já apliquei suas ideias de deixar nas configurações do sistema um campo para o "Cod. Inicial" dentre outras coisas que vi no seu cadastro e também usei,  então você foi de grande ajuda.

Porém como é algo simples de se resolver na unit que inclusive já postei a Unit alterada o Administrador do projeto acredito que vai alterar para outros não ter o mesmo problema que eu tive no passado.

Muito grato.

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

Colega "aocampioni"  Pelo que pude perceber na sua tela de configuração você colocou uma pagina para configuração de Email  seria para enviar os arquivos de remessa ?    

  A minha duvida é existe alguma possibilidade de criar um tipo de envio automático do arquivo remessa ou sempre terei que gerar esse arquivo em um diretório para o programa do banco efetuar a captura desse arquivo e depois esse programa do banco enviar ?  
 Todos os banco tem o mesmo sistema onde só o programa deles fazem a captura e envio para o servidor deles ?

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Olá estimado luciano_f,

A página de e-mail é para configurar o servidor e endereço de e-mail com usuário e senha do emitente. Ao gerar uma remessa, se o destinatário do boleto possuir e-mail e no cadastro de cliente estiver marcado BOLETO COBRANÇA ENVIO AUTOMÁTICO, será enviado um e-mail do boleto para o cliente ao final da geração da remessa. Se o registro que foi gerado remessa já tiver uma marca de BOLETO IMPRESSO o sistema pergunta ao usuário o que fazer nesse caso.

Nesse outro caso que você citou, desconheço qualquer integração bancária, a não ser apenas no caso da Caixa Econômica que possui um sistema de cobrança FASTEDI (desenvolvido pela TIVIT) onde a gente consegue startar a aplicação por linha de comando com usuário e senha, e uma vez carregada, basta gravar o arquivo de remessa no diretório da aplicação e em instantes o arquivo é automaticamente enviado para o banco.

É tosco mas seu uso acaba sendo eficiente. No mais, não conheço se alguma outra instituição bancária usa sistema parecido.

Até mais,

-- 

Alexandre de Oliveira

Diretor de T.I.

xx16 3811 0155

www.consultatec.com.br - [email protected]

image.png.744a897bbf36127e428c6e687ef05731.png

 

Link para o comentário
Compartilhar em outros sites

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