Jump to content

Erro Boleto Sicoob


Claudiomir
Go to solution Solved by Claudiomir,
  • Este tópico foi criado há 969 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Saudações.  Já criei um tópico anterior mas o moderador fechou por falta de uma resposta minha. Lamento não ter respondido no prazo.

Meu problema continua com a geração da linha digitável.

Gero o boleto e imprimo. Nenhum erro. Normal. Envio para o banco. 1 em cada 3 funciona. Os demais dá erro na hora de pagar.

A linha digitável enviada para o banco via remessa está indo com valores diferentes do que é gerada antes, na emissão do boleto.

Eu não encontro o erro.

Se alguém tiver uma idéia, eu agradeço.

Pergunto ainda, existe um "validador" de boletos do Sicoob?

Antigamente tinha uma planilha no excel onde testávamos isso.

Se alguém puder, ainda, me indicar qual o "campo" que está dando a diferença na imagem abaixo, eu agradeço.

O primeiro valor é o que eu gero na hora de imprimir o boleto.

O segundo valor é o que o banco está recebendo na remessa.

No aguarde de qualquer idéia.

 

Claudiomir

 

posirelogerando.png

Link to comment
Share on other sites

  • Moderadores
5 minutos atrás, Claudiomir disse:

Se alguém tiver uma idéia, eu agradeço.

Você viu minha resposta no tópico?

 

6 minutos atrás, Claudiomir disse:

Antigamente tinha uma planilha no excel onde testávamos isso.

Esta?

https://svn.code.sf.net/p/acbr/code/tools/Bancos/Bancoob/Layouts_para_troca_de_informações_03-09-2018.xls

Foi a que usei.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link to comment
Share on other sites

  • Moderadores
2 minutos atrás, Claudiomir disse:

Saudações Big Wings.

Vi sim. Implementei baseada nela. Testei. Tudo indicava que iria funcionar. Recebi resposta 2 horas atrás. Erro permanece.

Claudiomir

Verificou se o número da parcela foi devidamente gerado no arquivo de remessa?

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link to comment
Share on other sites

Esse tamanho voce nao precisa mexer... mas se mexer, tem que saber o tamanho correto pelo manual.

Vamos la, se isso está ficando diferente depois, vc pode ter colocado o DV do nosso numero junto com o campo nosso numero. Na segunda impressão, se repassar para o componente somado, o componente usa parte ele apenas.

Veja como uso para gerar tanto 1a via, quanto 2a via

 

class procedure TFuncBoleto.AtribuirDadosAoTitulo(var ATituloNaLista: TACBrTitulo; AQryServico: TDataSet;
  ADataEmissaoTituloDataDocumento: TDate; Rem_Ocorrencia_Remban: Integer;
  ADocumentoRec: string;
  ANumeroSlip, ADVSlip: string; AVencimento: TDate; ATotalParcelas, AParcela: Integer;
  AEmpresaRec: Integer;
  AAutoIncRec: Int64; AValor: Currency;
  AFisicaJuridica, ACnpjCpf, ANome, AEndereco, ANumeroEndereco,
  AComplementoEndereco, ABairro, ACidade, AUF, ACEP, AEmail, ATelefone,
  AAvalista, ACnpjCpfAvalista,
  ALogradouroAvalista,
  ANumeroEnderecoAvalista,
  AComplementoAvalista,
  ABairroAvalista,
  ACidadeAvalista,
  AUFAvalista,
  ACepAvalista,
  AEmailAvalista,
  ATelefoneAvalista,
  AInscricaoNrAvalista,
  AObsTextoCedente: string
  );
var
  L: Integer;
  S: string;
