XML Bloco X Delphi

Delphi

XML

14/04/2022

Olá, bom dia!

Preciso percorrer um XML com o Delphi para verificar a alterar algumas informação, preciso verificar o valor do do campo:
<ValorTotalLiquido>xxx</ValorTotalLiquido>

Este valor fica dentro de alguns nodes, porém estou conseguindo acessar apenas o primeiro ValorTotalLiquido do primeiro produto.

xmlBlocoX := TXMLDocument.Create(self);
xmlBlocoX.LoadFromFile(vloc_FileName);
vloc_TotXML := xmlBlocoX.ChildNodes['ReducaoZ'].ChildNodes['Mensagem'].ChildNodes['Ecf'].ChildNodes['DadosReducaoZ'].ChildNodes['TotalizadoresParciais'];
        for i := 0 to vloc_TotXML.ChildNodes.Count - 1 do
          with vloc_TotXML.ChildNodes[i] do
          begin                                      
            vloc_TotProdXML := vloc_TotXML.ChildNodes['TotalizadorParcial'].ChildNodes['ProdutosServicos'];
            for X := 0 to vloc_TotProdXML.ChildNodes.Count - 1 do
              with vloc_TotProdXML.ChildNodes[X] do
              begin
                vloc_TotProdXML.ChildNodes['Produto'].ChildNodes['ValorTotalLiquido'].Text := '3.50';
              end;
          end;          
xmlBlocoX.SaveToFile(vloc_FileName);


Segue o XML usado:
<?xml version="1.0" encoding="UTF-8"?>
<ReducaoZ Versao="1.0">
	<Mensagem>		
		<Ecf>			
			<DadosReducaoZ>				
				<TotalizadoresParciais>
					<TotalizadorParcial>
						<Nome>fffffff</Nome>
						<Valor>0,00</Valor>
						<ProdutosServicos>
							<Produto>
								<Descricao>Pão</Descricao>
								<CodigoGTIN/>
								<CodigoCEST/>
								<CodigoNCMSH>FF</CodigoNCMSH>
								<CodigoProprio>760</CodigoProprio>
								<Quantidade>1,000</Quantidade>
								<Unidade>UN</Unidade>
								<ValorDesconto>0,00</ValorDesconto>
								<ValorAcrescimo>0,00</ValorAcrescimo>
								<ValorCancelamento>89,90</ValorCancelamento>
								<ValorTotalLiquido>0,00</ValorTotalLiquido>
							</Produto>
						</ProdutosServicos>
					</TotalizadorParcial>
					<TotalizadorParcial>
						<Nome>TTTTTTTT</Nome>
						<Valor>353,50</Valor>
						<ProdutosServicos>
							<Produto>
								<Descricao>Guarana</Descricao>
								<CodigoGTIN/>
								<CodigoCEST/>
								<CodigoNCMSH>22019000</CodigoNCMSH>
								<CodigoProprio>11</CodigoProprio>
								<Quantidade>7,000</Quantidade>
								<Unidade>UN</Unidade>
								<ValorDesconto>0,00</ValorDesconto>
								<ValorAcrescimo>0,00</ValorAcrescimo>
								<ValorCancelamento>0,00</ValorCancelamento>
								<ValorTotalLiquido>28,00</ValorTotalLiquido>
							</Produto>
							<Produto>
								<Descricao>Pepsi</Descricao>
								<CodigoGTIN/>
								<CodigoCEST/>
								<CodigoNCMSH>TTTTTTT</CodigoNCMSH>
								<CodigoProprio>10</CodigoProprio>
								<Quantidade>3,000</Quantidade>
								<Unidade>UN</Unidade>
								<ValorDesconto>0,00</ValorDesconto>
								<ValorAcrescimo>0,00</ValorAcrescimo>
								<ValorCancelamento>0,00</ValorCancelamento>
								<ValorTotalLiquido>12,00</ValorTotalLiquido>
							</Produto>	
							<Produto>
								<Descricao>Coca-Cola</Descricao>
								<CodigoGTIN/>
								<CodigoCEST/>
								<CodigoNCMSH>TTTTTTT</CodigoNCMSH>
								<CodigoProprio>10</CodigoProprio>
								<Quantidade>4,000</Quantidade>
								<Unidade>UN</Unidade>
								<ValorDesconto>0,00</ValorDesconto>
								<ValorAcrescimo>0,00</ValorAcrescimo>
								<ValorCancelamento>0,00</ValorCancelamento>
								<ValorTotalLiquido>15,00</ValorTotalLiquido>
							</Produto>								
						</ProdutosServicos>
					</TotalizadorParcial>
				</TotalizadoresParciais>
			</DadosReducaoZ>
		</Ecf>
	</Mensagem>	
