Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

Postado

Minha aplicação desktop envia para um servidor de aplicação datasnap os dados para emissão de boletos, se eu mandar sucessivos boleto em um determinado momento ocorre um erro, mesmo que eu mande apenas um boleto repetidamente, sempre o mesmo, em um determinado momento o mesmo erro ocorre. 

       try
         GerarPDF;

          frmPrincipal.RichEdit1.Lines.Add(bancoLocalBoleto +
                                           StrZero(DmMem.memBoletoSerie.AsInteger,3) +
                                           StrZero(StrToint(DmMem.memBoletoNumeroDocumento.AsString),6) +
                                           '-' +
                                           strZero(DmMem.memBoletoParcela.AsInteger,3) +
                                           '.PDF');
        except on E:Exception do
          begin
            frmPrincipal.RichEdit1.Lines.Add('**** ERRO GERAR PDF ****');
            frmPrincipal.RichEdit1.Lines.Add(e.Message);
            //DmMem.memBoleto.Close;
            //DmMem.memBoleto.active := false;
            abort;
          end;
        end;

**** ERRO GERAR PDF ****   (Meu tratamento exception)
Invalid font for GetOutlineTextMetrics (mensagem do e.mesage)

Atualizei vis SVN e reinstalei hoje, antes o erro já ocorria.

Depurando cheguei a esse ponto, o estranho é que funciona durante 

image.png.c6f3a24b6234519fdadeba634a611d37.png

Postado

Esse é o terceiro código, tô quase louco, o cliente está louco.

function TSmGerais.Boletos2(aRegistro: TJsonObject): string;
var
  lResultado     : TJSONObject;

  Titulo         : TACBrTitulo;
  LinhaDigitavel : string;
  codigoBarras   : string;
  qtBoletos      : integer;

  sCODIGOEMPRESA : string;
  sCODIGOBANCO   : string;
  sGERARPDF      : string;
  sIMPRIMIR      : string;
  sNUMEROREMESSA : string;
  sFAZERREMESSA  : string;