begin
  ATituloNaLista.EspecieDoc := AQryServico.FieldByName('ESPECIE_DOCUMENTO_SER').AsString;
  // banco inter 77
  ATituloNaLista.UsoBanco := AQryServico.FieldByName('USO_BANCO_SER').AsString;

  if AQryServico.FieldByName('ACEITE_SER').AsString = 'S' then
    ATituloNaLista.Aceite := atSim
  else
    ATituloNaLista.Aceite := atNao;

  ATituloNaLista.LocalPagamento := AQryServico.FieldByName('LOCAL_PAGAMENTO_SER').AsString;

  if AQryServico.FieldByName('TIPODOCUMENTO_SER').AsInteger = 2 then
    ATituloNaLista.TipoImpressao := tipCarne
  else
    ATituloNaLista.TipoImpressao := tipNormal;

  // ATituloNaLista.Moeda := QryServico.FieldByName('MOEDA_SER').AsString;
  ATituloNaLista.Carteira := AQryServico.FieldByName('CARTEIRA_SER').AsString;

  if AQryServico.FieldByName('RESPONSABILIDADE_ENVIO_SER').AsInteger = 1 then
    ATituloNaLista.CarteiraEnvio := tceBanco
  else // 0 zero
    ATituloNaLista.CarteiraEnvio := tceCedente; // read fCarteiraEnvio write fCarteiraEnvio default tceCedente;

  ATituloNaLista.TotalParcelas := ATotalParcelas;
  ATituloNaLista.Parcela       := AParcela;
  // Zeramentos, para ser preenchido posterior a essa funcao
  ATituloNaLista.DataAbatimento       := 0;
  ATituloNaLista.DataBaixa            := 0;
  ATituloNaLista.DataCredito          := 0;
  ATituloNaLista.DataDesconto         := 0;
  ATituloNaLista.DataMoraJuros        := 0;
  ATituloNaLista.DataOcorrencia       := 0;
  ATituloNaLista.DataProtesto         := 0;
  ATituloNaLista.PercentualMulta      := 0;
  ATituloNaLista.ValorAbatimento      := 0;
  ATituloNaLista.ValorDesconto        := 0;
  ATituloNaLista.ValorDespesaCobranca := 0;
  ATituloNaLista.ValorIOF             := 0;
  ATituloNaLista.ValorMoraJuros       := 0;
  ATituloNaLista.ValorOutrasDespesas  := 0;
  ATituloNaLista.ValorOutrosCreditos  := 0;
  ATituloNaLista.MultaValorFixo       := (AQryServico.FieldByName('REM_MULTA_VP_SER').AsString = 'F');

  // ATituloNaLista.OcorrenciaOriginal.CodigoBanco := '';
  // ATituloNaLista.OcorrenciaOriginal.Descricao   := '';

  ATituloNaLista.DescricaoMotivoRejeicaoComando.Clear;
  ATituloNaLista.MotivoRejeicaoComando.Clear;

  ATituloNaLista.DataDocumento     := ADataEmissaoTituloDataDocumento;
  ATituloNaLista.DataProcessamento := Now;
  ATituloNaLista.NossoNumero       := ANumeroSlip; // aqui nosso numero
  ATituloNaLista.Vencimento := AVencimento;

  ATituloNaLista.NumeroDocumento := ADocumentoRec;

  if (TFuncBoleto.ACBrBoleto.Banco.Numero = 104) and
    (TFuncBoleto.ACBrBoleto.LayoutRemessa = c240) then // caixa - nojento - 19
    ATituloNaLista.NumeroDocumento := ATituloNaLista.ACBrBoleto.Banco.MontarCampoNossoNumero(ATituloNaLista);

  if AQryServico.FieldByName('REM_PROTESTAR_SER').AsInteger = 1 then
  begin
    ATituloNaLista.DataProtesto := AVencimento + AQryServico.FieldByName('REM_PROTESTAR_APOS_XDIAS_SER').AsInteger;

    ATituloNaLista.TipoDiasProtesto := diCorridos; // , diUteis
  end
  else
  begin
    ATituloNaLista.DataProtesto     := 0;
    ATituloNaLista.TipoDiasProtesto := diUteis;
  end;

  // baixar
  if AQryServico.FieldByName('REM_BAIXAR_DEVOLVER_SER').AsInteger = 1 then
  begin
    ATituloNaLista.DataBaixa       := AVencimento + AQryServico.FieldByName('REM_DIAS_BAIXAR_SER').AsInteger;
    ATituloNaLista.DataLimitePagto := AVencimento + AQryServico.FieldByName('REM_DIAS_BAIXAR_SER').AsInteger;
  end
  else
  begin
    ATituloNaLista.DataBaixa := 0;
  end;


  // Identificador do titulo na empresa

  (* Historico
    Primeira versao que saiu, seu numero era composto como:
    Até 10/10/2016 era:
    Strzero( codigo_rec, 12 ) + Strzero(13,0)

    A partir de 11/10/2016 passou ser
    E+StrZero(empresa,4,0) + B + Strzero(codigo_rec, 12, 0) + Strzero(7,0)
  *)

  S := 'E' + StrZero(AEmpresaRec, 4, 0); // 5
  S := S + 'B' + StrZero(AAutoIncRec, 12, 0); // 13 = 18
  S := S + StringOfChar('0', 7); // completar 25 posicoes

  ATituloNaLista.SeuNumero := S;

  (*
    0=Registrar remessa        {Gerar primeira remessa}
    1=Baixar                   {Pedido de Baixa}
    2=Conceder Abatimento      {Concessão de Abatimento}
    3=Cancelar Abatimento      {Cancelamento de Abatimento concedido}
    4=Alterar Vencimento       {Alteração de vencimento}
    5=Alterar Numero Controle  {Alteração de seu número}
    6=Protestar                {Pedido de protesto}
    7=Cancelar Instrucao Protesto Baixa {Sustar protesto e baixar}
    8=Cancelar Instrucao Protesto   {Sustar protesto e manter na carteira}
    9=Outras Ocorrencias {Alteração de Outros Dados}
  *)

  case Rem_Ocorrencia_Remban of
    0: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaRegistrar;
    1: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaBaixar;
    2: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaConcederAbatimento;
    3: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaCancelarAbatimento;
    4: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaAlterarVencimento;
    5: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaAlterarNumeroControle;
    6: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaProtestar;
    7: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaCancelarInstrucaoProtestoBaixa;
    8: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaCancelarInstrucaoProtesto;
    9: ATituloNaLista.OcorrenciaOriginal.Tipo := toRemessaOutrasAlteracoes;
  else
    TCaixasDeDialogo.Erro('Código de ocorrência: ' + Rem_Ocorrencia_Remban.ToString + ' inválida.', true);
  end;

  ATituloNaLista.ValorDocumento := AValor;

  if AFisicaJuridica = 'J' then
    ATituloNaLista.Sacado.Pessoa := pJuridica
  else if AFisicaJuridica = 'F' then
    ATituloNaLista.Sacado.Pessoa := pFisica
  else
    ATituloNaLista.Sacado.Pessoa := pOutras;

  ATituloNaLista.Sacado.CNPJCPF     := ACnpjCpf;
  ATituloNaLista.Sacado.NomeSacado  := ANome;
  ATituloNaLista.Sacado.Logradouro  := AEndereco;
  ATituloNaLista.Sacado.Complemento := AComplementoEndereco;
  ATituloNaLista.Sacado.Numero      := ANumeroEndereco;
  ATituloNaLista.Sacado.Bairro      := ABairro;
  ATituloNaLista.Sacado.CEP         := ACEP;
  ATituloNaLista.Sacado.Cidade      := ACidade;
  ATituloNaLista.Sacado.UF          := AUF;
  ATituloNaLista.Sacado.Email       := AEmail;
  ATituloNaLista.Sacado.Fone        := ATelefone;

  // Avalista
  L := Length(SoDigito(ACnpjCpfAvalista));

  if L > 11 then
    ATituloNaLista.Sacado.SacadoAvalista.Pessoa := pJuridica
  else if L > 0 then
    ATituloNaLista.Sacado.SacadoAvalista.Pessoa := pFisica
  else
    ATituloNaLista.Sacado.SacadoAvalista.Pessoa := pOutras;

  ATituloNaLista.Sacado.Avalista                    := AAvalista;
  ATituloNaLista.Sacado.SacadoAvalista.CNPJCPF      := ACnpjCpfAvalista;
  ATituloNaLista.Sacado.SacadoAvalista.NomeAvalista := AAvalista;
  ATituloNaLista.Sacado.SacadoAvalista.Logradouro   := ALogradouroAvalista;
  ATituloNaLista.Sacado.SacadoAvalista.Numero       := ANumeroEnderecoAvalista;
  ATituloNaLista.Sacado.SacadoAvalista.Complemento  := AComplementoAvalista;
  ATituloNaLista.Sacado.SacadoAvalista.Bairro       := ABairroAvalista;
  ATituloNaLista.Sacado.SacadoAvalista.Cidade       := ACidadeAvalista;
  ATituloNaLista.Sacado.SacadoAvalista.UF           := AUFAvalista;
  ATituloNaLista.Sacado.SacadoAvalista.CEP          := ACepAvalista;
  ATituloNaLista.Sacado.SacadoAvalista.Email        := AEmailAvalista;
  ATituloNaLista.Sacado.SacadoAvalista.Fone         := ATelefoneAvalista;
  ATituloNaLista.Sacado.SacadoAvalista.InscricaoNr  := AInscricaoNrAvalista;

  S := AObsTextoCedente;

  ATituloNaLista.Mensagem.Text    := S;
  ATituloNaLista.Informativo.Text := '';

  // Não pode passar, senao vai como valor para remessa, posicao 157 a 158 no cnab400 sicoob
  ATituloNaLista.Instrucao1 := '';
  ATituloNaLista.Instrucao2 := '';
  ATituloNaLista.Instrucao3 := '';