</ReducaoZ>


Não identifiquei o que posso alterar no meu código, ou o que está errado. Mas preciso acessar o <ValorTotalLiquido>x</ValorTotalLiquido> de todos os produtos. Primeiro, verificando no primeiro grupo de <TotalizadorParcial>, verificando o produto contido nele, e depois ir para o próximo grupo <TotalizadorParcial>, verificando os produtos contidos nele.

Já tentei ver alguns tutoriais, mas não encontrei solução para isso.

Se alguém tiver uma ideia e puder me ajudar, eu fico agradecido!
Obrigado desde já!
Jackson Borba

Jackson Borba

Curtidas 0

Melhor post

Paulo

Paulo

14/04/2022

Bom dia, assiste esse video ai.

https://www.youtube.com/watch?v=GV3R8c6bCxg
GOSTEI 2

Mais Respostas

Assis Ferreira

Assis Ferreira

14/04/2022

Olá, bom dia!

Preciso percorrer um XML com o Delphi para verificar a alterar algumas informação, preciso verificar o valor do do campo:
<ValorTotalLiquido>xxx</ValorTotalLiquido>

Este valor fica dentro de alguns nodes, porém estou conseguindo acessar apenas o primeiro ValorTotalLiquido do primeiro produto.

xmlBlocoX := TXMLDocument.Create(self);
xmlBlocoX.LoadFromFile(vloc_FileName);
vloc_TotXML := xmlBlocoX.ChildNodes['ReducaoZ'].ChildNodes['Mensagem'].ChildNodes['Ecf'].ChildNodes['DadosReducaoZ'].ChildNodes['TotalizadoresParciais'];
        for i := 0 to vloc_TotXML.ChildNodes.Count - 1 do
          with vloc_TotXML.ChildNodes[i] do
          begin                                      
            vloc_TotProdXML := vloc_TotXML.ChildNodes['TotalizadorParcial'].ChildNodes['ProdutosServicos'];
            for X := 0 to vloc_TotProdXML.ChildNodes.Count - 1 do
              with vloc_TotProdXML.ChildNodes[X] do
              begin
                vloc_TotProdXML.ChildNodes['Produto'].ChildNodes['ValorTotalLiquido'].Text := '3.50';
              end;
          end;          
xmlBlocoX.SaveToFile(vloc_FileName);