begin
  result := EmptyStr;

  sCODIGOEMPRESA := (aRegistro as TJSONObject).Values['CODIGOEMPRESA'].Value;
  sCODIGOBANCO   := (aRegistro as TJSONObject).Values['CODIGOBANCO'].Value;
  sGERARPDF      := (aRegistro as TJSONObject).Values['GERARPDF'].Value;
  sIMPRIMIR      := (aRegistro as TJSONObject).Values['IMPRIMIR'].Value;
  sNUMEROREMESSA := (aRegistro as TJSONObject).Values['NUMEROREMESSA'].Value;
  sFAZERREMESSA  := (aRegistro as TJSONObject).Values['FAZERREMESSA'].Value;

  //Dados Banco
  try
    dadosBanco(StrToInt(sCODIGOBANCO));
  Except ON E:exception do
    begin
      frmPrincipal.RichEdit1.Lines.Add('=============================');
      frmPrincipal.RichEdit1.SelAttributes.Color := frmPrincipal.vermelho;
      frmPrincipal.RichEdit1.Lines.Add('Emissão boleto');
      frmPrincipal.RichEdit1.Lines.Add('Erro procedure dadosBanco');
      frmPrincipal.RichEdit1.SelAttributes.Color := frmPrincipal.vermelho;
      frmPrincipal.RichEdit1.Lines.Add(E.Message);
      abort;
    end;
  end;

  //Dados Emitente
  try
    dadosEmitente(sCODIGOEMPRESA);
  Except ON E:exception do
    begin
      frmPrincipal.RichEdit1.Lines.Add('=============================');
      frmPrincipal.RichEdit1.SelAttributes.Color := frmPrincipal.vermelho;
      frmPrincipal.RichEdit1.Lines.Add('Emissão boleto');
      frmPrincipal.RichEdit1.Lines.Add('Erro procedure dadosEmitente');
      frmPrincipal.RichEdit1.SelAttributes.Color := frmPrincipal.vermelho;
      frmPrincipal.RichEdit1.Lines.Add(E.Message);
      abort;
    end;
  end;

  with ACBrBoleto do
  begin
    ListadeBoletos.Clear;

    ACBrBoletoFC.LayOut := lPadraoEntrega;

    ACBrBoletoFC.Filtro := fiNenhum;
    DirArqRemessa       := bancoLocalRemessaBanco;
    DirArqRetorno       := bancoLocalRetornoBanco;

    //Define o que for específico de cada banco
    if bancoNumeroBanco = 1 then
    begin
      Banco.TipoCobranca := cobBancoDoBrasil;
      Cedente.Convenio   := bancoCedenteConvenio;
      Cedente.Modalidade := bancoCedenteVariacao;
      LayoutRemessa      := c240;
    end
    else if bancoNumeroBanco = 85 then
    begin
      Banco.TipoCobranca := cobBancoCECRED;
      Cedente.Convenio   := bancoCedenteConvenio;
      LayoutRemessa      := c240;
    end
    else if bancoNumeroBanco = 748 then
    begin
      Banco.TipoCobranca := cobSicred;
      //Banco.TipoCobranca := cobBancoDoBrasil;
      //Cedente.Convenio   := bancoCedenteConvenio;
      Cedente.Modalidade := bancoModalidade;
      LayoutRemessa      := c240;
    end;

    with banco do
    begin
      Numero         := bancoNumeroBanco;
      Nome           := BancoNome;
      LocalPagamento := bancoLocalPagamento;
    end;

    with Cedente do
    begin
      FantasiaCedente := RemoveAcentos(emitenteFantasia);
      Nome            := RemoveAcentos(emitenteRazaoSocial);
      Logradouro      := emitenteEndereco;
      NumeroRes       := emitenteNumero;
      Bairro          := emitenteBairro;
      Cidade          := emitenteCidade;
      Uf              := emitenteUf;
      CEP             := SONUMEROS(emitenteCep);
      Telefone        := emitenteFone;
      Nome            := emitenteRazaoSocial;
      CNPJCPF         := SoNumeros(emitenteCNPJ);
      CodigoCedente   := IntToStr(bancoCodigoCedente);
      Agencia         := bancoAgencia;
      AgenciaDigito   := bancoAgenciaDigito;
      Conta           := bancoConta;
      ContaDigito     := bancoContaDigito;
      Modalidade      := bancoModalidade;
    end;

    //Buscando boletos
    fdqBoletoDados.Active := True;
    fdqBoletoDados.Close;
    fdqBoletoDados.SQL.Clear;
    fdqBoletoDados.SQL.Add('SELECT * FROM TB_BoletoDados          ');
    fdqBoletoDados.SQL.Add('WHERE (NUMEROREMESSA = :NUMEROREMESSA)');
    fdqBoletoDados.SQL.Add('  AND (EMITIDO = :EMITIDO)            ');
    fdqBoletoDados.SQL.Add('ORDER BY SEQUENCIA                    ');
    fdqBoletoDados.ParamByName('NumeroRemessa').AsInteger := StrToInt(sNUMEROREMESSA);
    fdqBoletoDados.ParamByName('Emitido').AsString        := 'NÃO';
    fdqBoletoDados.Open;
    fdqBoletoDados.First;

    if sFAZERREMESSA = 'NÃO' then
    begin
      Titulo := ACBrBoleto.CriarTituloNaLista;
    end;


    while Not fdqBoletoDados.Eof do
    begin
      if fdqBoletoDadosCodigoCliente.AsInteger > 0 then
      begin
        if sFAZERREMESSA = 'SIM' then
        begin
          Titulo := ACBrBoleto.CriarTituloNaLista;
        end;

        //Destinatário
        fdqCliente.Active := True;
        fdqCliente.Close;
        fdqCliente.SQL.Clear;
        fdqCliente.SQL.Add('SELECT * FROM TB_CLIENTE');
        fdqCliente.SQL.Add('WHERE CODIGO = :CODIGO');
        fdqCliente.ParamByName('CODIGO').AsInteger := fdqBoletoDadosCODIGOCLIENTE.AsInteger;
        fdqCliente.Open;

        destinatarioNome     := RemoveAcentos(fdqClienteNOME.AsString);
        destinatarioEndereco := RemoveAcentos(fdqClienteEndereco.AsString);
        destinatarioNumero   := fdqClienteNumero.AsString;
        destinatarioBairro   := fdqClienteBairro.AsString;
        destinatarioCidade   := fdqClienteCidade.AsString;
        destinatarioUf       := fdqClienteUF.AsString;
        destinatarioCep      := fdqClienteCep.AsString;
        destinatarioCNPJ     := fdqClienteCNPJ.AsString;
        destinatarioTipo     := fdqClienteTIPO.AsString;

        fdqCliente.Close;
        fdqCliente.Active := false;

        with Titulo do
        begin
          if bancoProtestar = 'CORRIDOS' then
          begin
            TipoDiasProtesto      := diCorridos;
            CodigoNegativacao     := cnProtestarCorrido;
          end
          else if bancoProtestar = 'ÚTEIS' then
          begin
            TipoDiasProtesto      := diUteis;
            CodigoNegativacao     := cnProtestarUteis;
          end;
          Vencimento              := fdqBoletoDadosVencimento.AsDateTime;
          DataDocumento           := fdqBoletoDadosDataDocumento.AsDateTime;
          NumeroDocumento         := fdqBoletoDadosNumeroDocumento.AsString;
          EspecieDoc              := 'DM';
          DataProcessamento       := Now;
          Carteira                := bancoCarteira;
          ValorDocumento          := fdqBoletoDadosValor.AsFloat;
          Sacado.NomeSacado       := destinatarioNome;
          if destinatarioTipo = 'JURÍDICA' then
            Sacado.Pessoa := pJuridica
          else
            Sacado.Pessoa := pFisica;
          Sacado.CNPJCPF          := SoNumeros(destinatarioCNPJ);
          Sacado.Logradouro       := destinatarioEndereco;
          Sacado.Numero           := destinatarioNumero;
          Sacado.Bairro           := destinatarioBairro;
          Sacado.Cidade           := destinatarioCidade;
          Sacado.UF               := destinatarioUf;
          Sacado.CEP              := SoNumeros(destinatarioCEP);
          ValorAbatimento         := fdqBoletoDadosValorAbatimento.AsFloat;
          LocalPagamento          := bancoLocalPagamento;
          ValorMoraJuros          := bancoJurosmes;
          ValorDesconto           := fdqBoletoDadosValorDesconto.AsFloat;
          ValorOutrasDespesas     := fdqBoletoDadosValorOutrasDespesas.AsFloat;
          DataMoraJuros           := fdqBoletoDadosVencimento.AsDateTime + bancoNumDiasJuros;
          DataDesconto            := fdqBoletoDadosVencimento.AsDateTime;
          DataAbatimento          := fdqBoletoDadosVencimento.AsDateTime;
          DataMulta               := fdqBoletoDadosVencimento.AsDateTime + bancoNumDiasJuros;
          PercentualMulta         := bancoMultaAtraso;
          OcorrenciaOriginal.Tipo := toRemessaRegistrar;
          NossoNumero             := IntToStr(fdqBoletoDadosNossoNumero.AsInteger);
          Instrucao1              := PadRight(trim(boletoInstrucao1),2,'0');
          Instrucao2              := PadRight(trim(boletoInstrucao2),2,'0');
          Mensagem.Text           := bancoObservacao;
        end;

        //try
        //  ACBrBoletoFC.NomeArquivo := bancoLocalBoleto +
        //                              StrZero(DmMem.memBoletoSerie.AsInteger,3) +
        //                              StrZero(StrToint(DmMem.memBoletoNumeroDocumento.AsString),6) +
        //                              '-' +
        //                              strZero(DmMem.memBoletoParcela.AsInteger,3) +
        //                              '.PDF';
        //finally
        //  frmPrincipal.RichEdit1.Lines.Add(bancoLocalBoleto +
        //                                     StrZero(DmMem.memBoletoSerie.AsInteger,3) +
        //                                     StrZero(StrToint(DmMem.memBoletoNumeroDocumento.AsString),6) +
        //                                     '-' +
        //                                     strZero(DmMem.memBoletoParcela.AsInteger,3) +
        //                                     '.PDF');
        //end;

        //sleep(3000);

        if sGERARPDF = 'SIM' then
        begin
          //frmPrincipal.RichEdit1.Lines.Add(
          try
            ACBrBoletoFC.NomeArquivo := bancoLocalBoleto +
                                      StrZero(fdqBoletoDadosSerie.AsInteger,3) +
                                      StrZero(StrToint(fdqBoletoDadosNumeroDocumento.AsString),6) +
                                      '-' +
                                      strZero(fdqBoletoDadosParcela.AsInteger,3) +
                                      '.PDF';
          except on E:Exception do
            begin
              frmPrincipal.RichEdit1.Lines.Add('**** ERRO COLOCAR NOME ****');
              frmPrincipal.RichEdit1.Lines.Add(e.Message);
              abort;
            end;
          end;

          try
            GerarPDF;

            frmPrincipal.RichEdit1.Lines.Add(bancoLocalBoleto +
                                             StrZero(fdqBoletoDadosSerie.AsInteger,3) +
                                             StrZero(StrToint(fdqBoletoDadosNumeroDocumento.AsString),6) +
                                             '-' +
                                             strZero(fdqBoletoDadosParcela.AsInteger,3) +
                                             '.PDF');
          except on E:Exception do
            begin
              frmPrincipal.RichEdit1.Lines.Add('**** ERRO GERAR PDF ****');
              frmPrincipal.RichEdit1.Lines.Add(e.Message);
              abort;
            end;
          end;

        end;

        if sIMPRIMIR = 'SIM' then
          ACBrBoletoFCFortes1.Imprimir;

        LinhaDigitavel := ACBrBoleto.Banco.MontarLinhaDigitavel(AcBRBoleto.Banco.MontarCodigoBarras(AcBRBoleto.ListadeBoletos.Objects[0]), AcBRBoleto.ListadeBoletos.Objects[0]);
        codigoBarras   := ACBrBoleto.Banco.MontarCodigoBarras(Titulo);

        //sleep(3000);

        Result := LinhaDigitavel;

        //Grava linha digitável no a receber
        try
          lJson := TJsonObject.Create;
          lJson.AddPair('SEQUENCIA',IntToStr(fdqBoletoDadosSequencia.AsInteger));
          lJson.AddPair('CODIGOBARRABOLETO',codigoBarras);
          lJson.AddPair('LINHADIGITAVELBOLETO',LinhaDigitavel);
          lJson.AddPair('NOSSONUMERO',IntToStr(fdqBoletoDadosNossoNumero.AsInteger));

          sMensagem := RECEBER(lJson,'L');
        finally

        end;
      end;
      fdqBoletoDados.Next;
    end;

    qtBoletos := ListadeBoletos.Count;

    result := 'OK';

    //if StrToInt(sNUMEROREMESSA) > 0 then
    if sFAZERREMESSA = 'SIM' then
    begin
      try
        ACBrBoleto.GerarRemessa(StrToInt(sNUMEROREMESSA));
        result := 'OK';
      except on E:Exception do
        begin
          result := 'ERRO';
        end;
      end;
    end;

  end;

  fdqBoletoDados.Close;
  fdqBoletoDados.active := false;

end;

Postado

Tentei de tudo e não consegui resolver.

Copiei a mesma função é coloquei na aplicativo desktop e funciona normalmente. 

Noutra hora vou tentar descobrir o que estou fazendo de errado para não funcionar no servidor.

 

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