Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

  • Membros
Postado

Bom dia , na minha aplicação posso ter mais de um banco.. nesse caso tenho Sicredi e Sicoob, 

antes de imprimir cada boleto uso ListadeBoletos.Clear;(Não imprimo de bancos diferentes na mesma impressão)

 O que ocorre é , se eu imprimir um boleto do sicoob que usa  ACBrBoleto.Cedente.Modalidade :='01' e logo após tentar imprimir a segunda via de um boleto sicredi , isso interfere na linha digital e codigo de barras do boleto gerando um codigo de barras errado. 
Lembrando que antes de cada impressão utilizo ListadeBoletos.Clear; , em teoria não era pra ter 'resetado' o componente? estou dando exemplo do campo modalidade, visto que isso pode acontecer com outros campos tb e interferir a impressão de outro banco..

Qual a melhor forma de proceder nesse caso? 

  • Consultores
Postado

Ele vai remover os titulos 

mas as demais configurações tu tem que carregar conforme o banco que for usar

então creio que deva fazer um metodo para chamar e carregar de novo no componente as configurações do banco

pois ali só limpa os titulos existentes

  • Curtir 1

 

Consultora ACBr Pro

Juliomar Marchetti

Ajude o Projeto ACBr crescer - Seja Pro

discord: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br

 

MVP_NewLogo_100x100_Transparent-02.png
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
46 minutos atrás, ValterDigital disse:

Bom dia , na minha aplicação posso ter mais de um banco.. nesse caso tenho Sicredi e Sicoob, 

antes de imprimir cada boleto uso ListadeBoletos.Clear;(Não imprimo de bancos diferentes na mesma impressão)

 O que ocorre é , se eu imprimir um boleto do sicoob que usa  ACBrBoleto.Cedente.Modalidade :='01' e logo após tentar imprimir a segunda via de um boleto sicredi , isso interfere na linha digital e codigo de barras do boleto gerando um codigo de barras errado. 
Lembrando que antes de cada impressão utilizo ListadeBoletos.Clear; , em teoria não era pra ter 'resetado' o componente? estou dando exemplo do campo modalidade, visto que isso pode acontecer com outros campos tb e interferir a impressão de outro banco..

Qual a melhor forma de proceder nesse caso? 

Voce precisa mexer  antes mano, tudo que vc fez na primeira passada deve fazer parq conta seguinte, senao vira um balaio de gatos.

Saca só como eu faço, as vezes na hora da segunda via, pode precisar de fazer em loop.. Codigo abaixo para voce abstrair.

