Ir para conteúdo
  • Cadastre-se

rubensff

Membros
  • Total de ítens

    32
  • Registro em

  • Última visita

Posts postados por rubensff

  1. A intenção é que na emissão, quando houver um erro no envio, e o sistema não tenha retorno do sefaz, por variação na internet da loja, ele consulte e veja se foi processado pela sefaz, fazer a contingencia se não tiver retorno, e depois fazer o cancelamento por substuição está criando mais problemas, porque acaba gerando muita nota em contingência. E os usuários não fazem o devido envio.

     

  2.  De qual xml que está falando? 

    Temos vários xmls, por via das dúvidas segue o código: 

    function TNFe.EnviarNFCe(
                      NumeroNota,
                      Codigo_Operacao,
                      Destinatario,
                      Usuario: integer;
                      TipoOperacao: integer;
                      var StatusNFCe : integer;
                      var s_Contingencia : String;
                      var ChaveNFCe : String): Boolean;
    var
       TextoNFCe      : TStrings;
       s_FormaEmissao : string;
    //   ReciboEnvio    : string;
    //   Retorno_Sefaz  : String;
    //   ProtocoloNFCe  : string;
       QtdeConsulta      : integer;
       xmlNota           : string;
       ErrosRegraNegocio : string;
       NumeroLote        : string;
       Chave_Except      : String;
       oACBRNFE : TACbrNfe;


       procedure Aprova_ou_DenegaNfce;
       begin

    //      ReciboEnvio   := ACBR_NFe.WebServices.Enviar.Recibo;
    //      ProtocoloNFCe := ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.nProt;
    //      Retorno_Sefaz := IntToStr(ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat) + ' ' +
    //                       RetornaStatusNFCe(ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat);

    //      AtualizaXML_NFCe(ChaveNFCe,
    //                       ACBR_NFe.NotasFiscais.Items[0].XML,
    //                       IntToStr(StatusNFCe),
    //                       ProtocoloNFCe,
    //                       Retorno_Sefaz,
    //                       Usuario,
    //                       s_Contingencia);

       end;


    begin
    //   ProtocoloNFCe  := '';
    //   Retorno_Sefaz  := '';
    //   ReciboEnvio    := '';
       s_FormaEmissao := '';

       Result         := False;
       QtdeConsulta   := 0;
       xmlNota        := '';
       ErrosRegraNegocio := '';
       Chave_Except  := '';
       // Contingencia:
       // S = S/Não Enviada
       // N = Nao
       // E = S/Aprovada

       try
          try
             TCtrlNfe.GetInstance.CarregaDanfe(FACBR_NFe);
             acbr_nfe.Configuracoes.WebServices.Visualizar := False;
             ChaveNFCe := StringReplace(ACBR_NFe.NotasFiscais.Items[0].Nfe.infNFe.ID, 'NFe', '', [rfIgnoreCase]);
             NumeroLote := FormatDateTime('yyyymmddhhmmss', NOW);
             begin
                WaitShowMessage('Enviando NFC-e...');
                if ACBR_NFe.Enviar(NumeroLote, False, True) then
                begin
                   try
                      //showmessage(ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat.ToString);

                     StatusNFCe := ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat;
                     AnalisaTipoRetorno(StatusNFCe);//Cuidado Rubens, o retorno é alterado na porra da função
                   except
                     StatusNFCe := 4;
                   end;

                   //Se não retornar nada faço consulta no sefaz enviando o xml
                   if StatusNFCe = 4 then
                   begin
                      xmlNota := ACBR_NFe.NotasFiscais.Items[0].XML;

                      while ((StatusNFCe = 4) and (QtdeConsulta < 5)) do
                      begin
                        StatusNFCe   := ConsultaNFCeSefaz(xmlNota);
                        QtdeConsulta := QtdeConsulta + 1;
                      end;
                   end;

                   // Aprovada ou Denegada
                   if ((StatusNFCe = 1) or (StatusNFCe = 5))  then
                   begin
                      Aprova_ou_DenegaNfce;

                      // se for denegada grava a NFCe, mas nao libera para gravar a venda
                      if StatusNFCe = 5 then
                      begin
                        TFalconFuncoes.GetInstance.MostraMensagem('Rejeição: NF-e está denegada na base de dados da SEFAZ.'+sLineBreak+
                                                                  'A venda será cancelada.',4);
                        Result := False;
                      end
                      else
                         Result:= True;

                   end;
                end;
             end

          except
              on e: exception do
              begin
                 showmessage(E.Message);

                 WaitCloseMessage;
                 Chave_Except := ChaveNFCe;
                 showmessage(ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat.ToString);

                 showmessage(ChaveNFCe);

                 TFalconFuncoes.GetInstance.GravaLogerro('Erro ao enviar NFCe '+ ChaveNFCe+' - '+ 'cStat : '+ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat.ToString);

                 oACBRNFe := TAcbrNfe.Create(nil);

                 TCtrlNfe.GetInstance.ConfiguraACBrNFe(oACBRNFe, moNFCe);

                 oACBRNFe.WebServices.Consulta.NFeChave := Chave_Except;
                 oACBRNFe.WebServices.Consulta.Executar;

                 oACBRNFe.WebServices.Consulta.

                if oACBRNFe.WebServices.Consulta.cStat = 100 then
                begin
                   ACBR_NFe.NotasFiscais.Items[0].NFe.procNFe.Assign(oACBRNFe.WebServices.Consulta.protNFe);
                   Result := True;
                end
                else
                begin


                 //if (pos('Lote recebido com sucesso', UpperCase(e.Message)) > 0) then
                 if ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat in [103,0] then
                 begin
                   for var Contador: integer := 0 to 15 do
                   begin
                      WaitShowMessage('Consultando lote processado...');
                      Sleep(2000);
                      try
                         StatusNFCe := ConsultaNFCeSefaz(ACBR_NFe.NotasFiscais.Items[0].XML); //Cuidado Rubens, o retorno é alterado na porra da função
                      except end;

                      if not (StatusNFCe in [0,6]) then break;
                   end;

                   showmessage(StatusNFCe.ToString);

                   WaitCloseMessage;

                   if StatusNFCe = 1 then
                   begin
                      Aprova_ou_DenegaNfce;
                      Result := True;
                   end;
                 end;


                 if TBancoDados.execSqlBD(
                                           ' update TAB_NFC_E '+
                                           ' SET STATUS_RETORNOSEFAZ='+QuotedStr(Copy(e.Message,1,200))+
                                           ' where CHV_NF = '+
                                           QuotedStr(ChaveNFCe)) then
                 begin
                    TFalconFuncoes.GetInstance.GravaLogerro('Erro ao enviar NFCe '+ ChaveNFCe+' - '+ e.Message);

                    //Apagando o xml da nota que não deu certo
                    LimpaTemp(0,ChaveNFCe,'0');
                 end;

                 //mais explicito, tipo pau entrando no cú
                 //Permite gerar NFC-e em contigência quando ocorrer alguns tipos de exceção
                 if  pos(Uppercase('Nenhum arquivo de Schema encontrado na pasta'),UpperCase(e.Message)) > 0 then
                   exit;


    //             if ((pos('ERRO NAO CATALOGADO', UpperCase(e.Message)) > 0)
    //                //or (pos('TIMEOUT', UpperCase(e.Message)) > 0)
    //                or (pos('ERRO HTTP: 404', UpperCase(e.Message)) > 0)
    //                or (pos('ERRO HTTP: 500', UpperCase(e.Message)) > 0)
    //                or (pos(UpperCase('Falha no processamento do WebService'), UpperCase(e.Message)) > 0)
    //                //or (pos(UpperCase('Falha em obter Provedor de Criptografia do Certificado. Erro: 8009000B , erro: $8009000B'), UpperCase(e.Message)) > 0)
    //                or (pos(UpperCase('Erro HTTP: 403'), UpperCase(e.Message)) > 0)
    //                or (pos(UpperCase('Erro HTTP: 403'), UpperCase(e.Message)) > 0)
    //                or (pos(UpperCase('Erro HTTP: 0'), UpperCase(e.Message)) > 0)
    //                or (pos(UpperCase('ERRO INTERNO'), UpperCase(e.Message)) > 0)
    //                or (pos(UpperCase('Servico Paralisado Momentaneamente'), UpperCase(e.Message)) > 0)
    //                or (pos(UpperCase('Falha no reconhecimento da autoria ou integridade do arquivo digital'), UpperCase(e.Message)) > 0)
    //                //or (ACBR_NFe.NotasFiscais.Items[0].Nfe.procNFe.cStat = 0))
    //                )
    //                then
    //                  GeraContingencia
    //             else
                 begin
                    TFalconFuncoes.GetInstance.MostraMensagem('Erro ao enviar NFC-e para aprovação. Erro: ' + e.Message);
                    Result:= False;
                 end;


                end;
              end;

          end;
       finally
          LimpaTemp(0,ChaveNFCe,'0');
          if Assigned(oACBRNFE) then FreeAndNil(oACBRNFE);
          WaitCloseMessage;
       end;
     

  3. Boa tarde a todos.

    Sei que já tem um tópico com esse titulo, mas a questão acredito que seja outra.

    Tenho o processo de emissão, na emissão, quando dá algum  problema de comunicação com a SEFAZ,  acontece de ela ter recebido e processado a NFC-e, ai para não dar duplicidade, eu consulto pela chave, com outro objeto, pela chave, se me retorna "oACBRNFe.WebServices.Consulta.cStat = 100" então eu atualizo o objeto de emissão : ACBR_NFe.NotasFiscais.Items[0].NFe.procNFe.Assign(oACBRNFe.WebServices.Consulta.protNFe);

    Mas nesse processo, sei que deve estar faltando alguma coisa para que a impressão saia de forma correta.

    Será que podem me ajudar? 

  4. Estou tentando testar o ecfvirtual nfc-e, mas na hora que vou inicializar o ECF dá a seguinte mensagem "First chance exception at $74EC3EF2. Exception class EAccessViolation with message 'Access violation at address 0099FFDD in module 'ECFTeste.exe'. Read of address 0000007C'. Process ECFTeste.exe (9084)" na preocedure :

    Procedure TACBrECFVirtualNFCeClass.AtivarVirtual;
    begin
      fsACBrNFCe.NotasFiscais.Clear; <-- aqui dá o erro
      inherited AtivarVirtual;

      fsACBrNFCe.Configuracoes.Geral.ModeloDF := moNFCe;

      fsNomeArqTempXML := ChangeFileExt(NomeArqINI, '.xml');
    end;

     

     

    Alguém pode ajudar?

  5. Bom dia amigos, depois de muito trabalho acabei desistindo de resolver, mas por acidente acabei achando o problema, nem a Bematech conseguiu me responder de forma satisfatória...bem o problema é que na bemafi32.ini tem as informações da softhouse, essas informações devem ser preenchidas, eu nunca me atentei a isso.

    Att,

     

  6. Amigos, bom dia!!!

     

    Estou com problema na geração do CAT52, quando executo o comando PafMF_MFD_Cotepe1704, a bemafi retorna -1, ele faz o dawnload da mfd, gera um log xml, dizendo que a chave privada não está logada.

    Já tentei de tudo, apaguei todos os bemafi32 do computador, usei a dll que está no trunk2, tanto a antiga como a mais nova, baixei a versão do site da Bematech e nada, coloquei no system32 e por ai vai.... continua dando o mesmo erro.

    Será que alguém pode me dar uma luz??

     

    Att,

    Segue o arquivo em anexo.

    bemalog_03-03-2016.xml

  7. Olá a todos,

     

    Estou fazendo a emissão do Ct-e por um servidor de aplicação datasnap, quando rodo ele como aplicação, dá tudo certo, porém quando compilo ele como serviço do windows, ele não acha o certificado...

     

    Será que alguém pode me ajudar??

     

     

  8. Bom dia, a todos,

     

    Pelo que entendi, quando feito o cancelamento, não devo atualizar o xml que foi armazenado na emissão com o xml de retorno do cancelamento, porque eu estava fazendo isso antes, mas agora quando retorna o xml do cancelamento não imprimi mais o DACTE...

     

    Então, faço o cancelamento, não atualizo o xml, e quando for imprimir o dac, carrego o xml da emissão com a propriedade CteCancelada := True,

    é isso???

     

    Abraço,

  9. Boa pessoal, resolvi o erro acima,mas agora tá dando outro: Rejeicao: O autor do evento diverge do emissor do CT-e.

     

    código:

     

     ConfigCTe;
     
       dm_Prin.acbrcte1.EventoCTe.Evento.Clear;
       dm_Prin.acbrcte1.Eventocte.idLote := 1;
     
       with dm_Prin.acbrcte1.EventoCTe.Evento.Add do
       begin
     
     
     
          infevento.tpAmb := taHomologacao;
          infevento.cOrgao :=  dm_Prin.acbrcte1.Configuracoes.WebServices.UFCodigo;
          infevento.chCTe           := cdsAux.FieldByName('CHVCTE').AsString;
          infEvento.CNPJ            := TClasseIniControle.GetInstance.EmitCNPJ;
          infEvento.dhEvento        := now;
          infEvento.tpEvento        := teCancelamento;
          infEvento.detEvento.xJust := trim(sJus);
          infEvento.detEvento.nProt := cdsAux.FieldByName('PROTOCOLO').AsString;
          InfEvento.detEvento.xCondUso := '';
     
      end;
     
      try dm_Prin.acbrcte1.EnviarEventoCTe(1);
  10. Amigos, estou fazendo o cancelamento como no exemplo, mas está retornando :

     

    17/07/2014 19:00:Falha na validação dos dados do Envio de Evento 
    'ID110111351407446999080001005700100000006810000006801' violates pattern constraint of 'ID[0-9]{52}'.
    The attribute 'Id' with value 'ID110111351407446999080001005700100000006810000006801' failed to parse.
     
     
    Alguém pode ajudar?
×
×
  • 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.