Segue o XML usado:
<?xml version="1.0" encoding="UTF-8"?>
<ReducaoZ Versao="1.0">
	<Mensagem>		
		<Ecf>			
			<DadosReducaoZ>				
				<TotalizadoresParciais>
					<TotalizadorParcial>
						<Nome>fffffff</Nome>
						<Valor>0,00</Valor>
						<ProdutosServicos>
							<Produto>
								<Descricao>Pão</Descricao>
								<CodigoGTIN/>
								<CodigoCEST/>
								<CodigoNCMSH>FF</CodigoNCMSH>
								<CodigoProprio>760</CodigoProprio>
								<Quantidade>1,000</Quantidade>
								<Unidade>UN</Unidade>
								<ValorDesconto>0,00</ValorDesconto>
								<ValorAcrescimo>0,00</ValorAcrescimo>
								<ValorCancelamento>89,90</ValorCancelamento>
								<ValorTotalLiquido>0,00</ValorTotalLiquido>
							</Produto>
						</ProdutosServicos>
					</TotalizadorParcial>
					<TotalizadorParcial>
						<Nome>TTTTTTTT</Nome>
						<Valor>353,50</Valor>
						<ProdutosServicos>
							<Produto>
								<Descricao>Guarana</Descricao>
								<CodigoGTIN/>
								<CodigoCEST/>
								<CodigoNCMSH>22019000</CodigoNCMSH>
								<CodigoProprio>11</CodigoProprio>
								<Quantidade>7,000</Quantidade>
								<Unidade>UN</Unidade>
								<ValorDesconto>0,00</ValorDesconto>
								<ValorAcrescimo>0,00</ValorAcrescimo>
								<ValorCancelamento>0,00</ValorCancelamento>
								<ValorTotalLiquido>28,00</ValorTotalLiquido>
							</Produto>
							<Produto>
								<Descricao>Pepsi</Descricao>
								<CodigoGTIN/>
								<CodigoCEST/>
								<CodigoNCMSH>TTTTTTT</CodigoNCMSH>
								<CodigoProprio>10</CodigoProprio>
								<Quantidade>3,000</Quantidade>
								<Unidade>UN</Unidade>
								<ValorDesconto>0,00</ValorDesconto>
								<ValorAcrescimo>0,00</ValorAcrescimo>
								<ValorCancelamento>0,00</ValorCancelamento>
								<ValorTotalLiquido>12,00</ValorTotalLiquido>
							</Produto>	
							<Produto>
								<Descricao>Coca-Cola</Descricao>
								<CodigoGTIN/>
								<CodigoCEST/>
								<CodigoNCMSH>TTTTTTT</CodigoNCMSH>
								<CodigoProprio>10</CodigoProprio>
								<Quantidade>4,000</Quantidade>
								<Unidade>UN</Unidade>
								<ValorDesconto>0,00</ValorDesconto>
								<ValorAcrescimo>0,00</ValorAcrescimo>
								<ValorCancelamento>0,00</ValorCancelamento>
								<ValorTotalLiquido>15,00</ValorTotalLiquido>
							</Produto>								
						</ProdutosServicos>
					</TotalizadorParcial>
				</TotalizadoresParciais>
			</DadosReducaoZ>
		</Ecf>
	</Mensagem>	
</ReducaoZ>


Não identifiquei o que posso alterar no meu código, ou o que está errado. Mas preciso acessar o <ValorTotalLiquido>x</ValorTotalLiquido> de todos os produtos. Primeiro, verificando no primeiro grupo de <TotalizadorParcial>, verificando o produto contido nele, e depois ir para o próximo grupo <TotalizadorParcial>, verificando os produtos contidos nele.

Já tentei ver alguns tutoriais, mas não encontrei solução para isso.

Se alguém tiver uma ideia e puder me ajudar, eu fico agradecido!
Obrigado desde já!




É para nota fiscal?
GOSTEI 0
Jackson Borba

Jackson Borba

14/04/2022

Olá, bom dia!

Preciso percorrer um XML com o Delphi para verificar a alterar algumas informação, preciso verificar o valor do do campo:
<ValorTotalLiquido>xxx</ValorTotalLiquido>

Este valor fica dentro de alguns nodes, porém estou conseguindo acessar apenas o primeiro ValorTotalLiquido do primeiro produto.

xmlBlocoX := TXMLDocument.Create(self);
xmlBlocoX.LoadFromFile(vloc_FileName);
vloc_TotXML := xmlBlocoX.ChildNodes['ReducaoZ'].ChildNodes['Mensagem'].ChildNodes['Ecf'].ChildNodes['DadosReducaoZ'].ChildNodes['TotalizadoresParciais'];
        for i := 0 to vloc_TotXML.ChildNodes.Count - 1 do
          with vloc_TotXML.ChildNodes[i] do
          begin                                      
            vloc_TotProdXML := vloc_TotXML.ChildNodes['TotalizadorParcial'].ChildNodes['ProdutosServicos'];
            for X := 0 to vloc_TotProdXML.ChildNodes.Count - 1 do
              with vloc_TotProdXML.ChildNodes[X] do
              begin
                vloc_TotProdXML.ChildNodes['Produto'].ChildNodes['ValorTotalLiquido'].Text := '3.50';
              end;
          end;          
xmlBlocoX.SaveToFile(vloc_FileName);