property Boleto: TACBrBoleto read FACbrBoleto write FACbrBoleto;

 LACBrTitulo              : TACBrTitulo;

 TFuncBoleto.ConfigurarTipoCobranca(Boleto, FDSServBanc);

      Boleto.ListadeBoletos.Clear;

      LACBrTitulo := Boleto.CriarTituloNaLista;

      if (Boleto.ListadeBoletos.Count = 0) or
       (Boleto.ListadeBoletos.Count > 1) then
         raise Exception.Create('Erro no componente de boleto.' + #13 + sEntreEmContato);

      TFuncBoleto.AtribuirDadosAoTitulo(LACBrTitulo)

 

class procedure TFuncBoleto.ConfigurarTipoCobranca(AACBrBoleto: TACBrBoleto; ADSServico: TDataSet);
var
  S              : string;
  LCertificadoCrt: string;
  LCertificadoKey: string;
  LCertificadoPFX: string;
begin
  AACBrBoleto.Banco.OrientacoesBanco.Clear;
  AACBrBoleto.Banco.Numero := ADSServico.FieldByName('CAMARA_COMPENSACAO_BAN').AsInteger;
  AACBrBoleto.Banco.Digito := ADSServico.FieldByName('DV_CAMARA_COMP_BAN').AsInteger;
  AACBrBoleto.Banco.Nome   := ADSServico.FieldByName('NOME_BAN').AsString;

  // banco do brasil
  if ADSServico.FieldByName('CAMARA_COMPENSACAO_BAN').AsInteger = 1 then
  begin
    AACBrBoleto.KeySoftwareHouse := 'xxxx cnpj seu '; // para webservice
  end;

  if ADSServico.FieldByName('TIPO_COBRANCA_ACBR_SER').AsInteger > 0 then // criado em 19/12/25-pode ser vazio no cliente
     AACBrBoleto.Banco.TipoCobranca := TACBrTipoCobranca(ADSServico.FieldByName('TIPO_COBRANCA_ACBR_SER').AsInteger)
  else
  begin
    // modo antigo, ate 19/12/2025 era assim
    AACBrBoleto.Banco.TipoCobranca := AACBrBoleto.GetTipoCobranca(
      ADSServico.FieldByName('CAMARA_COMPENSACAO_BAN').AsInteger,
      ADSServico.FieldByName('CARTEIRA_SER').AsString);

    case ADSServico.FieldByName('CAMARA_COMPENSACAO_BAN').AsInteger of
      1:
        begin
          if ((ADSServico.FieldByName('BOLETO_ELETRONICO_SER').AsString = Eletronico_BoletoApenas) or
             (ADSServico.FieldByName('BOLETO_ELETRONICO_SER').AsString = Eletronico_HibridoBol_Pix)) then
             AACBrBoleto.Banco.TipoCobranca := TACBrTipoCobranca.cobBancoDoBrasilWS
          else if ADSServico.FieldByName('CAMARA_COMPENSACAO_SER').AsInteger = 5 then
             AACBrBoleto.Banco.TipoCobranca := cobBancoDoBrasilSICOOB
          else
             AACBrBoleto.Banco.TipoCobranca := cobBancoDoBrasil; { 001 }
        end;
      104:
        begin
          if ADSServico.FieldByName('CAMARA_COMPENSACAO_SER').AsInteger = 1 then
             AACBrBoleto.Banco.TipoCobranca := cobCaixaSicob { 104 }
          else
             AACBrBoleto.Banco.TipoCobranca := cobCaixaEconomica; { 104 SIGCB }
        end;
      237:
        begin
          case ADSServico.FieldByName('CAMARA_COMPENSACAO_SER').AsInteger of
            2: AACBrBoleto.Banco.TipoCobranca := cobBradescoSICOOB; { 237 }
            3: AACBrBoleto.Banco.TipoCobranca := cobBicBanco; { 237 }
            4: AACBrBoleto.Banco.TipoCobranca := cobSafraBradesco; { 422 + 237 }
          else
            AACBrBoleto.Banco.TipoCobranca := cobBradesco; { 237 }
          end;
        end;
      422:
        begin
          if ADSServico.FieldByName('CAMARA_COMPENSACAO_SER').AsInteger = 4 then
             AACBrBoleto.Banco.TipoCobranca := cobSafraBradesco { 422 + 237 }
          else
          begin
            AACBrBoleto.Banco.TipoCobranca := cobBancoSafra; { 422 }
          end;
        end;
    end;
  end;

  case AACBrBoleto.Banco.TipoCobranca of
    cobCaixaSicob: { 104 }
      begin
        AACBrBoleto.Banco.LayoutVersaoArquivo := 0;
        AACBrBoleto.Banco.LayoutVersaoLote    := 30;
      end;
    cobCaixaEconomica: { 104 SIGCB }
      begin
        AACBrBoleto.Banco.LayoutVersaoArquivo := 50;
        AACBrBoleto.Banco.LayoutVersaoLote    := 30;
      end;
  end;

  if (ADSServico.FieldByName('CAMARA_COMPENSACAO_BAN').AsInteger = 33) { santander } then
     AACBrBoleto.Banco.CasasDecimaisMoraJuros := 5
  else
     AACBrBoleto.Banco.CasasDecimaisMoraJuros := 2;

  { 11/07/2024 - Erro 500, de falta de certificado, ordem correta dos parametros serem atribuidos
    Essas duas linhas devem ser aqui, pois elas mexem nas propertys abaixo,
    quando faz o OnSet de Certificado ou ChavePrivada
    ACBrBoleto.Configuracoes.WebService.ArquivoPFX
    Configuracoes.WebService.ArquivoCRT
    Configuracoes.WebService.ArquivoKEY

  }
  AACBrBoleto.Configuracoes.WebService.Certificado  := '';
  AACBrBoleto.Configuracoes.WebService.ChavePrivada := '';

  if ((ADSServico.FieldByName('BOLETO_ELETRONICO_SER').AsString = Eletronico_BoletoApenas) or
     (ADSServico.FieldByName('BOLETO_ELETRONICO_SER').AsString = Eletronico_HibridoBol_Pix)) then
  begin
    TFuncContaServico.CertificadoNoHd(ADSServico, LCertificadoCrt, LCertificadoKey, LCertificadoPFX);

    if LCertificadoPFX <> '' then
       AACBrBoleto.Configuracoes.WebService.ArquivoPFX := LCertificadoPFX;

    if LCertificadoCrt <> '' then
       AACBrBoleto.Configuracoes.WebService.ArquivoCRT := LCertificadoCrt;

    if LCertificadoKey <> '' then
       AACBrBoleto.Configuracoes.WebService.ArquivoKEY := LCertificadoKey;

    // TNivelLog = (logNenhum, logSimples, logNormal, logCompleto, logParanoico);
    AACBrBoleto.Configuracoes.Arquivos.LogNivel := TNivelLog(ADSServico.FieldByName('NIVEL_LOG_SER').AsInteger);

    AACBrBoleto.Configuracoes.Arquivos.NomeArquivoLog     := '';
    AACBrBoleto.Configuracoes.Arquivos.PathGravarRegistro := '';

    if AACBrBoleto.Configuracoes.Arquivos.LogNivel <> TNivelLog.logNenhum then
    begin
      AACBrBoleto.Configuracoes.Arquivos.NomeArquivoLog     := 'LogExecucaoApiBoletoConta_' + ADSServico.FieldByName('CONTA_CORRENTE_SER').AsString;
      AACBrBoleto.Configuracoes.Arquivos.PathGravarRegistro := SDiretorioTempSistema;
    end;
  end;

  AACBrBoleto.Homologacao := False;
  case ADSServico.FieldByName('AMBIENTE_SER').AsInteger of
    0: AACBrBoleto.Configuracoes.WebService.Ambiente := TTipoAmbienteWS.tawsProducao;
    1:
      begin
        AACBrBoleto.Configuracoes.WebService.Ambiente := TTipoAmbienteWS.tawsHomologacao;
        AACBrBoleto.Homologacao                       := True;
      end;
    2: AACBrBoleto.Configuracoes.WebService.Ambiente := TTipoAmbienteWS.tawsSandBox;
  end;

  AACBrBoleto.Configuracoes.WebService.Operacao := TOperacao.tpInclui;
  AACBrBoleto.Configuracoes.WebService.VersaoDF := ADSServico.FieldByName('API_VERSAO_DF_SER').AsString; // inter 1.2

  AACBrBoleto.Configuracoes.WebService.SSLCryptLib   := TSSLCryptLib(ADSServico.FieldByName('API_SSLCRYPTLIB_SER').AsInteger); // cryNone;
  AACBrBoleto.Configuracoes.WebService.SSLDgst       := TSSLDgst(ADSServico.FieldByName('API_SSLDGST_SER').AsInteger); // dgstSHA1;
  AACBrBoleto.Configuracoes.WebService.SSLType       := TSSLType(ADSServico.FieldByName('API_SSLTYPE_SER').AsInteger); // LT_TLSv1_2;
  AACBrBoleto.Configuracoes.WebService.SSLXmlSignLib := TSSLXmlSignLib(ADSServico.FieldByName('API_SSLXMLSIGNLIB_SER').AsInteger); // xsNone;

  // TSSLCryptLib = (cryNone, cryOpenSSL, cryCapicom, cryWinCrypt);

  AACBrBoleto.Configuracoes.WebService.SSLHttpLib         := TSSLHttpLib(ADSServico.FieldByName('API_SSLHTTPLIB_SER').AsInteger);
  AACBrBoleto.Configuracoes.WebService.UseCertificateHTTP := ADSServico.FieldByName('API_USAR_CERTIFICADO_HTTP_SER').AsString = 'S';

  AACBrBoleto.Configuracoes.WebService.TimeOut := ADSServico.FieldByName('WEBSERVICE_TIMEOUT_SER').AsInteger;
  if AACBrBoleto.Configuracoes.WebService.TimeOut <= 1000 then
     AACBrBoleto.Configuracoes.WebService.TimeOut := 10000;

  AACBrBoleto.Cedente.CedenteWS.IndicadorPix := ADSServico.FieldByName('BOLETO_ELETRONICO_SER').AsString = Eletronico_HibridoBol_Pix;
  AACBrBoleto.Cedente.CedenteWS.ClientID     := ADSServico.FieldByName('CLIENT_ID_SER').AsString;
  AACBrBoleto.Cedente.CedenteWS.ClientSecret := ADSServico.FieldByName('CLIENT_SECRET_SER').AsString;
  AACBrBoleto.Cedente.CedenteWS.KeyUser      := ADSServico.FieldByName('KEY_USER_SER').AsString;
  AACBrBoleto.Cedente.CedenteWS.Scope        := ADSServico.FieldByName('SCOPE_SER').AsString;
  // property IndicadorEmail: Boolean read FIndicadorEmail write FIndicadorEmail default False;
  // property IndicadorSMS: Boolean read FIndicadorSMS write FIndicadorSMS default False;

  case ADSServico.FieldByName('IDENTIFICACAO_SER').AsInteger of
    1: AACBrBoleto.Cedente.CodigoCedente :=
       ADSServico.FieldByName('AGENCIA_CCR').AsString +
       ADSServico.FieldByName('DV_AGENCIA_CCR').AsString;
    2: AACBrBoleto.Cedente.CodigoCedente := ADSServico.FieldByName('NUM_CONTRATO_SER').AsString +
       ADSServico.FieldByName('DV_CONTRATO_SER').AsString;
    3: AACBrBoleto.Cedente.CodigoCedente := ADSServico.FieldByName('CODIGO_CEDENTE_SER').AsString +
       ADSServico.FieldByName('DV_CEDENTE_SER').AsString;
  else
    raise Exception.Create('Tipo de cedente: ' +
       ADSServico.FieldByName('IDENTIFICACAO_SER').AsString + ' inválido no serviço bancário.' + #13 +
       'Deve ser alguma opção:'#13 +
       '1-Agência;' + #13 +
       '2-Contrato ou' + #13 +
       '3-Código do cedente');
  end;

  case ADSServico.FieldByName('TIPOEMISSAOBOLETO_SER').AsInteger of
    Resp_BancoEmite: AACBrBoleto.Cedente.ResponEmissao      := tbBancoEmite;
    Resp_ClienteEmite: AACBrBoleto.Cedente.ResponEmissao    := tbCliEmite;
    Resp_BancoReemite: AACBrBoleto.Cedente.ResponEmissao    := tbBancoReemite;
    Resp_BancoNaoReemite: AACBrBoleto.Cedente.ResponEmissao := tbBancoNaoReemite;
  else
    raise Exception.Create('Tipo da emissão do boleto inválido: ' +
       ADSServico.FieldByName('TIPOEMISSAOBOLETO_SER').AsString + #13 +
       'Favor verificar configuração do serviço bancário. (Valores validos: 1, 2 ,3 ou 4)');
  end;

  case ADSServico.FieldByName('TIPO_CARTEIRA_SER').AsInteger of
    1: AACBrBoleto.Cedente.TipoCarteira := tctSimples;
    2: AACBrBoleto.Cedente.TipoCarteira := tctRegistrada;
    3: AACBrBoleto.Cedente.TipoCarteira := tctEletronica;
  else
    AACBrBoleto.Cedente.TipoCarteira := tctSimples;
  end;

  if ADSServico.FieldByName('ESCRITURAL_TRADICIONAL_SER').AsString = 'E' then
     AACBrBoleto.Cedente.TipoDocumento := Escritural
  else
     AACBrBoleto.Cedente.TipoDocumento := Tradicional;

  if Length(ADSServico.FieldByName('CNPJ_CPF_CCR').AsString) > 11 then
     AACBrBoleto.Cedente.TipoInscricao := pJuridica // pFisica..pJuridica
  else
     AACBrBoleto.Cedente.TipoInscricao := pFisica;

  AACBrBoleto.Cedente.Nome       := ADSServico.FieldByName('CEDENTE_NOME_CCR').AsString;
  AACBrBoleto.Cedente.CNPJCPF    := ADSServico.FieldByName('CNPJ_CPF_CCR').AsString;
  AACBrBoleto.Cedente.Logradouro := ADSServico.FieldByName('CEDENTE_ENDERECO_CCR').AsString;
  AACBrBoleto.Cedente.NumeroRes  := Trim(ADSServico.FieldByName('CEDENTE_NUM_ENDERECO_CCR').AsString);
  AACBrBoleto.Cedente.Bairro     := Trim(ADSServico.FieldByName('CEDENTE_BAIRRO_CCR').AsString);
  AACBrBoleto.Cedente.CEP        := TFuncoesString.SoNumero(ADSServico.FieldByName('CEDENTE_CEP_CCR').AsString);
  AACBrBoleto.Cedente.Telefone   := Trim(ADSServico.FieldByName('CEDENTE_TELEFONE_CCR').AsString);
  if ADSServico.FieldByName('CEDENTE_CIDADE_CCR').AsInteger > 0 then
  begin
    AACBrBoleto.Cedente.Cidade := Trim(ADSServico.FieldByName('CEDENTE_NOMECIDADE').AsString);
    AACBrBoleto.Cedente.UF     := Trim(ADSServico.FieldByName('CEDENTE_UFCIDADE').AsString);
  end;

  AACBrBoleto.Cedente.Conta                         := ADSServico.FieldByName('CONTA_CCR').AsString;
  AACBrBoleto.Cedente.ContaDigito                   := ADSServico.FieldByName('DV_CONTA_CCR').AsString;
  AACBrBoleto.Cedente.Agencia                       := ADSServico.FieldByName('AGENCIA_CCR').AsString;
  AACBrBoleto.Cedente.AgenciaDigito                 := ADSServico.FieldByName('DV_AGENCIA_CCR').AsString;
  AACBrBoleto.Cedente.Modalidade                    := Trim(ADSServico.FieldByName('MODALIDADE_SER').AsString);
  AACBrBoleto.Cedente.DigitoVerificadorAgenciaConta := ADSServico.FieldByName('DV_AGENCIA_CONTA_CCR').AsString;

  if ADSServico.FieldByName('LEIAUTE_SER').AsInteger = 1 then
     AACBrBoleto.LayoutRemessa := c240
  else
     AACBrBoleto.LayoutRemessa := c400;

  AACBrBoleto.Cedente.CodigoCedente :=
   Trim(ADSServico.FieldByName('CODIGO_CEDENTE_SER').AsString) +
   Trim(ADSServico.FieldByName('DV_CEDENTE_SER').AsString);

  AACBrBoleto.Cedente.CodigoTransmissao := ADSServico.FieldByName('CODIGO_TRANSMISSAO_SER').AsString;

  AACBrBoleto.Cedente.Convenio := ADSServico.FieldByName('NUM_CONTRATO_SER').AsString;

  // tcSimples,tcVinculada,tcCaucionada,tcDescontada,tcVendor
  { 0-Simples,
    1-Vinculada,
    2-Caucionada,
    3-Descontada,
    4-Vendor }
  S := Trim(ADSServico.FieldByName('CARACTERISTICA_TITULO_SER').AsString) + '0';

  case S[1] of
    '0': AACBrBoleto.Cedente.CaracTitulo := tcSimples; // -Simples,
    '1': AACBrBoleto.Cedente.CaracTitulo := tcVinculada;
    '2': AACBrBoleto.Cedente.CaracTitulo := tcCaucionada;
    '3': AACBrBoleto.Cedente.CaracTitulo := tcDescontada;
    '4': AACBrBoleto.Cedente.CaracTitulo := tcVendor;
  end;
end;

 

class procedure TFuncBoleto.AtribuirDadosAoTitulo(var ATitulo: TACBrTitulo;
  AQryServico                    : TDataSet;
  ADataEmissaoTituloDataDocumento: TDate;
  ARem_Ocorrencia_Remban         : Integer;
  ADocumentoRec                  : string;
  ANumeroSlip                    : string;
  ADVSlip                        : string;
  AVencimento                    : TDate;
  ATotalParcelas                 : Integer;
  AParcela                       : Integer;
  AEmpresaRec                    : Integer;
  ATipoAgrupamento               : string;
  AAutoIncRec                    : Int64;
  AAutoIncAgrupamento            : Int64;
  AValor                         : Currency;
  AFisicaJuridica                : string;
  ACnpjCpf                       : string;
  ANome                          : string;
  AEndereco                      : string;
  ANumeroEndereco                : string;
  AComplementoEndereco           : string;
  ABairro                        : string;
  ACidade                        : string;
  AUF                            : string;
  ACEP                           : string;
  AEmail                         : string;
  ATelefone                      : string;
  AAvalista                      : string;
  ACnpjCpfAvalista               : string;
  ALogradouroAvalista            : string;
  ANumeroEnderecoAvalista        : string;
  AComplementoAvalista           : string;
  ABairroAvalista                : string;
  ACidadeAvalista                : string;
  AUFAvalista                    : string;
  ACepAvalista                   : string;
  AEmailAvalista                 : string;
  ATelefoneAvalista              : string;
  AInscricaoNrAvalista           : string;
  AObsTextoCedente               : string;
  AConceder_Desconto_ate_rec     : string;
  AVlr_Desconto_ate_rec          : Currency;
  APerc_Desconto_boleto_rec      : Currency;
  Aconsiderar_Desc_Ate_rec       : TDate;
  APerc_Multa_Boleto_rec         : Currency;
  AMulta_ValorFixo_rec           : Currency;
  AMulta_Calc_rec                : Currency;
  AJuro_Calc_rec                 : Currency;
  APerc_Juro_Boleto_rec          : Currency;
  ACodigoSolicitacao             : string);
var
  L: Integer;
begin
  case AQryServico.FieldByName('IND_VALOR_DIVERGENTE_SER').AsInteger of
    0: ATitulo.TipoPagamento := tpAceita_Qualquer_Valor;
    1: ATitulo.TipoPagamento := tpAceita_Valores_entre_Minimo_Maximo;
    2: ATitulo.TipoPagamento := tpNao_Aceita_Valor_Divergente;
    3: ATitulo.TipoPagamento := tpSomente_Valor_Minimo;
  else
    raise Exception.Create('Indicativo de valor divergente na conta inválido ou não parametrizado');
  end;

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

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

  if AQryServico.FieldByName('RESPONSABILIDADE_ENVIO_SER').AsInteger = 1 then
     ATitulo.CarteiraEnvio := tceBanco
  else // 0 zero
     ATitulo.CarteiraEnvio := tceCedente;

  ATitulo.LocalPagamento       := AQryServico.FieldByName('LOCAL_PAGAMENTO_SER').AsString.Trim;
  ATitulo.EspecieDoc           := AQryServico.FieldByName('ESPECIE_DOCUMENTO_SER').AsString.Trim;
  ATitulo.UsoBanco             := AQryServico.FieldByName('USO_BANCO_SER').AsString; // banco inter 77
  ATitulo.EspecieMod           := AQryServico.FieldByName('MOEDA_SER').AsString;
  ATitulo.Carteira             := AQryServico.FieldByName('CARTEIRA_SER').AsString;
  ATitulo.TotalParcelas        := ATotalParcelas;
  ATitulo.Parcela              := AParcela;
  ATitulo.DataAbatimento       := 0;
  ATitulo.DataBaixa            := 0;
  ATitulo.DataCredito          := 0;
  ATitulo.DataDesconto         := 0;
  ATitulo.DataMoraJuros        := 0;
  ATitulo.DataOcorrencia       := 0;
  ATitulo.DataProtesto         := 0;
  ATitulo.PercentualMulta      := 0;
  ATitulo.ValorAbatimento      := 0;
  ATitulo.ValorDesconto        := 0;
  ATitulo.ValorDespesaCobranca := 0;
  ATitulo.ValorIOF             := 0;
  ATitulo.ValorMoraJuros       := 0;
  ATitulo.ValorOutrasDespesas  := 0;
  ATitulo.ValorOutrosCreditos  := 0;
  ATitulo.MultaValorFixo       := (AQryServico.FieldByName('REM_MULTA_VP_SER').AsString = 'F');
  ATitulo.DataDocumento        := ADataEmissaoTituloDataDocumento;
  ATitulo.DataProcessamento    := Now;
  ATitulo.NossoNumero          := ANumeroSlip; // Não pode somar o DV aqui
  ATitulo.NumeroDocumento      := ADocumentoRec;
  ATitulo.Vencimento           := AVencimento;
  ATitulo.ValorDocumento       := AValor;

  ATitulo.DescricaoMotivoRejeicaoComando.Clear;
  ATitulo.MotivoRejeicaoComando.Clear;

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

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

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

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

  // ****** numero que o acbr usa
  ATitulo.NossoNumeroCorrespondente := ACodigoSolicitacao;
  ATitulo.SeuNumero                 := TFuncBoleto.GerarSeuNumeroAML(
    AQryServico.FieldByName('BOLETO_ELETRONICO_SER').AsString,
    AEmpresaRec,
    AAutoIncRec,
    AAutoIncAgrupamento);
  // C6
  // if ATitulo.NossoNumeroCorrespondente = '' then
  // ATitulo.NossoNumeroCorrespondente := ATitulo.SeuNumero;

  (*
    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 ARem_Ocorrencia_Remban of
    0: ATitulo.OcorrenciaOriginal.Tipo := toRemessaRegistrar;
    1: ATitulo.OcorrenciaOriginal.Tipo := toRemessaBaixar;
    2: ATitulo.OcorrenciaOriginal.Tipo := toRemessaConcederAbatimento;
    3: ATitulo.OcorrenciaOriginal.Tipo := toRemessaCancelarAbatimento;
    4: ATitulo.OcorrenciaOriginal.Tipo := toRemessaAlterarVencimento;
    5: ATitulo.OcorrenciaOriginal.Tipo := toRemessaAlterarNumeroControle;
    6: ATitulo.OcorrenciaOriginal.Tipo := toRemessaProtestar;
    7: ATitulo.OcorrenciaOriginal.Tipo := toRemessaCancelarInstrucaoProtestoBaixa;
    8: ATitulo.OcorrenciaOriginal.Tipo := toRemessaCancelarInstrucaoProtesto;
    9: ATitulo.OcorrenciaOriginal.Tipo := toRemessaOutrasAlteracoes;
  else
    Raise Exception.Create('Código de ocorrência: ' + ARem_Ocorrencia_Remban.ToString + ' inválida.');
  end;

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

  ACnpjCpf := TFuncoesString.SoNumero(ACnpjCpf);

  ATitulo.Sacado.CNPJCPF     := ACnpjCpf;
  ATitulo.Sacado.NomeSacado  := ANome;
  ATitulo.Sacado.Logradouro  := AEndereco;
  ATitulo.Sacado.Complemento := AComplementoEndereco;
  ATitulo.Sacado.Numero      := ANumeroEndereco.Trim;
  ATitulo.Sacado.Bairro      := ABairro;
  ATitulo.Sacado.CEP         := ACEP;
  ATitulo.Sacado.Cidade      := ACidade;
  ATitulo.Sacado.UF          := AUF;
  ATitulo.Sacado.Email       := AEmail;
  ATelefone                  := TFuncoesString.SoNumero(ATelefone);
  // banco inter, telefone precisa ser menor ou igual a 9 - acbr nao tem o ddd
  if (ATitulo.ACBrBoleto.Banco.Numero = 77) and (ATelefone.Length > 9) then
     ATelefone        := Copy(ATelefone, ATelefone.Length - 9, 9);
  ATitulo.Sacado.Fone := ATelefone;

  if ((AQryServico.FieldByName('BOLETO_ELETRONICO_SER').AsString = Eletronico_BoletoApenas) or
     (AQryServico.FieldByName('BOLETO_ELETRONICO_SER').AsString = Eletronico_HibridoBol_Pix)) then
  begin
    // banco C6
    if (ATitulo.ACBrBoleto.Banco.Numero = 336) then
    begin
      ATitulo.Sacado.NomeSacado  := Copy(ATitulo.Sacado.NomeSacado, 1, 40);
      ATitulo.Sacado.Logradouro  := Copy(ATitulo.Sacado.Logradouro, 1, 33 - ATitulo.Sacado.Numero.Length);
      ATitulo.Sacado.Complemento := Copy(ATitulo.Sacado.Complemento, 1, 24);
      ATitulo.Sacado.Bairro      := Copy(ATitulo.Sacado.Bairro, 1, 24);
      ATitulo.Sacado.Cidade      := Copy(ATitulo.Sacado.Cidade, 1, 40);
      ATitulo.Sacado.Email       := Copy(ATitulo.Sacado.Email, 1, 200);
    end;
  end;

  // Avalista
  ACnpjCpfAvalista := TFuncoesString.SoNumero(ACnpjCpfAvalista);

  L := ACnpjCpfAvalista.Length;

  if (L > 0) and (L <= 11) then
     ATitulo.Sacado.SacadoAvalista.Pessoa := pFisica
  else if L > 11 then
     ATitulo.Sacado.SacadoAvalista.Pessoa := pJuridica
  else
     ATitulo.Sacado.SacadoAvalista.Pessoa := pNenhum; // santanter, deu erro na cl 242

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

  // banco c6- na api, precisa ser 80 digitos em cadas linha
  if ((AQryServico.FieldByName('BOLETO_ELETRONICO_SER').AsString = Eletronico_BoletoApenas) or
     (AQryServico.FieldByName('BOLETO_ELETRONICO_SER').AsString = Eletronico_HibridoBol_Pix)) then
  begin
    AObsTextoCedente := TFuncoesString.RemoverEspacoDuplo(AObsTextoCedente);
    AObsTextoCedente := TFuncoesString.RemoverQuebra(AObsTextoCedente);
  end;

  ATitulo.Mensagem.Text    := AObsTextoCedente;
  ATitulo.Informativo.Text := '';

  if (ATitulo.OcorrenciaOriginal.Tipo = toRemessaRegistrar) and
   (ATitulo.ACBrBoleto.Banco.Numero = 336) then // 28/02/2024 -  banco C6 , estava indo 00 90 - cliente 260
  begin
    ATitulo.Instrucao1 := '00';
    ATitulo.Instrucao2 := '00';
    ATitulo.Instrucao3 := '';
  end
  else
  begin
    // Não pode passar, senao vai como valor para remessa, posicao 157 a 158 no cnab400 sicoob
    ATitulo.Instrucao1 := AQryServico.FieldByName('INSTRUCAO1_SER').AsString;
    ATitulo.Instrucao2 := AQryServico.FieldByName('INSTRUCAO2_SER').AsString;
    ATitulo.Instrucao3 := AQryServico.FieldByName('INSTRUCAO3_SER').AsString;
  end;
  // descontos

  ATitulo.ValorDesconto  := 0;
  ATitulo.CodigoDesconto := TACBrCodigoDesconto.cdSemDesconto;
  ATitulo.TipoDesconto   := TACBrTipoDesconto.tdNaoConcederDesconto;
  ATitulo.TipoDesconto2  := TACBrTipoDesconto.tdNaoConcederDesconto;
  ATitulo.TipoDesconto3  := TACBrTipoDesconto.tdNaoConcederDesconto;

  if (AConceder_Desconto_ate_rec = 'S') and
   ((AVlr_Desconto_ate_rec > 0) or (APerc_Desconto_boleto_rec > 0)) then
  begin
    { tdNaoConcederDesconto,
      tdValorFixoAteDataInformada,
      tdPercentualAteDataInformada,
      tdValorAntecipacaoDiaCorrido,
      tdValorAntecipacaoDiaUtil,
      tdPercentualSobreValorNominalDiaCorrido,
      tdPercentualSobreValorNominalDiaUtil,
      tdCancelamentoDesconto); }

    if AQryServico.FieldByName('REM_DESCONTO_VP_SER').AsString = 'P' then
    begin
      ATitulo.ValorDesconto  := APerc_Desconto_boleto_rec;
      ATitulo.TipoDesconto   := TACBrTipoDesconto.tdPercentualAteDataInformada;
      ATitulo.CodigoDesconto := TACBrCodigoDesconto.cdPercentual;
    end
    else if AQryServico.FieldByName('REM_DESCONTO_VP_SER').AsString = 'V' then
    begin
      ATitulo.ValorDesconto  := AVlr_Desconto_ate_rec;
      ATitulo.TipoDesconto   := TACBrTipoDesconto.tdValorFixoAteDataInformada;
      ATitulo.CodigoDesconto := TACBrCodigoDesconto.cdValorFixo;
    end;

    if ATitulo.ValorDesconto > 0 then
    begin
      ATitulo.DataDesconto := Aconsiderar_Desc_Ate_rec;
    end;
  end;

  { tratamento de juros/multa }

  // era 1 fixo os dias, ate 04/05/2025, foi mudado por causa do c6, so ele é zero, quando é api
  ATitulo.DataMoraJuros   := ATitulo.Vencimento + AQryServico.FieldByName('REM_DIAS_JUROS_SER').AsInteger;
  ATitulo.DataMulta       := ATitulo.Vencimento + AQryServico.FieldByName('REM_DIAS_MULTA_SER').AsInteger;
  ATitulo.CodigoMoraJuros := cjIsento; // cjValorDia, cjTaxaMensal,

  // indicação de multa, valor fixo só se for por valor
  ATitulo.MultaValorFixo := (AQryServico.FieldByName('REM_MULTA_VP_SER').AsString = 'F');
  if AQryServico.FieldByName('REM_MULTA_VP_SER').AsString = 'P' then
  begin
    ATitulo.PercentualMulta := APerc_Multa_Boleto_rec;
    ATitulo.CodigoMulta     := cmPercentual;
  end
  else if AQryServico.FieldByName('REM_MULTA_VP_SER').AsString = 'F' then
  begin
    if AMulta_ValorFixo_rec > 0 then
       ATitulo.PercentualMulta := AMulta_ValorFixo_rec
    else
       ATitulo.PercentualMulta := AMulta_Calc_rec;
    ATitulo.CodigoMulta        := cmValorFixo;
  end;

  { Santander
    1 = Valor por dia - Informar no campo o valor/dia a mora a ser cobrada.
    2 = Taxa Mensal - Informar no campo taxa mensal o percentual a ser aplicado sobre valor do ATitulo que será calculado por dia de atraso. Tem 5 decimais
    3 = Isento
    4 = Utilizar comissão permanência do Banco por dia de atraso
    5 = Tolerância valor por dia (cobrar juros a partir de)
    6 = Tolerância taxa mensal (cobrar juros a partir de) * Para o código igual 4, o campo “taxa mensal” não deverá conter informação.
  }

  { Juro:

    0-Isento (Usado p/Banco)
    1-Valor por Dia (Usado p/Banco)
    2-Taxa Mensal (Usado p/Banco)
    3-Valor Mensal (Usado p/Banco)
    4-Taxa Diaria
    V-Valor (Usado p/Pag Fácil)
    P-Percentual (Usado p/Pag Fácil)
  }

  if AQryServico.FieldByName('COD_MORAJUROS_REMESSA_SER').AsString <> '' then
     ATitulo.CodigoMora := AQryServico.FieldByName('COD_MORAJUROS_REMESSA_SER').AsString;

  // Indicacao de mora de juros      cjValorDia, cjTaxaMensal, cjIsento, cjValorMensal, cjTaxaDiaria
  if AQryServico.FieldByName('REM_JURO_VP_SER').AsString = '1' then
  begin
    ATitulo.ValorMoraJuros  := AJuro_Calc_rec;
    ATitulo.CodigoMoraJuros := cjValorDia;
  end
  else if AQryServico.FieldByName('REM_JURO_VP_SER').AsString = '2' then // taxa mensal
  begin
    // santander 33
    ATitulo.ValorMoraJuros  := APerc_Juro_Boleto_rec;
    ATitulo.CodigoMoraJuros := cjTaxaMensal;
  end
  else if AQryServico.FieldByName('REM_JURO_VP_SER').AsString = '3' then // Valor Mensal
  begin
    ATitulo.ValorMoraJuros  := AJuro_Calc_rec;
    ATitulo.CodigoMoraJuros := cjValorMensal;
  end
  else if AQryServico.FieldByName('REM_JURO_VP_SER').AsString = '4' then // taxa diaria
  begin
    ATitulo.ValorMoraJuros  := APerc_Juro_Boleto_rec / 30;
    ATitulo.ValorMoraJuros  := TFuncoesNumero.RoundDCurrency(ATitulo.ValorMoraJuros, 2);
    ATitulo.CodigoMoraJuros := cjTaxaDiaria;
  end;

  // ATitulo.DataLimitePagto :=  FDSServBanc.FieldByName('REM_DIAS_BAIXAR_SER').AsString;
end;
 

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