Tente
nContador = 1
HReadSeek(CadProdutos,Produto,ArqNotas.Produto)
FOR EACH ArqNotas ON RegistroSeq WHERE "Registro = " + CadNotas.Registro
XMLWrite("XML","/NFe/infNFe/det/@nItem",NoSpace(NumToString(nContador,"2d")))
XMLWrite("XML","/NFe/infNFe/det/prod/cProd", NoSpace(NumToString(ArqNotas.Produto,"13d")))
XMLWrite("XML","/NFe/infNFe/det/prod/cEAN", NoSpace(CadProdutos.EAN))
XMLWrite("XML","/NFe/infNFe/det/prod/xProd", CadProdutos.Descricao)
XMLWrite("XML","/NFe/infNFe/det/prod/CFOP", ArqNotas.Operacao[[1 TO 4]])
XMLWrite("XML","/NFe/infNFe/det/prod/uCom", CadProdutos.Medida)
XMLWrite("XML","/NFe/infNFe/det/prod/qCom", NoSpace(NumToString(ArqNotas.Quantidade,"10d")))
XMLWrite("XML","/NFe/infNFe/det/prod/vUnCom", NoSpace(NumToString(ArqNotas.Produto,"12.4f")))
XMLWrite("XML","/NFe/infNFe/det/prod/cEANTrib", "")
XMLWrite("XML","/NFe/infNFe/det/prod/uTrib", CadProdutos.Medida)
XMLWrite("XML","/NFe/infNFe/det/prod/qTrib", NoSpace(NumToString(ArqNotas.Quantidade,"10d")))
XMLWrite("XML","/NFe/infNFe/det/prod/vUnTrib", NoSpace(NumToString(ArqNotas.Produto,"12.4f")))
XMLWrite("XML","/NFe/infNFe/det/prod/indTot", "1")
nContador++
HReadNext(CadProdutos)
END
Eu fiz com a flexdocs, então, já deixei uma query pronta pra pegar os produtos conforme o número da nota, sendo que neste eu gravei o [nItem] para cada produto que lanço na nota!
Veja se dá certo!