end;

como fica gravado no programa:

image.thumb.png.b29de3d1077636e65420af724699875e.png

 

Não tem erro, até boleto de outro programa quando converto tenho feito reimpressão.

 

  • Like 1
Link to comment
Share on other sites

Saudações

Conferi, com seu código e, apesar de você ter mais opções, não encontrei diferenças óbvias.

Gero o boleto. Ele imprime normal. Testo no arquivo do excel que me enviou. Ele confirma os dados. Indica que a Pré-Homologação está correta.

Gero a remessa. Ele envia para o site. Ela é testada. Indica que está normal. Mas em algum lugar no meio disso, a linha digitável está sendo alterada.

Posto abaixo o código da geração da Remessa.

Vou continuar procurando, mas não consigo ver nada óbvio.

procedure Tgeraremessa.BitBtn4Click(Sender: TObject);
Var
  Tipo, tipo2: String;
  Titulo: TACBrTitulo;
  nn: double;
  reg: integer;
  arqnp: String;
  ch, bc: String;
  nrremessa: integer;
  ext: string;
begin

  cta.close;
  cta.SQL.Clear;
  cta.SQL.Add('select * from cta where ctacodigo=' + gcrectacodigo.AsString);
  cta.Open;

  if not cta.IsEmpty then
  begin
    Tipo := self.ctactanossonume.AsString;
    bc := self.ctabcocodigo.AsString;
    nrremessa := self.ctactanumremessa.asinteger;
  End;
  case strtoint(bc) of
    756:
      fprinci.ACBrBoleto1.Banco.TipoCobranca := cobBancoob;
  end;
  if ctactacnab.asinteger = 400 then
  begin
    fprinci.ACBrBoleto1.LayoutRemessa := c400;
  end
  else
  begin
    fprinci.ACBrBoleto1.LayoutRemessa := c240;
  end;

  If ctactatipoboleto.asinteger = 0 Then
  Begin
    fprinci.ACBrBoletoFCFR1.LayOut := lcarne;
  End
  Else If ctactatipoboleto.asinteger = 1 Then
  Begin
    fprinci.ACBrBoletoFCFR1.LayOut := lpadrao;
  End
  Else
  Begin
    fprinci.ACBrBoletoFCFR1.LayOut := lfatura;
  End;

  fprinci.ACBrBoleto1.ACBrBoletoFC.Filtro := fiNenhum;
  fprinci.ACBrBoletoFCFR1.DirLogo := extractfilepath(application.ExeName) + 'logo';
  fprinci.ACBrBoleto1.DirArqRemessa := fprinci.cfgcfgcaminhoremessabanco.AsString;
  fprinci.ACBrBoleto1.DirArqRetorno := fprinci.cfgcfgcaminhoremessabanco.AsString;
  fprinci.ACBrBoleto1.ListadeBoletos.Clear;

  fprinci.ACBrBoleto1.cedente.Agencia := self.ctactanragencia.AsString;
  fprinci.ACBrBoleto1.cedente.AgenciaDigito := self.ctactadgagencia.AsString;
  fprinci.ACBrBoleto1.cedente.Conta := self.ctacatnrconta.AsString;
  fprinci.ACBrBoleto1.cedente.ContaDigito := self.ctactadgconta.AsString;
  fprinci.ACBrBoleto1.cedente.DigitoVerificadorAgenciaConta := self.ctactadigverificaconta.AsString;
  fprinci.ACBrBoleto1.cedente.Convenio := self.ctactaconvenio.AsString;
  fprinci.ACBrBoleto1.cedente.CNPJCPF := fprinci.cfgcfgdoc1.AsString;
  fprinci.ACBrBoleto1.cedente.TipoInscricao := pJuridica;
  fprinci.ACBrBoleto1.cedente.Logradouro := fprinci.cfgcfgendereco.AsString;
  fprinci.ACBrBoleto1.cedente.NumeroRes := fprinci.cfgcfgnumero.AsString;
  fprinci.ACBrBoleto1.cedente.Bairro := fprinci.cfgcfgbairro.AsString;
  fprinci.ACBrBoleto1.cedente.Cidade := fprinci.cfgcfgcidade.AsString;
  fprinci.ACBrBoleto1.cedente.UF := fprinci.cfgcfguf.AsString;
  fprinci.ACBrBoleto1.cedente.CEP := fprinci.cfgcfgcep.AsString;
  fprinci.ACBrBoleto1.cedente.CodigoCedente := self.ctactacodigocedente.AsString;
  fprinci.ACBrBoleto1.cedente.NumeroRes := '';
  fprinci.ACBrBoleto1.cedente.Nome := self.ctactabeneficiario.AsString;
  fprinci.ACBrBoleto1.cedente.Modalidade := self.ctactamodalidade.AsString;
  gcre.first;
  While Not gcre.eof Do
  Begin
    Titulo := fprinci.ACBrBoleto1.CriarTituloNaLista;
    Titulo.TotalParcelas := self.gcre.RecordCount;

    With Titulo Do
    Begin
      if strtoint(bc) = 1 then
      begin
        Titulo.Carteira := self.ctactacarteira.AsString;
      end;

      Vencimento := StrToDate(self.gcrecrevencimento.AsString);
      DataDocumento := StrToDate(self.gcrecreemissao.AsString);
      NumeroDocumento := self.gcrecrenumero.AsString;
      Aceite := atNao;
      DataProcessamento := Now;
      parcela := gcre.RecNo;

      Titulo.EspecieDoc := 'DM';
      Titulo.EspecieMod := '';

      if gcreregistro.AsString = 'Com Registro' then
      begin
        case strtoint(bc) of
          756:
            begin
              fprinci.ACBrBoleto1.Banco.TipoCobranca := cobBancoob;
              Carteira := self.ctactacarteira.AsString;
            end;
        end;
      end;
      Titulo.EspecieDoc := 'DM';
      ValorDocumento := StrToCurr(self.gcrecrevalor.AsString);

      Sacado.NomeSacado := self.gcreclinome.AsString;
      Sacado.CNPJCPF := self.limpatexto(self.gcreclidoc1.AsString);
      if length(self.limpatexto(self.gcreclidoc1.AsString)) = 11 then
      begin
        Sacado.Pessoa := pFisica;
      end
      else
      begin
        Sacado.Pessoa := pJuridica;
      end;

      Sacado.Logradouro := self.gcrecliendereco.AsString;
      Sacado.Numero := self.gcreclinumero.AsString;
      Sacado.Bairro := self.gcreclibairro.AsString;
      Sacado.Cidade := self.gcrecddnome.AsString;
      Sacado.UF := self.gcreufsuf.AsString;
      Sacado.CEP := copy(self.gcreclicep.AsString, 1, 5) + copy(self.gcreclicep.AsString, 7, 3);
      LocalPagamento := ctalocalpagamento.AsString;
      CodigoMoraJuros := cjValorDia;
      DataMoraJuros := self.gcrecrevencimento.AsDateTime;
      ValorMoraJuros := StrToCurrDef('0', self.gcrecremoradia.AsFloat);
      ValorDesconto := StrToCurrDef('0', 0);
      ValorAbatimento := StrToCurrDef('0', 0);
      ValorAbatimento := StrToCurrDef('0', 0);

      PercentualMulta := fprinci.cfgcfgmultadiaria.AsFloat;
      Mensagem.Text := self.ctactamensagem1.AsString + #13 + self.ctactamensagem2.AsString + #13 + self.ctactamensagem3.AsString;
      OcorrenciaOriginal.Tipo := toRemessaregistrar;
      fprinci.ACBrBoleto1.AdicionarMensagensPadroes(Titulo, Mensagem);
    End;
    gcre.Next;
  End;

  try
    fprinci.ACBrBoleto1.ChecarDadosObrigatorios;
    Inc(nrremessa);
    fprinci.ACBrBoleto1.GerarRemessa(nrremessa);
    cta.edit;
    ctactanumremessa.asinteger := nrremessa;
    cta.post;
  except
    MessageDlg('Erro ao gerar arquivo de remessa. Verifique!', mtWarning, [mbOK], 0);
  end;

