Ir para conteúdo
  • Cadastre-se

carlos_augusto

Membros
  • Total de ítens

    175
  • Registro em

  • Última visita

Posts postados por carlos_augusto

  1. Sr. Italo

    Muito obrigado pela resposta.

    Entendi agora que providências vou realizar, conforme descrevo abaixo:

    1)-Inicialmente utilizo o Método : DistribuicaoDFePorChaveNFe para verificar se a Chave de Nfe
       informada efetivamente existe na Sefaz.
       Se no retorno cStat = 138, considero que a chave da nota está correta.
    2)-Depois eu Manifesto "Ciência da Operação" para esta Nota Fiscal da seguinte forma :
      acbrNota.EventoNFe.Evento.Clear;
      with acbrNota.EventoNFe.Evento.Add do
        begin
          // Chave da Nota Fiscal Eletrônica
          infEvento.chNFe               := edtChaveNfe.Text;
          // Cnpj do Detinatário ( empresa.CNPJ )
          infEvento.CNPJ                := qryEmpresa.FieldByName('CNPJ').AsString;
          // data da manifestação
          infEvento.dhEvento            := now;
          // tipo do evento
          infEvento.tpEvento          := teManifDestCiencia
          // orção responsável por receber o evento ( 91 - Ambiente Nacional )
          infEvento.cOrgao              := 91;
          //infEvento.descEvento          := stDescEvento;
          // Ambiente da Nota Fiscal Eletrônica
          infEvento.tpAmb  := taProducao
       end;
       boEventOAceito := False;
       acbrNota.EnviarEvento(1);
       with dmdModAcbrNFe.acbrNota.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento do
         begin
           if ((cStat = 128) or (cStat = 135) or (cStat = 136) or (cStat = 138))  then
              boEventOAceito :=  True;
         end;          
    3)-Se a Manifestação tiver sido aceita , finalmente efetuo a baixa do Arquivo Xml:
       if (boEventOAceito) then
         begin
           acbrnfNota.WebServices.DownloadNFe.Executar;
           cdsNotaARQUIVOXML.AsString := acbrnfNota.WebServices.DownloadNFe.retDownloadNFe.XML;
         end;  

    Seria basicamente esta a idéia?

    Grato

  2. Sr. Italo

    Inicialmente eu gostaria de agradecer a sua resposta.

    Conforme sugerido eu li a Nota Técnica 2014/002 versão 1.02b.

    Ficaram apenas as seguintes dúvidas :

    1)-O procedimento normal, pelo que eu entendi, seria :
    Primeiro : Consultar quais notas fiscais de terceiros foram emitidas para o meu CNPJ
    Segundo  : Manifestar "Ciência da Operação" para a nota fiscal desejada
    Terceiro : Finalmente fazer download do Xml desejado.
    Então a questão é : o ACBR encapsulou todas estas tarefas dentro do Método : DistribuicaoDFePorUltNSU ou DistribuicaoDFePorChaveNFe ?
    Isto é, o Acbr enviará automaticamente comando de "Ciência da Operação" ?

    2)-Em 2014 quando fiz o desenvolvimento da Consulta por NSU , constatei que em caso da empresa ter diversas Notas Fiscais a ela destinadas, aparecia erro de "consumo indevido".
    Assim, cheguei a definir que seriam consultadas de 20 e 20 notas.
    A questão é : na prática o sr. tem observado este problema atualmente?

    Grato

  3. Companheiros

    Gostaria de solicitar a ajuda de todos porque estou totalmente confuso!

    Normalmente os nossos clientes fazem Manifestação das NFEs à eles destinadas utilizando ferramentas públicas e depois fazem download do xml utilizando recursos que cada um elegeu como ideal.

    Depois utilizam recurso existente em nosso ERP para gerar uma Nota Fiscal de Entrada através da importação de arquivo XML.

    Porém agora os clientes solicitaram que todos estes procedimentos sejam automáticos.
    Assim, nosso Erp terá que ter a habilidade de :
    - consultar notas fiscais destinadas ao CNPJ
    - efetuar manifestação
    - fazer download
    - importar no ERP transformando-a em uma Nota Fiscal de Compra

    Em 2014 eu havia criado um recurso específico para Consultar Nfe Destinadas e Efetuar Manifestação ( que não foi utilizado porque os clientes já estavam acostumados a usar outras ferramentas de suas preferências ).

    Porém agora quando testo esta rotina antiga é exibida a seguinte mensagem de erro :
    "Após 02/05/2017 o Web Service ConsultaNFeDest foi desativado pela SEFAZ.  Favor utilizar o método DistribuicaoDFe."
     
    Assim gostaria de ajuda dos companheiros para entender exatamente o que devo alterar no procedimento de Inicial da Consulta utilizando este método : DistribuicaoDFe.

    Abaixo estou postando o código-fonte de 2014.

    Grato

     
    CÓDIGO-FONTE DESENVOLVIDO EM 2014:  
      // PARAMETRO 1 : Indicador de NFe a ser Consultada
      //veja NT 2012/002 pág. 11 para identificar os valores possíveis 0 = Todas as NF-e; 1 = Somente as NF-e que ainda não tiveram manifestação do destinatário
      //    (Desconhecimento da operação, Operação não Realizada ou Confirmação da Operação); 2 = Idem anterior, incluindo as NF-e que também não tiveram a Ciência da Operação.*)
      stIndNFe := '0';

      // PARAMETRO 2 : Indicador do Emissor da NF-e
      //veja NT 2012/002 pág. 11 para identificar os valores possíveis /0 = Todos os Emitentes / Remetentes;
      //1 = Somente as NF-e emitidas por emissores / remetentes que não tenham a mesma raiz do CNPJ do destinatário (para excluir as notas fiscais de transferência entre filiais).
      stIndEmi := '0';

      // PARAMETRO 3 : Último NSU recebido pela Empresa veja NT 2012/002 pág. 11 para identificar os valores possíveis
      // Caso seja informado com zero, ou com um NSU muito antigo, a consulta retornará unicamente as notas fiscais que tenham sido recepcionadas nos últimos 15 dias.
      stUltNSU := qryUltimoNsu.FieldByName('NRO_NSU_ULTIMO').AsString;
      if Trim(stUltNSU) = '' then
        stUltNSU := '0';

      inInc          := 0;
      inNroPesquisa  := 0;
      inItemConsulta := 0;
      dmdModAcbrNFe.acbrNota.NotasFiscais.Clear;
      with dmdModAcbrNFe.acbrNota.WebServices.ConsNFeDest.retConsNFeDest do
        begin
          repeat
          // incremento item da pesquisa ( servirá apenas para determinar se trata-se da primeira pesquisa
          //                               visto que esta deverá ser utilizar o NSU da consulta anterior )
          inNroPesquisa := inNroPesquisa + 1;

          // pesquiso na sefaz
          try
                dmdModAcbrNFe.acbrNota.ConsultaNFeDest(stCNPJEmpresa,
                                         StrToIndicadorNFe(ok,stIndNFe),
                                         StrToIndicadorEmissor(ok,stIndEmi),
                                         stUltNSU);
          except on e : exception do
            if Trim(e.message) <> '' then
              begin
                stMsgErro := 'ATENÇÃO !'                                    + #13 + #13 +
                             'A SEFAZ recebeu o pedido de Consulta '        + #13 + #13 +
                             'Mas retornou a seguinte mensagem de erro : '  + #13 + #13 + '  ' + Trim(e.message);
                showmessage(stMsgErro);
              end
            else
              begin
                stMsgErro := 'ATENÇÃO !'                                    + #13 + #13 +
                             'A SEFAZ recebeu o pedido de Consulta '        + #13 + #13 +
                             'Mas retornou a seguinte mensagem de erro : '  + #13 + #13 +
                             '  ' +  Trim(dmdModAcbrNFe.acbrNota.WebServices.ConsNFeDest.retConsNFeDest.xMotivo);
                showmessage(stMsgErro);
              end
          end;

          for inInc := 0 to ret.Count - 1 do
            begin
              retorno :=  ret.Items[inInc];

              // inicializo dataset de inclusão do item
              if (not(retorno.resNFe = nil) and not(retorno.resNFe.chNFe = EmptyStr)) then
                if (Trim(retorno.resNFe.NSU) <> '') then
                begin
                    // numero do NSU
                    stNro_Nsu := retorno.resNFe.NSU;
                    // nro. nota eletronica
                    stNumNfEletronica := retorno.resNFe.chNFe;
                    // cnpj
                    stCnpj := retorno.resNFe.CNPJCPF;
                    stCnpj := Copy(stCnpj,1,2) + '.' +
                              Copy(stCnpj,3,3) + '.' +
                              Copy(stCnpj,6,3) + '/' +
                              Copy(stCnpj,9,4) + '-' +
                              Copy(stCnpj,13,2) ;
                    // razão social
                    stRazaoSocial       := AnsiUpperCase(retorno.resNFe.xNome);
                    // inscrição estadual
                    stInscricao     := retorno.resNFe.IE;
                    // data da emissão
                    dtDataEmissao     := retorno.resNFe.dEmi
                    // entrada ou saída
                    case retorno.resNFe.tpNF of
                      tnEntrada: stTipoNfe := '0';  // entrada
                      tnSaida:   stTipoNfe := '1';  // saida
                    end;
                    // valor total da nota fiscal
                    cyValorNota  := retorno.resNFe.vNF;
                    // data da autorização
                    dtDataAutoriza := retorno.resNFe.dhRecbto
                    // código da situação da nfe
                    stCodSituacaoNfe  := '';
                    case retorno.resNFe.cSitNFe of
                      snAutorizado: stCodSituacaoNfe := '1';  // nfe autorizada
                      snDenegado:   stCodSituacaoNfe := '2';  // nfe denegada
                      snCancelado:  stCodSituacaoNfe := '3';  // nfe cancelada
                    end;
                    // Código da Situação da Manifestação do Destinatário
                    case retorno.resNFe.cSitConf of
                      smdSemManifestacao:      stCodSituacaoManifestacao := '0';  // Sem Manifestação do Destinatario
                      smdConfirmada:           stCodSituacaoManifestacao := '1';  // Confirmada Operaçao
                      smdDesconhecida:         stCodSituacaoManifestacao := '2';  // Desconhecida
                      smdOperacaoNaoRealizada: stCodSituacaoManifestacao := '3';  // Operação não Realizada
                      smdCiencia:              stCodSituacaoManifestacao := '4';  // Ciencia
                    end;

                  except
                    AddMensagem('Erro Gravando NSU : ' + stNro_Nsu);
                    if qryIncItemConsulta.Transaction.InTransaction then
                      qryIncItemConsulta.Transaction.RollbackRetaining;
                    Raise;
                  end;
                end;
            end;

          stUltNSU := ultNSU;

          if (inItemConsulta > spnMaximoNotas.Value) then
            begin
              break;
            end;

          until (indCont = icNaoPossuiMaisDocumentos);
        end;

     

  4. Sr. Italo

    Na verdade eu procedo da seguinte forma :

    - importo o arquivo txt ( acbrNota.NotasFiscais.LoadFromFile(stArquivo); )

    - gero o arquivo xml (    acbrNota.NotasFiscais.Items[0].GerarXML; )  ( faço isto apenas 1 vez, embora eu tenha colocado repetido logo acima )

    - assino o arquivo xml (       acbrNota.NotasFiscais.Assinar; )

    - gero o arquivo em disco (acbrNota.NotasFiscais.Items[0].GravarXML(ExtractFileName(stArquivoXML),ExtractFilePath(stArquivoXML));)

    Porém eu não consigo debugar porque o certificado digital do cliente é A3 e não posso trazê-lo para meu escritório.

    Eu só consegui descobrir o erro porquefui colocando showmessage logo após cada linha, o que me possibilitou descobrir.

    O Sr. acha que cometi algum erro na sequência de comandos?

    Seria falta de alguma DLL específica?

    Grato

     

  5. Prezados Companheiros

    Eu criei recurso para na minha aplicação importar arquivo TXT  e gerar arquivo XML.
    Tudo ocorreu com sucesso.
    Vejam como ficou o código-fonte:
                    acbrNota.NotasFiscais.Clear;
                    acbrNota.NotasFiscais.Add;
                    NFeRTXT := TNFeRTXT.Create(acbrNota.NotasFiscais.Items[0].NFe);
                    NFeRTXT.CarregarArquivo(Trim(stArquivo));
                    if NFeRTXT.LerTxt then
                       NFeRTXT.Free
                    else
                      begin
                         NFeRTXT.Free;
                         //tenta XML
                         acbrNota.NotasFiscais.Clear;
                         try
                            acbrNota.NotasFiscais.LoadFromFile(stArquivo);
                         except
                            //ShowMessage('Arquivo NFe Inválido');
                            //exit;
                         end;
                      end;
                    acbrNota.NotasFiscais.Items[0].GerarXML;  
                    acbrNota.NotasFiscais.Items[0].GravarXML(ExtractFileName(stArquivoXML),ExtractFilePath(stArquivoXML));
                    acbrNota.NotasFiscais.Items[0].GravarXML(ExtractFileName(stArquivoXML),ExtractFilePath(stArquivoXML));

    Mas aí resolvi modificar para já gerar o arquivo assinado, caso o Número de Série do certificado esteja configurado no
    computador, desta forma :
                    if (Trim(stNROCERTIFICADO) <> '') then
                      begin
                        acbrNota.NotasFiscais.Assinar;
                      end;
                    acbrNota.NotasFiscais.Items[0].GravarXML(ExtractFileName(stArquivoXML),ExtractFilePath(stArquivoXML));

    Só começou a exibir um erro de "TRANSACTION IS NOT ACTIVE" na linha do método ASSINAR.

    Sabem os companheiros o que pode esta ocasionando isto?

    Grato

  6. Prezados Srs.
    André e Amarildo

    Bom Dia!

    Apenas para finalizar o assunto, fiz novo teste utilizando a rotina de Conversão do Arquivo TXT para XML do ACBR e constatei que funcionou perfeitamente ( como um Relógio Suiço ).

    Trata-se portanto de uma poderosa ferramenta para compatibilizar sistemas mais antigos com as novas normas da Nfe.

    Assim, gostaria de agradecer sua ajuda e novamente pedir desculpas.

    Eu me considero satisfeito com relação à este assunto.

    Grato

    • Curtir 1
  7. Sr. Amarildo

    Existe um modelo de arquivo txt que fica dentro da pasta \acbr\trunk2\Doctos\Manuais\Layout_TXT_NFe_NFCe_4_00.odt.

    Portanto, estou utilizando um manual de arquivo txt homologado pela Comunidade ACBR.

    E o método acbrNota.NotasFiscais.LoadFromFile aceita plenamente o arquivo gerado pelo manual acima indicado.

    Portanto, o problema é que quando importa o arquivo , estão ocorrendo os erros que descrevi acima.

    Aliás, minha esperança para resolver o problema é justamente conseguir importar o arquivo conforme descrevi acima, visto que é uma funcionalidade

    em vigor no ACBR.

    Grato

     

  8. Sr. Amarildo

    Por precaução eu fiz teste de importação de um arquivo txt e sua geração em formato xml utilizando o Acbr, de umaempresa inscrita no Regime Normal de ICMS.

    E constatei que também está com problema nesta funcionalidade de converter txt para xml com arquivos deste tipo.

    Não está sendo gerada a Tag : PAG.

    Assim, estou anexando o arquivo txt e bem como o arquivo xml resultante.

    Veja que no arquivo txt temos a estrutura : 
    YA01|1|01|9.90||||
    YA09|

    E no arquivo xml temos somente :
     <pag/>

    Grato

    Carlos
    Franca-Sp

    009092_00396589000199_001_29_07_2018.xml

    009092_00396589000199_001_29_07_2018-nfe.txt

  9. Sr. Amarildo

    Estou postando aqui :

    - arquivo txt 

    - arquivo xml ( resultante do arquivo txt )

    Eu fiz modificações em ambos arquivos apenas para trocar dados pessoais de : emitente / cliente / transportador.

    O Sr.verá que no final do arquivo txt , no item 10 existe a tag : N10h| ( correspondente à Situação Tributária de Icms Simples : 500 ).

    Mas, quando o arquivo é gerado , a tag fica assim : <CSOSN>0</CSOSN>.

    Abaixo eu posto também o código fonte da geração do arquivo.

    Grato por sua ajuda.

    Carlos

    Franca-Sp

    CÓDIGO-FONTE:

                    acbrNota.NotasFiscais.Clear;
                    acbrNota.NotasFiscais.Add;
                    NFeRTXT := TNFeRTXT.Create(acbrNota.NotasFiscais.Items[0].NFe);
                    NFeRTXT.CarregarArquivo(Trim(stArquivo));
                    if NFeRTXT.LerTxt then
                       NFeRTXT.Free
                    else
                      begin
                         NFeRTXT.Free;
                         //tenta XML
                         acbrNota.NotasFiscais.Clear;
                         try
                            acbrNota.NotasFiscais.LoadFromFile(stArquivo);
                         except
                            //ShowMessage('Arquivo NFe Inválido');
                            //exit;
                         end;
                      end;
                    acbrNota.NotasFiscais.Items[0].GerarXML;  
                    acbrNota.NotasFiscais.Items[0].GravarXML(ExtractFileName(stArquivoXML),ExtractFilePath(stArquivoXML));

     

    020223_59615773000125_001_28_07_2018-nfe.txt

    020223_59615773000125_001_28_07_2018.xml

  10. Prezados Companheiros

    Boa Noite!

    Estou auxiliando amigos que possuem Sistema ERP mais antigo ( licença comprada ),e por questão financeira não tem como migrar para uma aplicação mais dispendiosa. 

    Desenvolvi rotina que :
    - lê o arquivo txt que a aplicação deles gera ( Nfe 3.10 )
    - mescla com informações que eu criei diretamente no banco de dados
    - gera um arquivo txt no padrão do ACBR ( Nfe 4.00 )
    - importa no componente ACBRNFE 
    - finalmente exporta como Arquivo XML  ( Nfe 4.00 )

    Como eles são Regime Simples, eu fiz teste com todas Situações Tributárias do Simples, apenas para constatar se estava tudo correto.

    Constatei que apenas na Situação Tributária 900 ocorreu um erro :

    a)-No Arquivo TXT:
    N|
    N10h|0|90|3|35.00||18.00|6.30| |||||||||3.41|1.19|

    b)-No Arquivo XML:
    <ICMS>
      <ICMSSN>
        <orig>0</orig>
        <CSOSN>0</CSOSN>
      </ICMSSN>
    </ICMS>

    Vejam que na Sit.Tributária 500 este erro não ocorre :
                    <ICMS>
                        <ICMSSN500>
                            <orig>0</orig>
                            <CSOSN>500</CSOSN>
                        </ICMSSN500>

    Sabem os companheiros a causa deste problema?

    Grato

  11. Boa Tarde!

    Sim eu vi o comentário do Sr. André!

    Apenas quiz confirmar com os companheiros como estava a situação em todos os Estados onde possuem clientes.

    Se estavam experimentando situações diferentes em diferentes estados.

    Em nosso ERP , considerando contato de ontem com os companheiros, optei por parametrizar nos ambientes de Produção e Homologação.

    Obrigado por sua ajuda.

  12. Companheiros

    Com relação à nova propriedade : Configuracoes.Geral.CamposFatObrigatorios recentemente criada, como vocês estão procedendo ?

    Chegaram a criar em seus sistemas uma parametrização para informar valores nesta propriedade :
    - por Estado
    - por Ambiente ?

    Estão detectando diferenças de comportamento entre as Sefaz de cada estado relativo à aplicação da Regra de Validação Y01-20 ?

    Grato

  13. Companheiros

    Com relação à nova propriedade : Configuracoes.Geral.CamposFatObrigatorios recentemente criada,
    como vocês estão procedendo ?

    Chegaram a criar em seus sistemas uma parametrização para informar valores nesta propriedade :
    - por Estado
    - por Ambiente

    ?

    Estão detectando diferenças de comportamento entre as Sefaz de cada estado relativo à Regra de Validação Y01-20 ?

    Grato

     

  14. Sr. Amarildo

    Estou em contato com as seguintes situações :

    - Erp gera um Arquivo TXT que é importado no Emissor Público de NFE e Transmitido
    - Erp gera um Arquivo XML que é importado no Emissor Público de NFE e Transmitido  

    A questão é posso sugerir aos usuários destes Erps ( que não são de minha autoria ) uitilizarem o ACBRMONITORPLUS para :
    - importar os arquivos
    - transmitir
    - imprimir o Danfe
    evitando utilizarem o Emissor Público de NFE do Sebrae?

    Estas pessoas são amigas minhas e estão muito assustadas com a possibilidade do Emissor Público de Nfe do Sebrae não ficar pronto

    até o final da Vigência da Nfe 3.10 ( dia 02/08/2018 ).

    Grato

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