Public Sub ImpuestosFacturaE()
Dim xDoc As MSXML2.DOMDocument60
Dim xFacturas As MSXML2.IXMLDOMNodeList
Dim xFactura As IXMLDOMNode
Dim xImpuestos As MSXML2.IXMLDOMNodeList
Dim xImpuesto As IXMLDOMNode
Dim xLineas As MSXML2.IXMLDOMNodeList
Dim xLinea As IXMLDOMNode
Dim lngFacturas As Long
Dim lngLineas As Long
Set xDoc = New MSXML2.DOMDocument60
xDoc.async = False
xDoc.validateOnParse = True
Call xDoc.Load(CurrentProject.Path & "\XMLFile1.xml")
'Impuestos totales en la factura
Set xFacturas = xDoc.selectNodes("//Invoices/Invoice")
Debug.Print "Hay " & xFacturas.Length & " factura(s) en el xml"
Debug.Print "============================================"
lngFacturas = 1
For Each xFactura In xFacturas
Debug.Print "Factura nº" & lngFacturas
Debug.Print "-------------------------------------------"
Debug.Print "Resumen de impuestos"
Set xImpuestos = xFactura.selectNodes("TaxesOutputs/Tax")
For Each xImpuesto In xImpuestos
Debug.Print "Impuesto Tipo: " & xImpuesto.selectSingleNode("TaxTypeCode").Text,
Debug.Print "Ratio (%): " & Porcentaje(xImpuesto.selectSingleNode("TaxRate").Text),
Debug.Print "Base: " & Moneda(xImpuesto.selectSingleNode("TaxableBase/TotalAmount").Text),
Debug.Print "Impuesto: " & Moneda(xImpuesto.selectSingleNode("TaxAmount/TotalAmount").Text)
Next
Debug.Print "Totales:"
Debug.Print "Total antes de impuestos: " & Moneda(xFactura.selectSingleNode("InvoiceTotals/TotalGrossAmountBeforeTaxes").Text)
Debug.Print "Total impuestos: " & Moneda(xFactura.selectSingleNode("InvoiceTotals/TotalTaxOutputs").Text)
Debug.Print "Total factura con impuestos: " & Moneda(xFactura.selectSingleNode("InvoiceTotals/InvoiceTotal").Text)
Debug.Print "-------------------------------------------"
Debug.Print "Líneas de la factura"
Debug.Print "Línea", "Elemento", , "Cantidad", "Precio/u", "Coste", "Ratio", "Porcentaje", "Coste imp."
Debug.Print "-------------------------------------------------------------------------------------------------------------------------"
Set xLineas = xFactura.selectNodes("Items/InvoiceLine")
lngLineas = 1
For Each xLinea In xLineas
Debug.Print lngLineas,
Debug.Print Texto(xLinea.selectSingleNode("ItemDescription").Text),
Debug.Print Numero(xLinea.selectSingleNode("Quantity").Text),
Debug.Print Moneda(xLinea.selectSingleNode("UnitPriceWithoutTax").Text),
Debug.Print Moneda(xLinea.selectSingleNode("TotalCost").Text),
Debug.Print xLinea.selectSingleNode("TaxesOutputs/Tax/TaxTypeCode").Text,
Debug.Print Porcentaje(xLinea.selectSingleNode("TaxesOutputs/Tax/TaxRate").Text),
Debug.Print Moneda(xLinea.selectSingleNode("TaxesOutputs/Tax/TaxAmount/TotalAmount").Text)
lngLineas = lngLineas + 1
Next
Debug.Print "-------------------------------------------"
lngFacturas = lngFacturas + 1
Next
Set xDoc = Nothing
End Sub
Public Function PuntoAComa(Valor) As String
If IsNull(Valor) Then
PuntoAComa = 0
Else
PuntoAComa = Replace(Valor, ".", ",")
End If
End Function
Public Function Porcentaje(Valor) As String
If IsNull(Valor) Then
Porcentaje = FormatNumber(0, 2) & "%"
Else
Porcentaje = FormatNumber(PuntoAComa(Valor), 2) & "%"
End If
End Function
Public Function Moneda(Valor) As String
If IsNull(Valor) Then
Moneda = FormatCurrency(0)
Else
Moneda = FormatCurrency(PuntoAComa(Valor))
End If
End Function
Public Function Texto(Valor) As String
Texto = Format(Valor, "!@@@@@@@@@@@@@@@@@@@@@@@@@")
End Function
Public Function Numero(Valor) As String
If IsNull(Valor) Then
Numero = FormatNumber(0, 2)
Else
Numero = FormatNumber(PuntoAComa(Valor), 2)
End If
End Function