end;

Se alguém tiver uma idéia, fico agradecido.

Claudiomir

 

Link to comment
Share on other sites

39 minutos atrás, BigWings disse:

Isso gera o mesmo número de parcela que usou na emissão do boleto?

Saudações,

Uma boa pergunta.

Acredito que sim, pois é uma numeração sequencial.

Uso o mesmo código para gerar o boleto.

Tecnicamente deveria.

Mas pode não estar correto.

Deixa eu ver se posso alterar isso, de alguma forma.

Claudiomir

Link to comment
Share on other sites

18 minutos atrás, Claudiomir disse:

Saudações,

Uma boa pergunta.

Acredito que sim, pois é uma numeração sequencial.

Uso o mesmo código para gerar o boleto.

Tecnicamente deveria.

Mas pode não estar correto.

Deixa eu ver se posso alterar isso, de alguma forma.

Claudiomir

Saudações.

Fiz uma alteração na numeração das parcelas.

Só vou poder testar no horário do almoço.

Te respondo a tarde.

Por enquanto, grato por vosso auxílio.

Claudiomir

Link to comment
Share on other sites

   Titulo.TotalParcelas := self.gcre.RecordCount;
incrementa parcelas pelo dataset de receber em loop ?

Se nao for carne: parcela := gcre.RecNo; manda isso com 1 e o TotalParcelas tambem.

