FACTURACION ELECTRONICA EN LINEA

FACTURACION ELECTRONICA EN LINEA

Postby acuellar » Sat Mar 18, 2023 11:31 am

Buenas estimados

Estoy implementando un sistema para ello
Con datos de la factura se debe crear un archivo xml
Code: Select all  Expand view

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<facturaComputarizadaCompraVenta xsi:noNamespaceSchemaLocation="facturaComputarizadaCompraVenta.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<cabecera>
<nitEmisor>1003579028</nitEmisor>
<razonSocialEmisor>Carlos Loza</razonSocialEmisor>
<municipio>La Paz</municipio>
<telefono>78595684</telefono>
<numeroFactura>1</numeroFactura>
<cuf>44AAEC00DBD34C53C3E2CCE1A3FA7AF1E2A08606A667A75AC82F24C74</cuf>
<cufd>BQUE+QytqQUDBKVUFOSVRPQkxVRFZNVFVJBMDAwMDAwM</cufd>
<codigoSucursal>0</codigoSucursal>
<direccion>AV. JORGE LOPEZ #123</direccion>
<codigoPuntoVenta xsi:nil="true"/>
<fechaEmision>2021-10-06T16:03:48.675</fechaEmision>
<nombreRazonSocial>Mi razon social</nombreRazonSocial>
<codigoTipoDocumentoIdentidad>1</codigoTipoDocumentoIdentidad>
<numeroDocumento>5115889</numeroDocumento>
<complemento xsi:nil="true"/>
<codigoCliente>51158891</codigoCliente>
<codigoMetodoPago>1</codigoMetodoPago>
<numeroTarjeta xsi:nil="true"/>
<montoTotal>99</montoTotal>
<montoTotalSujetoIva>99</montoTotalSujetoIva>
<codigoMoneda>1</codigoMoneda>
<tipoCambio>1</tipoCambio>
<montoTotalMoneda>99</montoTotalMoneda>
<montoGiftCard xsi:nil="true"/>
<descuentoAdicional>1</descuentoAdicional>
<codigoExcepcion xsi:nil="true"/>
<cafc xsi:nil="true"/>
<leyenda>Ley N° 453: Tienes derecho a recibir información sobre las características y contenidos de los
servicios que utilices.
</leyenda>
<usuario>pperez</usuario>
<codigoDocumentoSector>1</codigoDocumentoSector>
</cabecera>
<detalle>
<actividadEconomica>451010</actividadEconomica>
<codigoProductoSin>49111</codigoProductoSin>
<codigoProducto>JN-131231</codigoProducto>
<descripcion>MI PRODUCTO O SERVICIO</descripcion>
<cantidad>1</cantidad>
<unidadMedida>1</unidadMedida>
<precioUnitario>100</precioUnitario>
<montoDescuento>0</montoDescuento>
<subTotal>100</subTotal>
<numeroSerie>124548</numeroSerie>
<numeroImei xsi:nil="true"/>
</detalle>
</facturaComputarizadaCompraVenta>
 


En el foro en encontrado un código de Rafa Carmona
Code: Select all  Expand view

