NFeEnviar

A função NFeEnviar é usada para enviar uma NF-e para o Web Service da SEFAZ para ser autorizada.

Tipo de Retorno

Integer

Pacote

A função NFeEnviar está definida dentro do pacote NF-eEnviar.pkg.

Sintaxe

Move (NFeEnviar({sSiglaWS}, {sArquivoXML}, {sCertificado}, ;
                &{sNroRecibo}, &{sMsgCabec}, &{sMsgRetWS}, &{sMsgResultado}, ;
                {sProxy}, {sUsuario}, {sSenha}, {sLicenca}, ;
                {bExibeErro}, &{icStat}, &{sdhRecbto}, {sArquivoAutorizado} [, ;
                {bGeraIdInfProt} [,{bAssincrono}]])) to {iRet}

Onde:

  • {sSiglaWS} é a sigla do Web Service para o qual será enviada a solicitação. Veja mais detalhes aqui.
  • {sArquivoXML} é o caminho completo do arquivo XML que será enviado à SEFAZ. Se for NF-e, o arquivo deve estar sem assinatura, pois a própria função se encarrega de fazer a assinatura do arquivo após validar sua estrutura. Sendo assim, se a busca retornar uma rejeição, será necessário regerar o arquivo sem a assinatura para tentar um novo envio, visto que o arquivo anteriormente gerado contém a assinatura do primeiro envio e não poderá ser usado novamente com esta função; No caso de um arquivo de NFC-e, o mesmo deve estar previamente assinado com a função NFeAssinarNFCe.
  • {sCertificado} é a string que representa o certificado digital que será usado na transmissão dos dados. Se não for informado, uma tela será exibida para o usuário escolher um dos certificados instalados para o usuário corrente. Veja mais detalhes sobre como informar este parâmetro clicando aqui;
  • &{sNroRecibo} é uma variável do tipo String que precisa ser passada por referência e que após a execução da função receberá o número do recibo de envio caso o envio seja feito de forma assíncrona, ou o protocolo de autorização da NF-e caso o envio seja feito de forma síncrona; 
  • &{sMsgCabec} é uma variável do tipo String que precisa ser passada por referência e que após a execução da função receberá o XML completo do pedido de envio ao Web Service. Normalmente esta informação é útil somente para o propósito de depuração é não é usada na prática pelo emitente;
  • &{sMsgRetWS} é uma variável do tipo String que precisa ser passada por referência e que após a execução da função receberá a mensagem XML de resposta do Web Service. Normalmente esta informação é útil somente para o propósito de depuração é não é usada na prática pelo emitente;
  • &(sMsgResultado} é uma variável do tipo String que precisa ser passada por referência e que após a execução da função receberá a mensagem literal do resultado da chamada do Web Service;
  • {sProxy} é usado para informar o endereço do servidor proxy, se necesário. Por exemplo ’http://proxyserver:port’. Verificar com o cliente qual é o endereço do servidor proxy e a porta https, pois a porta padrão do https é 443 e, sendo assim, teríamos algo como ’http://192.168.15.1:443’;
  • {sUsuario} é usado para informar o usuário para autenticação no proxy, se necessário;
  • {sSenha} é usado informar a senha de autenticação no proxy, se necessário;
  • {sLicenca} é usado para informar a chave da licença de uso ou registro quando a função é utilizada em ambiente de produção;
  • {bExibeErro} é usado para indicar se a função deve exibir ou não os erros que ocorrerem na execução;
  • &{icStat} disponível a partir da versão 2014/02, é um parâmetro obrigatório passado por referência, usado para receber o código do status de retorno do processamento do envio da nota;
  • &{sdhRecbto} disponível a partir da versão 2014/02, é um parâmetro obrigatório passado por referência, usado para receber a data e hora da autorização da nota quando a autorização for feita de forma síncrona;
  • {sArquivoAutorizado} disponível a partir da versão 2014/02, é um parâmetro obrigatório usado para informar o local e o nome do arquivo onde será salvo o XML da NF-e autorizada quando a autorização for feita de forma síncrona;
  • {bGeraIdInfProt} disponível a partir da versão 2014/02, é um parâmetro opcional sendo que se informado True, ao gerar o arquivo XML da NF-e autorizada no caso do processo ser síncrono e se a tag infProt não possuir o atributo Id, será forçada a geração deste atributo. Esta alteração foi feita para atender a necessidade de alguns clientes cujos fornecedores estão exigindo a existência deste atributo na tag infProt. Recomendamos que este parâmetro não seja usado;
  • {bAssincrono} disponível a partir da versão 2017/01, é um parâmetro opcional que, se for True, fará com que a função faça o envio de forma assíncrona. Se este parâmetro for False ou não for informado, então a função tentará fazer o envio primeiro de forma síncrona e caso o WS retorne o erro 776 (UF que não disponibiliza este atendimento), tentará fazer o envio de forma assíncrona. Se o WS não trabalha de forma síncrona, informar True para este parâmetro otimizará a execução da função, pois ela não irá perder tempo tentando fazer o envio de forma síncrona.
  • {iRet} é o código do retorno da chamada da função sendo que 0 (zero) indica que a NF-e foi enviada (e talvez autorizada) com sucesso e qualquer outro diferente de 0 (zero) indica que houve algum erro no envio.

