1
I’m trying to select the nós
, but is making an error of Access Violation, what I could improve on this code so there is no error?
procedure TfrmDataB.sbtnAbrirClick(Sender: TObject);
var
xmlNCab, xmlNItm : IXMLNode;
//Nota Fiscal
cNF, nNF, dEmi, verProc, serie : String;
//emit + enderEmit
cnpj, cpf, xNome, xFant, IE,
xLog, nro, xBairro, cMun, xMun, uf, cep, cPais, xPais,
fone : String;
//prod
cProd, xProd, uCom, qCom, vUnCom, vProd : String;
function funcvarXML(xmlNTag : IXMLNode): WideString;
begin
if not (xmlNTag.ChildNodes.First = nil) then
Result := xmlNTag.ChildNodes.First.Text;
end;
begin
//
if not (opndlg_nfe.FileName = '') then Exit;
// Lendo o arquivo pelas TAGs...
if opndlg_nfe.Execute then
xmldoc_nfe.LoadFromFile(opndlg_nfe.FileName);
xmldoc_nfe.Active := true;
// Leitura Dados da Nota Fiscal...
xmlNCab := xmldoc_nfe.DocumentElement.childNodes.First.ChildNodes.FindNode('ide');
if not (xmlNCab.ChildNodes.First = nil) then
begin
cNF := funcvarXML(xmlNCab.ChildNodes['cNF' ]); // Código sequencial NFe
nNF := funcvarXML(xmlNCab.ChildNodes['nNF' ]); // Número da Nota Fiscal
dEmi := funcvarXML(xmlNCab.ChildNodes['dEmi' ]); // Data Emissão Nota Fiscal
verProc := funcvarXML(xmlNCab.ChildNodes['verProc']); // Descrição da Nota Fiscal
serie := funcvarXML(xmlNCab.ChildNodes['serie' ]); // Série da Nota Fiscal
end;
// Leitura Dados do Fornecedor...
xmlNCab := xmldoc_nfe.DocumentElement.childNodes.First.ChildNodes.FindNode('emit');
if not (xmlNCab.ChildNodes.First = Nil) then
begin
cnpj := funcvarXML(xmlNCab.ChildNodes['CNPJ' ]); // CGC Fornecedor
cpf := funcvarXML(xmlNCab.ChildNodes['CPF' ]); // CPF Fornecedor
xNome := funcvarXML(xmlNCab.ChildNodes['xNome' ]); // Razão Social do Fornecedor
xFant := funcvarXML(xmlNCab.ChildNodes['xFant' ]); // Nome Fantasia
IE := funcvarXML(xmlNCab.ChildNodes['IE' ]); // Inscrição Estadual
// Leitura Dados Endereços do Fornecedor...
xmlNItm := xmlNCab.ChildNodes['enderEmit'];
if not (xmlNItm.ChildNodes.First = Nil) then
begin
xLog := funcvarXML(xmlNItm.ChildNodes['xLgr' ]); // Logradouro
nro := funcvarXML(xmlNItm.ChildNodes['nro' ]); // Número
xBairro := funcvarXML(xmlNItm.ChildNodes['xBairro']); // Bairro
cMun := funcvarXML(xmlNItm.ChildNodes['cMun' ]); // Código Município IBGE
xMun := funcvarXML(xmlNItm.ChildNodes['xMun' ]); // Nome Município
uf := funcvarXML(xmlNItm.ChildNodes['UF' ]); // Unidade Federação
cep := funcvarXML(xmlNItm.ChildNodes['CEP' ]); // CEP
cPais := funcvarXML(xmlNItm.ChildNodes['cPais' ]); // Código Pais BACEN
xPais := funcvarXML(xmlNItm.ChildNodes['xPais' ]); // Nome Pais
fone := funcvarXML(xmlNItm.ChildNodes['fone' ]); // Telefone
end;
end;
// Leitura Dados Itens da Nota Fiscal...
xmlNCab := xmldoc_nfe.DocumentElement.childNodes.First.ChildNodes.FindNode('det');
while not (xmlNCab = Nil) do
begin
xmlNCab.ChildNodes.First.ChildNodes.FindNode('det');
xmlNItm := xmlNCab.ChildNodes['prod'];
if not (xmlNItm.ChildNodes.First = Nil) then
begin
cProd := funcvarXML(xmlNItm.ChildNodes['cProd' ]); // Código do produto CFOP
xProd := funcvarXML(xmlNItm.ChildNodes['xProd' ]); // Nome do produto
uCom := funcvarXML(xmlNItm.ChildNodes['uCom' ]); // Sigla unidade da embalagem
qCom := funcvarXML(xmlNItm.ChildNodes['qCom' ]); // Quantidade do produto (4dec,S/M)
vUnCom := funcvarXML(xmlNItm.ChildNodes['vUnCom']); // Valor unitário do produto (4dec,S/M)
vProd := funcvarXML(xmlNItm.ChildNodes['vProd' ]); // Valor total do produto (2dec,S/M)
end;
xmlNCab := xmlNCab.NextSibling;
end;
end;
Error on this line if not (xmlNCab.ChildNodes.First = nil) then
Follows structure of . XML
- <ide>
<cUF>00</cUF>
<cNF>0000000</cNF>
<natOp>--------------------</natOp>
<indPag>0</indPag>
<mod>55</mod>
<serie>1</serie>
<nNF>1455</nNF>
<dEmi>2012-07-28</dEmi>
<tpNF>1</tpNF>
<cMunFG>0000000</cMunFG>
<tpImp>1</tpImp>
<tpEmis>1</tpEmis>
<cDV>2</cDV>
<tpAmb>1</tpAmb>
<finNFe>1</finNFe>
<procEmi>0</procEmi>
<verProc>1.75.0.0</verProc>
</ide>
- <emit>
<CNPJ>00000000000000</CNPJ>
<xNome>SUPER. xxxxxxxx</xNome>
<xFant>SUPERMERCADO xxxxxxxxx</xFant>
- <enderEmit>
<xLgr>ALGUEM</xLgr>
<nro>163</nro>
<xBairro>CENTRO</xBairro>
<cMun>000000</cMun>
<xMun>XXXXXXXXXX</xMun>
<UF>XX</UF>
<CEP>00000000</CEP>
<cPais>1058</cPais>
<xPais>BRASIL</xPais>
<fone>0000000000</fone>
</enderEmit>
<IE>20000000</IE>
<CRT>3</CRT>
</emit>
- <dest>
<CNPJ>00000000000000</CNPJ>
<xNome>xxxxxxxxxxxxxxxxxxxxxxxx</xNome>
- <enderDest>
<xLgr>xxxxxxxxxxxxxxxxxxxxxxxxxxx</xLgr>
<nro>163</nro>
<xBairro>xxxxxxxxx</xBairro>
<cMun>0000000</cMun>
<xMun>xxxxxxxxxx</xMun>
<UF>xx</UF>
<CEP>00000000</CEP>
<cPais>1058</cPais>
<xPais>BRASIL</xPais>
<fone>0000000000</fone>
</enderDest>
<IE>200852949</IE>
<email>[email protected]</email>
</dest>
- <det nItem="1">
- <prod>
<cProd>00000000001</cProd>
<cEAN />
<xProd>LARANJA</xProd>
<NCM>08109000</NCM>
<CFOP>5102</CFOP>
<uCom>KG</uCom>
<qCom>1.0000</qCom>
<vUnCom>1.2000000000</vUnCom>
<vProd>1.20</vProd>
<cEANTrib />
<uTrib>KG</uTrib>
<qTrib>1.0000</qTrib>
<vUnTrib>1.2000000000</vUnTrib>
<indTot>1</indTot>
</prod>
Have you debugged? In which statement exactly does the error occur?
– Filipe.Fonseca
Before beginning this instruction, I click, and the Open Dialog opens, however, before executing the instruction, it stops. I will debug again, to present the line.
– Ramon Ruan
@Fonseca, I put the line of error at the end of the question...
– Ramon Ruan
@Fonseca, I removed the ifs and he presented the same error, however, in this line
cNF := funcvarXML(xmlNCab.ChildNodes['cNF' ]); // Código sequencial NFe
– Ramon Ruan
Put the xml structure please.
– Filipe.Fonseca
@Filipe.Fonseca, the structure is in the question.
– Ramon Ruan