Segue o XML usado:
<?xml version="1.0" encoding="UTF-8"?>
<ReducaoZ Versao="1.0">
	<Mensagem>		
		<Ecf>			
			<DadosReducaoZ>				
				<TotalizadoresParciais>
					<TotalizadorParcial>
						<Nome>fffffff</Nome>
						<Valor>0,00</Valor>
						<ProdutosServicos>
							<Produto>
								<Descricao>Pão</Descricao>
								<CodigoGTIN/>
								<CodigoCEST/>
								<CodigoNCMSH>FF</CodigoNCMSH>
								<CodigoProprio>760</CodigoProprio>
								<Quantidade>1,000</Quantidade>
								<Unidade>UN</Unidade>
								<ValorDesconto>0,00</ValorDesconto>
								<ValorAcrescimo>0,00</ValorAcrescimo>
								<ValorCancelamento>89,90</ValorCancelamento>
								<ValorTotalLiquido>0,00</ValorTotalLiquido>
							</Produto>
						</ProdutosServicos>
					</TotalizadorParcial>
					<TotalizadorParcial>
						<Nome>TTTTTTTT</Nome>
						<Valor>353,50</Valor>
						<ProdutosServicos>
							<Produto>
								<Descricao>Guarana</Descricao>
								<CodigoGTIN/>
								<CodigoCEST/>
								<CodigoNCMSH>22019000</CodigoNCMSH>
								<CodigoProprio>11</CodigoProprio>
								<Quantidade>7,000</Quantidade>
								<Unidade>UN</Unidade>
								<ValorDesconto>0,00</ValorDesconto>
								<ValorAcrescimo>0,00</ValorAcrescimo>
								<ValorCancelamento>0,00</ValorCancelamento>
								<ValorTotalLiquido>28,00</ValorTotalLiquido>
							</Produto>
							<Produto>
								<Descricao>Pepsi</Descricao>
								<CodigoGTIN/>
								<CodigoCEST/>
								<CodigoNCMSH>TTTTTTT</CodigoNCMSH>
								<CodigoProprio>10</CodigoProprio>
								<Quantidade>3,000</Quantidade>
								<Unidade>UN</Unidade>
								<ValorDesconto>0,00</ValorDesconto>
								<ValorAcrescimo>0,00</ValorAcrescimo>
								<ValorCancelamento>0,00</ValorCancelamento>
								<ValorTotalLiquido>12,00</ValorTotalLiquido>
							</Produto>	
							<Produto>
								<Descricao>Coca-Cola</Descricao>
								<CodigoGTIN/>
								<CodigoCEST/>
								<CodigoNCMSH>TTTTTTT</CodigoNCMSH>
								<CodigoProprio>10</CodigoProprio>
								<Quantidade>4,000</Quantidade>
								<Unidade>UN</Unidade>
								<ValorDesconto>0,00</ValorDesconto>
								<ValorAcrescimo>0,00</ValorAcrescimo>
								<ValorCancelamento>0,00</ValorCancelamento>
								<ValorTotalLiquido>15,00</ValorTotalLiquido>
							</Produto>								
						</ProdutosServicos>
					</TotalizadorParcial>
				</TotalizadoresParciais>
			</DadosReducaoZ>
		</Ecf>
	</Mensagem>	
</ReducaoZ>


Não identifiquei o que posso alterar no meu código, ou o que está errado. Mas preciso acessar o <ValorTotalLiquido>x</ValorTotalLiquido> de todos os produtos. Primeiro, verificando no primeiro grupo de <TotalizadorParcial>, verificando o produto contido nele, e depois ir para o próximo grupo <TotalizadorParcial>, verificando os produtos contidos nele.

Já tentei ver alguns tutoriais, mas não encontrei solução para isso.

Se alguém tiver uma ideia e puder me ajudar, eu fico agradecido!
Obrigado desde já!




É para nota fiscal?


Seria para o envio do arquivo do Bloco X de SC.
O XML está editado, mas o layout é parecido. Não estou conseguindo acessar os produtos dos dois grupos de TotalizadoresParciais, consigo acessar e modificar apenas o primeiro. Preciso verificar o valor liquido, que é a última tag neles.
GOSTEI 0
POSTAR