Ir para conteúdo
  • Cadastre-se

dev botao

NFSeX - LoadFromString


Ver Solução Respondido por Diego Foliene,

Recommended Posts

  • Moderadores
1 hora atrás, IgorAcertSoft disse:

Boa tarde...

Estou usando a função LoadFromString para carregar um xml para o componente ACBrNFSeX mas o mesmo não esta me retornando as variáveis de dentro do xml.

Teria alguma coisa que posso fazer?

xml exemplo.xml 6.75 kB · 0 downloads

antes de carregar tu precisa configurar o componente para a cidade que vai ler o xml para que seja setado o provedor

  • Curtir 1
Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Bom dia Juliomar...

Meu componente já esta configurado, até porque a emissão da nota já esta funcionando normalmente, mas quando eu tento fazer o cancelamento da nota, que a função LoadFromString não me retorna os valores do XML.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia @IgorAcertSoft,

O XML que você anexou na sua primeira postagem é o XML retornado pelo webservice ou você baixou ele do portal da prefeitura?

Qual é a cidade/provedor?

Após o cancelamento de uma nota, você realiza uma consulta para obter o XML da nota com as informações de que a mesma esta cancelada?

Se sim, qual é a consulta que você faz?

O XML que você esta tentando ler é o XML de retorno dessa consulta?

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Bom dia Italo,

O xml é o retorno do webservice ao emitir a nota, o provedor é a INFISC, na cidade de Canoas / RS,

o momento que estou tentando usar o LoadFromString é antes de cancelar a nota, pois estou tentando ler o xml da nota validada,

para ai sim passar para o InfCancelamento todas as informações que ele precisa, e por fim executar o ACBrNFSeX1.CancelarNFSe(InfCancelamento),

mas como o LoadFromString não me retorna nada os valores do InfCancelamento estão em branco.

E para chegar a reposta do cancelamento estou usando a função ChecarResposta.

Mas desse jeito que eu faço funciona para todos os outros provedores que trabalho, mas sei que isso pode variar de provedor para provedor.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Como é esta rotina que você preenche o InfCancelamento depois de ler o XML, pode disponibilizar um trecho de código?

Fiz um teste de impressão do seu XML com o programa exemplo e não tive problemas.. Ele usa o ACBrNFSeX.NotasFiscais.LoadFromFile. Se você abrir o LoadFromFile, vai ver que ele usa o LoadFromString;

function TNotasFiscais.LoadFromFile(const CaminhoArquivo: String;
  AGerarNFSe: Boolean = True): Boolean;
var
  XmlUTF8: AnsiString;
  i, l: integer;
  MS: TMemoryStream;
begin
  MS := TMemoryStream.Create;
  try
    MS.LoadFromFile(CaminhoArquivo);

    XmlUTF8 := ReadStrFromStream(MS, MS.Size);
  finally
    MS.Free;
  end;

  l := Self.Count; // Indice da última nota já existente

  Result := LoadFromString(XmlUTF8, AGerarNFSe);

  if Result then
  begin
    // Atribui Nome do arquivo a novas notas inseridas //
    for i := l to Self.Count - 1 do
    begin
      if Pos('-rps.xml', CaminhoArquivo) > 0 then
        Self.Items[i].NomeArqRps := CaminhoArquivo
      else
        Self.Items[i].NomeArq := CaminhoArquivo;
    end;
  end;
end;

 

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

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 !!

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Boa tarde Diego,

O trecho que estou com dificuldade seria:

Seria nesta linha em especifico -> ACBrNFSeX1.NotasFiscais.LoadFromString(NFSE_NOTASARQUIVO.Value, False),

Posso garantir que o mesmo XML que te enviei esta na variável  NFSE_NOTASARQUIVO.Value.