#include "FiveWin.ch"
*
Function Main()
   Local oFacturaEmitidas,oFactura

  oFacturaEmitidas := SuministroLRFacturasEmitidas():New()
  oFacturaEmitidas:oCabecera:oTitular:NombreRazon :=  "La razon social"
  oFacturaEmitidas:oCabecera:oTitular:NIF := "A0101010101"

   while TengoFacturas
          oFactura := oFactura():New()
       
         oFacturaEmitida := LRfacturasEmitidasType():New()

          with object ( oFacturaEmitida )
         :PeriodoImpositivo:Ejercicio                       := 2017
         :PeriodoImpositivo:Periodo                         := "01"
         :IDFactura:NIF                                     := "AAAAAAAA"
         :IDFactura:NumSerieFacturaEmisor                   := "01"
         :IDFactura:FechaExpedicionFacturaEmisor            := date()
   
         :FacturaExpedida:DescripcionOperacion              := "Compras de materiales"
         :FacturaExpedida:DatosInmueble:SituacionInmueble   := 1
         :FacturaExpedida:DatosInmueble:ReferenciaCatastral := "ASDFGHJKLUYTREWQW"
         :FacturaExpedida:Contraparte:NombreRazon           := "ASDFGHJKL"
         :FacturaExpedida:Contraparte:NIFRepresentante      := "90001376F"
         :FacturaExpedida:Contraparte:NIF                   := "70031376F"
 

          oFacturaRectificada := IDFacturaARType():New( )
          oFacturaRectificada:NumSerieFacturaEmisor := "X"
          oFacturaRectificada:FechaExpedicionFacturaEmisor := date()
          :FacturaExpedida:AddFacturaRectificada( oFacturaRectificada )  
      end with

      oLibroFacEmitidas := SuministroLRFacturasEmitidas():New()

      with object ( oLibroFacEmitidas )
       :Cabecera:Titular:NombreRazon      := "RAFA & COMPANY"
       :Cabecera:Titular:NIFRepresentante := "AAAA"
       :Cabecera:Titular:NIF              := "12312312J"
       :add( oFacturaEmitida )
       :WriteXML()
       :WriteXMLFile( hb_dirbase()+"\ssi.xml" )
      end with
       
         oFacturaEmitidas:Add( oFactura )
  end while

  if  oFacturaEmitidas:SendSoap()
      ? "Ey, todo bien"
  else
     ?  "Analizar respuesta" ,  oFacturaEmitidas:oResponse
  endif
 
RETURN nil
*
CLASS SuministroLRFacturasEmitidas FROM ResponseSoap
      DATA Operacion INIT "siiLR:SuministroLRFacturasEmitidas"  
      DATA oCabecera
      DATA aoRegistroLRFacturasEmitidas
     
      METHOD New() CONSTRUCTOR
      METHOD Add( oRegistroLRFacturasEmitidas ) INLINE aadd(::aoRegistroLRFacturasEmitidas, oRegistroLRFacturasEmitidas )
      METHOD WriteXML( pNode, NameSpace )

END CLASS
METHOD New() CLASS SuministroInformacion
    ::oCabecera := Cabecera():New()
    ::aoRegistroLRFacturasEmitidas := {}
RETURN Self

METHOD WriteXML( pNode, NameSpace ) CLASS SuministroInformacion
      Local oFactura, pList

      if !empty( NameSpace )
         ::NameSpace := NameSpace
      endif
         
      pNode := ::CreateXML( )
     
      ::oCabecera:WriteXML( pNode )
     
      if !empty( ::aoRegistroLRFacturasEmitidas )
         for each oFactura in ::aoRegistroLRFacturasEmitidas
             pList = mxmlNewElement( pNode, ::NameSpace + "RegistroLRFacturasEmitidas" )
             oFactura:WriteXML( pList, ::NameSpace )
         next
      endif  

RETURN NIL
 *
 CLASS Cabecera
      DATA IDVersionSii INI "0.4"
      DATA oTitular
      DATA TipoComunicacion INIT "A0" // Enum A0, A1, A4

      METHOD New() CONSTRUCTOR
      METHOD WriteXML( pNode, NameSpace )

END CLASS

METHOD New() CLASS Cabecera
      ::oTitular := PersonaFisicaJuridicaESType():New()
RETURN Self

METHOD WriteXML( pNode, NameSpace ) CLASS Cabecera
      Local pParent
     
      pParent = mxmlNewElement( pNode, NameSpace + "Cabecera" )
      SetNodeValue( pParent , NameSpace + "IDVersionSii", ::IDVersionSii )
      SetNodeValue( pParent , NameSpace + "TipoComunicacion", ::TipoComunicacion )
     
      ::oTitular:WriteXML( pParent, NameSpace )

RETURN NIL
*
CLASS PersonaFisicaJuridicaESType
      DATA NombreRazon        
      DATA NIFRepresentante   // Optional
      DATA NIF

      METHOD New() CONSTRUCTOR
      METHOD WriteXML( pNode, NameSpace )

