No estoy de acuerdo.
Code: Select all | Expand
/* 16/07/2024
CLASSE PER GENERAR EL XML DE VERIFACTU.
=======================================
Classes per a crear el fitxer XML que serà enviat a VERI*FACTU.
En fase de desenvolupament 30/07/2024.
Sembla que ja és operativa en aspectes bàsics. 13/08/2024
*/
#include "Hbxml.ch"
#include "Hbclass.ch"
#include "Fileio.ch"
CLASS TVeriFactu00
// Declaració de les DATA a on s'assignaran els valors a capturar.
// Totes les DATA es gestionaran en modus caràcter o objectes XML.
DATA oXmlTop
DATA oXmlSoapEnvelope
DATA oXmlRegFactuSistemaFacturacion
DATA oXmlCabecera
// Dades pel TAG Cabecera
//DATA cIDVersion
DATA oXmlObligadoEmision
// Dades pel TAG ObligadoEmision
DATA cObligadoEmision_NombreRazon
DATA cObligadoEmision_NIF
DATA oXmlRemisionVoluntaria
// Dades pel TAG RemisionVoluntaria
DATA cFechaFinVeriFactu
DATA cIncidencia
DATA oXmlRemisionRequerimiento
// Dades pel TAG RemisionRequerimiento
DATA cRefRequerimiento
DATA aRegistroFactura INIT {} // -- >> Fins a 1000
// DATA d'ús intern o que no contenen la informació a tractar.
DATA aTree INIT {}
DATA lError
// ACCESS a les DATA per tal de ser usades.
// De momento se aplica la conversión a UTF8, excepto a las huellas.
//ACCESS IDVersion INLINE ( hb_StrToUTF8( alltrim( ::cIDVersion ) ) )
ACCESS ObligadoEmision_NombreRazon INLINE ( hb_StrToUTF8( alltrim( ::cObligadoEmision_NombreRazon ) ) )
ACCESS ObligadoEmision_NIF INLINE ( hb_StrToUTF8( alltrim( ::cObligadoEmision_NIF ) ) )
//ACCESS FechaFinVeriFactu INLINE ( hb_StrToUTF8( alltrim( ::cFechaFinVeriFactu ) ) )
//ACCESS Incidencia INLINE ( hb_StrToUTF8( alltrim( ::cIncidencia ) ) )
ACCESS RefRequerimiento INLINE ( hb_StrToUTF8( alltrim( ::cRefRequerimiento ) ) )
// Métodes per gestionar la classe.
METHOD New( aTree ) CONSTRUCTOR
METHOD ToXML() // Genera estructura XML con los datos.
METHOD GeneraXml( cFichero ) // Vuelca el XML a fichero.
// Añade datos de una factura para ser usados en el momento de generar XML.
METHOD AddFactura( oFactura ) INLINE ( AADD( ::aRegistroFactura, oFactura ) )
ENDCLASS
//---------------------------------------------------------------------------//
METHOD New( ) CLASS TVeriFactu00
//::aTree := aTree
::lError := .f.
Return ( self )
//---------------------------------------------------------------------------//
METHOD ToXML() CLASS TVeriFactu00
Local oXmlBody := Nil
Local nContador := 0
/*
Comienza el Nodo principal--------------------------------------------------
*/
//::oXmlTop := TXmlDocument():new( '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sum="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd" xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">' )
::oXmlTop := TXmlDocument():new( )
::oXmlTop:oRoot:AddBelow( TxmlNode():New( HBXML_TYPE_COMMENT, , , "Primeres proves..." ) )
::oXmlTop:oRoot:AddBelow( TxmlNode():New( HBXML_TYPE_COMMENT, , , "Date: " + DToC( Date() ) + " Time: " + Time() ) )
::oXmlTop:oRoot:AddBelow( TxmlNode():New( HBXML_TYPE_COMMENT, , , "Last access: " + GetEnv( "USERNAME" ) ) )
::oXmlSoapEnvelope := TxmlNode():New( HBXML_TYPE_TAG, "soapenv:Envelope" )
::oXmlTop:oRoot:AddBelow( ::oXmlSoapEnvelope )
::oXmlSoapEnvelope:SetAttribute( "xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope/" )
::oXmlSoapEnvelope:SetAttribute( "xmlns:sum", "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd" )
::oXmlSoapEnvelope:SetAttribute( "xmlns:sum1", "https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd" )
::oXmlSoapEnvelope:SetAttribute( "xmlns:xd", "http://www.w3.org/2000/09/xmldsig#" )
//::oXmlTop:oRoot:AddBelow( ::oXmlSoapEnvelope )
::oXmlSoapEnvelope:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, "soapenv:Header" ) )
oXmlBody := TxmlNode():New( HBXML_TYPE_TAG, "soapenv:Body" )
::oXmlSoapEnvelope:AddBelow( oXmlBody )
/*
Comienza el Nodo RegFactuSistemaFacturacion--------------------------------------------------
*/
::oXmlRegFactuSistemaFacturacion := TxmlNode():New( HBXML_TYPE_TAG, "sum:RegFactuSistemaFacturacion" )
oXmlBody:AddBelow( ::oXmlRegFactuSistemaFacturacion )
/*
Comienza el Nodo Cabecera--------------------------------------------------
*/
::oXmlCabecera := TxmlNode():New( HBXML_TYPE_TAG, "sum1:Cabecera" )
::oXmlRegFactuSistemaFacturacion:AddBelow( ::oXmlCabecera )
//::oXmlCabecera:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'IDVersion', , ::cIDVersion ) )
::oXmlObligadoEmision := TxmlNode():New( HBXML_TYPE_TAG, "sum1:ObligadoEmision" )
::oXmlCabecera:AddBelow( ::oXmlObligadoEmision )
::oXmlObligadoEmision:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NombreRazon', , ::ObligadoEmision_NombreRazon() ) )
::oXmlObligadoEmision:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NIF', , ::ObligadoEmision_NIF() ) )
//::oXmlCabecera:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'TipoRegistroAEAT', , ::cTipoRegistroAEAT ) )
If .Not. Empty( ::cFechaFinVeriFactu ) .or. .Not. Empty( ::cIncidencia )
::oXmlRemisionVoluntaria := TxmlNode():New( HBXML_TYPE_TAG, 'RemisionVoluntaria' )
::oXmlCabecera:AddBelow( ::oXmlRemisionVoluntaria )
If .Not. Empty( ::cFechaFinVeriFactu )
::oXmlRemisionVoluntaria:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'FechaFinVeriFactu', , ::cFechaFinVeriFactu ) )
EndIf
If .Not. Empty( ::cIncidencia )
::oXmlRemisionVoluntaria:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'Incidencia', , ::cIncidencia ) )
EndIf
EndIf
If .Not. Empty( ::cRefRequerimiento )
::oXmlRemisionRequerimiento := TxmlNode():New( HBXML_TYPE_TAG, 'RemisionRequerimiento' )
::oXmlCabecera:AddBelow( ::oXmlRemisionRequerimiento )
::oXmlRemisionRequerimiento:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'RefRequerimiento', , ::RefRequerimiento() ) )
EndIf
/*
Comienza el Nodo RegistroFactura--------------------------------------------------
*/
For nContador := 1 To Len( ::aRegistroFactura )
::oXmlRegFactuSistemaFacturacion:AddBelow( ::aRegistroFactura[nContador]:ToXML() )
End
Return ( Self )
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
METHOD GeneraXML( cFichero ) CLASS TVeriFactu00
Local hDC := 0
/*
Generar fisicamente el fichero----------------------------------------------
*/
//oBlock := ErrorBlock( {| oError | ApoloBreak( oError ) } )
BEGIN SEQUENCE
ferase( cFichero )
hDC := fCreate( cFichero )
if hDC < 0
hDC := 0
endif
::oXmlTop:Write( hDC, HBXML_STYLE_INDENT + HBXML_STYLE_THREESPACES )
fClose( hDC )
hDC := 0
AADD( ::aTree, "Fichero generado " + cFichero + " satisfactoriamente." )
RECOVER // USING oError
::lError := .t.
AADD( ::aTree, "Error el generar el fichero " + cFichero )
END SEQUENCE
//ErrorBlock( oBlock )
// GoWeb( AllTrim( cFichero ) )
Return ( Self )
/* ***************************************************************************** */
/* ***************************************************************************** */
/* ***************************************************************************** */
CLASS RegistroFactura
// Declaració de les DATA a on s'assignaran els valors a capturar.
// Totes les DATA es gestionaran en modus caràcter o objectes XML.
//DATA oXmlRegistroFactura
// Dades pel TAG oXmlRegistroFactura
//DATA oXmlRegistroAlta
// Dades pel TAG RegistroAlta
DATA cIDVersion
//DATA oXmlIDFactura
// Dades pel TAG IDFactura
DATA cIDEmisorFactura
DATA cNumSerieFactura
DATA cFechaExpedicionFactura
DATA cNombreRazonEmisor
DATA cSubsanacion
DATA cRechazoPrevio
//DATA cTipoRegistroSIF
DATA cTipoFactura
DATA cTipoRectificativa
//DATA oXmlFacturasRectificadas
// Dades pel TAG FacturasRectificadas
DATA aIDFacturaRectificada INIT {} // -- >> Fins a 1000
//DATA oXmlFacturasSustituidas
// Dades pel TAG FacturasSustituidas
DATA aIDFacturaSustituida INIT {} // -- >> Fins a 1000
//DATA oXmlImporteRectificacion
// Dades pel TAG ImporteRectificacion
DATA cBaseRectificada
DATA cCuotaRectificada
DATA cCuotaRecargoRectificado
DATA cFechaOperacion
DATA cDescripcionOperacion
DATA cFacturaSimplificadaArt7273
DATA cFacturaSinIdentifDestinatarioArt61d
DATA cMacrodato
DATA cEmitidaPorTercerosODestinatario
//DATA oXmlTercero
// Dades pel TAG Tercero
DATA cTercero_NombreRazon
DATA cTercero_NIF
//DATA oXmlTercero_IDOtro
// Dades pel TAG IDOtro
DATA cTercero_IDOtro_CodigoPais
DATA cTercero_IDOtro_IDType
DATA cTercero_IDOtro_ID
//DATA oXmlDestinatarios
// Dades pel TAG Destinatarios
DATA aIDDestinatario INIT {} // -- >> Fins a 1000
DATA cCupon
//DATA oXmlDesglose
// Dades pel TAG Desglose
DATA aDetalleDesglose INIT {} // -- >> Fins a 12
DATA cCuotaTotal
DATA cImporteTotal
//DATA oXmlEncadenamiento
// Dades pel TAG Encadenamiento
DATA cPrimerRegistro
//DATA oXmlIRegistroAnterior
// Dades pel TAG IDRegistroAnterior
DATA cIDEmisorFacturaRegistroAnterior
DATA cNumSerieFacturaRegistroAnterior
DATA cFechaExpedicionFacturaRegistroAnterior
DATA cHuellaRegistroAnterior
//DATA oXmlSistemaInformatico
// Dades pel TAG SistemaInformatico
DATA cSistemaInformatico_NombreRazon
DATA cSistemaInformatico_NIF
//DATA oXmlSistemaInformatico_IDOtro
// Dades pel TAG IDOtro
DATA cSistemaInformatico_IDOtro_CodigoPais
DATA cSistemaInformatico_IDOtro_IDType
DATA cSistemaInformatico_IDOtro_ID
DATA cNombreSistemaInformatico
DATA cIdSistemaInformatico
DATA cVersion
DATA cNumeroInstalacion
DATA cTipoUsoPosibleSoloVerifactu
DATA cTipoUsoPosibleMultiOT
DATA cIndicadorMultiplesOT
//DATA cNumeroOTAlta
DATA cFechaHoraHusoGenRegistro
//DATA cFechaGenRegistro
//DATA cHoraGenRegistro
//DATA cHusoHorarioGenRegistro
DATA cNumRegistroAcuerdoFacturacion
DATA cIdAcuerdoSistemaInformatico
//DATA oXmlDatosControl
// Dades pel TAG DatosControl
DATA cTipoHuella
DATA cHuella
DATA cSignature
// ACCESS a les DATA per tal de ser usades.
// De momento se aplica la conversión a UTF8, excepto a las huellas.
ACCESS IDVersion INLINE ( hb_StrToUTF8( alltrim( ::cIDVersion ) ) )
ACCESS IDEmisorFactura INLINE ( hb_StrToUTF8( alltrim( ::cIDEmisorFactura ) ) )
ACCESS NumSerieFactura INLINE ( hb_StrToUTF8( alltrim( ::cNumSerieFactura ) ) )
ACCESS FechaExpedicionFactura INLINE ( hb_StrToUTF8( alltrim( ::cFechaExpedicionFactura ) ) )
ACCESS NombreRazonEmisor INLINE ( hb_StrToUTF8( alltrim( ::cNombreRazonEmisor ) ) )
ACCESS Subsanacion INLINE ( hb_StrToUTF8( alltrim( ::cSubsanacion ) ) )
ACCESS RechazoPrevio INLINE ( hb_StrToUTF8( alltrim( ::cRechazoPrevio ) ) )
//ACCESS TipoRegistroSIF INLINE ( hb_StrToUTF8( alltrim( ::cTipoRegistroSIF ) ) )
ACCESS TipoFactura INLINE ( hb_StrToUTF8( alltrim( ::cTipoFactura ) ) )
ACCESS TipoRectificativa INLINE ( hb_StrToUTF8( alltrim( ::cTipoRectificativa ) ) )
ACCESS BaseRectificada INLINE ( hb_StrToUTF8( alltrim( ::cBaseRectificada ) ) )
ACCESS CuotaRectificada INLINE ( hb_StrToUTF8( alltrim( ::cCuotaRectificada ) ) )
ACCESS CuotaRecargoRectificado INLINE ( hb_StrToUTF8( alltrim( ::cCuotaRecargoRectificado ) ) )
ACCESS FechaOperacion INLINE ( hb_StrToUTF8( alltrim( ::cFechaOperacion ) ) )
ACCESS DescripcionOperacion INLINE ( hb_StrToUTF8( alltrim( ::cDescripcionOperacion ) ) )
ACCESS FacturaSimplificadaArt7273 INLINE ( hb_StrToUTF8( alltrim( ::cFacturaSimplificadaArt7273 ) ) )
ACCESS FacturaSinIdentifDestinatarioArt61d INLINE ( hb_StrToUTF8( alltrim( ::cFacturaSinIdentifDestinatarioArt61d ) ) )
ACCESS Macrodato INLINE ( hb_StrToUTF8( alltrim( ::cMacrodato ) ) )
ACCESS EmitidaPorTercerosODestinatario INLINE ( hb_StrToUTF8( alltrim( ::cEmitidaPorTercerosODestinatario ) ) )
ACCESS Tercero_NombreRazon INLINE ( hb_StrToUTF8( alltrim( ::cTercero_NombreRazon ) ) )
ACCESS Tercero_NIF INLINE ( hb_StrToUTF8( alltrim( ::cTercero_NIF ) ) )
ACCESS Tercero_IDOtro_CodigoPais INLINE ( hb_StrToUTF8( alltrim( ::cTercero_IDOtro_CodigoPais ) ) )
ACCESS Tercero_IDOtro_IDType INLINE ( hb_StrToUTF8( alltrim( ::cTercero_IDOtro_IDType ) ) )
ACCESS Tercero_IDOtro_ID INLINE ( hb_StrToUTF8( alltrim( ::cTercero_IDOtro_ID ) ) )
ACCESS Cupon INLINE ( hb_StrToUTF8( alltrim( ::cCupon ) ) )
ACCESS CuotaTotal INLINE ( hb_StrToUTF8( alltrim( ::cCuotaTotal ) ) )
ACCESS ImporteTotal INLINE ( hb_StrToUTF8( alltrim( ::cImporteTotal ) ) )
ACCESS PrimerRegistro INLINE ( hb_StrToUTF8( alltrim( ::cPrimerRegistro ) ) )
ACCESS IDEmisorFacturaRegistroAnterior INLINE ( hb_StrToUTF8( alltrim( ::cIDEmisorFacturaRegistroAnterior ) ) )
ACCESS NumSerieFacturaRegistroAnterior INLINE ( hb_StrToUTF8( alltrim( ::cNumSerieFacturaRegistroAnterior ) ) )
ACCESS FechaExpedicionFacturaRegistroAnterior INLINE ( hb_StrToUTF8( alltrim( ::cFechaExpedicionFacturaRegistroAnterior ) ) )
ACCESS HuellaRegistroAnterior INLINE ( alltrim( ::cHuellaRegistroAnterior ) )
ACCESS SistemaInformatico_NombreRazon INLINE ( hb_StrToUTF8( alltrim( ::cSistemaInformatico_NombreRazon ) ) )
ACCESS SistemaInformatico_NIF INLINE ( hb_StrToUTF8( alltrim( ::cSistemaInformatico_NIF ) ) )
ACCESS SistemaInformatico_IDOtro_CodigoPais INLINE ( hb_StrToUTF8( alltrim( ::cSistemaInformatico_IDOtro_CodigoPais ) ) )
ACCESS SistemaInformatico_IDOtro_IDType INLINE ( hb_StrToUTF8( alltrim( ::cSistemaInformatico_IDOtro_IDType ) ) )
ACCESS SistemaInformatico_IDOtro_ID INLINE ( hb_StrToUTF8( alltrim( ::cSistemaInformatico_IDOtro_ID ) ) )
ACCESS NombreSistemaInformatico INLINE ( hb_StrToUTF8( alltrim( ::cNombreSistemaInformatico ) ) )
ACCESS IdSistemaInformatico INLINE ( hb_StrToUTF8( alltrim( ::cIdSistemaInformatico ) ) )
ACCESS Version INLINE ( hb_StrToUTF8( alltrim( ::cVersion ) ) )
ACCESS NumeroInstalacion INLINE ( hb_StrToUTF8( alltrim( ::cNumeroInstalacion ) ) )
ACCESS TipoUsoPosibleSoloVerifactu INLINE ( hb_StrToUTF8( alltrim( ::cTipoUsoPosibleSoloVerifactu ) ) )
ACCESS TipoUsoPosibleMultiOT INLINE ( hb_StrToUTF8( alltrim( ::cTipoUsoPosibleMultiOT ) ) )
ACCESS IndicadorMultiplesOT INLINE ( hb_StrToUTF8( alltrim( ::cIndicadorMultiplesOT ) ) )
//ACCESS NumeroOTAlta INLINE ( hb_StrToUTF8( alltrim( ::cNumeroOTAlta ) ) )
ACCESS FechaHoraHusoGenRegistro INLINE ( hb_StrToUTF8( alltrim( ::cFechaHoraHusoGenRegistro ) ) )
//ACCESS HoraGenRegistro INLINE ( hb_StrToUTF8( alltrim( ::cHoraGenRegistro ) ) )
//ACCESS HusoHorarioGenRegistro INLINE ( hb_StrToUTF8( alltrim( ::cHusoHorarioGenRegistro ) ) )
ACCESS NumRegistroAcuerdoFacturacion INLINE ( hb_StrToUTF8( alltrim( ::cNumRegistroAcuerdoFacturacion ) ) )
ACCESS IdAcuerdoSistemaInformatico INLINE ( hb_StrToUTF8( alltrim( ::cIdAcuerdoSistemaInformatico ) ) )
ACCESS TipoHuella INLINE ( hb_StrToUTF8( alltrim( ::cTipoHuella ) ) )
ACCESS Huella INLINE ( alltrim( ::cHuella ) )
ACCESS Signature INLINE ( hb_StrToUTF8( alltrim( ::cSignature ) ) )
// Métodes per gestionar la classe.
METHOD New() CONSTRUCTOR
METHOD ToXML() // Genera estructura XML con los datos.
// Guardan grupos de DATA repetititvos.
METHOD AddFacturaRectificada( oFacturaRectificada ) INLINE ( AADD( ::aIDFacturaRectificada, oFacturaRectificada ) )
METHOD AddFacturaSustituida( oFacturaSustituida ) INLINE ( AADD( ::aIDFacturaSustituida, oFacturaSustituida ) )
METHOD AddIDDestinatario( oIDDestinatario ) INLINE ( AADD( ::aIDDestinatario, oIDDestinatario ) )
METHOD AddaDetalleDesglose( oDetalleDesglose ) INLINE ( AADD( ::aDetalleDesglose, oDetalleDesglose ) )
ENDCLASS
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
METHOD New( ) CLASS RegistroFactura
Return ( self )
//---------------------------------------------------------------------------//
METHOD ToXML() CLASS RegistroFactura
Local oXmlRegistroFactura
Local oXmlRegistroAlta
Local oXmlIDFactura
Local oXmlFacturasRectificadas
Local oXmlFacturasSustituidas
Local oXmlImporteRectificacion
Local oXmlTercero
Local oXmlIDOtro
Local oXmlDestinatarios
Local oXmlDesglose
Local oXmlEncadenamiento
Local oXmlRegistroAnterior
//Local oXmlIDEmisorFacturaRegistroAnterior
Local oXmlSistemaInformatico
Local oXmlSistemaInformatico_IDOtro
//Local oXmlDatosControl
Local nContador := 0
oXmlRegistroFactura := TxmlNode():New( HBXML_TYPE_TAG, "sum:RegistroFactura" )
oXmlRegistroAlta := TxmlNode():New( HBXML_TYPE_TAG, "sum:RegistroAlta" )
oXmlRegistroFactura:AddBelow( oXmlRegistroAlta )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:IDVersion', , ::IDVersion() ) )
// IDFactura
oXmlIDFactura := TxmlNode():New( HBXML_TYPE_TAG, "sum1:IDFactura" )
oXmlRegistroAlta:AddBelow( oXmlIDFactura )
oXmlIDFactura:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:IDEmisorFactura', , ::IDEmisorFactura() ) )
oXmlIDFactura:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NumSerieFactura', , ::NumSerieFactura() ) )
oXmlIDFactura:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:FechaExpedicionFactura', , ::FechaExpedicionFactura() ) )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NombreRazonEmisor', , ::NombreRazonEmisor() ) )
If .Not. Empty( ::cSubsanacion )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:Subsanacion', , ::Subsanacion() ) )
EndIf
If .Not. Empty( ::cRechazoPrevio )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:RechazoPrevio', , ::RechazoPrevio() ) )
EndIf
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:TipoFactura', , ::TipoFactura() ) )
If .Not. Empty( ::cTipoRectificativa )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:TipoRectificativa', , ::TipoRectificativa() ) )
EndIf
// IDFacturaRectificada
If .Not. Empty( ::aIDFacturaRectificada )
oXmlFacturasRectificadas := TxmlNode():New( HBXML_TYPE_TAG, "sum1:FacturasRectificadas" )
oXmlRegistroAlta:AddBelow( oXmlFacturasRectificadas )
For nContador := 1 To Len( ::aIDFacturaRectificada )
oXmlFacturasRectificadas:AddBelow( ::aIDFacturaRectificada[nContador]:ToXML() )
End
EndIf
// IDFacturaSustituida
If .Not. Empty( ::aIDFacturaSustituida )
oXmlFacturasSustituidas := TxmlNode():New( HBXML_TYPE_TAG, "sum1:FacturasSustituidas" )
oXmlRegistroAlta:AddBelow( oXmlFacturasSustituidas )
For nContador := 1 To Len( ::aIDFacturaSustituida )
oXmlFacturasSustituidas:AddBelow( ::aIDFacturaSustituida[nContador]:ToXML() )
End
EndIf
// ImporteRectificacion
If .Not. Empty( ::cBaseRectificada )
oXmlImporteRectificacion := TxmlNode():New( HBXML_TYPE_TAG, "sum1:ImporteRectificacion" )
oXmlRegistroAlta:AddBelow( oXmlImporteRectificacion )
oXmlImporteRectificacion:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:BaseRectificada', , ::BaseRectificada() ) )
oXmlImporteRectificacion:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:CuotaRectificada', , ::CuotaRectificada() ) )
If .not. Empty( ::cCuotaRecargoRectificado )
oXmlImporteRectificacion:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:CuotaRecargoRectificado', , ::CuotaRecargoRectificado() ) )
EndIf
EndIf
If .not. Empty( ::cFechaOperacion )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:FechaOperacion', , ::FechaOperacion() ) )
EndIf
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:DescripcionOperacion', , ::DescripcionOperacion() ) )
If .not. Empty( ::cFacturaSimplificadaArt7273 )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:FacturaSimplificadaArt7273', , ::FacturaSimplificadaArt7273() ) )
EndIf
If .not. Empty( ::cFacturaSinIdentifDestinatarioArt61d )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:FacturaSinIdentifDestinatarioArt61d', , ::FacturaSinIdentifDestinatarioArt61d() ) )
EndIf
If .not. Empty( ::cMacrodato )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:Macrodato', , ::Macrodato() ) )
EndIf
// EmitidaPorTercerosODestinatario
If .not. Empty( ::cEmitidaPorTercerosODestinatario )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:EmitidaPorTercerosODestinatario', , ::EmitidaPorTercerosODestinatario() ) )
oXmlTercero := TxmlNode():New( HBXML_TYPE_TAG, "sum1:Tercero" )
oXmlRegistroAlta:AddBelow( oXmlTercero )
oXmlTercero:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NombreRazon', , ::Tercero_NombreRazon() ) )
If .Not. Empty( ::cTercero_NIF )
oXmlTercero:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NIF', , ::Tercero_NIF() ) )
EndIf
If .Not. Empty( ::cTercero_IDOtro_IDType )
oXmlIDOtro := TxmlNode():New( HBXML_TYPE_TAG, "sum1:IDOtro" )
oXmlTercero:AddBelow( oXmlIDOtro )
If .Not. Empty( ::cTercero_IDOtro_CodigoPais )
oXmlIDOtro:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:CodigoPais', , ::Tercero_IDOtro_CodigoPais() ) )
EndIf
oXmlIDOtro:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:IDType', , ::Tercero_IDOtro_IDType() ) )
oXmlIDOtro:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:ID', , ::Tercero_IDOtro_ID() ) )
EndIf
EndIf
// IDDestinatario
If .Not. Empty( ::aIDDestinatario )
oXmlDestinatarios := TxmlNode():New( HBXML_TYPE_TAG, "sum1:Destinatarios" )
oXmlRegistroAlta:AddBelow( oXmlDestinatarios )
For nContador := 1 To Len( ::aIDDestinatario )
oXmlDestinatarios:AddBelow( ::aIDDestinatario[nContador]:ToXML() )
End
EndIf
If .not. Empty( ::cCupon )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:Cupon', , ::Cupon() ) )
EndIf
// Desglose
oXmlDesglose := TxmlNode():New( HBXML_TYPE_TAG, "sum1:Desglose" )
oXmlRegistroAlta:AddBelow( oXmlDesglose )
For nContador := 1 To Len( ::aDetalleDesglose )
oXmlDesglose:AddBelow( ::aDetalleDesglose[nContador]:ToXML() )
End
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:CuotaTotal', , ::CuotaTotal() ) )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:ImporteTotal', , ::ImporteTotal() ) )
// Encadenamiento
oXmlEncadenamiento := TxmlNode():New( HBXML_TYPE_TAG, "sum1:Encadenamiento" )
oXmlRegistroAlta:AddBelow( oXmlEncadenamiento )
If .Not. Empty( ::cPrimerRegistro )
oXmlEncadenamiento:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:PrimerRegistro', , ::PrimerRegistro() ) )
EndIf
If .Not. Empty( ::cIDEmisorFacturaRegistroAnterior )
oXmlRegistroAnterior := TxmlNode():New( HBXML_TYPE_TAG, "sum1:RegistroAnterior" )
oXmlEncadenamiento:AddBelow( oXmlRegistroAnterior )
oXmlRegistroAnterior:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:IDEmisorFactura', , ::IDEmisorFacturaRegistroAnterior() ) )
oXmlRegistroAnterior:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NumSerieFactura', , ::NumSerieFacturaRegistroAnterior() ) )
oXmlRegistroAnterior:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:FechaExpedicionFactura', , ::FechaExpedicionFacturaRegistroAnterior() ) )
oXmlRegistroAnterior:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:Huella', , ::HuellaRegistroAnterior() ) )
EndIf
// SistemaInformatico
oXmlSistemaInformatico := TxmlNode():New( HBXML_TYPE_TAG, "sum1:SistemaInformatico" )
oXmlRegistroAlta:AddBelow( oXmlSistemaInformatico )
oXmlSistemaInformatico:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NombreRazon', , ::SistemaInformatico_NombreRazon() ) )
If .not. Empty( ::cSistemaInformatico_NIF )
oXmlSistemaInformatico:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NIF', , ::SistemaInformatico_NIF() ) )
EndIf
If .not. Empty( ::cSistemaInformatico_IDOtro_IDType )
oXmlSistemaInformatico_IDOtro := TxmlNode():New( HBXML_TYPE_TAG, "sum1:IDOtro" )
oXmlSistemaInformatico:AddBelow( oXmlSistemaInformatico_IDOtro )
If .not. Empty( ::cSistemaInformatico_IDOtro_CodigoPais )
oXmlSistemaInformatico_IDOtro:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:CodigoPais', , ::SistemaInformatico_IDOtro_CodigoPais() ) )
EndIf
oXmlSistemaInformatico_IDOtro:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:IDType', , ::SistemaInformatico_IDOtro_IDType() ) )
oXmlSistemaInformatico_IDOtro:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:ID', , ::SistemaInformatico_IDOtro_ID() ) )
EndIf
oXmlSistemaInformatico:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NombreSistemaInformatico', , ::NombreSistemaInformatico() ) )
oXmlSistemaInformatico:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:IdSistemaInformatico', , ::IdSistemaInformatico() ) )
oXmlSistemaInformatico:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:Version', , ::Version() ) )
oXmlSistemaInformatico:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NumeroInstalacion', , ::NumeroInstalacion() ) )
oXmlSistemaInformatico:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:TipoUsoPosibleSoloVerifactu', , ::TipoUsoPosibleSoloVerifactu() ) )
oXmlSistemaInformatico:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:TipoUsoPosibleMultiOT', , ::TipoUsoPosibleMultiOT() ) )
oXmlSistemaInformatico:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:IndicadorMultiplesOT', , ::IndicadorMultiplesOT() ) )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:FechaHoraHusoGenRegistro', , ::FechaHoraHusoGenRegistro() ) )
If .Not. Empty( ::cNumRegistroAcuerdoFacturacion )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NumRegistroAcuerdoFacturacion', , ::NumRegistroAcuerdoFacturacion() ) )
EndIf
If .Not. Empty( ::cIdAcuerdoSistemaInformatico )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:IdAcuerdoSistemaInformatico', , ::IdAcuerdoSistemaInformatico() ) )
EndIf
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:TipoHuella', , ::TipoHuella() ) )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:Huella', , ::Huella() ) )
If .Not. Empty( ::cSignature )
oXmlRegistroAlta:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:Signature', , ::Signature() ) )
EndIf
Return oXmlRegistroFactura
/* ***************************************************************************** */
/* ***************************************************************************** */
/* ***************************************************************************** */
CLASS IDFacturaRectificada
// Declaració de les DATA a on s'assignaran els valors a capturar.
// Totes les DATA es gestionaran en modus caràcter o objectes XML.
// Dades pel TAG IDFacturaRectificada
DATA cIDEmisorFactura
DATA cNumSerieFactura
DATA cFechaExpedicionFactura
// ACCESS a les DATA per tal de ser usades.
// De momento se aplica la conversión a UTF8, excepto a las huellas.
ACCESS IDEmisorFactura INLINE ( hb_StrToUTF8( alltrim( ::cIDEmisorFactura ) ) )
ACCESS NumSerieFactura INLINE ( hb_StrToUTF8( alltrim( ::cNumSerieFactura ) ) )
ACCESS FechaExpedicionFactura INLINE ( hb_StrToUTF8( alltrim( ::cFechaExpedicionFactura ) ) )
// Métodes per gestionar la classe.
METHOD New() CONSTRUCTOR
METHOD ToXML() // Genera estructura XML con los datos.
ENDCLASS
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
METHOD New( ) CLASS IDFacturaRectificada
Return ( self )
//---------------------------------------------------------------------------//
METHOD ToXML() CLASS IDFacturaRectificada
Local oXmlIDFacturaRectificada
oXmlIDFacturaRectificada := TxmlNode():New( HBXML_TYPE_TAG, "sum1:IDFacturaRectificada" )
oXmlIDFacturaRectificada:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:IDEmisorFactura', , ::IDEmisorFactura() ) )
oXmlIDFacturaRectificada:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NumSerieFactura', , ::NumSerieFactura() ) )
oXmlIDFacturaRectificada:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:FechaExpedicionFactura', , ::FechaExpedicionFactura() ) )
Return oXmlIDFacturaRectificada
/* ***************************************************************************** */
/* ***************************************************************************** */
/* ***************************************************************************** */
CLASS IDFacturaSustituida
// Declaració de les DATA a on s'assignaran els valors a capturar.
// Totes les DATA es gestionaran en modus caràcter o objectes XML.
// Dades pel TAG IDFacturaSustituida
DATA cIDEmisorFactura
DATA cNumSerieFactura
DATA cFechaExpedicionFactura
// ACCESS a les DATA per tal de ser usades.
// De momento se aplica la conversión a UTF8, excepto a las huellas.
ACCESS IDEmisorFactura INLINE ( hb_StrToUTF8( alltrim( ::cIDEmisorFactura ) ) )
ACCESS NumSerieFactura INLINE ( hb_StrToUTF8( alltrim( ::cNumSerieFactura ) ) )
ACCESS FechaExpedicionFactura INLINE ( hb_StrToUTF8( alltrim( ::cFechaExpedicionFactura ) ) )
// Métodes per gestionar la classe.
METHOD New() CONSTRUCTOR
METHOD ToXML() // Genera estructura XML con los datos.
ENDCLASS
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
METHOD New( ) CLASS IDFacturaSustituida
Return ( self )
//---------------------------------------------------------------------------//
METHOD ToXML() CLASS IDFacturaSustituida
Local oXmlIDFacturaSustituida
oXmlIDFacturaSustituida := TxmlNode():New( HBXML_TYPE_TAG, "sum1:IDFacturaSustituida" )
oXmlIDFacturaSustituida:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:IDEmisorFactura', , ::IDEmisorFactura() ) )
oXmlIDFacturaSustituida:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NumSerieFactura', , ::NumSerieFactura() ) )
oXmlIDFacturaSustituida:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:FechaExpedicionFactura', , ::FechaExpedicionFactura() ) )
Return oXmlIDFacturaSustituida
/* ***************************************************************************** */
/* ***************************************************************************** */
/* ***************************************************************************** */
CLASS IDDestinatario
// Declaració de les DATA a on s'assignaran els valors a capturar.
// Totes les DATA es gestionaran en modus caràcter o objectes XML.
// Dades pel TAG IDDestinatario -- >> Fins a 1000
DATA cNombreRazon
DATA cNIF
DATA oXmlIDOtro
// Dades pel TAG IDOtro
DATA cCodigoPais
DATA cIDType
DATA cID
// ACCESS a les DATA per tal de ser usades.
// De momento se aplica la conversión a UTF8, excepto a las huellas.
ACCESS NombreRazon INLINE ( hb_StrToUTF8( alltrim( ::cNombreRazon ) ) )
ACCESS NIF INLINE ( hb_StrToUTF8( alltrim( ::cNIF ) ) )
ACCESS CodigoPais INLINE ( hb_StrToUTF8( alltrim( ::cCodigoPais ) ) )
ACCESS IDType INLINE ( hb_StrToUTF8( alltrim( ::cIDType ) ) )
ACCESS ID INLINE ( hb_StrToUTF8( alltrim( ::cID ) ) )
// Métodes per gestionar la classe.
METHOD New() CONSTRUCTOR
METHOD ToXML() // Genera estructura XML con los datos.
ENDCLASS
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
METHOD New( ) CLASS IDDestinatario
Return ( self )
//---------------------------------------------------------------------------//
METHOD ToXML() CLASS IDDestinatario
Local oXmlIDDestinatario
Local oXmlIDOtro
oXmlIDDestinatario := TxmlNode():New( HBXML_TYPE_TAG, "sum1:IDDestinatario" )
oXmlIDDestinatario:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NombreRazon', , ::NombreRazon() ) )
If .Not. Empty( ::cNIF )
oXmlIDDestinatario:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:NIF', , ::NIF() ) )
EndIf
If .Not. Empty( ::cIDType )
oXmlIDOtro := TxmlNode():New( HBXML_TYPE_TAG, "sum1:IDOtro" )
oXmlIDDestinatario:AddBelow( oXmlIDOtro )
If .Not. Empty( ::cCodigoPais )
oXmlIDOtro:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:CodigoPais', , ::CodigoPais() ) )
EndIf
oXmlIDOtro:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:IDType', , ::IDType() ) )
oXmlIDOtro:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:ID', , ::ID() ) )
EndIf
Return oXmlIDDestinatario
/* ***************************************************************************** */
/* ***************************************************************************** */
/* ***************************************************************************** */
CLASS DetalleDesglose
// Declaració de les DATA a on s'assignaran els valors a capturar.
// Totes les DATA es gestionaran en modus caràcter o objectes XML.
// Dades pel TAG DetalleDesglose -- >> Fins a 12
DATA cClaveRegimen
DATA cCalificacionOperacion
DATA cOperacionExenta
DATA cTipoImpositivo
DATA cBaseImponibleOimporteNoSujeto
DATA cBaseImponibleACoste
DATA cCuotaRepercutida
DATA cTipoRecargoEquivalencia
DATA cCuotaRecargoEquivalencia
// ACCESS a les DATA per tal de ser usades.
// De momento se aplica la conversión a UTF8, excepto a las huellas.
ACCESS ClaveRegimen INLINE ( hb_StrToUTF8( alltrim( ::cClaveRegimen ) ) )
ACCESS CalificacionOperacion INLINE ( hb_StrToUTF8( alltrim( ::cCalificacionOperacion ) ) )
ACCESS OperacionExenta INLINE ( hb_StrToUTF8( alltrim( ::cOperacionExenta ) ) )
ACCESS TipoImpositivo INLINE ( hb_StrToUTF8( alltrim( ::cTipoImpositivo ) ) )
ACCESS BaseImponibleOimporteNoSujeto INLINE ( hb_StrToUTF8( alltrim( ::cBaseImponibleOimporteNoSujeto ) ) )
ACCESS BaseImponibleACoste INLINE ( hb_StrToUTF8( alltrim( ::cBaseImponibleACoste ) ) )
ACCESS CuotaRepercutida INLINE ( hb_StrToUTF8( alltrim( ::cCuotaRepercutida ) ) )
ACCESS TipoRecargoEquivalencia INLINE ( hb_StrToUTF8( alltrim( ::cTipoRecargoEquivalencia ) ) )
ACCESS CuotaRecargoEquivalencia INLINE ( hb_StrToUTF8( alltrim( ::cCuotaRecargoEquivalencia ) ) )
// Métodes per gestionar la classe.
METHOD New() CONSTRUCTOR
METHOD ToXML() // Genera estructura XML con los datos.
ENDCLASS
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
METHOD New( ) CLASS DetalleDesglose
Return ( self )
//---------------------------------------------------------------------------//
METHOD ToXML() CLASS DetalleDesglose
Local oXmlDetalleDesglose
oXmlDetalleDesglose := TxmlNode():New( HBXML_TYPE_TAG, "sum1:DetalleDesglose" )
oXmlDetalleDesglose:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:ClaveRegimen', , ::ClaveRegimen() ) )
//If .Not. Empty( ::cCalificacionOperacion )
oXmlDetalleDesglose:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:CalificacionOperacion', , ::CalificacionOperacion() ) )
//EndIf
If .Not. Empty( ::cOperacionExenta )
oXmlDetalleDesglose:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:OperacionExenta', , ::OperacionExenta() ) )
EndIf
If .Not. Empty( ::cTipoImpositivo )
oXmlDetalleDesglose:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:TipoImpositivo', , ::TipoImpositivo() ) )
EndIf
oXmlDetalleDesglose:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:BaseImponibleOimporteNoSujeto', , ::BaseImponibleOimporteNoSujeto() ) )
If .Not. Empty( ::cBaseImponibleACoste )
oXmlDetalleDesglose:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:BaseImponibleACoste', , ::BaseImponibleACoste() ) )
EndIf
If .Not. Empty( ::cCuotaRepercutida )
oXmlDetalleDesglose:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:CuotaRepercutida', , ::CuotaRepercutida() ) )
EndIf
If .Not. Empty( ::cTipoRecargoEquivalencia )
oXmlDetalleDesglose:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:TipoRecargoEquivalencia', , ::TipoRecargoEquivalencia() ) )
EndIf
If .Not. Empty( ::cCuotaRecargoEquivalencia )
oXmlDetalleDesglose:AddBelow( TxmlNode():New( HBXML_TYPE_TAG, 'sum1:CuotaRecargoEquivalencia', , ::CuotaRecargoEquivalencia() ) )
EndIf
Return oXmlDetalleDesglose
//---------------------------------------------------------------------------//
//---------------------------------------------------------------------------//
FUNCTION lSetXMLRegistroFactura( AMPAARRA, ;
oXMLRegistroFactura, ;
oTdbfFacAlb, ;
oTDbfFactur, ;
oTDbfFacAlbDummy, ;
lPrimerTractament, ;
nRecnoAnterior, ;
cIdFacturAnterior, ;
cNumSerieFacturaRegistroAnteriorDummy, ;
cFechaExpedicionFacturaRegistroAnteriorDummy, ;
cHuellaRegistroAnteriorDummy ;
)
// Seteja els valors de un objecte oXMLRegistroFactura.
Local lRespuesta := .T.
Local oXmlIDDestinatario := Nil
Local oXmlDetalleDesglose := Nil
oXMLRegistroFactura:cIDVersion := "1.0"
oXMLRegistroFactura:cIDEmisorFactura := cGetNifBD( AMPAARRA )
oXMLRegistroFactura:cNumSerieFactura := Str( Year( oTdbfFacAlb:DataFact), 4, 0) + "-000-" + Right( Str( 1000000 + oTdbfFacAlb:NumeFact, 10, 0), 6)
oXMLRegistroFactura:cFechaExpedicionFactura := hb_dtoc( oTdbfFacAlb:DataFact, "dd-mm-yyyy" ) // DToc( oTdbfFacAlb:DataFact )
oXMLRegistroFactura:cNombreRazonEmisor := cGetNomampa( AMPAARRA )
//oXMLRegistroFactura:cTipoRegistroSIF := "S0"
oXMLRegistroFactura:cTipoFactura := "F1"
//oXMLRegistroFactura:cTipoRectificativa :=
//oXMLRegistroFactura:cBaseRectificada :=
//oXMLRegistroFactura:cCuotaRectificada :=
//oXMLRegistroFactura:cCuotaRecargoRectificado :=
//oXMLRegistroFactura:cFechaOperacion := hb_dtoc( oTdbfFacAlb:DataFact, "dd-mm-yyyy" ) // DToc( oTdbfFacAlb:DataFact ) No cal al ser igual que la data d'expedició
oXMLRegistroFactura:cDescripcionOperacion := "Prestación de servicios."
oXMLRegistroFactura:cFacturaSimplificadaArt7273 := "N"
oXMLRegistroFactura:cFacturaSinIdentifDestinatarioArt61d := "N"
oXMLRegistroFactura:cMacrodato := "N"
//oXMLRegistroFactura:cEmitidaPorTercerosODestinatario := No cal
//oXMLRegistroFactura:cTercero_NombreRazon :=
//oXMLRegistroFactura:cTercero_NIF :=
//oXMLRegistroFactura:cTercero_IDOtro_CodigoPais :=
//oXMLRegistroFactura:cTercero_IDOtro_IDType :=
//oXMLRegistroFactura:cTercero_IDOtro_ID :=
oXmlIDDestinatario := IDDestinatario():New()
oXMLRegistroFactura:AddIDDestinatario( oXmlIDDestinatario )
oXmlIDDestinatario:cNombreRazon := oTdbfFacAlb:RAOSOC
oXmlIDDestinatario:cNIF := oTdbfFacAlb:NIF
//oXmlIDDestinatario:cCodigoPais :=
//oXmlIDDestinatario:cIDType :=
//oXmlIDDestinatario:cID :=
oXMLRegistroFactura:cCupon := "N"
//Traza( 1, "oTdbfFacAlb:IdFactur=", oTdbfFacAlb:IdFactur )
nGotoFacturIdFactur( AMPAarra, oTDbfFactur, AllTrim( oTdbfFacAlb:IdFactur ) + "-4", .T., .T., 1 )
// IVA deduible
oXmlDetalleDesglose := DetalleDesglose():New()
oXMLRegistroFactura:AddaDetalleDesglose( oXmlDetalleDesglose )
oXmlDetalleDesglose:cClaveRegimen := "01"
oXmlDetalleDesglose:cCalificacionOperacion := "S1"
// oXmlDetalleDesglose:cOperacionExenta :=
oXmlDetalleDesglose:cTipoImpositivo := Alltrim( TransForm( oTDbfFactur:PERCENTA, "999.99" ) )
oXmlDetalleDesglose:cBaseImponibleOimporteNoSujeto := Alltrim( TransForm( oTDbfFactur:BASECALC, "999999999999.99" ) )
//oXmlDetalleDesglose:cBaseImponibleACoste :=
oXmlDetalleDesglose:cCuotaRepercutida := Alltrim( TransForm( oTDbfFactur:IMPORT__, "999999999999.99" ) )
//oXmlDetalleDesglose:cTipoRecargoEquivalencia :=
//oXmlDetalleDesglose:cCuotaRecargoEquivalencia :=
oXMLRegistroFactura:cCuotaTotal := Alltrim( TransForm( oTDbfFactur:IMPORT__, "999999999999.99" ) )
oXMLRegistroFactura:cImporteTotal := Alltrim( TransForm( oTDbfFacAlb:IMPOTOTA, "999999999999.99" ) )
//nGotoFaAl( AMPAarra, oTDbfFacAlbDummy, oTDbfFacAlb:NumeFact, .T., .T., 1, Nil, Nil )
/* Com que es poden tractar vàries factures per generar el XML, fins que no s'envia amb certesa
els registres de oTDbfFacAlb no s'enregistren les Huella; per tant ha de ser en aquest bucle
que es vagi 'traspassant' el valor de HuellaAnterior d'un registre al següent.
*/
If lPrimerTractament
// Es cerca a oTdbfFacAlb el registre que serà l'Anterior al tractat ara.
If cGetLastIdFactur( AMPAARRA, oTdbfFacAlbDummy ) = ""
oXMLRegistroFactura:cPrimerRegistro := "S"
oXMLRegistroFactura:cHuellaRegistroAnterior := ""
//Traza( 1 , "cIdFacturAnterior= cGetLastIdFactur() no trovat",)
Else
nRecnoAnterior := oTdbfFacAlbDummy:Recno()
cIdFacturAnterior := oTdbfFacAlbDummy:IdFactur
//Traza( 1 , "cIdFacturAnterior=", cIdFacturAnterior)
oXMLRegistroFactura:cIDEmisorFacturaRegistroAnterior := cGetNifBD( AMPAARRA )
oXMLRegistroFactura:cNumSerieFacturaRegistroAnterior := Str( Year( oTdbfFacAlbDummy:DataFact), 4, 0) + "-000-" + Right( Str( 1000000 + oTdbfFacAlbDummy:NumeFact, 10, 0), 6)
oXMLRegistroFactura:cFechaExpedicionFacturaRegistroAnterior := hb_dtoc( oTdbfFacAlbDummy:DataFact, "dd-mm-yyyy" )
oXMLRegistroFactura:cHuellaRegistroAnterior := oTdbfFacAlbDummy:HuellaVF
EndIf
Else
// oXMLRegistroFactura:cPrimerRegistro està buit.
oXMLRegistroFactura:cIDEmisorFacturaRegistroAnterior := cGetNifBD( AMPAARRA )
oXMLRegistroFactura:cNumSerieFacturaRegistroAnterior := cNumSerieFacturaRegistroAnteriorDummy
oXMLRegistroFactura:cFechaExpedicionFacturaRegistroAnterior := cFechaExpedicionFacturaRegistroAnteriorDummy
oXMLRegistroFactura:cHuellaRegistroAnterior := cHuellaRegistroAnteriorDummy
EndIf
//Traza( 1, "a-nRecnoAnterior=", nRecnoAnterior )
oXMLRegistroFactura:cSistemaInformatico_NombreRazon := cVerifactuSINombreRazon( AMPAARRA )
oXMLRegistroFactura:cSistemaInformatico_NIF := cVeriFactuSINif( AMPAARRA )
//oXMLRegistroFactura:cSistemaInformatico_IDOtro_CodigoPais :=
//oXMLRegistroFactura:cSistemaInformatico_IDOtro_IDType :=
//oXMLRegistroFactura:cSistemaInformatico_IDOtro_ID :=
oXMLRegistroFactura:cNombreSistemaInformatico := cVeriFactuSINombreSistemaInformatico( AMPAARRA )
oXMLRegistroFactura:cIdSistemaInformatico := cVeriFactuSIIdSistemaInformatico( AMPAARRA )
oXMLRegistroFactura:cVersion := cVeriFactuSIVersion( AMPAARRA )
oXMLRegistroFactura:cNumeroInstalacion := cVeriFactuSINumeroInstalacion( AMPAARRA )
oXMLRegistroFactura:cTipoUsoPosibleSoloVerifactu := cVeriFactuSIPosibleSoloVerifactu( AMPAARRA )
oXMLRegistroFactura:cTipoUsoPosibleMultiOT := cVeriFactuSITipoUsoPosibleMultiOT( AMPAARRA )
oXMLRegistroFactura:cIndicadorMultiplesOT := cVeriFactuSIIndicadorMultiplesOT( AMPAARRA )
//oXMLRegistroFactura:cNumeroOTAlta := "1"
oXMLRegistroFactura:cFechaHoraHusoGenRegistro := FechaHoraHuso( oTdbfFacAlb:DataAlta, oTdbfFacAlb:HoraAlta )
//oXMLRegistroFactura:cHoraGenRegistro := oTdbfFacAlb:HoraAlta
//oXMLRegistroFactura:cHusoHorarioGenRegistro := "02"
//oXMLRegistroFactura:cNumRegistroAcuerdoFacturacion := De moment no.
//oXMLRegistroFactura:cIdAcuerdoSistemaInformatico := De moment no.
oXMLRegistroFactura:cTipoHuella := "01"
oXMLRegistroFactura:cHuella := hb_VerifactuHuella( cGetNifBD( AMPAARRA ), ;
Str( Year( oTdbfFacAlb:DataFact), 4, 0) + "-000-" + Right( Str( 1000000 + oTdbfFacAlb:NumeFact, 10, 0), 6), ;
oTdbfFacAlb:DataFact, ;
"F1", ;
oTDbfFactur:IMPORT__, ;
oTDbfFacAlb:IMPOTOTA, ;
oXMLRegistroFactura:cHuellaRegistroAnterior, ;
FechaHoraHuso( oTdbfFacAlb:DataAlta, oTdbfFacAlb:HoraAlta ) ;
)
//oXMLRegistroFactura:cSignature := No cal aquí
Return lRespuesta[/code]