penso estar errado isso.

E em que momento vc salva no banco de dados isso ? remessa era para enviar com dados ja gravados.

Esqueci de colocar a chamda da funcao: note os parametros fixos, 1, 1> é parcela e total, nao uso carne, mesmo sendo carne, uso tudo como se fosse 1 parcela.

 

   TFuncBoleto.AtribuirDadosAoTitulo(Titulo,
                IBQryServBanc,
                IBDSPai.FieldByName('DATA_BOR').AsDateTime,
                IBDSPai.FieldByName('REM_OCORRENCIA_BOR').AsInteger,
                IBDSReceber.FieldByName('DOCUMENTO_REC').AsString,
                IBDSReceber.FieldByName('BOLETO_REC').AsString, //
                IBDSReceber.FieldByName('DV_BOLETO_REC').AsString,
                IBDSReceber.FieldByName('VENCIMENTO_REC').AsDateTime,
             
  1, 1,
                IBDSReceber.FieldByName('EMPRESA_REC').AsInteger,
                IBDSReceber.FieldByName('CODIGO_REC').AsLargeInt,
                IBDSReceber.FieldByName('VALOR_REC').AsCurrency,
                IBDSReceber.FieldByName('FISJUR_CLI').AsString,
                CnpjCpf,
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('NOME_CLI').AsString),
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('ENDERECO_CLI').AsString),
                IBDSReceber.FieldByName('NUM_ENDERECO_CLI').AsString,
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('COMPL_END_CLI').AsString),
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('BAIRRO_CLI').AsString),
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('NOMCID').AsString),
                IBDSReceber.FieldByName('ESTCID').AsString,
                SoDigito(IBDSReceber.FieldByName('CEP_CLI').AsString),
                IBDSReceber.FieldByName('EMAIL_COBRANCA_CLI').AsString,
                IBDSReceber.FieldByName('TELEFONE_CLI').AsString,
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('NOME_AVALISTA').AsString),
                CnpjCpfAvalista,
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('ENDERECO_AVALISTA').AsString),
                IBDSReceber.FieldByName('NUM_END_AVALISTA').AsString,
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('COMPL_END_AVALISTA').AsString),
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('BAIRRO_AVALISTA').AsString),
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('NOME_CID_AVALISTA').AsString),
                IBDSReceber.FieldByName('UF_CID_AVALISTA').AsString,
                SoDigito(IBDSReceber.FieldByName('CEP_AVALISTA').AsString),
                IBDSReceber.FieldByName('EMAIL_AVALISTA').AsString,
                IBDSReceber.FieldByName('TELEFONE_AVALISTA').AsString,
                IBDSReceber.FieldByName('IE_AVALISTA').AsString,
                IBDSReceber.FieldByName('TEXTO_LIVRE_BOLETO_REC').AsString);

 

