Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

icefusion

Problemas com Componente XMLDocument

Recommended Posts

Olá...gostaria de gerar algo do tipo!

<cobranca>
   <fatura>
	  <numero>1</numero> 
	  <valorOriginal>4444,00</valorOriginal> 
	  <valorDesconto>0</valorDesconto> 
	  <valorLiquido>4444,00</valorLiquido> 
   </fatura>
   <duplicata>
	  <numero>1/A</numero> 
	  <vencimento>2008-06-15</vencimento> 
	  <valor>2222,00</valor> 
   </duplicata>
   <duplicata>
	  <numero>1/B</numero> 
	  <vencimento>2008-06-30</vencimento> 
	  <valor>2222,00</valor> 
   </duplicata>
 </cobranca>

porém quando faço isso com o componente ele só pega o último valor da duplicata!!!

 

o meu código está desta forma!!!

 

 

procedure TF_Nfe.BitBtn1Click(Sender: TObject);
var
   xml : TXMLDocument;
   no_cobranca											   : IXMLNode;

begin
   xml:=TXMLDocument.Create(nil);
   xml.Active:=TRUE;

   no_cobranca:=xml.DocumentElement.AddChild('cobranca');

   no_cobranca.ChildNodes['fatura'].ChildNodes['numero'].NodeValue:=edCobNumNF.Text;
   no_cobranca.ChildNodes['fatura'].ChildNodes['valorOriginal'].NodeValue:=edCobValorTotal.Text;
   no_cobranca.ChildNodes['fatura'].ChildNodes['valorDesconto'].NodeValue:=edCobDesconto.Text;
   no_cobranca.ChildNodes['fatura'].ChildNodes['valorLiquido'].NodeValue:=edCobVlLiquido.Text;

   no_cobranca.ChildNodes['duplicata'].ChildNodes['numero'].NodeValue:=edCobDuplicata1.Text;
   no_cobranca.ChildNodes['duplicata'].ChildNodes['vencimento'].NodeValue:=edCobVencto1.Text;
   no_cobranca.ChildNodes['duplicata'].ChildNodes['valor'].NodeValue:=edCobParValor1.Text;

   no_cobranca.ChildNodes['duplicata'].ChildNodes['numero'].NodeValue:=edCobDuplicata2.Text;
   no_cobranca.ChildNodes['duplicata'].ChildNodes['vencimento'].NodeValue:=edCobVencto2.Text;
   no_cobranca.ChildNodes['duplicata'].ChildNodes['valor'].NodeValue:=edCobParValor2.Text;

   no_cobranca.ChildNodes['duplicata'].ChildNodes['numero'].NodeValue:=edCobDuplicata3.Text;
   no_cobranca.ChildNodes['duplicata'].ChildNodes['vencimento'].NodeValue:=edCobVencto3.Text;
   no_cobranca.ChildNodes['duplicata'].ChildNodes['valor'].NodeValue:=edCobParValor3.Text;

   no_cobranca.ChildNodes['duplicata'].ChildNodes['numero'].NodeValue:=edCobDuplicata4.Text;
   no_cobranca.ChildNodes['duplicata'].ChildNodes['vencimento'].NodeValue:=edCobVencto4.Text;
   no_cobranca.ChildNodes['duplicata'].ChildNodes['valor'].NodeValue:=edCobParValor4.Text;


   empresa:=cbCodEmpresa.Items[cbCodEmpresa.ItemIndex];
   nome_arquivo:='G:\NotaNet\nfe\nota\'+empresa+'_'+edNumeroNF.Text+'.xml';
   xml.SaveToFile(nome_arquivo);

   xml.Active:=False;
   xml:=nil;

end;

 

com esse código ele gera tudo corretamente, apenas quando existe repetição igual no caso da duplicata.....ou se houver vários produtos...quando é 1 só ele gera normal...certinho!!!

É claro que ae só estão as informações de fatura da nota fiscal...tem o corpo da nota, cabeçalho, rodapé....tudo certinho...

desde já obrigado!!

 

o resultado do código acima é o seguinte:

 

<cobranca>
   <fatura>
	  <numero>1</numero> 
	  <valorOriginal>4444,00</valorOriginal> 
	  <valorDesconto>0</valorDesconto> 
	  <valorLiquido>4444,00</valorLiquido> 
   </fatura>
   <duplicata>
	  <numero>1/B</numero> 
	  <vencimento>2008-06-30</vencimento> 
	  <valor>2222,00</valor> 
   </duplicata>
 </cobranca>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas o fonte que você tem postado, não parece gerar a estrutura que deseja, visto que você referência fatura mas esta criando nodos de duplicata.

 

 

opa...desculpe..eu havia colocado errado...ja o corrigi!!!

 

 

mas o problema correto é que não consigo repetir uma mesma tag!!!

 

se tenho q repetir

 

<duplicata>
	<numero>1/A</numero>
</duplicata>
<duplicata>
	<numero>1/B</numero>
</duplicata>
eu naum consigo!!!o componente que estou usando é o XMLDocument!!!! então tudo ae gira em torno desse componente!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa...consegui descobrir....

 

 

quando ouver esse tipo de repetição como em duplicatas, nota fiscal e pedidos eu tenho q usar ao invés dessa forma:

 

no_cobranca:=xml.DocumentElement.AddChild('cobranca');

   no_cobranca.ChildNodes['fatura'].ChildNodes['numero'].NodeValue:=edCobNumNF.Text;
   no_cobranca.ChildNodes['fatura'].ChildNodes['valorOriginal'].NodeValue:=edCobValorTotal.Text;
   no_cobranca.ChildNodes['fatura'].ChildNodes['valorDesconto'].NodeValue:=edCobDesconto.Text;
   no_cobranca.ChildNodes['fatura'].ChildNodes['valorLiquido'].NodeValue:=edCobVlLiquido.Text;

 

esta forma aqui:

 

no_notafiscal:=xml.Node.AddChild('NotaFiscal');
  no_cobranca:=xml.DocumentElement.AddChild('cobranca');

  for i:=1 to 4 do begin
	  no_cobranca.AddChild('fatura').ChildNodes['numero'].NodeValue:=edit.text
  end;

 

ou assim

 

no_cobranca.AddChild('fatura').ChildNodes['numero'].NodeValue:=inttostr(1);

no_cobranca.AddChild('fatura').ChildNodes['numero'].NodeValue:=inttostr(2);

no_cobranca.AddChild('fatura').ChildNodes['numero'].NodeValue:=inttostr(3);

no_cobranca.AddChild('fatura').ChildNodes['numero'].NodeValue:=inttostr(4);

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.