Como tengo con facturaE, uso records para generar el XML: (ejemplo)
Código:
TTaxCategory = record
cbc_ID : TFacturaUBLString;
cbc_Percent : TFacturaUBLString;
cbc_BaseUnitMeasure : TFacturaUBLString;
cbc_PerUnitAmount : TFacturaUBLString;
cbc_TaxExemptionReasonCode: TFacturaUBLString;
cbc_TaxExemptionReason : TFacturaUBLString;
cbc_TierRange : TFacturaUBLString;
cbc_TierRatePercent : TFacturaUBLString;
cac_TaxScheme : TTaxScheme;
end;
TTaxSubtotal = record
cbc_TaxableAmount_currencyID : TFacturaUBLString;
cbc_TaxAmount_currencyID : TFacturaUBLString;
cbc_BaseUnitMeasure : TFacturaUBLString;
cbc_PerUnitAmount : TFacturaUBLString;
cbc_TierRange : TFacturaUBLString;
cbc_TierRatePercent : TFacturaUBLString;
cac_TaxCategory : TTaxCategory;
_rttiForceNoTocar :array of Byte; // para que el rtti genere estructura
end;
TTaxTotal = record
cbc_TaxAmount_currencyID : TFacturaUBLString;
cbc_RoundingAmount : TFacturaUBLString;
cbc_TaxEvidenceIndicator : TFacturaUBLString;
cbc_TaxIncludedIndicator : TFacturaUBLString;
cac_TaxSubtotal : array [0..MAXSUBTOTALS] of TTaxSubtotal;
_rttiForceNoTocar :array of Byte; // para que el rtti genere estructura
end;
TAllowanceCharge = record
cbc_ChargeIndicator : TFacturaUBLString; // 'true' para cargo, 'false' para descuento
cbc_AllowanceChargeReason : TFacturaUBLString; // nota del descuento
cbc_Amount_currencyID : TFacturaUBLString; // total del descuento o cargo
_rttiForceNoTocar :array of Byte; // para que el rtti genere estructura
end;
TItem =record
cbc_Description : TFacturaUBLString;
cbc_PackQuantity : TFacturaUBLString;
cbc_PackSizeNumeric : TFacturaUBLString;
cbc_CatalogueIndicator : TFacturaUBLString;
cbc_Name : TFacturaUBLString;
cbc_HazardousRiskIndicator: TFacturaUBLString;
cbc_AdditionalInformation : TFacturaUBLString;
cbc_KeyWord : TFacturaUBLString;
cbc_BrandName : TFacturaUBLString;
cbc_ModelName : TFacturaUBLString;
end;
Con la version 2 de la funcion recordToXML que usa el rtti de Delphi.