Link to comment
Share on other sites

28 minutos atrás, Antonio Gomes disse:

   Titulo.TotalParcelas := self.gcre.RecordCount;
incrementa parcelas pelo dataset de receber em loop ?

Se nao for carne: parcela := gcre.RecNo; manda isso com 1 e o TotalParcelas tambem.

penso estar errado isso.

E em que momento vc salva no banco de dados isso ? remessa era para enviar com dados ja gravados.

Esqueci de colocar a chamda da funcao: note os parametros fixos, 1, 1> é parcela e total, nao uso carne, mesmo sendo carne, uso tudo como se fosse 1 parcela.

 

   TFuncBoleto.AtribuirDadosAoTitulo(Titulo,
                IBQryServBanc,
                IBDSPai.FieldByName('DATA_BOR').AsDateTime,
                IBDSPai.FieldByName('REM_OCORRENCIA_BOR').AsInteger,
                IBDSReceber.FieldByName('DOCUMENTO_REC').AsString,
                IBDSReceber.FieldByName('BOLETO_REC').AsString, //
                IBDSReceber.FieldByName('DV_BOLETO_REC').AsString,
                IBDSReceber.FieldByName('VENCIMENTO_REC').AsDateTime,
             
  1, 1,
                IBDSReceber.FieldByName('EMPRESA_REC').AsInteger,
                IBDSReceber.FieldByName('CODIGO_REC').AsLargeInt,
                IBDSReceber.FieldByName('VALOR_REC').AsCurrency,
                IBDSReceber.FieldByName('FISJUR_CLI').AsString,
                CnpjCpf,
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('NOME_CLI').AsString),
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('ENDERECO_CLI').AsString),
                IBDSReceber.FieldByName('NUM_ENDERECO_CLI').AsString,
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('COMPL_END_CLI').AsString),
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('BAIRRO_CLI').AsString),
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('NOMCID').AsString),
                IBDSReceber.FieldByName('ESTCID').AsString,
                SoDigito(IBDSReceber.FieldByName('CEP_CLI').AsString),
                IBDSReceber.FieldByName('EMAIL_COBRANCA_CLI').AsString,
                IBDSReceber.FieldByName('TELEFONE_CLI').AsString,
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('NOME_AVALISTA').AsString),
                CnpjCpfAvalista,
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('ENDERECO_AVALISTA').AsString),
                IBDSReceber.FieldByName('NUM_END_AVALISTA').AsString,
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('COMPL_END_AVALISTA').AsString),
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('BAIRRO_AVALISTA').AsString),
                TFuncoesString.AnsiParaAscii(IBDSReceber.FieldByName('NOME_CID_AVALISTA').AsString),
                IBDSReceber.FieldByName('UF_CID_AVALISTA').AsString,
                SoDigito(IBDSReceber.FieldByName('CEP_AVALISTA').AsString),
                IBDSReceber.FieldByName('EMAIL_AVALISTA').AsString,
                IBDSReceber.FieldByName('TELEFONE_AVALISTA').AsString,
                IBDSReceber.FieldByName('IE_AVALISTA').AsString,
                IBDSReceber.FieldByName('TEXTO_LIVRE_BOLETO_REC').AsString);

 

