Ir para conteúdo
  • Cadastre-se

Controla

Membros
  • Total de ítens

    23
  • Registro em

  • Última visita

Posts postados por Controla

  1. Boa tarde a todos

    Estou com um projeto que tem que gerar os PDFs de forma automática sem intervenção do usuário, mas quando o sistema vai rodar ele fica mostrando o progresso da geração do PDF mesmo a propriedade MostrarStatus estando setada para False.

    No componente TACBrMDFeDAMDFeRL a propriedade MostrarStatus não está tendo efeito nenhum, dei uma olhada nos fontes e percebi que a mesma nem é repassada nem ao componente RLReport e nem ao RLFilter, isso tanto na impressão do MDF-e quanto na impressão dos eventos.

    Fiz uma "pog" aqui pra resolver temporariamente, mas fica a dica pra quem tem mais conhecimento de onde mexer nos fontes para ficar uma alteração consistente.

    Modifiquei os seguintes arquivos

    ACBrMDFeDAMDFeRL.pas
          TfrlDAMDFeRL.Imprimir
          TfrlDAMDFeRL.SavePDF

    ACBrMDFeDAEventoRL.pas
          TfrmMDFeDAEventorl.Imprimir
          TfrmMDFeDAEventorl.SavePDF

  2. Boa tarde pessoal

    Nos testes que fiz em ambiente de homologação foi tudo OK.

    Em produção só tinha conseguido fazer teste de verificação do status do serviço, e depois que foi corrigidos os endereços dos webservices ficou ok.

    No entanto hoje quando fui fazer um teste de emissão em produção recebi a rejeição

    "Endereco do site da UF da consulta via QR-Code diverge do previsto"

    Dei uma olhada no ACBrNFeSevicos.ini  e parece que está ok. Alguém mais passando por isso?

    Ambiente de Produção - SP

  3. Olá Van, se o seu caso for igual ao meu, NFC-e em produção em SP

    O problema é que no ACBrNFeServicos.ini  da pasta ...\Fontes\ACBrDFe\ACBrNFe não contém os endereços dos webservices de produção para a NFC-e de SP, de outros estados não sei te dizer porque não conferi, mas até pode ser o caso.

    Esses endereços eu peguei no site da Sefaz de SP

    no meu caso eu adicionei as linhas

    NfeAutorizacao_4.00=https://nfce.fazenda.sp.gov.br/ws/NFeAutorizacao4.asmx
    NfeRetAutorizacao_4.00=https://nfce.fazenda.sp.gov.br/ws/NFeRetAutorizacao4.asmx
    NfeInutilizacao_4.00=https://nfce.fazenda.sp.gov.br/ws/NFeInutilizacao4.asmx
    NfeConsultaProtocolo_4.00=https://nfce.fazenda.sp.gov.br/ws/NFeConsultaProtocolo4.asmx
    NfeRecepcaoEvento_4.00=https://nfce.fazenda.sp.gov.br/ws/NFeRecepcaoEvento4.asmx
    NfeStatusServico_4.00=https://nfce.fazenda.sp.gov.br/ws/NFeStatusServico4.asmx

    Na chave [NFCe_SP_P] e no teste de verificação de serviço parou o problema, não fiz ainda emissão em produção pois meus clientes que usam ainda não consegui testar neles por causa do movimento, mas acredito que vai dar certo.

    Não posso afirmar que essa é a solução mais correta pois não sou especialista em ACBr mas "fuçando" aqui acho que o caminho é por ai.

  4. bom dia Felipe, obrigado por responder

    Aqui nos testes eu coloquei os endereços e funcionou, minha dúvida é : porque não foram inseridos no repositório oficial, tem algum motivo específico?

    Até porque vi várias pessoas com o problema do erro HTTP 500 que é resolvido se os endereços estiverem informados.

    E quando baixamos  e atualizamos o componente está vindo sem os endereços.

    Será que isso não deveria estar no repositório oficial ?

    • Curtir 1
  5. Bom dia Daniel, sim eu uso o extrato SAT do ACBr com o Fortes, mas como eu percebi que o problema não é do ACBr e sim do Fortes, decidi que é melhor atacar o problema na raiz.

    E posso te afirmar com quase certeza que o o problema não é na borda, mas sim o texto que extrapola o limite que deveria obedecer.

    No mini projeto para demonstrar o problema eu adicionei um RLDraw1 com a mesma largura do RLMemo e como você poderá observar a borda do RLMemo obedece exatamente o mesmo tamanho do RLDraw, ou seja, a largura do RLMemo está correta.

    Segue a imagem do projeto na IDE e o resultado da impressão.

    O problema é relacionado ao código que calcula que o texto deve continuar na linha de baixo já que não irá "caber" dentro da área do componente.

    erro_report.zip

    na_ide.jpg

    na_impressora.jpg

  6. Boa tarde amigos, venho expor um problema que tem afetado a impressão do extrato SAT no fortes.

    Já vi algumas reclamações no fórum, mas nada que tenha uma solução definitiva.

    Para simular o problema é só colocar um RLReport em um form e depois colocar um RLMemo vou colocar aqui o código do form exemplo, basta copiar e colar em um form

    object RLReport1: TRLReport
      Left = 767
      Top = 175
      Width = 280
      Height = 378
      Margins.LeftMargin = 2.000000000000000000
      Margins.TopMargin = 2.000000000000000000
      Margins.RightMargin = 2.000000000000000000
      Margins.BottomMargin = 9.000000000000000000
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clBlack
      Font.Height = -13
      Font.Name = 'Arial'
      Font.Style = []
      PageSetup.PaperSize = fpCustom
      PageSetup.PaperWidth = 74.000000000000000000
      PageSetup.PaperHeight = 100.000000000000000000
      PrintDialog = False
      ShowProgress = False
      object RLMemo1: TRLMemo
        Left = 26
        Top = 51
        Width = 227
        Height = 34
        Behavior = [beSiteExpander]
        Borders.Sides = sdCustom
        Borders.DrawLeft = True
        Borders.DrawTop = True
        Borders.DrawRight = True
        Borders.DrawBottom = True
        Font.Charset = ANSI_CHARSET
        Font.Color = clBlack
        Font.Height = -12
        Font.Name = 'Arial'
        Font.Style = [fsBold]
        Lines.Strings = (      
            'R DOUTOR JOSE NEUBERT DE OLIVEIRA 9999 - B RECREIO SAO JUDAS TAD' +
            'EU')
        ParentFont = False
      end
    end

    Nas imagens vocês podem ver o problema da impressão, já tentei achar uma solução olhando os fontes do fortes, mas o máximo que consegui foi chegar na conclusão que o problema está na hora de fazer o cálculo de limite disponível para a linha para fazer o wordwrap, eu acho que esta relacionado com a função CanvasTextWidth do arquivo RLReport.pas.

    Não sei se tem algo relacionado a diferença de pixels por polegada video x impressora. Pessoal, confesso que já fiquei tonto de tanto olhar este código, mas não consegui evoluir.

    Peço a ajuda de vocês para que juntos possamos resolver este bug do fortes, pois ele afeta tudo que utilizar o RLMemo e fizer o wordwrap.

    Só lembrando que nem sempre o problema é observado, isso depende do texto que deve ser impresso, por isso já coloquei um caso em que o problema ocorre.

    Muito obrigado pessoal, espero que tenha conseguido expor com clareza a situação.

    Abraço a todos

    Fabricio

    na_ide.jpg

    na_impressora.jpg

  7. Acho que vou fazer um RTA "Recurso Tecnológico Alternativo" até termos uma solução definitiva.

    Vou deixar o código assim:


    procedure SetCertContextPassword(ACertContext: PCCERT_CONTEXT; APass: AnsiString);
    var
      dwKeySpec: DWORD;
      pfCallerFreeProv: LongBool;
      Ret: Longint;
      ProviderOrKeyHandle: HCRYPTPROV_OR_NCRYPT_KEY_HANDLE;

      procedure CheckPINError(WinErro: DWORD = 0);
      begin
        if WinErro = 0 then
          WinErro := GetLastError;

        if (WinErro = 0) or (WinErro = ERROR_NO_TOKEN) then
          Exit;

        if WinErro = SCARD_W_WRONG_CHV then
          raise EACBrDFeWrongPINException.Create('O cartão não pode ser acessado porque o PIN errado foi apresentado.')
        else if WinErro = SCARD_W_CHV_BLOCKED then
          raise EACBrDFeWrongPINException.Create('O cartão não pode ser acessado porque o número máximo de tentativas de entrada de PIN foi atingido')
        else
          raise EACBrDFeException.Create('Falha ao Definir PIN do Certificado. Erro: '+GetLastErrorAsHexaStr(WinErro));
      end;

    begin
      ProviderOrKeyHandle := 0;
      dwKeySpec := 0;
      pfCallerFreeProv := False;

      // Obtendo o Contexto do Provedor de Criptografia do Certificado //
      if not CryptAcquireCertificatePrivateKey( ACertContext,
                                                CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG,
                                                Nil,
                                                ProviderOrKeyHandle,
                                                dwKeySpec,
                                                pfCallerFreeProv) then
        raise EACBrDFeException.Create( MsgErroGetCryptProvider );

      try
        if dwKeySpec = CERT_NCRYPT_KEY_SPEC then
        begin
          if not GetCNGProviderIsHardware(ProviderOrKeyHandle) then
            Exit;

          Ret := NCryptSetProperty( ProviderOrKeyHandle,    // Não testado...
                                    NCRYPT_PIN_PROPERTY,
                                    PBYTE(APass),
                                    Length(APass)+1, 0);
          CheckPINError(Ret);
        end
        else
        begin
          if not GetCSPProviderIsHardware(ProviderOrKeyHandle) then
            Exit;

          if CryptSetProvParam(ProviderOrKeyHandle, PP_KEYEXCHANGE_PIN, PBYTE(APass), 0) then
            CheckPINError();

          CryptSetProvParam(ProviderOrKeyHandle, PP_SIGNATURE_PIN, PBYTE(APass), 0);                 // <- DEIXEI A LINHA DESTE JEITO SEM TESTES DE ERRO
    //      if not CryptSetProvParam(ProviderOrKeyHandle, PP_SIGNATURE_PIN, PBYTE(APass), 0) then    // <- ANTES ERA ASSIM
    //        CheckPINError();

        end;
      finally
        if pfCallerFreeProv then
          CryptReleaseContext(ProviderOrKeyHandle, 0);
      end;
    end;


    Desta forma o comportamento obtido está sendo o seguinte:
    Se o certificado não for encontrado mostra a mensagem: Certificado "xxxxxx" não encontrado!
    Se o PIN informado estiver incorreto ele abre a tela de digitação do PIN, lembrando que já foi utilizada uma tentativa.

    Sei que desta forma estou ignorando erros que possam ocorer, mas nos teste aqui dá pra funcionar legal.

    Este comportamento acontece com o certificado que usa o Oberthur, já com o certificado que usa o SafeSing o problema não acontece.

    Não gosto de remendos no código, mas por hora acho que será o jeito.
    O que vocês acham ?

  8. Daniel boa tarde

    eu também estou passando pelo mesmo problema

    como você sugeriu verificar onde ocorre o erro eu debuguei aqui e o erro é chamado nesta linha

    if not CryptSetProvParam(ProviderOrKeyHandle, PP_SIGNATURE_PIN, PBYTE(APass), 0) then
            CheckPINError();

    da mesma maneira como disse o BILLI579 o erro acontece uma vez, se chamar o código novamente funciona normal.

×
×
  • 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.