with Dados do
    begin
      ACBrNFSeX1.NotasFiscais.Clear;
      //CARREGA O XML DA NOTA PELO BANCO
      NFSE_NOTAS.Close;
      NFSE_NOTAS.ParamByName('NUMERONOTA').Value := CodNota;
      NFSE_NOTAS.Open;
      //procura no banco, se não achar procura no arquivo .xml
      if not NFSE_NOTAS.IsEmpty then
        ACBrNFSeX1.NotasFiscais.LoadFromString(NFSE_NOTASARQUIVO.Value, False)
      else
        begin
          MessageBox(0, 'Não foi possível localizar o xml da nota.', 'Aviso', MB_OK+MB_ICONERROR);
          Exit;
        end;

      // Os Provedores da lista requerem que seja informado a chave e o código
      // de cancelamento
      if (ACBrNFSeX1.Configuracoes.Geral.Provedor = proInfisc) and
         (ACBrNFSeX1.Configuracoes.Geral.Versao <> ve201) then
      begin
        {
          A Chave é composta por:
           2 | N |Código IBGE para UF do prestador
          14 | N |CNPJ do prestador
           2 | N |Modelo da nota (valor 98 por padrão)
           3 | C |Série da nota (em maiúsculas, com zeros à direita)
           9 | N |Número da nota (com zeros à esquerda)
           9 | N |Código numérico aleatório
        }
        ChNFSe := ACBrNFSeX1.NotasFiscais.Items[0].NFSe.ChaveAcesso;
        // Codigo de Cancelamento
        // 1 - Erro de emissão
        // 2 - Serviço não concluido
        // 3 - RPS Cancelado na Emissão

        if not(InputQuery('Cancelar NFSe', 'Informe o Código de Cancelamento'+ #13+
                                       '1 - Erro de emissão'+ #13+
                                       '2 - Serviço não concluido'+ #13+
                                       '3 - RPS Cancelado na Emissão'+ #13+
                                       'Digite apenas o número:' +#13, Codigo)) then
          exit;
      end

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde!

1 hora atrás, IgorAcertSoft disse:
      if not NFSE_NOTAS.IsEmpty then
        ACBrNFSeX1.NotasFiscais.LoadFromString(NFSE_NOTASARQUIVO.Value, False)
      else
        begin
          MessageBox(0, 'Não foi possível localizar o xml da nota.', 'Aviso', MB_OK+MB_ICONERROR);
          Exit;
        end;

      // Os Provedores da lista requerem que seja informado a chave e o código
      // de cancelamento
      if (ACBrNFSeX1.Configuracoes.Geral.Provedor = proInfisc) and
         (ACBrNFSeX1.Configuracoes.Geral.Versao <> ve201) then
      begin

Seguindo o seu fluxo, ele chama o ACBrNFSeX1.NotasFiscais.LoadFromString(NFSE_NOTASARQUIVO.Value, False) mas não entra na condição abaixo que valida as informações do provedor para preencher, correto?

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

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 !!

Link para o comentário
Compartilhar em outros sites

  • Consultores
2 minutos atrás, IgorAcertSoft disse:

Ele entra na validação do if (ACBrNFSeX1.Configuracoes.Geral.Provedor = proInfisc), mas quando ele faz isso ChNFSe := ACBrNFSeX1.NotasFiscais.Items[0].NFSe.ChaveAcesso; o valor vem em branco

Certo, vou reproduzir aqui o código que utilizou para realizar alguns testes e retorno assim que possível com mais informações.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

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 !!

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Acabei de testar mudar ChNFSe := ACBrNFSeX1.NotasFiscais.Items[0].NFSe.ChaveAcesso; para ChNFSe := ACBrNFSeX1.NotasFiscais.Items[0].NFSe.CodigoVerificacao; e o mesmo trouxe o valor certo do código de verificação, estou testando para ver porque a chave não esta trazendo.

 

Link para o comentário
Compartilhar em outros sites

  • Consultores
  • Solution

Verificando aqui, o campo ChaveAcesso na verdade não é um campo presente no leiaute do padrão ABRASF versão 2.03, que é o leiaute e versão utilizado pelo provedor Infisc para atender ao município de Canoas/RS.

Veja:

image.png

A princípio, o campo ChaveAcesso é utilizado pelos provedores AEG, Agili, eGoverneISS, EloTech, RLZ e pelo Padrão Nacional.

Para a rotina de cancelamento, esta versão do Infisc não sobrescreve a rotina da classe mãe, portanto, são obrigatórios os campos NumeroNFSe e CodCancelamento.

Caso esteja querendo ler este valor: <InfNfse Id="439999999999999998RPS000000002932897135">, faça um teste lendo a propriedade ACBrNFSeX.NotasFiscais[0].NFSe.InfID.Id;

  • Obrigado 1
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

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 !!

Link para o comentário
Compartilhar em outros sites

  • Consultores

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultor SAC ACBr

Alexandre de Paula
Ajude o Projeto ACBr crescer - Assine o SAC                    

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  ícone Discórdia Discord   

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.