Boa. Alterei o código para salvar a qtde de parcelas(cre.recordcount), e o numero da parcela(1,2,3,4....) direto em cada registro do contas a receber. Dessa forma, na geração da remessa eu pego direto da tabela de contas a receber, onde eu já tenho gravado esses valores, impedindo burradas dentro da geração da remessa.

Bora testar.

Te respondo a tarde.

Grato por enquanto.

Claudiomir

  • Like 2
Link to comment
Share on other sites

  • Administradores

Boa tarde.

O terceiro bloco da linha digitavel corresponde as posições 2 a 7 do nosso numero + o digito verificador, além do numero da parcela com 3 digitos.

Em seu último exemplo o nosso numero parece ter sido alterado.

Att.

Consultora SAC ACBr

Juliana Tamizou
Ajude o Projeto ACBr crescer - Assine o SAC

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 to comment
Share on other sites

Valeu

Juliana Tamizou

Sabe... tem dias que me odeio.

Esqueci a quantidade de dígitos... ".... além do numero da parcela com 3 digitos. "!!

To passando somente 1 Digito.

Parcela ( 1,2,3)

Titulo.TotalParcelas := self.gcrecretotalparcelas.asinteger;  (está indo somente 1 dígito)!!!!!

No caso o valor inteiro (3)! e não "003".

Tem dias... que tenho vontade de "me exorcizar"!

Vou tentar novamente amanhã. Cliente sem internet agora para testar.

Grato por enquanto.

 

Antonio Gomes

Posso colocar 1 e 1??

Tanto em Titulo.Parcela como em Titulo.TotalParcelas???

O banco não vai encher o saco por não ser a informação correta??

Grato

Claudiomir

 

Link to comment
Share on other sites

2 horas atrás, Claudiomir disse:

Valeu

Juliana Tamizou

Sabe... tem dias que me odeio.

Esqueci a quantidade de dígitos... ".... além do numero da parcela com 3 digitos. "!!

To passando somente 1 Digito.

Parcela ( 1,2,3)

Titulo.TotalParcelas := self.gcrecretotalparcelas.asinteger;  (está indo somente 1 dígito)!!!!!