Exemplo

Um exemplo de uso da função pode ser encontrado dentro da Workspace de Exemplo na função NFeEnviaNFExemplo no arquivo cNotaDataDictionary.dd. Abaixo a função citada e a chamada da função da Library na linha 93.

NFeEnviar_201402

Observações

  • Se você perder o número do recibo de envio ou se, por uma falha no momento da transmissão você não receber de volta o número do recibo, não será possível usar a função NFeBuscar para gerar o arquivo da NF-e autorizado. A opção neste caso será usa a função NFeCriaProcNFe;
  • Se o arquivo XML passado para a função já estiver assinado, ocorrerá o erro "6301: A NF-e a ser enviada não deve estar assinada, pois a NF-e será assinada pela DLL";
  • A partir da versão 2014/02 a autorização pode acontecer de forma síncrona e a função NFeEnviar fará também o que hoje é feito pela função NFeBuscar. Ou seja, se a SEFAZ aceitar a autorização de forma síncrona o envio será feito dessa forma e ao final do processo a NF-e poderá já estar autorizada e a função NFeBuscar não precisará ser chamada. Importante observar que cada SEFAZ tem autonomia para decidir se disponibilizará o processo síncrono ou não, e portanto cada desenvolvedor deve fazer os tratamentos em sua aplicação para tratar esse retorno;
  • O parâmetro opcional {bGeraIdInfProt} tem a mesma função que na função NFeBuscar, e portanto deve ser utilizado com o mesmo propósito e com a mesma cautela;
  • O retorna da função agora deverá ser tratado também pelo parâmetro {icStat} passado por referência, pois esse parâmetro receberá o status da NF-e, e em caso de sucesso deverá ser feito o tratamento para quando {icStat} for 100, indicando NF-e Autorizada, 110 ou 302 indicando NF-e Denegada, ou 103 indicando que a nota foi enviada de forma assíncrona e que a função NFeBuscar deverá ser chamada;
  • Quando o envio da nota for feito de forma assíncrona, o número de recibo retornado em {sNroRecibo} é necessário para fazer a busca do resultado do processamento através da função NFeBuscar e é extremamente recomendado que você guarde-o em sua base de dados. Note que a cada envio um número de recibo diferente é gerado. Se você fizer dois envios seguidos e o primeiro envio foi autorizado não será possível recuperar os dados de autorização com o segundo recibo, que provavelmente retornará erro de nota em duplicidade visto que foram feitos dois envios da mesma NF-e. Por isso alguns tratamentos são necessários na aplicação para não permitir um novo envio antes de buscar o resultado e assegurar-se de que o resultado é uma rejeição que pode ser resolvida com a correção e re-transmissão do arquivo;
  • Quando o envio da nota for feito de forma síncrona, o protocolo recebido em {sNroRecibo} já é o protocolo de autorização da nota, e não se faz mais necessário a chamada da função NFeBuscar. Sendo assim, não haverá número de recebido do envio da NF-e e é necessário então guardar o protocolo de autorização da nota para um possível uso futuro.

Não encontrou o que precisava, entre em contato conosco.