Existe uma forma simples de automatizar a emissão de NF-e em seu software desenvolvido em PHP, contanto que ele esteja instalado no windows. Quero te apresentar a integração com o Componente NFe da TecnoSpeed.
Para demonstrar como usar o Componente NFe, foi utilizado o XAMPP. Neste caso, para liberar o uso da classe COM, é necessário ter no arquivo de configuração, a seguinte extension:
[PHP_COM_DOTNET]
extension=php_com_dotnet.dll
O exemplo de uso, foi feito uma página simples com HTML e PHP. Para comunicar entre os fontes PHP, foi utilizado requisições com Ajax de uma maneira bem simples.
Após ter instalado o componente na máquina, basta fazer a instancia da classe do componente no PHP, conforme exemplo:
<?php
$spdNFe = new COM("NFeX.spdNFeX"); //instanciando a NFeX.dll
$spdNFeDataSets = new COM("NFeDataSetX.spdNFeDataSetX");//instanciando a NfeDataSetX.dll
?>
Logo após criar o objeto do componente, é necessário configurar a Software House emissora, inserindo o CNPJ de contrato com a TecnoSpeed (Segundo parâmetro pode ir em branco, será implementado futuramente):
$spdNFe->ConfigurarSoftwareHouse('11111111111111', "aaaa");
Para fazer as configurações, pode-se utilizar o arquivo ini e também pode-se configurar por fonte.
Via arquivo ini basta utilizar o seguinte método:
$spdNFe->LoadConfig("C:/xampp/htdocs/my portable files/nfeconfig.ini");
As configurações via fonte devem ser feitas da seguinte maneira:
// $spdNFe->NomeCertificado = "";
// Para a arquitetura de uma aplicação Web, é recomendado usar o caminho e
senha do certificado, pois assim basta que passe o arquivo .pfx e a senha.
$spdNFe->CaminhoCertificado = "C:/xampp/htdocs/my portable files/certificado.pfx";
$spdNFe->SenhaCertificado = "senha123"
$spdNFe->UF = "PR";
$spdNFe->CNPJ = "29062609000177";
$spdNFe->ArquivoServidoresHom = $DirArq."/nfeServidoresHom.ini";
$spdNFe->ArquivoServidoresProd = $DirArq."/nfeServidoresProd.ini";
$spdNFe->DiretorioEsquemas = $DirArq."/Esquemas";
$spdNFe->DiretorioTemplates = $DirArq."/Templates";
$spdNFe->DiretorioLog = $DirArq."/Log";
$spdNFe->VersaoManual = "6.0";
$spdNFe->ConexaoSegura = 1;
$spdNFe->TimeOut = 60000;
$spdNFe->Ambiente = 2;
$spdNFe->MaxSizeLoteEnvio = 500;
$spdNFe->DiretorioXmlDestinatario = $DirArq."\\XMLDestinatario";
$spdNFe->DiretorioLogErro = $DirArq."\\LogErro";
$spdNFe->DiretorioTemporario = "C:\\Windows\\Temp";
$spdNFe->ModoOperacao = 0; //0 = moNormal, 1 = moSVCAN, 2 = moSVCRS, 3 = moEPEC
$spdNFe->CaracteresRemoverAcentos="áéíóúàèìòùâêîôûäëïöüãõñçÁÉÍÓÚÀÈÌÒÙÂÊÎÔÛÄËÏÖÜÃÕÑǺª";
Métodos do Componente NF-e
Consulta de Status: Método utilizado para realizar a consulta de Status da UF configurada na propriedade $spdNFe->UF. Tem como retorno um XML com a resposta do Web Service da UF.
<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try{
echo $spdNFe->StatusDoServico();//Consulta o Status do serviço
}
catch(Exception $e)
{
echo $e;
}
unset($spdNFe);//Destroi a instancia da dll NFeX.dll
unset($spdNFeDataSets);//Destroi a instancia da dll NFeDataSetX.dll
?>
Gerar XML por Data Set: Método do componente NF-e para gerar o XML através da implementação do DataSet.
"Mas ainda não sei como funciona a NF-e, como vou entender o Data Set do componente ?"
<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try{
$XML = "";
$spdNFeDataSets->VersaoEsquema = "pl_009";
$spdNFeDataSets->DicionarioXML = "C:\\Program Files\\EasyPHP-DevServer-14.1VC9\\data\\localweb\\my portable files\\templates\\vm60\\Conversor\\NFeDataSets.xml";
$spdNFeDataSets->Incluir(); //Dados da NF-e
$spdNFeDataSets->SetCampo("versao_A02=3.10");
$spdNFeDataSets->SetCampo("Id_A03=");
$spdNFeDataSets->SetCampo("cUf_B02=41");
$spdNFeDataSets->SetCampo("cNF_B03=004640327");
$spdNFeDataSets->SetCampo("natOp_B04=VENDA MERC.ADQ.REC.TERC");
$spdNFeDataSets->SetCampo("indPag_B05=1");
$spdNFeDataSets->SetCampo("mod_B06=55");
$spdNFeDataSets->SetCampo("serie_B07=".rand(20000,90000));
$spdNFeDataSets->SetCampo("nNF_B08=312342");
$spdNFeDataSets->SetCampo("dhEmi_B09=".$datahora);
$spdNFeDataSets->SetCampo("dhSaiEnt_B10=".$datahora);
$spdNFeDataSets->SetCampo("tpNF_B11=1");
$spdNFeDataSets->SetCampo("idDest_B11a=1");
$spdNFeDataSets->SetCampo("cMunFG_B12=4115200");
$spdNFeDataSets->SetCampo("tpImp_B21=1");
$spdNFeDataSets->SetCampo("tpEmis_B22=1");
$spdNFeDataSets->SetCampo("cDV_B23=");
$spdNFeDataSets->SetCampo("tpAmb_B24=2");
$spdNFeDataSets->SetCampo("finNFe_B25=1");
$spdNFeDataSets->SetCampo("indFinal_B25a=0");
$spdNFeDataSets->SetCampo("indPres_B25b=0");
$spdNFeDataSets->SetCampo("procEmi_B26=0");
$spdNFeDataSets->SetCampo("verProc_B27=TecnoPHP BHETA");
//Dados do Emitente
$spdNFeDataSets->SetCampo("CNPJ_C02=00000000000000");
$spdNFeDataSets->SetCampo("xNome_C03=Exemplo de Razão Social");
$spdNFeDataSets->SetCampo("xFant_C04=Exemplo de nome fantasia");
$spdNFeDataSets->SetCampo("xLgr_C06=Exemplo");
$spdNFeDataSets->SetCampo("nro_C07=123");
$spdNFeDataSets->SetCampo("xBairro_C09=Bairro de Exemplo");
$spdNFeDataSets->SetCampo("cMun_C10=4115200");
$spdNFeDataSets->SetCampo("xMun_C11=Maringa");
$spdNFeDataSets->SetCampo("UF_C12=PR");
$spdNFeDataSets->SetCampo("CEP_C13=87500000");
$spdNFeDataSets->SetCampo("cPais_C14=1058");
$spdNFeDataSets->SetCampo("xPais_C15=Brasil");
$spdNFeDataSets->SetCampo("fone_C16=4432222222");
$spdNFeDataSets->SetCampo("IE_C17=9044016688");
$spdNFeDataSets->SetCampo("CRT_C21=3");
//Dados do Destinatário
$spdNFeDataSets->SetCampo("CNPJ_E02=00000000000000");
$spdNFeDataSets->SetCampo("xNome_E04=NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL");
$spdNFeDataSets->SetCampo("xLgr_E06=RUA DO CENTRO");
$spdNFeDataSets->SetCampo("nro_E07=123");
$spdNFeDataSets->SetCampo("xCpl_E08=TESTE");
$spdNFeDataSets->SetCampo("xBairro_E09=Centro");
$spdNFeDataSets->SetCampo("cMun_E10=4115200");
$spdNFeDataSets->SetCampo("xMun_E11=Teste");
$spdNFeDataSets->SetCampo("UF_E12=PR");
$spdNFeDataSets->SetCampo("CEP_E13=87500000");
$spdNFeDataSets->SetCampo("cPais_E14=1058");
$spdNFeDataSets->SetCampo("xPais_E15=BRASIL");
$spdNFeDataSets->SetCampo("fone_E16=445555555");
$spdNFeDataSets->SetCampo("IndIEDest_E16a=1");
$spdNFeDataSets->SetCampo("IE_E17=1111111111");
$spdNFeDataSets->SetCampo("email_E19=teste@hotmail.com");
//Dados do Itens
$spdNFeDataSets->IncluirItem();
$spdNFeDataSets->SetCampo("nItem_H02=1");
$spdNFeDataSets->SetCampo("xProd_I04=MELAO Saborozinho");
$spdNFeDataSets->SetCampo("cProd_I02=0999");
$spdNFeDataSets->SetCampo("cEAN_I03=");
$spdNFeDataSets->SetCampo("NCM_I05=11081200");
$spdNFeDataSets->SetCampo("CFOP_I08=51020");
$spdNFeDataSets->SetCampo("CEST_I05c=");
$spdNFeDataSets->SetCampo("uCom_I09=AABCC");
$spdNFeDataSets->SetCampo("qCom_I10=1.00");
$spdNFeDataSets->SetCampo("vUnCom_I10a=10.0000");
$spdNFeDataSets->SetCampo("vProd_I11=10.00");
$spdNFeDataSets->SetCampo("cEANTrib_I12=");
$spdNFeDataSets->SetCampo("uTrib_I13=AABCC");
$spdNFeDataSets->SetCampo("qTrib_I14=1");
$spdNFeDataSets->SetCampo("vUnTrib_I14a=10.00");
$spdNFeDataSets->SetCampo("indTot_I17b=1");
$spdNFeDataSets->SetCampo("infAdProd_V01=Observações do produto infAdProd");
//Dados dos impostos
$spdNFeDataSets->SetCampo("orig_N11=0");
$spdNFeDataSets->SetCampo("CST_N12=00");
$spdNFeDataSets->SetCampo("modBC_N13=0");
$spdNFeDataSets->SetCampo("vBC_N15=0.01");
$spdNFeDataSets->SetCampo("pICMS_N16=7.60");
$spdNFeDataSets->SetCampo("vICMS_N17=0.01");
$spdNFeDataSets->SetCampo("CST_Q06=01");
$spdNFeDataSets->SetCampo("vBC_Q07=0.01");
$spdNFeDataSets->SetCampo("pPIS_Q08=1.65");
$spdNFeDataSets->SetCampo("vPIS_Q09=0.00");
$spdNFeDataSets->SetCampo("CST_S06=01");
$spdNFeDataSets->SetCampo("vBC_S07=0.01");
$spdNFeDataSets->SetCampo("pCOFINS_S08=7.60");
$spdNFeDataSets->SetCampo("vCOFINS_S11=0.01");
$spdNFeDataSets->SalvarItem();
$spdNFeDataSets->SetCampo("vBC_W03=0.01");
$spdNFeDataSets->SetCampo("vICMS_W04=0.01");
$spdNFeDataSets->SetCampo("vICMSDeson_W04a=0.00");
$spdNFeDataSets->SetCampo("vBCST_W05=0.00");
$spdNFeDataSets->SetCampo("vST_W06=0.00");
$spdNFeDataSets->SetCampo("vProd_W07=10.00");
$spdNFeDataSets->SetCampo("vFrete_W08=0.00");
$spdNFeDataSets->SetCampo("vSeg_W09=0.00");
$spdNFeDataSets->SetCampo("vDesc_W10=0.00");
$spdNFeDataSets->SetCampo("vII_W11=0.00");
$spdNFeDataSets->SetCampo("vIPI_W12=0.00");
$spdNFeDataSets->SetCampo("vPIS_W13=0.00");
$spdNFeDataSets->SetCampo("vCOFINS_W14=0.01");
$spdNFeDataSets->SetCampo("vOutro_W15=0.00");
$spdNFeDataSets->SetCampo("vNF_W16=10.00");
$spdNFeDataSets->SetCampo("modFrete_X02=9");
$spdNFeDataSets->Salvar();
$XML = $spdNFeDataSets->LoteNFe;
$chave = str_replace("NFe", "", $spdNFeDataSets->GetCampo("id_A03"));
$retornos = array('xml' => $XML, "chaveNFe" => $chave);
echo json_encode($retornos);
}
catch(Exception $e)
{
echo $e;
}
unset($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>
Assinar Nota : Método do componente NF-e que tem como parâmetro o XML gerado pelo Data Set e retorna o XML assinado da NF-e para ser enviado. Obs.: Após o uso deste método, nada mais pode ser alterado no XML.
<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try
{
$xml = $_POST["xml"];
$xml = $spdNFe->AssinarNota($xml);
echo $xml;
}
catch(Exception $e)
{
echo $e;
}
unset($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>
Enviar Nota(Assíncrono): Método do componente que tem como parâmetro o num. Lote, o XML Assinado e se o lote é compactado ou não. Tem como retorno o status do processamento do Lote e o número do Recibo.
<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try
{
$xml = $_POST["xmlRet"];
$xml = $spdNFe->EnviarNF("0001", $xml, false);
$nroRecibo = simplexml_load_string($xml);
$nroRec = $nroRecibo->infRec;
$retornosEnvio = array('xml' => $xml, "nroRec" => $nroRec);
echo json_encode($retornosEnvio);
}
catch(Exception $e)
{
echo $e;
}
unset($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>
Exemplo de retorno Assíncrono:
<retEnviNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>2</tpAmb><verAplic>PR-v3_6_7</verAplic><cStat>103</cStat><xMotivo>Lote recebido com sucesso</xMotivo><cUF>41</cUF><dhRecbto>2020-08-26T14:53:54-03:00</dhRecbto><infRec><nRec>411110215728646</nRec><tMed>1</tMed></infRec></retEnviNFe>
Enviar Nota(Síncrono): Método do componente que faz o envio e já retorna o resultado da autorização da nota.(Alguns Web Services não apresentam estabilidade quanto ao uso deste método, o mais aconselhado é usar o envio Assíncrono).
<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try
{
$xml = $_POST["xmlRet"];
$xml = $spdNFe->EnviarNFSincrono("0001", $xml, false);
$nroRecibo = simplexml_load_string($xml);
$nroRec = $nroRecibo->infRec;
$retornosEnvio = array('xml' => $xml, "nroRec" => $nroRec);
echo json_encode($retornosEnvio);
}
catch(Exception $e)
{
echo $e;
}
unset($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>
Exemplo de retorno Síncrono:
<retEnviNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>2</tpAmb><verAplic>PR-v3_6_7</verAplic><cStat>104</cStat><xMotivo>Lote processado</xMotivo><cUF>41</cUF><dhRecbto>2020-08-26T15:02:42-03:00</dhRecbto><protNFe versao="3.10"><infProt Id="ID141160000760514"><tpAmb>2</tpAmb><verAplic>PR-v3_6_7</verAplic><chNFe>41160929062609000177553670003123421004640324</chNFe><dhRecbto>2020-08-26T15:02:42-03:00</dhRecbto><nProt>141160000760514</nProt><digVal>HpNE7evWmgOzlahz1yY6hMUiQj0=</digVal><cStat>100</cStat><xMotivo>Autorizado o uso da NF-e</xMotivo></infProt></protNFe></retEnviNFe>
Minha nota está trazendo rejeições, e agora, o que fazer ?
Como encontrar soluções para as Rejeições
Consultar Recibo: Método do componente que tem como parâmetro o número do Recibo, que vem no retorno do envio Assíncrono. Retorna o resultado do processamento da NF-e.
<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try
{
$nroRecibo = $_POST["reciboNota"];
$xml = $spdNFe->ConsultarRecibo($nroRecibo);
echo $xml;
}
catch(Exception $e)
{
echo $e;
}
unset($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>
Exemplo de retorno do método:
<retConsReciNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>2</tpAmb><verAplic>PR-v3_6_7</verAplic><nRec>411110215728750</nRec><cStat>104</cStat><xMotivo>Lote processado</xMotivo><cUF>41</cUF><dhRecbto>2020-08-26T15:21:27-03:00</dhRecbto><protNFe versao="3.10"><infProt><tpAmb>2</tpAmb><verAplic>PR-v3_6_7</verAplic><chNFe>41160929062609000177552910003123421004640328</chNFe><dhRecbto>2020-08-26T15:21:24-03:00</dhRecbto><nProt>141160000760604</nProt><digVal>hCm7VA2TpfJSa69oqOAN7Pa0i1g=</digVal><cStat>100</cStat><xMotivo>Autorizado o uso da NF-e</xMotivo></infProt></protNFe></retConsReciNFe>
Consultar NF-e: Método do componente que tem como parâmetro a chave da Nota. Retorna o status do processamento da NF-e.
<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try
{
$chaveNota = $_POST["chaveNota"];
$chaveNota = $spdNFe->ConsultarNF($chaveNota);
echo $chaveNota;
}
catch(Exception $e)
{
echo $e;
}
unset($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>
Exemplo de retorno do método:
<retConsSitNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>2</tpAmb><verAplic>PR-v3_6_7</verAplic><cStat>100</cStat><xMotivo>Autorizado o uso da NF-e</xMotivo><cUF>41</cUF><dhRecbto>2020-08-26T15:22:08-03:00</dhRecbto><chNFe>41160929062609000177552910003123421004640328</chNFe><protNFe versao="3.10"><infProt Id="ID141160000760604"><tpAmb>2</tpAmb><verAplic>PR-v3_6_7</verAplic><chNFe>41160929062609000177552910003123421004640328</chNFe><dhRecbto>2020-08-26T15:21:24-03:00</dhRecbto><nProt>141160000760604</nProt><digVal>hCm7VA2TpfJSa69oqOAN7Pa0i1g=</digVal><cStat>100</cStat><xMotivo>Autorizado o uso da NF-e</xMotivo></infProt></protNFe></retConsSitNFe>
Gerar PDF: Método do componente NF-e que gera o PDF da NF-e a partir do XML Autorizado da nota. Tem como parâmetro o número do Lote, o XML da nota Autorizado, o modelo RTM do componente NF-e, o formato de saída e o diretório para gravação do arquivo.
<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try
{
$chaveNFe = $_POST["chaveNota"];
$XML = file_get_contents("C:\\xampp\\xamppfiles\\htdocs\\my portable files\\XmlDestinatario\\".$chaveNFe."-nfe.xml") ;
$spdNFe->ExportarDanfe("00001", $XML, $spdNFe->ModeloRetrato, 1, "C:\\xampp\\xamppfiles\\htdocs\\my portable files\\PDF\\".$chaveNFe.".PDF");
}
catch(Exception $e)
{
echo $e;
}
unset($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>
Clique aqui e veja como enviar e-mail com o componente direto do PHP.
Também é possível auditar/validar o XML da NFe antes de fazer o envio. Para isto, usa-se o método AuditorValidarXml , que tem como parâmetro o XML da NFe e o separador do retorno.
<?php include("instanciaComponente.php");// Arquivo PHP que instancia o componente e passa as configurações
try
{
$xml = $_POST["xmlNFe"]; //Configurações previas e necessárias...
$spdNFe->AuditorExibirRegrasValidacao = true;
$spdNFe->AuditorCodigoProduto = 1;
$spdNFe->AuditorModoOperacao = 0;
$spdNFe->AuditorEstagio = 0;
$spdNFe->AuditorTipoResposta = 1;
$spdNFe->AuditorDiretorioEsquemas = "C:\\xampp\\htdocs\\my portable files\\Esquemas\\Auditor";
$spdNFe->AuditorDiretorioTemplates = "C:\\xampp\\htdocs\\my portable files\\templates\\Auditor";
$spdNFe->AuditorDiretorioRegras = "C:\\xampp\\htdocs\\my portable files\\templates\\Auditor\\Regras";
$xmlResposta = $spdNFe->AuditorValidarXml($xml, "|");
echo $xmlResposta;
}
catch(Exception $e)
{
echo $e;
}
?>
Exemplo de retorno do método:
{"notas":[{"ID":"Nota NFe41160929062609000177557450003123421004640329","valido":"XML Valido"}],"tags":[],"helper":[]}
É possível importar um XML de uma NF-e para o DataSet do componente NF-e como segue o exemplo:
<?php include("instanciaComponente.php");
try
{
$XML = $_POST["xmlNFe"];
$spdNFeDataSets = $spdNFe->ConverterXmlParaDataSet($XML,"pl_009"); //informações da NF-e
$versao_A02 = $spdNFeDataSets->GetCampo("versao_A02");
$Id_A03 = $spdNFeDataSets->GetCampo("Id_A03");
$cUf_B02 = $spdNFeDataSets->GetCampo("cUf_B02");
$cNF_B03 = $spdNFeDataSets->GetCampo("cNF_B03");
$natOp_B04 = $spdNFeDataSets->GetCampo("natOp_B04");
$indPag_B05 = $spdNFeDataSets->GetCampo("indPag_B05");
$mod_B06 = $spdNFeDataSets->GetCampo("mod_B06");
$serie_B07 = $spdNFeDataSets->GetCampo("serie_B07");
$nNF_B08 = $spdNFeDataSets->GetCampo("nNF_B08");
$dhEmi_B09 = $spdNFeDataSets->GetCampo("dhEmi_B09");
$dhSaiEnt_B10 = $spdNFeDataSets->GetCampo("dhSaiEnt_B10");
$tpNF_B11 = $spdNFeDataSets->GetCampo("tpNF_B11");
$idDest_B11a = $spdNFeDataSets->GetCampo("idDest_B11a");
$cMunFG_B12 = $spdNFeDataSets->GetCampo("cMunFG_B12");
$tpImp_B21 = $spdNFeDataSets->GetCampo("tpImp_B21");
$tpEmis_B22 = $spdNFeDataSets->GetCampo("tpEmis_B22");
$cDV_B23 = $spdNFeDataSets->GetCampo("cDV_B23");
$tpAmb_B24 = $spdNFeDataSets->GetCampo("tpAmb_B24");
$finNFe_B25 = $spdNFeDataSets->GetCampo("finNFe_B25");
$indFinal_B25a = $spdNFeDataSets->GetCampo("indFinal_B25a");
$indPres_B25b = $spdNFeDataSets->GetCampo("indPres_B25b");
$procEmi_B26 = $spdNFeDataSets->GetCampo("procEmi_B26");
$verProc_B27 = $spdNFeDataSets->GetCampo("verProc_B27");
//Informações do Emitente
$CNPJ_C02 = $spdNFeDataSets->GetCampo("CNPJ_C02");
$xNome_C03 = $spdNFeDataSets->GetCampo("xNome_C03");
//Informações do Destinatário
$CNPJ_E02 = $spdNFeDataSets->GetCampo("CNPJ_E02");
$xNome_E04 = $spdNFeDataSets->GetCampo("xNome_E04");
//Informações do Item da Nota
$spdNFeDataSets->FindDataSet("H")->First();
while( $spdNFeDataSets->FindDataSet("H")->Eof() === false )
{
$nItem_H02 = $spdNFeDataSets->GetCampo("nItem_H02");
$xProd_I04 = $spdNFeDataSets->GetCampo("xProd_I04");
$vProd_I11 = $spdNFeDataSets->GetCampo("vProd_I11");
$CSOSN_N12a = $spdNFeDataSets->GetCampo("CSOSN_N12a");
$spdNFeDataSets->FindDataSet("H")->Next();
}
//Informações das Faturas
$spdNFeDataSets->FindDataSet("Y")->First();
while( $spdNFeDataSets->FindDataSet("Y")->Eof() === false)
{
$nFat = $spdNFeDataSets->GetCampo("nFat_Y03");
$vOrig = $spdNFeDataSets->GetCampo("vOrig_Y04");
$vOrig = $spdNFeDataSets->GetCampo("vDesc_Y05");
$vLiq = $spdNFeDataSets->GetCampo("vLiq_Y06");
$spdNFeDataSets->FindDataSet("Y")->Next();
}
//Informações das Duplicatas
$spdNFeDataSets->FindDataSet("Dup")->First();
while( $spdNFeDataSets->FindDataSet("Dup")->Eof() === false)
{
$nroDup = $spdNFeDataSets->GetCampo("nDup_Y08");
$venc = $spdNFeDataSets->GetCampo("dVenc_Y09");
$vDup = $spdNFeDataSets->GetCampo("vDup_Y10");
$spdNFeDataSets->FindDataSet("Dup")->Next();
}
}
catch(Exception $e)
{
echo $e;
}
unset($spdNFe); //Destroi a instancia da NFeX.dll
unset($spdNFeDataSets); //Destroi a instancia daNfeDataSetX.dll
?>
Lista de Tipos dentro do DataSet
{A - Dados da Nota Fiscal eletrônica}
{B - Identificação da Nota Nota Fiscal Eletrônica }
{C - Identificação do Emitente da Nota Nota Fiscal Eletrônica }
{D - Identificação do Fisco Emitente da Nota Nota Fiscal Eletrônica }
{E - Identificação do Destinatário da Nota Nota Fiscal Eletrônica }
{F - Identificação do Local da Retirada da Nota Nota Fiscal Eletrônica }
{G - Identificação do Local da Entrega da Nota Nota Fiscal Eletrônica }
{H - Detalhamento de Produtos e Serviços da Nota Nota Fiscal Eletrônica }
{I - Produtos e Serviços da Nota Nota Fiscal Eletrônica }
{J - Detalhamento Específico de Veículos Novos }
{K - Detalhamento Específico de Medicamentos }
{L - Detalhamento Específico de Armamentos }
{M - Tributos Incidentes no Produto ou Serviço }
{N - ICMS Normal e ST } {O - Imposto sobre Produto Industrializado }
{P - Imposto de Importação }
{Q - PIS }
{R - PIS ST }
{S - COFINS }
{T - COFINS ST }
{U - ISSQN }
{V - Informações Adicionais do Item }
{W - Valores Totais da NFe }
{X - Informações do Transporte da NFe }
{Y - Dados da Cobrança }
{Z - Informações Adicionais da NFe }
Comentários
0 comentário
Por favor, entre para comentar.