No caso o valor inteiro (3)! e não "003".

Tem dias... que tenho vontade de "me exorcizar"!

Vou tentar novamente amanhã. Cliente sem internet agora para testar.

Grato por enquanto.

 

Antonio Gomes

Posso colocar 1 e 1??

Tanto em Titulo.Parcela como em Titulo.TotalParcelas???

O banco não vai encher o saco por não ser a informação correta??

Grato

Claudiomir

 

Claro que pode, evite dores de cabeça para vc.
Detalhe : Se quer trabalhar com numero de parcela do sicoob, grava tudo no seu banco de dados. Qual parcela é e quantas é, pq é usado na montagem do codigo de barras, ou pelo menos era.

Por isso passo como 1, isso só funcionava no programa cedente deles, onde o cara digitava e mandava direto. 
Inutil isso de parcela, mando carne de clube direto aqui com parcela 1/1 para tudo. 

Link to comment
Share on other sites

3 horas atrás, Juliana Tamizou disse:

Boa tarde.

O terceiro bloco da linha digitavel corresponde as posições 2 a 7 do nosso numero + o digito verificador, além do numero da parcela com 3 digitos.

Em seu último exemplo o nosso numero parece ter sido alterado.

Att.

Saudações Juliana

Eu procurei, mas não encontrei. Tem como, olhando no arquivo de remessa, encontrar o campo linha digitável? Sicoob Cnab 240.

Ou ele não aparece como estaria no boleto?

Claudiomir

Link to comment
Share on other sites

4 horas atrás, Juliana Tamizou disse:

Boa tarde.

O terceiro bloco da linha digitavel corresponde as posições 2 a 7 do nosso numero + o digito verificador, além do numero da parcela com 3 digitos.

Em seu último exemplo o nosso numero parece ter sido alterado.

Att.

Juliana.... perdão, mas eu não entendi isso (...além do numero da parcela com 3 digitos).

o campo Titulo.Parcela é integer. Como você passa ele com 3 digitos??

Sempre que eu tento passar, ele passa somente 1 dígito, ou seja, o próprio valor (quantidades de parcelas).

Se eu gero 3 boletos, ele vai passar 3 em Titulo.TotalParcelas, não é isso?

Ou estou completamente enganado?

Claudiomir

Edited by Claudiomir
Link to comment
Share on other sites

Entenda essa parte do componente:

 

 {Montando Campo Livre}
    CampoLivre    := PadLeft(trim(ACBrTitulo.ACBrBoleto.Cedente.Modalidade), 2, '0') +
                     PadLeft(trim(ACBrTitulo.ACBrBoleto.Cedente.CodigoCedente), 7, '0') +
                     PadLeft(Copy(ANossoNumero,1,8), 8, '0') +  //7 Sequenciais + 1 do digito
                     IntToStrZero(Max(1,ACBrTitulo.Parcela),3);

 

Se vc mandar totalparcela = 1 e parcela = 1, seus problemas se acabam. Pense nisso. Fora disso, o total de parcelas tem que estar gravado no seu banco, porque se mandar recno ou recordcount, cada hora vai ser aleatório, banco de dados SQL não existe recno fisico do banco de dados, como era antigamente no clipper.

  • Like 1
Link to comment
Share on other sites

  • Moderadores
17 horas atrás, Claudiomir disse:

sicoobcomerro.thumb.png.254c1d522e2571bb5ddd7ae57e85fcf4.png

Não funcionou!

Impressionante!

Nada do que eu faço dá certo nessa......ç. Nhaca de banco!!!!

Erro persiste!!

Como a Juliana já comentou, a diferença aqui está no nosso número.

Aparentemente na emissão do boleto foi informado o nosso número 0010060-2 e na geração da remessa foi informado (ou o banco interpretou como) 0000159-9.

Na sequência do nosso número vem o número da parcela (001 para ambos)

  • Like 1
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link to comment
Share on other sites

  • Solution

Pessoal.... RESOLVIDO!!!!

O erro era basicamente uma burrice minha. Por algum motivo insondável, eu estava mandando gerar novamente o nosso numero quando do envio da remessa.

Não pergunte por que!

Provavelmente o maldito Ctrl C, Ctrl V.

Enfim, o cliente conseguiu pagar!

Agradeço profundamente a todos que me ajudaram!!!!

Grato

Claudiomir

[Tópico pode ser encerrado]

  • Like 2
Link to comment
Share on other sites

  • Este tópico foi criado há 969 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.