END CLASS

METHOD New() CLASS PersonaFisicaJuridicaESType
RETURN Self
*
METHOD WriteXML( pNode, NameSpace ) CLASS PersonaFisicaJuridicaESType
    Local pParent

    pParent = mxmlNewElement( pNode, NameSpace + "Titular" )

    SetNodeValue( pParent , NameSpace + "NombreRazon", ::NombreRazon )
    SetNodeValue( pParent , NameSpace + "NIF", ::NIF )
    if !empty( ::NIFRepresentante )
        SetNodeValue( pParent , NameSpace + "NIFRepresentante", ::NIFRepresentante )
    endif    

RETURN NIL

function SetNodeValue( pNode , cKey, uValue )
    Local hTree

    if uValue != NIL
       hTree := mxmlNewElement( pNode, cKey )
       mxmlNewText( hTree, 0, cValtoChar( uValue ) )
    endif  

return hTree
 


Me salen éstos errores
Code: Select all  Expand view

Error: Unresolved external '_HB_FUN_OFACTURA' referenced from D:\SISTEMAS\ACRSOFT\OK\OBJ\ACR.OBJ
Error: Unresolved external '_HB_FUN_LRFACTURASEMITIDASTYPE' referenced from D:\SISTEMAS\ACRSOFT\OK\OBJ\ACR.OBJ
Error: Unresolved external '_HB_FUN_IDFACTURAARTYPE' referenced from D:\SISTEMAS\ACRSOFT\OK\OBJ\ACR.OBJ
Error: Unresolved external '_HB_FUN_RESPONSESOAP' referenced from D:\SISTEMAS\ACRSOFT\OK\OBJ\ACR.OBJ
Error: Unresolved external '_HB_FUN_SUMINISTROLRFACTURASEMITIDAS_NEW' referenced from D:\SISTEMAS\ACRSOFT\OK\OBJ\ACR.OBJ
Error: Unresolved external '_HB_FUN_SUMINISTROLRFACTURASEMITIDAS_WRITEXML' referenced from D:\SISTEMAS\ACRSOFT\OK\OBJ\ACR.OBJ
Error: Unresolved external '_HB_FUN_MXMLNEWELEMENT' referenced from D:\SISTEMAS\ACRSOFT\OK\OBJ\ACR.OBJ
 


Gracias por la ayuda
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1594
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: FACTURACION ELECTRONICA EN LINEA

Postby acuellar » Mon Mar 20, 2023 2:58 pm

Buenas Estimados

He logrado crear el archivo .xml de forma manual
Code: Select all  Expand view

cXml:='<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+CRLF
cXml+='<facturaComputarizadaCompraVenta xsi:noNamespaceSchemaLocation="facturaComputarizadaCompraVenta.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'+CRLF
cXml+='<cabecera>'+CRLF
cXml+='<nitEmisor>'+cNitEmp+'</nitEmisor>'+CRLF
.....
hFile:=FCreate("D:\Sistemas\FacturasEmitidas\Factura_"+cNitCli+".xml")
  fWrite( hFile, cXml )
  fClose( hFile )
 


He logrado el primer paso
1) Generar Archivo XML asociado a la Factura de acuerdo a su actividad económica.
2) Firmar el archivo obtenido conforme estándar XMLDSig (sólo en el caso de la Modalidad Electrónica en Línea).
3) Validar contra el XSD asociado.
4) Comprimir el archivo XML en formato Gzip, mismo que debe ser enviado en la etiqueta archivo.
5) Obtener el HASH (SHA256) del archivo compreso obtenido en el paso anterior, mismo que debe ser enviado en la etiqueta hashArchivo. Este valor es utilizado también
como Huella Digital en la modalidad computarizada en Línea.
En la página de impuestos de Bolivia hay muy poca información.
No se como hacer los siguientes pasos :(

Necesito de su ayuda.
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1594
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 49 guests