Suministro Inmediato de Información deI IVA España

6,082 views
Skip to first unread message

Luis M.

unread,
Jan 18, 2017, 10:43:33 AM1/18/17
to Comunidad de Visual Foxpro en Español
Buenas tardes,

¿Alguien está trabajando en la integración con VFP del Suministro Inmediato de Información deI IVA español que entrará en vigor el 1 de julio de 2017?

El medio de envío será mediante Servicios Web basados en el intercambio de mensajes XML (sacado de la normativa):

Entorno: Internet. 
Protocolo: HTTPS. 
Mensajes: Web Service con SOAP 1.1 modo Document. 
Certificado: El uso de los servicios requiere tener instalado un certificado electrónico reconocido admitido por la Agencia Tributaria, en el ordenador desde el que se produzca el envío de la información

Estoy dudando entre hacer la integración con nuestro ERP o bien utilizar una plataforma de terceros. ¿Alguien tiene alguna experiencia en este asunto?

Gracias y un saludo,

Luis Martínez (La Rioja - España)

Jose Antonio Blasco

unread,
Jan 18, 2017, 12:51:34 PM1/18/17
to Comunidad de Visual Foxpro en Español
Lo siento, esto en la misma situación o peor que tú.  Tendré que desarrollar desde cero y no se por donde empezar.

La semana pasada ya me notificaron la necesidad de incorporar el proceso, pero de momento no he mirado nada.

Un saludo.


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2

almonts ( www.ontarioxb.es )

unread,
Jan 18, 2017, 4:15:45 PM1/18/17
to Comunidad de Visual Foxpro en Español
Estamos todos igual.
Ademas la AEAT no sumnistra aun informacion sobre el tema. Estamos todos en blanco...

Carton Jeston (9.0.0.7423)

unread,
Jan 19, 2017, 3:04:02 AM1/19/17
to Comunidad de Visual Foxpro en Español
No tengo ni idea del tema que estais hablando, asi que voy a mirar informacion por internet.

Ya me veo como la ultima reforma de los tiquets, avisaron un mes antes, programando contrareloj y al final al poco tuvieron que cambiar parte de la ley porque era inviable aplicarla, y volver a reprogramar. Cambios de iva en mitad de un trimestre, el pluf del euro en las farmacias por falta de tiempo en preparar los sistemas, el cachondeo de las remesas bancarias y el iban y un largo etc...

Los programadores nos deberiamos dedicar a hacer la vida mas facil al usuario, pero como hacerlo si nos hacen la vida imposible a nosotros. :)

¿Y que les costaria hacerlo un 1 de Enero?


Luis M.

unread,
Jan 19, 2017, 3:31:33 AM1/19/17
to Comunidad de Visual Foxpro en Español
Gracias por vuestras respuestas.

Por si os sirve de algo, adjunto archivo comprimido con información que dieron esta semana en una presentación de plataforma de terceros por Internet (renombrar a .ZIP)

Seguiremos estudiando el tema...

 
Saludos,
SII_varios_documentos.z_p

Jose Antonio Blasco

unread,
Jan 19, 2017, 4:04:42 AM1/19/17
to Comunidad de Visual Foxpro en Español
Gracias por los archivos, pero son propios de la Agencia Tributaria y se pueden descargar desde su página. Los tenía impresos, pero reconozco que aún no he revisado todos.  En concreto, supongo que el más interesante es el de los servicos web, pero 163 páginas ....

A ver cuando cojo fuerzas despues de los cambios de ejercicio y cierres...

Un saludo.


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Carton Jeston (9.0.0.7423)

unread,
Jan 19, 2017, 4:45:21 AM1/19/17
to Comunidad de Visual Foxpro en Español

¿A quién afecta el Suministro Inmediato de Información (SII)?

El Sistema SII afectará a unas 62.000 empresas que representan el 80% de la facturación total y que están obligadas a autoliquidar el IVA mensualmente.

Empresas con volumen de facturación superior a los 6 millones de euros.
Sujetos pasivos acogidos al régimen especial del grupo de entidades del IVA.
Sujetos pasivos inscritos en el Registro de Devolución Mensual del IVA (REDEME).
Empresas que decidan acogerse voluntariamente al nuevo sistema. Este último grupo podrá renunciar a este sistema, si lo desea, al final de cada año

En mi caso, mi clientes son autonomos y pequeñas empresas. Parece que seguira igual que siempre trimestralmente para estas ¿no?

Jose Antonio Blasco

unread,
Jan 19, 2017, 5:01:23 AM1/19/17
to Comunidad de Visual Foxpro en Español
Entre las pequeñas empresas, si alguna esta presentando el iva mensualmente, si que deberá hacerlo.

Un saludo.

Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Carton Jeston (9.0.0.7423)

unread,
Jan 22, 2017, 8:19:53 AM1/22/17
to Comunidad de Visual Foxpro en Español
Por suerte, mis clientes son pequeñas empresas y tributan trimestralmente y no preveo que ninguno de los que he consultado vaya a cambiar este año o hasta que los obliguen mas adelante.

Seguire con interes cualquier noticia al respecto de aqui hasta que se consolide la ley, por experiencia se que hasta ultima hora no lo tendran claro ni ellos.

Otra medida a vigilar es el limite de pagos en efectivo de 1000 euros.

Nos vemos.

Marian Gaston Galan

unread,
Mar 1, 2017, 3:52:36 AM3/1/17
to Comunidad de Visual Foxpro en Español
Hola:

Ya está disponible la web de pruebas de la AEAT. Os paso la URL https://www7.aeat.es

Se necesita certificado electrónico.

Por si os puede ayudar.

Un saludo.

Marian Gastón.
La Rioja - España 

Kike. Sevilla

unread,
Mar 1, 2017, 4:38:07 AM3/1/17
to Comunidad de Visual Foxpro en Español
Buenas:
Me encuentro en la misma posición que todos. No sabía nada. Pero tengo un cliente que desde Enero lo está haciendo, saca un listado de facturas del mes y "hará algo" para incorporarlo,pasarlo a la Agencia Tributaria o a su asesoría. Será por eso que no ha comentado nada.
Seguiremos e rastro.

Saludos cordiales.

Kike.
Sevilla - España.

amminf x

unread,
Mar 1, 2017, 9:43:35 AM3/1/17
to Comunidad de Visual Foxpro en Español
Veo dificial que su cliente esté haciendolo, puesto que el sistema SII aun no está operativo, salvo, es lo que creo, para un grupo muy reducido de empresas, que son las que están "ayudando" al recaudador a poner a punto el sistema.

Lo que su cliente estará haciendo será llevar datos a la asesoria para que le cumplimenten el Modelo 340.

Jose Castillo

unread,
Mar 3, 2017, 11:54:35 AM3/3/17
to Comunidad de Visual Foxpro en Español
Hola estoy igual que vosotros, si alguien encuentra la manera de comunicarse al webservice desde vfp por favor que lo explique, yo estoy haciendo pruebas pero tengo problemas con el certificado no se como engancharlo.
Gracias.


El miércoles, 18 de enero de 2017, 16:43:33 (UTC+1), Luis M. escribió:

Francisco

unread,
Mar 7, 2017, 7:39:09 AM3/7/17
to Comunidad de Visual Foxpro en Español
Yo estoy igual. A ver si alguien da un paso y lo comparte. 

amminf x

unread,
Mar 8, 2017, 11:17:22 AM3/8/17
to Comunidad de Visual Foxpro en Español
Sí, creo que todos estamos en la espera de ese paso. Lo que no sabemos es si el recaudador esperará también a "ese" paso ;-)

Francisco

unread,
Mar 8, 2017, 12:10:42 PM3/8/17
to Comunidad de Visual Foxpro en Español
Bueno esto estudiando un ejemplo de momento sencillo de consumir un pequeño WS que han puesto antes de acometer el otro. Si os fijáis hay uno bien sencillo que es el de comprobación de Calidad de Datos identificativos. (http://www.agenciatributaria.es/AEAT.internet/Inicio/La_Agencia_Tributaria/Campanas/Suministro_Inmediato_de_Informacion_en_el_IVA__SII_/_SERVICIOS_DE_AYUDA/Identificacion_fiscal/Identificacion_fiscal.shtml) es un Ws ubicado aquí: 

http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV1.wsdl y bien estoy de momento armando consultas simples a el mismo (he instalado el SoapUI 5.3.0 que es muy útil para consultar los Request y resposes xml del servidor (todo esto lo he sacado de este compañero: http://bmorenoj.blogspot.com.es/2011/11/consumir-cualquier-web-service-con.html). 

El Request para consultar un nif es tal que así:

   <soapenv:Header/>
   <soapenv:Body>
      <vnif:VNifV1Ent>
         <vnif:Nif>???????</vnif:Nif>
         <vnif:Nombre>???????</vnif:Nombre>
      </vnif:VNifV1Ent>
   </soapenv:Body>
</soapenv:Envelope>

El problema que tengo es que como necesita certificado digital adjunto no se como hacerlo. Si alguien tiene idea de como incluir dicho certificado en este request se lo agradeceríamos todos. He visto gente que ha hecho esto para otros paises y supongo que aquí será igual pero sinceramente no se donde incluir el certificado ni como sacarlo. He leido algo sobre

CertRuta = FILETOSTR("Ruta del Certificado")
CERT = STRCONV(CertRuta,13)


Pero de ahí no paso...

A ver si alguno puede aportar la parte del certificado para poder seguir pq sino la respuesta del servidor WS es:

rror de identificaci&oacute;n. No se detecta certificado digital o no se ha seleccionado correctamente


Jose Antonio Blasco

unread,
Mar 8, 2017, 1:29:32 PM3/8/17
to Comunidad de Visual Foxpro en Español
Hola Francisco,
No se si va a ser parecido a un problema que he tenido con los procesos de Facturae.
En algun cliente, he tenido que instalarle el programa "Autofirma" del Ministerio de Turismo y Comunicaciones, que es el que se encarga de desarrollar estas aplicaciones.  Una vez instalado este programa, es capaz de detectar cuando una aplicacion esta solicitando un certificado digital, y dispara un "applet" para seleccionar  y confirmar el certificado que tengas instalado en el ordenador.

Un saludo.



Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Miguel A.

unread,
Mar 8, 2017, 1:58:46 PM3/8/17
to Comunidad de Visual Foxpro en Español
Buenas tardes,

Francisco, creo recordar que en México y Argentina utilizan algo parecido para las facturas electrónica, quizás alguien de ahí pudiera echarnos un cable (de energía positiva, no al cuello, por favor).

Lo que dice José Antonio quizás también pueda resultar.

Pero, si perdonáis mi ignorancia (no he estudiado este asunto en profundidad), me gustaría preguntaros algunas dudas:
¿Cada cuanto tiempo hay que presentar esto? mensualmente?. 
¿No se pueden hacer los XML, firmarlos manualmente y presentarlos de igual forma?. 
¿Alguien ha resuelto la confección de los XML de forma automática?. 

Estoy pensando en el SEPA,  pero repito, desconozco si esto tiene algún parecido con aquello.

Saludos,
Miguel A.

Jose Antonio Blasco

unread,
Mar 9, 2017, 4:22:54 AM3/9/17
to Comunidad de Visual Foxpro en Español
Miguel A.,

Las facturas hay que presentarlas en un plazo máximo de 4 días desde su emisión para las emitidas, y desde su contabilización para las recibidas.   En este primer año, y desde su entrada en vigor el 1 de Julio de 2017, este plazo se amplia a 8 días.

En estos momentos, la AEAT ha habilitado un portal de pruebas para subir los XML, pero a mí no me queda claro si esto será sustituido por uno definitivo, o habrá que hacerlo todo por webservice (que no he manejado nunca), pues se supone que los procesos han de ser capaces de recoger las respuestas a cada envío.  Estas respuestas van a contener, bien la confirmación del envio correcto, o bien el rechazo y sus motivos.

Con respecto a los XML, no no tengo nada hecho, aún estoy revisando información, pues el último PDF con la documentación, que ya va por la versión 5, tiene más de 180 páginas.

Un saludo.




Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


larue...@yahoo.com

unread,
Mar 9, 2017, 6:26:15 AM3/9/17
to publice...@googlegroups.com

--------------------------------------------
On Thu, 3/9/17, Jose Antonio Blasco <jabl...@gmail.com> wrote:

Subject: Re: [vfp] Re: Suministro Inmediato de Información deI IVA España
To: "Comunidad de Visual Foxpro en Español" <publice...@googlegroups.com>
Date: Thursday, March 9, 2017, 11:22 AM
farsitul documentului. Scanare Gelu RoataPage28 131Page 1 of 131Page 1 of 131

Miguel A.

unread,
Mar 9, 2017, 7:20:08 AM3/9/17
to Comunidad de Visual Foxpro en Español
Pues, como dice Zidane, estamos jodidos...

Francisco

unread,
Mar 9, 2017, 10:57:13 AM3/9/17
to Comunidad de Visual Foxpro en Español
El único problema que veo es a la hora de usar el Web Service dado que me responde siempre que no tengo certificado. Si logramos hacer lo de autenticarnos en el WS con el certificado que he visto que se ha hecho ya por otros compañeros. Ya tenemos todo resuelto dado que lo demas es simplemente desarrollar y desarrollar. 

En cuanto a si se podrán incluir los XML o enviar sin WS no lo sé pero me da a mi que si han creado un WS es para que se use y tampoco veo mayor problema en hacerlo. Las presentaciones se hacen en los plazos previstos y como dice siempre antes del plazo máximo. 

Así que vamos a centrar los esfuerzos en buscar como hacer q se entregue el certificado a la vez que se hace la conexión con el WS. De ahí que ponga que usemos el WS de ejemplo (Calidad de Datos identificativos) que necesita certificado y es muy fácil de usar. Si logramos hacerlo funcionar lo demás es coser y cantar...

Voy a preparar un ejemplo de conexión con este WS e intentar consumir a ver si a partir de esto alguien sabe donde poner lo del certificado 

Jose Castillo

unread,
Mar 9, 2017, 12:24:21 PM3/9/17
to Comunidad de Visual Foxpro en Español
Hola nuevamente, yo he buscado mucho por internet y lo unico que encuentro es un ejemplo parecido a esto:

oHttp = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')
WITH oHttp
           .OPEN("POST", cURL, .F.)
           .SetRequestHeader("SOAPAction","ConsultaLRFacturasEmitidas")
           .SetRequestHeader("Content-Type", "text/xml;charset=utf-8")
           .SetOption(2) = 13056
           .SetOption(3) = "LOCAL_MACHINE\My\"+nombre comun certificado
           .Send(cXml)
          cResponse = .ResponseText
ENDWITH

Pero lo pruebo y me da todo el rato error "Las credenciales del certificado de cliente no se reconocieron." No se que pasa. A ver si alguien viendo esto sabe como tirar adelante.
Un saludo.


El miércoles, 18 de enero de 2017, 16:43:33 (UTC+1), Luis M. escribió:

Francisco

unread,
Mar 9, 2017, 12:39:12 PM3/9/17
to Comunidad de Visual Foxpro en Español
Bueno Jose como te he comentado en el otro hilo, estoy en el mismo punto. Hay que ver como mandar el certificado de alguna manera. En realidad debería de salir una pantalla emergente requiriendo dicho certificado pero no lo hace y no se pq... de momento seguimos investigando... 

Este es mi código he empezado con otro WS más simple:

#DEFINE HTTPSTATUS_OK 200
#DEFINE HTTPSTATUS_CREATED 201
#DEFINE HTTPSTATUS_ACCEPTED 202
#DEFINE HTTPSTATUS_MULTISTATUS 207
#DEFINE HTTPSTATUS_BADREQUEST 400
#DEFINE HTTPSTATUS_UNAUTHORIZED 401
#DEFINE HTTPSTATUS_FORBIDDEN 403
#DEFINE HTTPSTATUS_NOTFOUND 404
#DEFINE HTTPSTATUS_INTERNALSERVERERROR 500

sError = ""
iStatus = 0 
pXMLResponse = "d:\respuesta.xml"

 TEXT TO sXMLRequest TEXTMERGE NOSHOW 
    <soapenv:Header/>
    <soapenv:Body>
       <vnif:VNifV1Ent>
          <vnif:Nif>22005188J</vnif:Nif>
          <vnif:Nombre>Paco Paco Paco</vnif:Nombre>
       </vnif:VNifV1Ent>
    </soapenv:Body>
 </soapenv:Envelope>
 ENDTEXT 

TRY 
  oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')
  *oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.3.0')
  oHTTP.OPEN("POST",cWS_Url,.F.)
  OHTTP.SetOption(2) = 13056
  *oHTTP.SetOption(3) = "D:\Copia Certificado\Certificado_2017.pfx"
  oHTTP.setRequestHeader("SOAPAction", "EjecutandoWS desde VFP")
  oHTTP.setRequestHeader("Content-Type", "text/xml;charset=utf-8")
  oHTTP.SEND(sXMLRequest) && MANDO EL REQUEST QUE HAGO

CATCH TO loErr
  sError = "Error: " + TRANSFORM(loErr.ErrorNo) +  " Mensaje: " + loErr.Message
  iStatus = -1      
ENDTRY 

IF iStatus != 0
RETURN -1
ENDIF 

IF oHTTP.STATUS = HTTPSTATUS_OK
   RespuestaWS = oHTTP.responseText
   STRTOFILE(STRCONV(RespuestaWS,9),pXMLResponse)
   iStatus = 0
   sError = ""
   RETURN 0
ELSE
   sError = "Error: No se logró la conexión con el Web Service."
   iStatus = -1
   RETURN -1
ENDIF

Francisco

unread,
Mar 10, 2017, 5:34:14 AM3/10/17
to Comunidad de Visual Foxpro en Español
Bueno como ya he comentado a través de una ActiveX he podido realizar la primera prueba que funciona para conectarme al WS de la Agencia Tributaria y consumir un recurso básico como es el de Calidad de Datos Identificativos (la descripción de este WS está aquí PDF). 

Es un ejemplo básico en el cual cargamos tanto el certificado (fichero .pfx) como su clave y una vez hecho esto y armado el XML de consulta podemos hacer POST al WS que nos devuelve una respuesta. La cual analizamos. Creo que se entiende el código y simplemente despeja dudas de como hacer la comunicación de los datos utilizando un certificado.

Aquí tenéis el código. A ver si entre todos y con un poco más de implicación logramos sacarlo adelante. 

????????X=cif a consultar
XXXXXXXXXXXXXXXXXXXXXXXXXX = nombre a consultar


LOCAL loHttp
LOCAL lnSuccess
LOCAL loCert
LOCAL lcHtml

 TEXT TO sXMLRequest TEXTMERGE NOSHOW 
    <soapenv:Header/>
    <soapenv:Body>
       <vnif:VNifV1Ent>
          <vnif:Nif>????????X</vnif:Nif>
          <vnif:Nombre>XXXXXXXXXXXXXXXXXXXXXXXXXX</vnif:Nombre>
       </vnif:VNifV1Ent>
    </soapenv:Body>
 </soapenv:Envelope>
 ENDTEXT 

loHttp = CreateObject('Chilkat_9_5_0.Http')

*  Any string unlocks the component for the 1st 30-days.
lnSuccess = loHttp.UnlockComponent("Anything for 30-day trial")
IF (lnSuccess <> 1) THEN
    ? loHttp.LastErrorText
    RELEASE loHttp
    RETURN .F.
ENDIF

loCert = CreateObject('Chilkat_9_5_0.Cert')

lcCert_Ruta="ruta completa al certificado.pfx"
lcCert_Clave="Clavedelcertificado"

lnSuccess = loCert.LoadPfxFile(lcCert_Ruta,lcCert_Clave)
IF (lnSuccess <> 1) THEN
    =MESSAGEBOX("Problemas al leer el certificado")
    *? loCert.LastErrorText
    release loHttp
    RELEASE loCert
    RETURN .F.
ENDIF

loHttp.SetSslClientCert(loCert)

loHttp.setRequestHeader("SOAPAction", "EjecutandoWS desde VFP")
loHttp.SetRequestHeader("Content-Type","text/xml; charset=utf-8")


loResp = loHttp.PostXml(cWS_Url,sXMLRequest,"utf-8")

IF (ISNULL(loResp)) THEN
    ? loHttp.LastErrorText
    ? "LastHeader:"
    ? loHttp.LastHeader
ELSE
    lnResponseStatusCode = loResp.StatusCode
    *  You may wish to verify that the responseStatusCode equals 200...
    ? "Response Status Code: " + STR(lnResponseStatusCode)
    
    *  You may examine the exact HTTP header sent with the POST like this:
    ? "LastHeader:"
    ? loHttp.LastHeader
    *  Examine the XML returned by the web service:
    
 
    ? "XML Response:"
    *? loResp.BodyStr
    loXmlResp = CreateObject('Chilkat_9_5_0.Xml')
    lnSuccess = loXmlResp.LoadXml(loResp.BodyStr)
    
    
    lcUnwrappedXml = loXmlResp.TagContent("VNifV1Sal:Nif")
    IF !EMPTY(lcUnwrappedXml)
   ? lcUnwrappedXml
lcUnwrappedXml = loXmlResp.TagContent("VNifV1Sal:Nombre")
ELSE
lcUnwrappedXml = loXmlResp.TagContent("faultstring")
IF !EMPTY(lcUnwrappedXml)
? lcUnwrappedXml
ELSE
? "ERROR NO DETERNIMADO"
ENDIF
ENDIF    
RELEASE loXmlResp
    release loHttp
    RELEASE loCert
    
    *loXmlResp = CreateObject('Chilkat_9_5_0.Xml')
    *lnSuccess = loXmlResp.LoadXml(loResp.BodyStr)    
    
ENDIF

Ahora este activeX es de pago por tanto si existe alguna opción de hacer esto mismo con otro componente como Msxml2.ServerXMLHTTP.6.0 soy todo oidos.

Saludos y manos a la obra...

Francisco

unread,
Mar 10, 2017, 6:36:23 AM3/10/17
to Comunidad de Visual Foxpro en Español
Y tras varias pruebas aquí el código que funciona mandando el certificado que debe estar instalado en la máquina (ya no vale el .pfx con la clave) este utilizando el componente gratuito. Si alguno pudiera ver donde desde fox conseguir una lista con los nombres de los certificados instalados para poder elegir ya seria la bomba.

#DEFINE HTTPSTATUS_OK 200
#DEFINE HTTPSTATUS_CREATED 201
#DEFINE HTTPSTATUS_ACCEPTED 202
#DEFINE HTTPSTATUS_MULTISTATUS 207
#DEFINE HTTPSTATUS_BADREQUEST 400
#DEFINE HTTPSTATUS_UNAUTHORIZED 401
#DEFINE HTTPSTATUS_FORBIDDEN 403
#DEFINE HTTPSTATUS_NOTFOUND 404
#DEFINE HTTPSTATUS_INTERNALSERVERERROR 500

sError = ""
iStatus = 0 
pXMLResponse = "d:\respuesta.xml"

 TEXT TO sXMLRequest TEXTMERGE NOSHOW 
    <soapenv:Header/>
    <soapenv:Body>
       <vnif:VNifV1Ent>
          <vnif:Nif>?????????</vnif:Nif>
          <vnif:Nombre>??????????????</vnif:Nombre>
       </vnif:VNifV1Ent>
    </soapenv:Body>
 </soapenv:Envelope>
 ENDTEXT 

TRY 
  oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')
  *oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.3.0')
  oHTTP.setOption(2) = 13056   
  oHTTP.setOption(3) = "CURRENT_USER\My\???????????????????????" && donde ????????????=nombre de tu certificado
   oHTTP.OPEN("POST",cWS_Url,.F.)
  oHTTP.setRequestHeader("SOAPAction", "EjecutandoWS desde VFP")
  oHTTP.setRequestHeader("Content-Type", "text/xml;charset=utf-8")
  oHTTP.SEND(sXMLRequest) && MANDO EL REQUEST QUE HAGO

CATCH TO loErr
  sError = "Error: " + TRANSFORM(loErr.ErrorNo) +  " Mensaje: " + loErr.Message
  iStatus = -1      
ENDTRY 

IF iStatus != 0
RETURN -1
ENDIF 

IF oHTTP.STATUS = HTTPSTATUS_OK
   RespuestaWS = oHTTP.responseText
lcUnwrappedXml = STREXTRACT(RespuestaWS,'<VNifV1Sal:Nif>','</VNifV1Sal:Nif>')
    IF !EMPTY(lcUnwrappedXml)
    ? "Verificado OK "+lcUnwrappedXml
lcUnwrappedXml = STREXTRACT(RespuestaWS,'<VNifV1Sal:Nombre>','</VNifV1Sal:Nombre>')
? lcUnwrappedXml
ELSE
lcUnwrappedXml = STREXTRACT(RespuestaWS,'<faultstring>','</faultstring>')
IF !EMPTY(lcUnwrappedXml)
? lcUnwrappedXml
ELSE
? "ERROR NO DETERNIMADO"
ENDIF
ENDIF
  * STRTOFILE(STRCONV(RespuestaWS,9),pXMLResponse)

ihe...@gmail.com

unread,
Mar 10, 2017, 7:06:56 AM3/10/17
to Comunidad de Visual Foxpro en Español
Hola,
yo el lunes tengo la primera reunión sobre este tema.
En un principio pensaba, que sería la empresa del programa de contabilidad la que se en cargara de este tema, pero al leeros a vosotros, me da la impresión de que se puede hacer desde el programa de gestión.
Es así????
Gracias

Luis M.

unread,
Mar 10, 2017, 10:28:25 AM3/10/17
to Comunidad de Visual Foxpro en Español
Buenas tardes,

En mi opinión lo más lógico es que lo haga el programa de Contabilidad (que es donde siempre se han hecho las liquidaciones de Iva). Sin embargo va a necesitar información extra porque este nuevo sistema SII  pide unos datos muy específicos como por ejemplo la descripción de la Operación y también unas claves especiales fijadas por la AEAT.

Saludos, 
Luis Martínez.

Jose Castillo

unread,
Mar 10, 2017, 11:51:16 AM3/10/17
to Comunidad de Visual Foxpro en Español
Hola Francisco, muchisimas gracias por tu ayuda, voy a ponerme a trabajar sobre ello, ahora te voy a decir que sobre el tema de elegir los certificados yo si tengo la solución, lo unico que tienes que hacerte con el wwDotNetBridge.
Te copio parte del código, yo los enseño en un grid para que me elijan uno.

do wwDotNetBridge

LOCAL loBridge as wwDotNetBridge
loBridge = CreateObject("wwDotNetBridge","V4")

*** Create an instance of 509Store
loStore = loBridge.CreateInstance("System.Security.Cryptography.X509Certificates.X509Store")

*** Grab a static Enum value
leReadOnly = loBridge.GetEnumvalue("System.Security.Cryptography.X509Certificates.OpenFlags","ReadOnly")

*** Open the certificate store - results into loStore.Certificates
loStore.Open(leReadOnly)

*** Collection of Certificates
laCertificates = loStore.Certificates

*** Collections don't work over regular COM Interop
*** so use indirect access
lnCount = loBridge.GetProperty(laCertificates,"Count")

*** Loop through Certificates
FOR lnX = 1 TO lnCount -1
       LOCAL loCertificate as System.Security.Cryptography.X509Certificates.X509Certificate2    
       loCertificate = loBridge.GetPropertyEx(loStore,"Certificates[" + TRANSFORM(lnX) + "]")
    
       IF !ISNULL(loCertificate)
           ? loCertificate.FriendlyName
       ENDIF
ENDFOR

A seguir con ello. Gracias nuevamente.

Miguel A.

unread,
Mar 10, 2017, 11:51:35 AM3/10/17
to Comunidad de Visual Foxpro en Español
Hola Francisco,

En este hilo está explicado cómo obtener la lista de certificados y cómo firmar un fichero, pero es de VB pero aunque no parece excesivamente complicado, no tengo suficientes conocimientos para este código. Espero que alguno pueda hacerlo.

Un saludo,
Miguel A.

ihe...@gmail.com

unread,
Mar 13, 2017, 9:22:30 AM3/13/17
to Comunidad de Visual Foxpro en Español
Hola Luis,
sabes que es exactamente la "Descripion de la operación"???. Se refiere a si es una compra o venta o ????

jaumeg...@gmail.com

unread,
Mar 13, 2017, 10:19:28 AM3/13/17
to Comunidad de Visual Foxpro en Español
Hola a todos y muchas gracias por toda la información publicada
Yo he conseguido realizar la conexión con el WS de la agencia tributaria sin errores desde el ordenador de mi oficina sin enviar ningún certificado adjunto, Lo único que he tengo es un certificado digital de mi empresa instalado en mi ordenador y con eso funciona perfectamente.
Espero os ayude
Un saludo 


El miércoles, 8 de marzo de 2017, 18:10:42 (UTC+1), Francisco escribió:

Jose Antonio Blasco

unread,
Mar 13, 2017, 11:30:38 AM3/13/17
to Comunidad de Visual Foxpro en Español
Disculpa Jaume, y la conexion con el WS de la agencia tributaria, la has conseguido con alguno de los códigos aquí publicados?

Si es así con cual ?

Un saludo.


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Luis M.

unread,
Mar 13, 2017, 11:34:04 AM3/13/17
to Comunidad de Visual Foxpro en Español
Buenas tardes,

Pues lamentablemente no lo tengo claro... exactamente no sé si hay que hacer referencia a la naturaleza de los bienes comprados o vendidos... en la documentación aparecen etiquetas del tipo:

<sii:DescripcionOperacion>CompraXXXXXXX</sii:DescripcionOperacion>

Y también en el caso de las facturas emitidas.

Saludos,
Luis Martínez.

Luis M.

unread,
Mar 13, 2017, 11:35:34 AM3/13/17
to Comunidad de Visual Foxpro en Español
Hola Jaume,

Y podrías poner un ejemplo de como lo has conseguido?

Gracias y un saludo,
Luis Martínez.

Francisco

unread,
Mar 13, 2017, 12:02:55 PM3/13/17
to Comunidad de Visual Foxpro en Español
El problema es que necesitas que el código funcione en cualquier máquina y creo que eso solo lo puedes conseguir si mandas un certificado de las maneras indicadas. Obviamente la página de la Agencia Tributaria necesita un certificado para poder funcionar. No creo que así por arte de magia funcione. Otra cosa ya es la creación de los xml para mandarlos a cada Ws en concreto pero como antes he explicado lo duro era poder realizar la conexión con el WS e interactuar con él usando un certificado y eso ya ha quedado explicado.


El lunes, 13 de marzo de 2017, 15:19:28 (UTC+1), jaumeg...@gmail.com escribió:

jaumeg...@gmail.com

unread,
Mar 13, 2017, 12:04:38 PM3/13/17
to Comunidad de Visual Foxpro en Español

Hola
os paso el prg que he sacado de vuestros ejemplos y basándome en el que comentaba Franciso http://bmorenoj.blogspot.com.es/2011/11/consumir-cualquier-web-service-con.html). 
Pero lo que es básico es tener instalado el certificado digital en el ordenador desde el que se llama al WS de la aeat.
Aquí os pongo el código, lo único que hay que modificar es el nif B66666666 que se envía y poner uno correcto. El nombre, si es una empresa lo devuelve el WS
Saludos

****

oWS = CREATEOBJECT( "VFP_WebService","https://www1.agenciatributaria.gob.es/wlpl/BURT-JDIT/ws/VNifV1SOAP?wsdl")

lcRespuesta = oWS.GetWeather("B66666666","NOMBRE EMPRESA")

IF oWS.iStatus != 0

MESSAGEBOX(oWS.sError,16,"Error al ejecutar WS")

ELSE

MESSAGEBOX(lcRespuesta,64,"EjecutandoWS desde VFP - PortalFOX")

ENDIF

DEFINE CLASS VFP_WebService AS CUSTOM

 

* --- Definimos las propiedades ---

sError = ""

iStatus = 0

sURL_WS = ""

 

* --- Definimos la función del WebService ---

FUNCTION GetWeather (TcNif, TcNom)

* --- Paso 1. Creo el XML Request ---

sXMLRequest = this.CreaRequest(TcNif, TcNom)

pXMLResponse = ADDBS(SYS(2023)) + SYS(2015) + [.xml]

* --- Paso 2. Ejecuto el WS | Paso 3. Obtengo el Response ---

this.iStatus = this.EjecutaWS( this.sURL_WS, sXMLRequest , pXMLResponse )

 

IF this.iStatus != 0 && Ocurrió un error el cual está especificado en sError.

RETURN ""

ENDIF

 

sXMLResponse = FILETOSTR(pXMLResponse)

* --- Parseamos el XML Response ---

* --- Para el ejemplo está así, manejando texto, ustedes deben manejar XML (falta de tiempo, perdón) ---

 

sRespuestaWS = "N.I.F.:"+CHR(9)+ STREXTRACT(sXMLResponse,'VNifV1Sal:Nif>','</VNifV1Sal:Nif')+CHR(13)+CHR(10)

sRespuestaWS = sRespuestaWS +"Nombre:"+CHR(9)+ ALLTRIM(STREXTRACT(sXMLResponse,':Nombre>','</VNifV1Sal:Nombre'))+CHR(13)+CHR(10)

sRespuestaWS = sRespuestaWS +"Enviado:"+CHR(9)+"NOMBRE EMPRESA"

this.borraArchivo(pXMLResponse)

RETURN sRespuestaWS

ENDFUNC

*---------------------------------------------------

FUNCTION EjecutaWS(pURL_WSDL, pFileRequest , pFileResponse )

*---------------------------------------------------

TRY

oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')

oHTTP.OPEN("POST", pURL_WSDL, .F.)

oHTTP.setRequestHeader("User-Agent", "EjecutandoWS desde VFP - PortalFOX")

oHTTP.setRequestHeader("Content-Type", "text/xml;charset=utf-8")

oHTTP.SEND(pFileRequest)

CATCH TO loErr

this.sError = "Error: " + TRANSFORM(loErr.ErrorNo) + " Mensaje: " + loErr.Message

this.iStatus = -1

ENDTRY

IF this.iStatus != 0

RETURN -1

ENDIF

* --- Si el status es diferente a 200, ocurrió algún error de conectividad con el WS ---

IF oHTTP.STATUS = 200

RespuestaWS = oHTTP.responseText

* --- Se genera el XML del response | Este es el paso 3!! ---

STRTOFILE(STRCONV(RespuestaWS,9),pXMLResponse)

this.iStatus = 0

this.sError = ""

RETURN 0

ELSE

this.sError = "Error: No se logró la conexión con el Web Service."

this.iStatus = -1

RETURN -1

ENDIF

ENDFUNC

*---------------------------------------------------

 

*---------------------------------------------------

FUNCTION CreaRequest(TcNif, TcNom)

*---------------------------------------------------

TEXT TO sXMLRequest TEXTMERGE NOSHOW

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:vnif="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV1Ent.xsd">

<soapenv:Header/>

<soapenv:Body>

<vnif:VNifV1Ent>

<vnif:Nif>B66666666</vnif:Nif>

<vnif:Nombre>NOMBRE EMPRESA</vnif:Nombre>

</vnif:VNifV1Ent>

</soapenv:Body>

</soapenv:Envelope>

ENDTEXT

RETURN sXMLRequest

ENDFUNC

*---------------------------------------------------

 

*---------------------------------------------------

FUNCTION BorraArchivo(pFile)

*---------------------------------------------------

IF FILE(pFile)

DELETE FILE (pFile)

ENDIF

ENDFUNC

*---------------------------------------------------

 

*---------------------------------------------------

* Evento constructor

PROCEDURE Init

*---------------------------------------------------

LPARAMETERS tcURLWS

this.sURL_WS = tcURLWS

this.iStatus = 0

this.sError = ""

ENDPROC

*---------------------------------------------------

 

ENDDEFINE

******

Francisco

unread,
Mar 13, 2017, 12:09:09 PM3/13/17
to Comunidad de Visual Foxpro en Español
José gracias por compartir, el problema está es que en ese Friendlyname no es el que se pone aquí:

 oHTTP.setOption(3) = "CURRENT_USER\My\???????????????????????" && donde ????????????=nombre de tu certificado

Dado que a mi me aparece vacío y si le pongo una descripción tampoco me la coge. Por ejemplo a mi me funciona poniendo 

 oHTTP.setOption(3) = "CURRENT_USER\My\PEPITO DE LOS PALOTES - 33344455F"

En la función que me mandas me devuelve como Friendlyname = "PEPITO" pero no funciona poniendo :

 oHTTP.setOption(3) = "CURRENT_USER\My\PEPITO"

Así que tendra otra propiedad el objeto System.Security.Cryptography.X509Certificates.X509Certificate2  para ese nombre

Francisco

unread,
Mar 13, 2017, 12:17:52 PM3/13/17
to Comunidad de Visual Foxpro en Español
Jaume perdona pero ese ejemplo no funciona por el tema del certificado. Que funcione en un caso particular, no quiere decir que sea correcto o completo dado que no envías ninguna información de certificado al WS. Imagina que un cliente tiene 10 certificados para 10 empresas, ese código no funciona aparte de ser una adaptación con excesivo código para lo que se pretende hacer. De todas muchas gracias por compartirlo.

Saludos.
<font color="#0000ff" face="Cour

Jose Antonio Blasco

unread,
Mar 13, 2017, 2:29:19 PM3/13/17
to Comunidad de Visual Foxpro en Español
He probado el ejemplo de Jaume, retocandolo para establecer el CIF y Nombre de la empresa en 2 variables.

En mi ordenador tengo instalados los certificados de 2 empresas, y solo con poner en las variables el cif y el nombre de la empresa de la que quiero que coja el certificado me responde correctamente.  Incluso no necesito poner el nombre de la empresa completo, y en la respuesta SI me lo completa.

Un saludo.,


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Francisco

unread,
Mar 14, 2017, 8:08:08 AM3/14/17
to Comunidad de Visual Foxpro en Español
En fin....

Miguel A.

unread,
Mar 15, 2017, 12:15:12 PM3/15/17
to Comunidad de Visual Foxpro en Español
Hola José Antonio,

¿Dónde colocas tú el nombre empresa de la que quieres coger el certificado?

Yo creo que el CIF y el nombre de la empresa que hay que poner en ambos sitios es de aquella que quieres contrastar el nombre a través del CIF y que lo que sucede realmente es que se coge el primer certificado según la lista de los que están instalados en tu ordenador; de hecho a mí me funciona en casi todos los equipos, salvo en el mío y creo que es porque el primer certificado que aparece es el de una persona física.

Por cierto esa rutina que ha subido Jaume viene muy bien para contrastar el nombre de una empresa con el CIF y también por ejemplo, para evitar preguntarle el nombre completo al cliente, serías tú el que le pediría que te lo confirme, una vez pasado el CIF (porque funciona con cualquier nombre que pongas).

Saludos cordiales,
Miguel A.

Jose Antonio Blasco

unread,
Mar 15, 2017, 1:55:45 PM3/15/17
to Comunidad de Visual Foxpro en Español
Hola Miguel,
Efectivamente, con los certificados personales no funciona, sólo con los de empresa.  Aunque os había dicho que en mi equipo tengo 2 certificados, realmente tengo 3, 2 de empresa y el mio personal.   Con este último no funciona, sólo con los 2 de empresa.

Los de empresa, corresponden a 2 empresas cuya razon social tiene 2 palabras, por ejemplo "Hierros Lacarte".  Pues bien, si especifico el cif de una de ellas, y sólo la primera palabra, la consulta al web service me devuelve el nombre completo, incluido el "S.L.", pues ambas son sociedades limitadas.

Paso el código que modifiqué, para sólo rellenar 2 variables con el nombre y el cif, para hacer la consulta.


cNomEmpresa="nombre"
cCifEmpresa="cif"
*
oWS = Createobject( "VFP_WebService","https://www1.agenciatributaria.gob.es/wlpl/BURT-JDIT/ws/VNifV1SOAP?wsdl")
lcRespuesta = oWS.GetWeather(cCifEmpresa,cNomEmpresa)

If oWS.iStatus != 0
    Messagebox(oWS.sError,16,"Error al ejecutar WS")
Else
    Messagebox(lcRespuesta,64,"EjecutandoWS desde VFP - PortalFOX")
Endif

Define Class VFP_WebService As Custom

    * --- Definimos las propiedades ---

    sError = ""
    iStatus = 0
    sURL_WS = ""

    * --- Definimos la función del WebService ---
    Function GetWeather (TcNif, TcNom)


        * --- Paso 1. Creo el XML Request ---
        sXMLRequest = This.CreaRequest(TcNif, TcNom)
        pXMLResponse = Addbs(Sys(2023)) + Sys(2015) + [.xml]


        * --- Paso 2. Ejecuto el WS | Paso 3. Obtengo el Response ---
        This.iStatus = This.EjecutaWS( This.sURL_WS, sXMLRequest , pXMLResponse )
        If This.iStatus != 0 && Ocurrió un error el cual está especificado en sError.
            Return ""
        Endif

        sXMLResponse = Filetostr(pXMLResponse)

        * --- Parseamos el XML Response ---
        * --- Para el ejemplo está así, manejando texto, ustedes deben manejar XML (falta de tiempo, perdón) ---

        sRespuestaWS = "N.I.F.:"+Chr(9)+ Strextract(sXMLResponse,'VNifV1Sal:Nif>','</VNifV1Sal:Nif')+Chr(13)+Chr(10)
        *sRespuestaWS = sRespuestaWS +"Nombre:"+Chr(9)+ Alltrim(Strextract(sXMLResponse,':Nombre>','</VNifV1Sal:Nombre'))+Chr(13)+Chr(10)
        sRespuestaWS = sRespuestaWS +"Nombre:"+Chr(9)+ Strconv(Alltrim(Strextract(sXMLResponse,':Nombre>','</VNifV1Sal:Nombre')),11)+Chr(13)+Chr(10)
        sRespuestaWS = sRespuestaWS +"Enviado:"+Chr(9)+TcNom
       
        This.borraArchivo(pXMLResponse)
        Return sRespuestaWS

    Endfunc

    *---------------------------------------------------
    Function EjecutaWS(pURL_WSDL, pFileRequest , pFileResponse )
    *---------------------------------------------------
        Try
            oHTTP = Createobject('Msxml2.ServerXMLHTTP.6.0')
            oHTTP.Open("POST", pURL_WSDL, .F.)

            oHTTP.setRequestHeader("User-Agent", "EjecutandoWS desde VFP - PortalFOX")
            oHTTP.setRequestHeader("Content-Type", "text/xml;charset=utf-8")
            oHTTP.Send(pFileRequest)
        Catch To loErr
            This.sError = "Error: " + Transform(loErr.ErrorNo) + " Mensaje: " + loErr.Message
            This.iStatus = -1
        Endtry

        If This.iStatus != 0
            Return -1
        Endif


        * --- Si el status es diferente a 200, ocurrió algún error de conectividad con el WS ---
        If oHTTP.Status = 200

            RespuestaWS = oHTTP.responseText

            * --- Se genera el XML del response | Este es el paso 3!! ---
            *Strtofile(Strconv(RespuestaWS,9),pXMLResponse)
            Strtofile(Strconv(RespuestaWS,9),pFileResponse)
            This.iStatus = 0
            This.sError = ""
            Return 0
        Else
            This.sError = "Error: No se logró la conexión con el Web Service."
            This.iStatus = -1
            Return -1
        Endif

    Endfunc

    *---------------------------------------------------



    *---------------------------------------------------
    Function CreaRequest(TcNif, TcNom)

        *---------------------------------------------------
        TEXT TO sXMLRequest TEXTMERGE NOSHOW
            <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:vnif="http://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/burt/jdit/ws/VNifV1Ent.xsd">
            <soapenv:Header/>
            <soapenv:Body>
            <vnif:VNifV1Ent>
            <vnif:Nif><<TcNif>></vnif:Nif>
            <vnif:Nombre><<TcNom>></vnif:Nombre>

            </vnif:VNifV1Ent>
            </soapenv:Body>
            </soapenv:Envelope>
        ENDTEXT

        Return sXMLRequest

    Endfunc
    *---------------------------------------------------



    *---------------------------------------------------
    Function borraArchivo(pFile)
        *---------------------------------------------------
        If File(pFile)
            Delete File (pFile)
        Endif

    Endfunc

    *---------------------------------------------------



    *---------------------------------------------------
    * Evento constructor
    Procedure Init
        *---------------------------------------------------
        Lparameters tcURLWS
        This.sURL_WS = tcURLWS
        This.iStatus = 0
        This.sError = ""
    Endproc
    *---------------------------------------------------

Enddefine


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Miguel A.

unread,
Mar 15, 2017, 2:12:40 PM3/15/17
to Comunidad de Visual Foxpro en Español
Luego, todavía no sabemos cómo seleccionar un certificado, no?
Saludos,
Miguel A.

Jose Antonio Blasco

unread,
Mar 15, 2017, 2:17:49 PM3/15/17
to Comunidad de Visual Foxpro en Español
Acabo de hacer una prueba más.   Si paso el nombre vacío y el cif correcto, me devuelve el nombre de la empresa completo.  Lo que no sé, es si el nombre lo obtiene del almacen de certificados, o del webservice de la agencia tributaria.

Por la forma en que están mis aplicaciones, que ya generan el modelo 340 de la agencia tributaria, y los recibos en formato SEPA, los clientes ya han tenido que introducir los datos de la empresa, nombre, razon social, domicilio, cif...
por lo que esa información ya la tengo.   La única duda, es saber si se comprueba el almacen de certificados.   Mañana probaré el código en un ordenador que no tenga los certificados instalados.

Saludos.


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Jose Antonio Blasco

unread,
Mar 16, 2017, 9:59:24 AM3/16/17
to Comunidad de Visual Foxpro en Español

Acabo de probar la consulta al webservice en un ordenador que SOLO tiene instalado el certificado digital de una empresa.   Bueno .... los certificados instalados no influyen en absoluto.  Incluso he probado pasando varios CIF's de mis clientes, sin especificar ningun nombre, y la consulta me devuelve el nombre de la empresas correctamente.



Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Miguel A.

unread,
Mar 16, 2017, 2:18:56 PM3/16/17
to Comunidad de Visual Foxpro en Español
Hola,

Ya había comentado que según mis observaciones cogía el primer certificado según la lista de los que están instalados en tu ordenador, por lo que se necesita poder seleccionar uno si, como es habitual, tienes varios instalados en la misma máquina.

Pero he visto por ahí que a la hora de firmar se puede, o bien seleccionar uno de una lista, o bien coger uno que esté guardado en un fichero tipo .p12 o .pfx; de ser así creo que esta segunda solución puede ser incluso más cómoda que la primera.

Sea como fuere tenemos que resolver también el tema de la firma. En algún grupo relacionado con facturae se habla de esto, pero en VFP yo no he visto realmente a nadie que lo haya resuelto; lo más parecido que encontré es alguien que enseña como construir una DLL que emplea a su vez FirmaXAdesNet.DLL y que se puede usar en VFP. También hay un programa, del amigo Víctor Espina, que sirve para la firma de las facturas electrónicas en México, lo que no sé es si los certificados son del mismo tipo o no y si por tanto se podría utilizar en nuestro caso...

Saludos,
Miguel A.

jaumeg...@gmail.com

unread,
Mar 16, 2017, 2:30:56 PM3/16/17
to Comunidad de Visual Foxpro en Español
Hola
Os adjunto lo que dice la aeat sobre el tema de certificados para el SII

"

La presentación podrá ser efectuada por el obligado tributario, un apoderado suyo a este trámite ó un colaborador social, que deberá disponer de un certificado electrónico reconocido. Las aplicaciones que envían información a los servicios web deberán autenticarse con el certificado electrónico de cliente. Por tanto, el uso de los servicios requiere tener instalado un certificado electrónico reconocido admitido por la Agencia Tributaria, en el ordenador desde el que se produzca el envío de la información. Dicho certificado podrá ser de Persona Física ó de Persona Jurídica. Todos los NIFs se tienen que validar contra la Base de Datos Centralizada de la AEAT. "


y al final

4.3. Medio de envío.




Entorno: Internet.


Protocolo: HTTPS.


Mensajes: Web Service con SOAP 1.1 modo Document.


Certificado: Las aplicaciones que envían información a los servicios web deberán autenticarse con certificado electrónico de cliente. El uso de los servicios requiere tener instalado un certificado electrónico reconocido admitido por la Agencia Tributaria, en el ordenador desde el que se produzca el envío de la información.


Firma: Los XML intercambiados no irán firmados "


saludos











 

Francisco

unread,
Mar 17, 2017, 6:12:50 AM3/17/17
to Comunidad de Visual Foxpro en Español
Está claro que solamente te tienes que identificar con el certificado perteneciente a la entidad/persona que realiza la presentación (no hace falta firmar nada). Por tanto es necesario poder seleccionar de los multiples certificados que la empresa pueda tener uno para realizar la comunicación con el WS. Creo  que hay aquí gente que se ha liado un poco con el WS de Calidad de Datos Identificativos y su función. Pero bueno por lo menos vamos avanzando :-)

Voy a empezar a presentar algunos registros a ver si en poco os puedo mandar un ejemplo...

Jose Antonio Blasco

unread,
Mar 17, 2017, 8:17:15 AM3/17/17
to Comunidad de Visual Foxpro en Español
Tienes razón Francisco, yo soy uno de esos que se había liado, principalmente porque nunca he usado webservice y voy bastante perdido.

Ahora estoy revisando documentación de "Autofirma" del "Minetur".  
¿Crees que puede solucionar el problema?
Según entiendo en la documentación ( o tal vez me vuelva a liar), una vez instalado, cuando una web solicita certificado, te dispara un miniapplet que muestra la lista de certificados.


Voy a revisar la documentación completa, a ver si lo termino de enteder.


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Francisco

unread,
Mar 22, 2017, 1:11:58 PM3/22/17
to Comunidad de Visual Foxpro en Español
Bueno aquí dejo el  primer esbozo de una clase para el tema de sii. De momento la clase solo construye el xml de factura emitida y no contempla todos los casos pero es una buena base sobre la que partir. Lo he probado y funciona bien recibiendo respuesta correcta el WS. Para usarlo tengo un hay que construir un código similar a este:

Tengo un cursor que contiene los registros de iva repercutido que se quieren entregar al SII y luego otro cursor que dentro de un registro recorre todas los posibles distintos tipos de iva que contempla.

thisform.memoxml.edit1.value="" && esto es un edit que va a contener la consulta que se puede enviar al WS

loXML = CREATEOBJECT("aeat_sii")
loXML.str_version="0.6"
loXML.str_nombrefis= XXXXXXXXXXXXXXX && nombre de la empresa que realiza la declaración
loXML.str_nif=XXXXXXXXXX && cif de la empresa
loXML.str_tipocom="A0" && A0=Alta /A1=Modficación / A4=Modif. factura regimen viajeros

SELECT C_SII && cursor que contiene registros repercutidos a declarar
SCAN ALL 
         && poner datos 
loXML.str_fecha_factura=C_SII.fecha_fac && campo fecha
loXML.str_serie=C_SII.documento && campo documento
IF C_SII.importe_total>0 && campo importe total
loXML.str_tipo_factura_emitida="F1" && segun tabla L2_EMI F1=Factura,F2=Simplificada,R1=Rectificativa etc...
ELSE
loXML.str_tipo_factura_emitida="R1"
ENDIF
&& ojo falta ver tema de exportación etc aqui solo contemplo caso nacional
loXML.str_clave_regimen_especial_emitida="01" && 01=Operación de regimen común, 02=Exportación etc...

loXML.n_importe_total_emitida = C_SII.importe_total && campo importe total factura
loXML.str_descripcion_operacion_emitida="VENTA DE MERCADERIAS O SERVICIOS" && esto no creo que la gente lo ponga
loXML.str_nombre_contraparte_emitida = C_SII.nombrefiscal && nombre fiscal del cliente
loXML.str_pais_emitida = C_SII.pais && contiene el codigo del pais && codigo pais del cliente
loXML.str_nif_contraparte_emitida = C_SII.cif && cif del cliente
loXML.str_idtype="02" && por si no es nacinal tipo de identificador es NIF-IVA
loXML.e_fiscal() && monto parte de <sum1:Contraparte> por la clase

select ........(saco las bases los % y los recargos del registro)..... INTO CURSOR C_IVAS NOCONSOLE NOWAIT
IF _tally>0 && SI HAY LINEAS
SELECT C_IVAS
loXML.str_tipo_No_Exenta="S1"
SCAN ALL
loXML.n_tipo_impositivo=C_IVAS.por_iva && porcentaje de iva
            loXML.n_base_imponible=C_IVAS.baseimp              && base imponible
            loXML.n_cuota_repercutida=C_IVAS.imp_iva           && importe iva
            loXML.n_tipo_recargo_equivalencia=C_IVAS.por_req   && porcentaje recargo equ.
            loXML.n_cuota_recargo_equivalencia=C_IVAS.imp_req  && importe recargo
loXML.f_desglose_factura() && va generando esta seccion
ENDSCAN
ENDIF
SELECT C_SII
loXML.d_Registrofactura() && añade registros para cada factura
ENDSCAN
loXML.a_Raiz() && añade todo al global
thisform.memoxml.edit1.value=loXML.str_raiz && lo asigno al edit box para ver resultado
thisform.refresh


Luego he puesto un botón para enviar este XML al WS y ver su respuesta

#DEFINE HTTPSTATUS_OK 200

sError = ""
iStatus = 0 


TRY 
  oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')
  oHTTP.setOption(2) = 13056   
  oHTTP.setOption(3) = "CURRENT_USER\My\XXXXXXXXXXXXXXXXXXXXX" && donde XXXXXXX es el nombre del certificado
  oHTTP.OPEN("POST",cWS_Url,.F.)
  oHTTP.setRequestHeader("SOAPAction", "EjecutandoWS desde VFP")
  oHTTP.setRequestHeader("Content-Type", "text/xml;charset=utf-8")
  oHTTP.SEND(thisform.memoxml.edit1.value) && MANDO EL REQUEST QUE HAGO

CATCH TO loErr
  sError = "Error: " + TRANSFORM(loErr.ErrorNo) +  " Mensaje: " + loErr.Message
  iStatus = -1      
ENDTRY 

IF iStatus != 0
RETURN -1
ENDIF 

IF oHTTP.STATUS = HTTPSTATUS_OK
   RespuestaWS = oHTTP.responseText
   IF MESSAGEBOX("Mostrar Resultado",4+32,"Atención")=6
   thisform.memoxml.edit2.value=RespuestaWS && muestro el resultado
   ENDIF
   iStatus = 0
   sError = ""
   RETURN 0
ELSE
   sError = "Error: No se logró la conexión con el Web Service."
   iStatus = -1
   RETURN -1
ENDIF

Como he dicho es un primer acercamiento a lo que puede ser una clase que controle la creación de los XML de forma independiente y que así todos podamos usar la misma.

Saludos y espero os sirva...

pd: Si hay errores en la clase por favor comenten.
SII.zip_1

David M

unread,
Mar 22, 2017, 2:14:35 PM3/22/17
to Comunidad de Visual Foxpro en Español
Hola Francisco, para obtener el nombre válido en este caso no vale la propiedad FriendlyName como bien dices, se debe extraer el valor de CN (CommonName) del certificado.

Yo lo he conseguido extrayendo el texto de la propiedad Subject del objeto loCertificate siguiendo con el código que envió Jose Castillo.

Aquí un ejemplo:

STREXTRACT(loCertificate.Subject, "CN=", "," , 1)


Con esa sintaxis obtienes el CN y a mí me ha funcionado!

Espero que ayude.

David M.

Francisco

unread,
Mar 22, 2017, 2:28:16 PM3/22/17
to Comunidad de Visual Foxpro en Español
Exacto David también lo hice yo así empleando el wwDotNetBridge... gracias por la info

do wwDotNetBridge
LOCAL loBridge as wwDotNetBridge
loBridge = CreateObject("wwDotNetBridge","V4")

*** Create an instance of 509Store
loStore = loBridge.CreateInstance("System.Security.Cryptography.X509Certificates.X509Store")

*** Grab a static Enum value
leReadOnly = loBridge.GetEnumvalue("System.Security.Cryptography.X509Certificates.OpenFlags","ReadOnly")

*** Open the certificate store - results into loStore.Certificates
loStore.Open(leReadOnly)

*** Collection of Certificates
laCertificates = loStore.Certificates

*** Collections don't work over regular COM Interop
*** so use indirect access
lnCount = loBridge.GetProperty(laCertificates,"Count")

*** Loop through Certificates
FOR lnX = 1 TO lnCount -1
    *** Access collection item indirectly
    LOCAL loCertificate as System.Security.Cryptography.X509Certificates.X509Certificate2    
    loCertificate = loBridge.GetPropertyEx(loStore,"Certificates[" + TRANSFORM(lnX) + "]")
    
    IF !ISNULL(loCertificate)
        a=loCertificate.Subject
        ? SUBSTR(A,4,AT(",",A,1)-4)
    ENDIF
ENDFOR

RETURN




Francisco

unread,
Mar 27, 2017, 11:09:38 AM3/27/17
to Comunidad de Visual Foxpro en Español
Si alguien está con el tema de pasar a cursor los datos del XML de consultas, he hecho este pequeño ejemplo. Está sacado de (Aquí) Si alguno tiene una manera más eficaz de luego pasar eso a un cursor soy todo oídos...



FUNCTION LeerXML
  LPARAMETERS cXMLFile
  LOCAL oXML, oRootNode, cParentName, cValue, cName, nType, nNumNodes, ;
    cRootTagName, oNodeList, oNode, bHasChild, cTagName, ;
    oChildNodeList, nChildLen, nPass, oChildNode, oAttributeList, ;
    cTextData, nTextDataLen, cAttrName, cAttrValue, nNumAttr

   oXML = CREATEOBJECT('MSXML2.DomDocument.3.0')
  oXML.ASYNC = .F.
  oXML.LOADXml(cXMLFile)
  oRootNode = oXML.documentElement
  cRootTagName = oRootNode.tagName
  oNodeList = oRootNode.getElementsByTagName("*")
  nNumNodes = oNodeList.LENGTH

  FOR nPos = 0 TO (nNumNodes-1) STEP 1
    * Get the next node in the list
    oNode = oNodeList.ITEM(nPos)
    cParentName = oNode.nodeName
    bHasChild = oNode.hasChildNodes()
    nType = oNode.nodeType
    IF bHasChild
      IF oNode.firstChild.nodeType != 1
       cParentName = oNode.nodeName
   cValor=oNode.text
   ? cParentName+" -> "+cValor  
      ENDIF
    ENDIF
  ENDFOR
  RETURN
ENDFUNC



Jose Antonio Blasco

unread,
Mar 27, 2017, 1:10:17 PM3/27/17
to Comunidad de Visual Foxpro en Español
Muchas gracias Francisco por el aporte.

Una cosa, a diferencia de como se hace con el modelo 340, entiendo que con el SII habra que realizar el envío por separado de las Facturas Emitidas, Recibidas, Operaciones Intracomunitarias e Inmovilizado. Es decir, que no pueden juntarse en un sólo envio.

Lo pregunto porque la mayoría de mis clientes, realizar la emision de facturas, una vez al mes, y claro con el 340 era el momento de generar el archivo.

Un saludo.


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


almonts ( www.ontarioxb.es )

unread,
Mar 27, 2017, 7:23:21 PM3/27/17
to Comunidad de Visual Foxpro en Español
Buenas noches, tengo entendido que si, ya que existe un plazo máximo para el envio tando de las facturas emitidas, como el de las recibidas.

Luis M.

unread,
Mar 28, 2017, 4:25:24 AM3/28/17
to Comunidad de Visual Foxpro en Español
Efectivamente, son envíos por separado cada uno de lo siguiente:

- Facturas Expedidas
- Facturas Recibidas
- Bienes de Inversión
- Operaciones Intracomunitarias
- Importes en Metálico 

Además hay un plazo de presentación en el caso de las facturas emitidas y recibidas de 4 días naturales (creo que 8 durante este primer año)

Saludos,
Luis Martínez.

El lunes, 27 de marzo de 2017, 19:10:17 (UTC+2), Jose Antonio Blasco escribió:

jaumeg...@gmail.com

unread,
Mar 28, 2017, 5:57:10 AM3/28/17
to Comunidad de Visual Foxpro en Español
Gracias Francisco por la clase que has colgado, es  fantástica. La he estado probando y funciona muy bien. Lo que le he encontrado es una tontería. Es la propiedad de la clase loXML.str_desglose_facturas que debería dejarse en blanco al inicio de cada factura, ya que si no va arrastrando los ivas de las facturas anteriores. 
 
Otra cosa que he visto, es que en el ejemplo no contemplas las bases exentas ni la codificación específica de las rectificativas, que hay que poner el nº de la factura rectificada y su fecha, (normal para ser una primera aproximación). He modificado la clase para incluir estas dos opciones, si queréis os pongo en otro post como lo  he solucionado.

   He comprobado que hay que enviar el certificado de la empresa y que este debe estar instalado en el ordenador, ya que si no es así, te acepta la conexión con el WS, pero devuelve un error de que el certificado no corresponde ....etc.
   He probado con los datos de mi empresa y ha funcionado todo Ok, pero la sorpresa es que me ha salido una ventana solicitando el permiso para utilizar el certificado. Tenia la idea de hacer una tarea programada para los envíos de facturas, pero si sale esta ventana, no lo podré hacer así. ¿Sabéis alguno la manera de no aparezca y lo haga todo automáticamente?
Gracias y un saludo
 

David M

unread,
Mar 28, 2017, 6:28:23 AM3/28/17
to Comunidad de Visual Foxpro en Español
Hola Jaume, mediante VFP no sé si existirá la opción de que no pida permiso pero puedes hacerlo a la hora de instalar el certificado en la máquina, desmarcando la siguiente casilla que te resalto:


Espero que te sirva.

Por cierto, ¿puedes subir el ejemplo de Francisco mejorado? Te lo agradezco...

Un saludo,

David M.

Jose Antonio Blasco

unread,
Mar 28, 2017, 10:10:26 AM3/28/17
to Comunidad de Visual Foxpro en Español
En algunos sistemas, cuando aparece la pantalla de petición del certificado, incluye una opción para que no la vuelva a pedir.  No se de que depende que aparezca sólo a veces.

Un saludo.

P.D.:  si por favor, puedes subir tus cambios Jaume ??


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Francisco

unread,
Mar 28, 2017, 11:15:56 AM3/28/17
to Comunidad de Visual Foxpro en Español
Está claro que era un primer acercamiento y no contemplo todos los casos pq no tengo claro alguno de ellos. Os adjunto la clase añadiendo bajas y consultas... REPITO QUE SON PRUEBAS, la clase está en pañales y solo señala el camino a seguir. Si alguno pudiera aclararme como está tratando los datos devueltos en XML para pasarlos a un cursor para ver la información se lo agradecería dado que intento hacerlo de manera fácil pero no lo consigo...



El martes, 28 de marzo de 2017, 11:57:10 (UTC+2), jaumeg...@gmail.com escribió:
aeat_SII.zip

Jose Antonio Blasco

unread,
Mar 28, 2017, 12:00:24 PM3/28/17
to Comunidad de Visual Foxpro en Español
Francisco, Victor Espina tiene una clase JSON, que, segun dice, es capaz de tratar respuestas webservice en formato XML.   Puedes ver sus comentarios a otro compañero en este hilo:

https://groups.google.com/forum/#!msg/publicesvfoxpro/ew9dRwXUOug/upqFw7y6BQAJ

y descargar la clase desde:

http://www.noiqs.com/sos/json.prg

No la he manejado pero, según leo en el hilo de más arriba, se puede hacer...

Espero que te sirva.

Un saludo.

Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


jaumeg...@gmail.com

unread,
Mar 28, 2017, 12:09:08 PM3/28/17
to Comunidad de Visual Foxpro en Español
Muchas gracias David, he quitado el certificado y lo he vuelto a importar y de momento ya no me pide el permiso

A ver, Francisco hablaba de tener una clase que nos sirva a todos, cosa que me parece coherente, y lo que no podemos hacer es tener colgadas aquí 10 clases diferentes. Como él la diseñó creo que es quien tiene que adoptar los cambios, modificaciones que propongamos si son ok.
Lo que he hecho es lo siguiente :

En la Clase aeat_sii. vcx
Definir las propiedades :

   str_ini_no_exenta =""

   str_ini_exenta=""

   str_desglose_facturas=""

   str_fin_exenta=""

   str_rectificada=""

   str_factura_rectificada=""

   str_fecha_factura_rectificada=""


Definir los métodos :

f_desglose_exenta

LOCAL lcCadena,lcCadena1,pcAvanlin

TEXT TO lcCadena NOSHOW TEXTMERGE

     <sum1:BaseImponible><<this.dame_numero(this.n_base_imponible)>></sum1:BaseImponible>

ENDTEXT

pcAvanlin=this.salto_de_linea

this.str_fin_exenta = IIF(this.str_fin_exenta == "", lcCadena, this.str_fin_exenta + &pcAvanlin + lcCadena)


f_pon_exenta

LOCAL lcCadena,pcAvanlin

TEXT TO lcCadena NOSHOW TEXTMERGE

<sum1:Exenta>

     <sum1:CausaExencion><<this.str_tipo_Exenta>></sum1:CausaExencion>

     <<this.str_fin_exenta>>

</sum1:Exenta>

ENDTEXT

this.str_ini_exenta=lcCadena


f_pon_no_exenta

LOCAL lcCadena,pcAvanlin

TEXT TO lcCadena NOSHOW TEXTMERGE

<sum1:NoExenta>

     <sum1:TipoNoExenta><<this.str_tipo_No_Exenta>></sum1:TipoNoExenta>

      <sum1:DesgloseIVA>

      <<this.str_desglose_facturas>>

     </sum1:DesgloseIVA>

</sum1:NoExenta>

ENDTEXT

this.str_ini_no_exenta=lcCadena


f_pon_rectificada    

LOCAL lcCadena,pcAvanlin

TEXT TO lcCadena NOSHOW TEXTMERGE

    <sum1:TipoRectificativa>I</sum1:TipoRectificativa> 

     <sum1:FacturasRectificadas>

      <sum1:IDFacturaRectificada>

       <sum1:NumSerieFacturaEmisor><<this.str_factura_rectificada>></sum1:NumSerieFacturaEmisor>

       <sum1:FechaExpedicionFacturaEmisor><<this.str_fecha_factura_rectificada>></sum1:FechaExpedicionFacturaEmisor>

      </sum1:IDFacturaRectificada>

     </sum1:FacturasRectificadas>

ENDTEXT

this.str_rectificada=lcCadena


En el método d_registrofactura he modificado

Antes

****<sum:FacturaExpedida>

****<sum1:TipoFactura><<this.str_tipo_factura_emitida>></sum1:TipoFactura>

Ahora

<sum:FacturaExpedida>

<sum1:TipoFactura><<this.str_tipo_factura_emitida>></sum1:TipoFactura> <<this.str_rectificada>>


Antes

****<sum1:Sujeta>

****<sum1:NoExenta>

****<sum1:TipoNoExenta><<this.str_tipo_No_Exenta>></sum1:TipoNoExenta>

****<sum1:DesgloseIVA>

****<<this.str_desglose_facturas>>

****</sum1:DesgloseIVA>

****</sum1:NoExenta>

****</sum1:Sujeta>

Ahora

<sum1:Sujeta>

<<this.str_ini_no_exenta>><<this.str_ini_exenta>>

</sum1:Sujeta>


En el programa que llama a la clase...

Al leer cada factura


loXML.str_ini_no_exenta =""

loXML.str_ini_exenta=""

loXML.str_desglose_facturas=""

loXML.str_fin_exenta=""

m.Haynoexen = .F.

m.Hayexentas=.F.

IF la factura es rectificativa

   loXML.str_fecha_factura_rectificada= && campo fecha factura rectificada

   loXML.str_factura_rectificada= && campo nº factura rectificada

   loXML.f_pon_rectificada()

   loXML.str_rectificada=CHR(13)+CHR(10) +loXML.str_rectificada

else

   loXML.str_fecha_factura_rectificada= ""

   loXML.str_factura_rectificada= ""

   loXML.str_rectificada=""

endif


** Para el tema de exentas y no exentas

En la lectura de bases y cuotas si las bases son # 0:


IF loXML.n_cuota_repercutida#0           && importe iva

   lo que hace +

   m.HAYNOEXEN=.T.

ELSE

   loXML.n_base_imponible = loXML.n_base_imponible&& base imponible

   loXML.f_desglose_exenta() && va generando esta sección

   m.HAYEXENTAS=.T.

ENDIF

 

una vez leído todas las bases y cuotas


IF m.HAYNOEXEN

   loXML.f_pon_no_exenta() && va generando esta sección

   loXML.str_tipo_No_Exenta="S1"

ENDIF

IF m.HAYEXENTAS

   loXML.str_tipo_Exenta="E4"    && Lo que corresponda al tipo de exención, canarias comunitario, exportación

   loXML.f_pon_exenta() && va generando esta seccion

   IF m.Haynoexen

      loXML.str_ini_exenta = CHR(13)+CHR(10) + loXML.str_ini_exenta

   ENDIF

ENDIF


Y me parece que ya está

Saludos







       



ENDIF

       











                        


     


     





Francisco

unread,
Mar 28, 2017, 1:40:06 PM3/28/17
to Comunidad de Visual Foxpro en Español
Bueno también tenemos el caso de las NoSujetas y el tipo de Desglose por tipo de operación así que como hay mucho que hacer quizá sea mejor ir despacio. Por otro lado hay algunos conceptos que aún quiero contrastar. Pese a todo ello me parece estupendo que cada uno aporte las ideas que tenga q siempre será mejor que no tener nada. Gracias y Saludos.

Miguel A.

unread,
Mar 28, 2017, 2:22:55 PM3/28/17
to Comunidad de Visual Foxpro en Español
Hola Jaume,
Si me envías un xml de ejemplo como los que devuelve la AEAT, miro de hacer lo que comentas. Por aquí tengo algún ejemplo de otro WS que utilizo y espero poder adecuarlo. Gracias,
Un saludo,
Miguel A.

jaumeg...@gmail.com

unread,
Mar 29, 2017, 6:47:08 AM3/29/17
to Comunidad de Visual Foxpro en Español
Hola Miguel
es Francisco quien está en el tema de los XML devueltos
un saludo

Francisco

unread,
Mar 29, 2017, 11:04:12 AM3/29/17
to Comunidad de Visual Foxpro en Español
De momento tengo este código y va bien... no recoge toda la información pero de momento es una idea en thisform.xml_devuelto esta el xml que devuelve despues de hacer la consulta.

* CREO EL CURSOR

CREATE CURSOR Cur_RESULTADO (Estado C(30),CIF C(20),NOMBREFIS C(80),Documento c(80),Fecha_DOC D,IMPORTE_TOTAL N(16,6), FECHA_PRE C(40),FECHA_MOD C(40))

* Start out by creating the actual xml parser object
oXML = CREATEOBJECT('MSXML2.DomDocument.3.0')
oXML.ASYNC = .F.
oXML.LOADXml(thisform.xml_devuelto)
oRootNode = oXML.documentElement
cRootTagName = oRootNode.tagName
oNodeList = oRootNode.getElementsByTagName("*")
nNumNodes = oNodeList.LENGTH

FOR nPos = 0 TO (nNumNodes-1) STEP 1
* Get the next node in the list
oNode = oNodeList.ITEM(nPos)
cParentName = oNode.nodeName
    cNodo_Padre = ALLTRIM(oNode.ParentNode.nodeName)
bHasChild = oNode.hasChildNodes()
nType = oNode.nodeType
IF bHasChild
IF oNode.firstChild.nodeType != 1
     cParentName = ALLTRIM(oNode.nodeName)
    cValor=oNode.text
    DO CASE
    CASE cParentName=="sii:NumSerieFacturaEmisor"
    INSERT INTO Cur_RESULTADO (Documento) VALUES (cVALOR)
    CASE cParentName=="sii:FechaExpedicionFacturaEmisor"
    REPLACE Fecha_DOC WITH CTOD(cVALOR) IN Cur_RESULTADO
    CASE cParentName=="siiLRRC:EstadoRegistro"
    REPLACE Estado WITH cVALOR IN Cur_RESULTADO
    CASE cParentName=="sii:NIF" AND cNodo_Padre=="siiLRRC:Contraparte"
    REPLACE CIF WITH cVALOR IN Cur_RESULTADO
    CASE cParentName=="sii:NombreRazon" AND cNodo_Padre=="siiLRRC:Contraparte"
    REPLACE NOMBREFIS WITH cVALOR IN Cur_RESULTADO
    CASE cParentName=="siiLRRC:ImporteTotal" AND cNodo_Padre=="siiLRRC:DatosFacturaEmitida"
    REPLACE IMPORTE_TOTAL WITH VAL(cVALOR) IN Cur_RESULTADO    
    CASE cParentName=="sii:TimestampPresentacion"
    REPLACE FECHA_PRE WITH cVALOR IN Cur_RESULTADO    
    CASE cParentName=="siiLRRC:TimestampUltimaModificacion"
    REPLACE FECHA_MOD WITH cVALOR IN Cur_RESULTADO    
    ENDCASE
   *? cParentName+" -> "+cValor  
ENDIF
ENDIF
ENDFOR
GO TOP IN CUR_RESULTADO


Miguel A.

unread,
Mar 29, 2017, 12:56:37 PM3/29/17
to Comunidad de Visual Foxpro en Español
Hola Francisco,

El código que yo tengo emplea también un objeto CREATEOBJECT('MSXML2.DOMdocument') y un CASE para, a partir de las etiquetas, obtener los campos. Desde luego es lo más avanzado que conozco para esto; entiendo pues que estás en el camino correcto, tan solo habrá que incorporar más campos hasta conseguir los deseados por cada uno.

Gracias por tu dedicación. Un saludo,
Miguel A.

Francisco

unread,
Apr 5, 2017, 6:47:20 AM4/5/17
to Comunidad de Visual Foxpro en Español
Bueno he estado investigando y profundizando más en el tema y la verdad cada vez se complica más la clase, dado que hasta ahora solo había contemplado el desglose de factura pero veo que hay un desglose por tipo de operación que incluye prestación de servicios y entregas las cuales afectan tanto a facturas intracomunitarias de bienes como a exportaciones que hay que contemplar así que me estoy demorando un poco más de lo previsto. Aparte de esto tenemos la i.s.p. y otros supuestos más. Sinceramente el formato que han puesto para el XML me parece una autentica cagada y más aun los miles de errores que hay en la documentación que aportan por no decir más sobre la falta de ejemplos de casos. En fin como siempre iremos dando tumbos al igual que con el SEPA.

David M

unread,
Apr 10, 2017, 8:09:25 AM4/10/17
to Comunidad de Visual Foxpro en Español
Buenos días,
 
Ya han puesto en el portal de la AEAT los formularios para introducir manualmente las facturas emitidas, recibidas, etc.
 
Está bien para ver los campos que se solicitan y su denominación... Aquí el enlace (recordad que pide el certificado electrónico):
 
http://www.agenciatributaria.es/AEAT.internet/Inicio/La_Agencia_Tributaria/Campanas/Suministro_Inmediato_de_Informacion_en_el_IVA__SII_/INFORMACION/Novedades/07_04_2017_Disponibles_Formularios_web_version_0_6.shtml

Saludos, 

Francisco

unread,
Apr 11, 2017, 11:42:27 AM4/11/17
to Comunidad de Visual Foxpro en Español
A ver si alguien puede darme ejemplo de xml de presentación de:
Emitidas ISP, importación y adquisiciones intracomunitarias
Recibidas ISP,importación y adquisiciones intracomunitarias

Para poder cotejar la clase. Dado que la información de ejemplos y los propios FAQ de la Agencia están plagados de errores.

pd: Tengo ya casi acabada y solo está a falta de comprobar ciertos aspectos.

Francisco

unread,
Apr 11, 2017, 11:43:24 AM4/11/17
to Comunidad de Visual Foxpro en Español
Rectifico Emitidas ISP, exportación y ventas/servicios intracomunitarias

Jose Antonio Blasco

unread,
Apr 27, 2017, 7:19:14 AM4/27/17
to Comunidad de Visual Foxpro en Español
Estoy revisando toda la documentación descargada de la Agencia Tributaria y,  según entiendo la URL del webservice es diferente para cada tipo de libro ?.

¿Esto es así ?.

Saludos.


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Francisco

unread,
Apr 27, 2017, 10:06:40 AM4/27/17
to Comunidad de Visual Foxpro en Español
Si. Van a lanzar en breve la revision 0.7 con lo que habrá ciertos cambios de ahí que esté aplazando poner la clase actualizada...

Saludos.

Jose Antonio Blasco

unread,
Apr 27, 2017, 10:09:41 AM4/27/17
to Comunidad de Visual Foxpro en Español
Ok.  Gracias Francisco.

Un saludo.


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


jaumeg...@gmail.com

unread,
Apr 27, 2017, 2:26:25 PM4/27/17
to Comunidad de Visual Foxpro en Español
Hola Francisco, pedias XML de emitidas exportación. Hoy al fin !!!! he conseguido que aeat me acepte un XML de pruebas de exportación. Vaya por delante que según los errores que me ha ido dando aeat, las fras de exportación, tanto comunitarias como extranjero, se han de hacer en "TipoDesglose"  como "DesgloseTipoOperacion" y no como "DesgloseFactura" que si acepta para las facturas nacionales. Otra cosa que he encontrado en las fras de exportación, es que aunque no se tenga un 'Nif' identificativo por lo se pone un 06 en idtype, hay que poner algo en el ID, yo pongo el código cliente. Mañana os pondré una comunitaria con servicios y entregas. Saludos

XML exportación
             <sum:FacturaExpedida>
              <sum1:TipoFactura>F1</sum1:TipoFactura>      
              <sum1:ClaveRegimenEspecialOTrascendencia>02</sum1:ClaveRegimenEspecialOTrascendencia>
              <sum1:ImporteTotal>52.50</sum1:ImporteTotal>
     <sum1:DescripcionOperacion>VENTA DE TEJIDOS DE TAPICERIA O SERVICIOS</sum1:DescripcionOperacion>
                 <sum1:Contraparte>
                <sum1:NombreRazon>KAKUNAKA CO., INC.</sum1:NombreRazon>
         <sum1:IDOtro>
      <sum1:CodigoPais>JP</sum1:CodigoPais>
      <sum1:IDType>06</sum1:IDType>
      <sum1:ID>025853</sum1:ID>
           </sum1:IDOtro>
     </sum1:Contraparte>
     <sum1:TipoDesglose>
       <sum1:DesgloseTipoOperacion>
           <sum1:Entrega>
      <sum1:Sujeta>
        <sum1:Exenta>
         <sum1:CausaExencion>E2</sum1:CausaExencion>
                  <sum1:BaseImponible>52.50</sum1:BaseImponible>
        </sum1:Exenta>
      </sum1:Sujeta>
      </sum1:Entrega>
       </sum1:DesgloseTipoOperacion>
     </sum1:TipoDesglose>
    </sum:FacturaExpedida>

Marian Gaston Galan

unread,
Apr 28, 2017, 10:21:53 AM4/28/17
to Comunidad de Visual Foxpro en Español
Hola:

Yo hoy he conseguido que me acepte el portal de pruebas una factura intracomunitaria. (Entrega)
Como ha dicho Jaume, es importante tener en cuenta que cuando la factura no es nacional no hay desglose de IVA como desglose de facturas sino como DesgloseTipoOperacion.

También es importante, marcar que es SUJETA y EXENTA. En el caso de entregas intracomunitarias la causa de exención es el E5.

Voy hacer un ejemplo con exportaciones, basándome en el que han publicado ya, y después empezaré con factura emitida con I.S.P.

Cuando tenga el XML que me acepte la AEAT lo vuelvo a publicar.

Un saludo,

Marian.


<?xml version="1.0" encoding="utf-8"?>
<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/ssii/fact/ws/SuministroLR.xsd"
xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">
<soapenv:Header/>
 <soapenv:Body>
  <sum:SuministroLRFacturasEmitidas>
   <sum1:Cabecera>
            <sum1:IDVersionSii>0.6</sum1:IDVersionSii>
            <sum1:Titular>
               <sum1:NombreRazon>EMPRESA QUE EMITE FACUTRA, S.L./sum1:NombreRazon>
               <sum1:NIF>B12345678</sum1:NIF>
            </sum1:Titular>
            <sum1:TipoComunicacion>A0</sum1:TipoComunicacion>
         </sum1:Cabecera>
   <sum:RegistroLRFacturasEmitidas>
             <sum1:PeriodoImpositivo>
                <sum1:Ejercicio>2017</sum1:Ejercicio>
                <sum1:Periodo>04</sum1:Periodo>
             </sum1:PeriodoImpositivo>
             <sum:IDFactura>
                <sum1:IDEmisorFactura>
                   <sum1:NIF>B26294405</sum1:NIF>
                </sum1:IDEmisorFactura>
                <sum1:NumSerieFacturaEmisor>EX00000001</sum1:NumSerieFacturaEmisor>
                <sum1:FechaExpedicionFacturaEmisor>27-04-2017</sum1:FechaExpedicionFacturaEmisor>
             </sum:IDFactura>

             <sum:FacturaExpedida>
              <sum1:TipoFactura>F1</sum1:TipoFactura>
              <sum1:ClaveRegimenEspecialOTrascendencia>01</sum1:ClaveRegimenEspecialOTrascendencia>
              <sum1:ImporteTotal>4444.00</sum1:ImporteTotal>
     <sum1:DescripcionOperacion>ENTREGAS INTRACOMUNITARIAS</sum1:DescripcionOperacion>
                 <sum1:Contraparte>
                 <sum1:NombreRazon>Microsoft Ireland Operations LTD</sum1:NombreRazon>
              <sum1:IDOtro>
              <sum1:CodigoPais>DE</sum1:CodigoPais>
              <sum1:IDType>02</sum1:IDType>
              <sum1:ID>DE192876773</sum1:ID>

              </sum1:IDOtro>
     </sum1:Contraparte> 
     <sum1:TipoDesglose>
      <sum1:DesgloseTipoOperacion>
       <sum1:Entrega>
        <sum1:Sujeta>
         <sum1:Exenta>
         <sum1:CausaExencion>E5</sum1:CausaExencion>
          <sum1:BaseImponible>4444.00</sum1:BaseImponible>       

         </sum1:Exenta>
        </sum1:Sujeta>
         </sum1:Entrega>       
         </sum1:DesgloseTipoOperacion>
     </sum1:TipoDesglose>
    </sum:FacturaExpedida>
  </sum:RegistroLRFacturasEmitidas>
     </sum:SuministroLRFacturasEmitidas>
 </soapenv:Body>
</soapenv:Envelope>  

jaumeg...@gmail.com

unread,
Apr 28, 2017, 12:37:51 PM4/28/17
to Comunidad de Visual Foxpro en Español
Hola Marian
Las entregas intracomunitarias son exportaciones no? entonces no deberá ir en "ClaveRegimenEspecialOTrascendencia" un 02?.
Otra cosa a probar son las facturas a canarias.
Saludos  

Marian Gaston Galan

unread,
Apr 29, 2017, 4:30:55 AM4/29/17
to Comunidad de Visual Foxpro en Español
Hola Jaume:

Exactamente las entregas intracomunitarias no son exportaciones. Aunque tampoco operaciones interiores. LaClaveRegimenEspecialOTrascendencia en 01 porque es una operación de regimen común y la forma de diferenciarlas de las operaciones interiores es con la clave 2 en el campo de tipos de identificación (el 1 -> es NIF y el 2-> es NIF/IVA) además en vez de NIF hay que indicar su número de operador intracomunitario. El código del país es opcional aunque mi experiencia en el 340 me indica que muy conveniente. Por otra parte, la base imponible de la factura se incluirá, como te decía antes, dentro del campo de "tipo de operación" como Exenta y dentro del bloque "Entrega". Si lo que se factura es una prestación de servicio (por ejemplo, un comisionista) debe indicarlo en un bloque diferente de "Entrega" que sea "PrestacionServicios". Pero hay que indicar que la causa de la exención es "E5" que es Exenta por el artículo 25.

Espero haberme explicado bien,

Un saludo a todos.

Marian

jaumeg...@gmail.com

unread,
May 2, 2017, 5:12:59 AM5/2/17
to Comunidad de Visual Foxpro en Español
Hola Marian
Te has explicado muy bien, lo único que no me queda claro de que en el campo tipos de identificación haya que ponerle un 1 si es nacional, ya que en la última versión 0.6 la tabla de tipos de identificación empieza por la clave 02.NIF-IVA
Saludos

Adjunto XML de factura emitida de inversión sujeto pasivo nacional, que la aeat me ha dado como correcta.    

             <sum:FacturaExpedida>
              <sum1:TipoFactura>F1</sum1:TipoFactura>      
              <sum1:ClaveRegimenEspecialOTrascendencia>01</sum1:ClaveRegimenEspecialOTrascendencia>
              <sum1:ImporteTotal>185.40</sum1:ImporteTotal>
     <sum1:DescripcionOperacion>VENTA DE TEJIDOS</sum1:DescripcionOperacion>
                 <sum1:Contraparte>
                <sum1:NombreRazon>NOMBRE CLIENTE, S.L.</sum1:NombreRazon>

          <sum1:NIF>B12345678</sum1:NIF>
     </sum1:Contraparte>
     <sum1:TipoDesglose>
       <sum1:DesgloseFactura>
         <sum1:Sujeta>
        <sum1:NoExenta>
          <sum1:TipoNoExenta>S2</sum1:TipoNoExenta>
       <sum1:DesgloseIVA>
              <sum1:DetalleIVA>
         <sum1:TipoImpositivo>0.00</sum1:TipoImpositivo>
            <sum1:BaseImponible>185.40</sum1:BaseImponible>
         <sum1:CuotaRepercutida>0.00</sum1:CuotaRepercutida>
           </sum1:DetalleIVA>
                         </sum1:DesgloseIVA>
        </sum1:NoExenta>
      </sum1:Sujeta>
       </sum1:DesgloseFactura>
     </sum1:TipoDesglose>
    </sum:FacturaExpedida>
  

Francisco

unread,
May 2, 2017, 11:13:27 AM5/2/17
to Comunidad de Visual Foxpro en Español
Bueno he contrastado información con otros foros de programación y como bien indicáis tengo ya resuelto muchos temas... en el caso de 

facturas emitidas intracomunitario como bien decis es desglose por tipo operación, Entrega y todo lo demás tal que así:

<sum1:DesgloseTipoOperacion>
 <sum1:Entrega>
  <sum1:Sujeta>
   <sum1:Exenta>
     <sum1:CausaExencion>E5</sum1:CausaExencion>
     <sum1:BaseImponible>1400.00</sum1:BaseImponible>
    </sum1:Exenta>
   </sum1:Sujeta>
  </sum1:Entrega>
</sum1:DesgloseTipoOperacion>

En cuanto a las facturas recibidas intracomunitarias o importaciones según lo visto en otros foros y contrastado es así:

<sum:FacturaRecibida>
    <sum1:TipoFactura>F1</sum1:TipoFactura>
            <sum1:ClaveRegimenEspecialOTrascendencia>09</sum1:ClaveRegimenEspecialOTrascendencia>
             <sum1:ImporteTotal>100.00</sum1:ImporteTotal>
<sum1:DescripcionOperacion>COMPRAS O SERVICIOS DE EMPRESA</sum1:DescripcionOperacion>
<!--Optional: Poner aqui tema Aduanas DUA -->
<sum1:DesgloseFactura>
<sum1:DesgloseIVA>
      <sum1:DetalleIVA>
<sum1:TipoImpositivo>21.00</sum1:TipoImpositivo>
<sum1:BaseImponible>100.00</sum1:BaseImponible>
<sum1:CuotaSoportada>21.00</sum1:CuotaSoportada>
</sum1:DetalleIVA>
</sum1:DesgloseIVA>
        </sum1:DesgloseFactura>
         <sum1:Contraparte>
       <sum1:NombreRazon>PRUEBAS DE INTRACOMUNITARIO</sum1:NombreRazon>
      <sum1:IDOtro>
         <sum1:IDType>02</sum1:IDType>
     <sum1:ID>FR59329361026</sum1:ID>
  </sum1:IDOtro>
</sum1:Contraparte>
  <sum1:FechaRegContable>30-06-2016</sum1:FechaRegContable>
  <sum1:CuotaDeducible>0.00</sum1:CuotaDeducible>
</sum:FacturaRecibida>

Estoy ahora con las exportaciones e importaciones no comunitarias.



Francisco

unread,
May 2, 2017, 11:25:24 AM5/2/17
to Comunidad de Visual Foxpro en Español
En cuanto a Emitidas a Extranjero:

<sum:FacturaExpedida>
  <sum1:TipoFactura>F1</sum1:TipoFactura>
<sum1:ClaveRegimenEspecialOTrascendencia>02</sum1:ClaveRegimenEspecialOTrascendencia>
<sum1:ImporteTotal>125.00</sum1:ImporteTotal>
<sum1:DescripcionOperacion>VENTAS O SERVICIOS DE EMPRESA</sum1:DescripcionOperacion>
<sum1:Contraparte>
 <sum1:NombreRazon>CLIENTE EXTRANGERO PRUEBA</sum1:NombreRazon>
 <sum1:IDOtro>
 <sum1:CodigoPais>SA</sum1:CodigoPais>
<sum1:IDType>06</sum1:IDType>
<sum1:ID>AR45455666667</sum1:ID>
 </sum1:IDOtro>
</sum1:Contraparte>
<sum1:TipoDesglose>
<sum1:DesgloseTipoOperacion>
<sum1:Entrega>
<sum1:Sujeta>
<sum1:Exenta>
<sum1:CausaExencion>E2</sum1:CausaExencion>
<sum1:BaseImponible>125.00</sum1:BaseImponible>
</sum1:Exenta>
</sum1:Sujeta>
</sum1:Entrega>
</sum1:DesgloseTipoOperacion>
</sum1:TipoDesglose>
</sum:FacturaExpedida>

 

Marian Gaston Galan

unread,
May 2, 2017, 12:13:50 PM5/2/17
to Comunidad de Visual Foxpro en Español
Hola:

Primero contestar a Jaume, efectivamente no hace falta indicar el tipo de identificación fiscal como 01 ya que directamente se identifica en la etiqueta <NIF>.

Yo he realizado el XML de las ventas que se envían a Canarias, Ceuta y Melilla. Hay que tener en cuenta que son operaciones asimiladas a la exportación, ya que en dichos territorios no se aplica el IVA sino el IGIC y el IPSI respectivamente. En el caso que os voy a poner es la entrega de productos de una empresa radicada en península o Baleares ha dichos territorios.

Si la empresa compra productos en Canarias y los vende en el mismo territorio aunque su domicilio fiscal sea Peninsula y Baleares, cambia la situación. Es una operación NO SUJETA, no como en el caso anterior SUJETA Y EXENTA. y la ClaveRegimenEspecialOTrascendencia pasa a ser la 08 Operaciones sujetas al IGIC/IPSI. Como no es el caso de ninguno de mis clientes (por ahora) no voy a realizar este XML, voy con el tiempo justo para realizar todo, pero al estudiar como se realizaba las ventas a Canarias también he visto como se realiza el caso anterior.

Un saludo a todos y vamos poco a poco.

<?xml version="1.0" encoding="utf-8"?>
<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/ssii/fact/ws/SuministroLR.xsd"
xmlns:sum1="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroInformacion.xsd">
<soapenv:Header/>
 <soapenv:Body>
  <sum:SuministroLRFacturasEmitidas>
   <sum1:Cabecera>
            <sum1:IDVersionSii>0.6</sum1:IDVersionSii>
            <sum1:Titular>
               <sum1:NombreRazon>EMPRESA QUE EMITE LA FACTURA, S.L.</sum1:NombreRazon>

               <sum1:NIF>B12345678</sum1:NIF>
            </sum1:Titular>
            <sum1:TipoComunicacion>A0</sum1:TipoComunicacion>
         </sum1:Cabecera>
   <!--1 to 10000 repetitions:-->

   <sum:RegistroLRFacturasEmitidas>
             <sum1:PeriodoImpositivo>
                <sum1:Ejercicio>2017</sum1:Ejercicio>
                <sum1:Periodo>05</sum1:Periodo>

             </sum1:PeriodoImpositivo>
             <sum:IDFactura>
                <sum1:IDEmisorFactura>
                   <sum1:NIF>B12345678</sum1:NIF>
                </sum1:IDEmisorFactura>
                <sum1:NumSerieFacturaEmisor>CA00000100</sum1:NumSerieFacturaEmisor>
                <sum1:FechaExpedicionFacturaEmisor>02-05-2017</sum1:FechaExpedicionFacturaEmisor>
             </sum:IDFactura>

             <sum:FacturaExpedida>
              <sum1:TipoFactura>F1</sum1:TipoFactura>
              <sum1:ClaveRegimenEspecialOTrascendencia>02</sum1:ClaveRegimenEspecialOTrascendencia>
              <sum1:ImporteTotal>45.00</sum1:ImporteTotal>
     <sum1:DescripcionOperacion>VENTA A CANARIAS</sum1:DescripcionOperacion>
                 <sum1:Contraparte>
                 <sum1:NombreRazon>EMPRESA DE LAS ISLAS CANARIAS, S.L.</sum1:NombreRazon>
           <sum1:NIF>B123123</sum1:NIF>
     </sum1:Contraparte> 
       <sum1:TipoDesglose>
        <sum1:DesgloseFactura>

         <sum1:Sujeta>
         <sum1:Exenta>
                  <sum1:CausaExencion>E2</sum1:CausaExencion>
                       <sum1:BaseImponible>45.00</sum1:BaseImponible>
                        </sum1:Exenta>
         </sum1:Sujeta>

         </sum1:DesgloseFactura>
        </sum1:TipoDesglose>
       </sum:FacturaExpedida>

Francisco

unread,
May 2, 2017, 12:14:50 PM5/2/17
to Comunidad de Visual Foxpro en Español
Ahora estoy con el tema de Importaciones con DUA. A ver si me aclaro para ver un ejemplo... 

Marian Gaston Galan

unread,
May 2, 2017, 12:19:04 PM5/2/17
to Comunidad de Visual Foxpro en Español
Hola Francisco:

En la versión 0.7 (que se supone la tienen que poner ya) una de las cosas que ha cambiado es precisamente los datos a informar de las facturas de importación

- Se elimina los campos del libro registro de facturas recibidas de número de DUA y registro contable de DUA. (ya se informan en los campos de “número de factura” y “registro contable” respectivamente).

Te lo comento por si quieres esperar a que pongan en marcha la nueva versión ...

Un saludo. (y aprovecho a darte las gracias por toda la información)

Marian


El martes, 2 de mayo de 2017, 18:14:50 (UTC+2), Francisco escribió:

Jose Antonio Blasco

unread,
May 3, 2017, 10:09:27 AM5/3/17
to Comunidad de Visual Foxpro en Español
Una pregunta para todos...
Cotejando con la documentación de AEAT, veo que en los ejemplos que pasais, habeis cambiado la nomenclartura "siiLR" y "sii" por "sum" y "sum1".   ¿Es sólo por comodidad a la hora de escribir o es por una razón concreta?

Un saludo.


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Francisco

unread,
May 3, 2017, 10:19:55 AM5/3/17
to Comunidad de Visual Foxpro en Español

Francisco

unread,
May 3, 2017, 10:21:17 AM5/3/17
to Comunidad de Visual Foxpro en Español
Sobre el estado de los registros tanto en consulta como en altas/bajas/modificaciones. Me lo han remitido de catent...@correo.aeat.es y como veis incorpora una tabla la L16 que en la version 0.6 en su documentación no existe y que yo utilizo para contrastar la información que poseo en contabilidad con la ya entregada. Espero sea de ayuda. 


la etiqueta <EstadoRegistro> (con diferentes namespace) se envia como respuesta en dos operaciones diferentes:
1. Como respuesta al suministro de información (indicando en la respuesta del alta, baja o modificación si se valida correctamente y es registrado en el sistema) 
2. Como respuesta a la consulta de facturas.

Envío los estados y lo incluiremos en la próxima versión:

L14 Estado global del envío (Respuesta al suministro)

Correcto -->Todas las facturas de la petición tienen estado “Correcto”.
ParcialmenteCorrecto --> Algunas facturas de la petición tienen estado “Incorrecto”. Ver detalle de errores (L16).
Incorrecto --> Todas las facturas de la petición tienen estado “INCORRECTO”.

L15 Estado del envío de la factura (Respuesta al suministro)
Campo <EstadoRegistro> de la respuesta al suministro de alta, baja, modificación. Especifica si el registro enviado se valida correctamente y es registrado en el sistema

Correcto --> La factura enviada es totalmente correcta y se registra en el sistema
AceptadoConErrores --> La factura enviada tiene algunos errores que no provocan su rechazo y se registra en el sistema. Ver detalle del error (L16).
Incorrecto -->La factura enviada tiene errores que provocan su rechazo. No se registra en el sistema


L24 Estado de la factura registrada (Respuesta a una consulta de registros presentados previamente)
Campo <EstadoRegistro> de la respuesta a una consulta de registros. Especifica el estado del registro en el sistema

Correcta -->La factura registrada es totalmente correcta.
AceptadaConErrores -->La factura registrada tiene algunos errores. Ver detalle del error (L16).
Anulada --> La factura registrada ha sido anulada mediante una operación de baja

Marian Gaston Galan

unread,
May 5, 2017, 4:07:05 AM5/5/17
to Comunidad de Visual Foxpro en Español
Hola:

El próximo 17 de mayo se podrá empezar a subir datos del SII con la nueva versión 0.7.

Un saludo.


Marian. 

jaumeg...@gmail.com

unread,
May 5, 2017, 7:30:40 AM5/5/17
to Comunidad de Visual Foxpro en Español
Hola a todos y gracias otra vez por las soluciones i aclaraciones

Ahora me surgen 2 dudas, a ver si podéis aclararlas. En las fras emitidas de exportación y/o comunitarias, si la factura es de mercancías y se le carga el transporte, hay que poner el importe del transporte como "Prestación de servicios"?
Y la otra es en facturas recibidas intracomunitarias, si las que son de servicios hay que ponerlas en "Inversión del sujeto pasivo" como en el 340?

Por otro lado he estado haciendo pruebas con las importaciones con DUA. y he sacado varias conclusiones
- Si en la factura del agente de aduanas se carga el iva de la importación y sus servicios hay que hacer dos registros, uno para el DUA y otro con los importes de los servicios y gastos del agente de aduanas.
- Los datos identificativos del emisor de la factura y los de la contraparte han de ser los mismos (los del Agente de Aduanas).
- En el registro del DUA hay que poner como "NumSerieFacturaEmisor" el nº de DUA, y como "FechaExpedicionFacturaEmisor" la fecha de registro. El TipoFactura=F5. El apartado de "Aduadas" lo acepta del modo siguiente :
      <sum1:Aduanas>
       <sum1:NumeroDUA>7777777777JJTT</sum1:NumeroDUA>
       <sum1:FechaRegContableDUA>27-02-2017</sum1:FechaRegContableDUA>
      </sum1:Aduanas>
Los datos de tipo, base y cuota serian los correspondientes al IVA de la importación. 
- En el otro registro de los gastos y servicios del agente de Aduanas es igual al de cualquier otro proveedor con el tipo, base y cuota sin tener en cuenta el iva de la importación

Saludos a todos

jaumeg...@gmail.com

unread,
May 8, 2017, 11:47:30 AM5/8/17
to Comunidad de Visual Foxpro en Español

Marian Gaston Galan

unread,
May 9, 2017, 7:43:38 AM5/9/17
to Comunidad de Visual Foxpro en Español
Hola:

A la espera que pongan en marcha la versión 0.7, pongo un ejemplo de XML, de facturas emitidas por alquiler de local de negocio SIN RETENCION. Existen 3 claves para este tipo de facturas: 11, 12 y 13. Solamente en el caso 12 y 13 hay que añadir al XML este bloque.

<sum1:DatosInmueble>
      <sum1:DetalleInmueble>
         <sum1:SituacionInmueble>1</sum1:SituacionInmueble>
         <sum1:ReferenciaCatastral>2620325NW4061N0021OJ</sum1:ReferenciaCatastral>
      </sum1:DetalleInmueble> 
</sum1:DatosInmueble>

La clave de situación del inmueble es una clave fija que coincide con las que se utilizaba en el 340. (Están en la documentación de la AEAT)

El XML entero:

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Header/>
 <soapenv:Body>
  <sum:SuministroLRFacturasEmitidas>
   <sum1:Cabecera>
            <sum1:IDVersionSii>0.6</sum1:IDVersionSii>
            <sum1:Titular>
               <sum1:NombreRazon>TITULAR DEL ENVIO</sum1:NombreRazon>
               <sum1:NIF>CIF ENVIO</sum1:NIF>

            </sum1:Titular>
            <sum1:TipoComunicacion>A0</sum1:TipoComunicacion>
         </sum1:Cabecera>
   <!--1 to 10000 repetitions:-->
   <sum:RegistroLRFacturasEmitidas>
             <sum1:PeriodoImpositivo>
                <sum1:Ejercicio>2017</sum1:Ejercicio>
                <sum1:Periodo>05</sum1:Periodo>
             </sum1:PeriodoImpositivo>
             <sum:IDFactura>
                <sum1:IDEmisorFactura>
                   <sum1:NIF>CIF EXPEDIDA</sum1:NIF>
                </sum1:IDEmisorFactura>
                <sum1:NumSerieFacturaEmisor>PAL00000001</sum1:NumSerieFacturaEmisor>
                <sum1:FechaExpedicionFacturaEmisor>09-05-2017</sum1:FechaExpedicionFacturaEmisor>

             </sum:IDFactura>
             <sum:FacturaExpedida>
              <sum1:TipoFactura>F1</sum1:TipoFactura>              
              <sum1:ClaveRegimenEspecialOTrascendencia>12</sum1:ClaveRegimenEspecialOTrascendencia>
              <sum1:ImporteTotal>454.50</sum1:ImporteTotal>
     <sum1:DescripcionOperacion>Alquiler de la oficina mes de abril</sum1:DescripcionOperacion>
          <sum1:DatosInmueble>
                 <sum1:DetalleInmueble>
                 <sum1:SituacionInmueble>1</sum1:SituacionInmueble>
        <sum1:ReferenciaCatastral>2620325NW4061N0021OJ</sum1:ReferenciaCatastral>
     </sum1:DetalleInmueble> 
     </sum1:DatosInmueble>
                 <sum1:Contraparte>
                 <sum1:NombreRazon>NOMBRE INQUILINO</sum1:NombreRazon>
              <sum1:NIF>CIF INQUILINO</sum1:NIF>
     </sum1:Contraparte> 
        <sum1:TipoDesglose>
         <sum1:DesgloseFactura>
         <sum1:Sujeta>
         <sum1:NoExenta>
            <sum1:TipoNoExenta>S1</sum1:TipoNoExenta>

                              <sum1:DesgloseIVA>
           <sum1:DetalleIVA>
           <sum1:TipoImpositivo>21.00</sum1:TipoImpositivo>
           <sum1:BaseImponible>450.00</sum1:BaseImponible>
           <sum1:CuotaRepercutida>4.50</sum1:CuotaRepercutida>
       </sum1:DetalleIVA>
                            </sum1:DesgloseIVA>
         </sum1:NoExenta>

         </sum1:Sujeta>
            </sum1:DesgloseFactura>
        </sum1:TipoDesglose>
       </sum:FacturaExpedida>
      </sum:RegistroLRFacturasEmitidas>
     </sum:SuministroLRFacturasEmitidas>
 </soapenv:Body>
</soapenv:Envelope>  

Un saludo a todos,

Marian.

Marian Gaston Galan

unread,
May 9, 2017, 7:51:19 AM5/9/17
to Comunidad de Visual Foxpro en Español

Hola Jaumeg:  

 
Y la otra es en facturas recibidas intracomunitarias, si las que son de servicios hay que ponerlas en "Inversión del sujeto pasivo" como en el 340?

Las facturas recibidas intracomunitarias y las de inversión de sujeto pasivo, son facturas que recibimos exentas de IVA pero que debemos realizar una autofactura, es decir contabilizarlas con IVA soportado y con IVA repercutido. Para el SII estas facturas de IVA repercutido NO deben subirse. En el caso de las facturas recibidas entiendo, por lo que he estado mirando, que deben registrarse con clave de régimen especial 09 - Adquisiciones intracomunitarias.

Un saludo,

Marian.

Daniel L

unread,
May 11, 2017, 3:15:59 AM5/11/17
to Comunidad de Visual Foxpro en Español
Hola, después de realizar varias pruebas he conseguido construir un ejemplo con respuesta correcta del web service de la AEAT mediante el SOAPUI
Ahora necesitaríamos realizar un desarrollo a medida desde SAP para consumir el web service pero se nos genera un problema, tenemos varias sociedades, es decir, tenemos que enviar las facturas con los certificados de forma dinámica en función de la sociedad. ¿alguien se ha encontrado en la misma tesitura de realizar un desarrollo a medida desde SAP y tiene que enviar las facturas con los certificados dinámicamente?

Gracias.
Un saludo.

Francisco

unread,
May 11, 2017, 10:09:30 AM5/11/17
to Comunidad de Visual Foxpro en Español
Obvio. Lee más atrás ya se ha hablado sobre eso.

Marian Gaston Galan

unread,
May 11, 2017, 12:08:29 PM5/11/17
to Comunidad de Visual Foxpro en Español
Hola:

Estoy mirando la nueva versión 0.7 que entra el próximo día 17 de mayo, y me ha parecido interesante comentaros que en facturas recibidas hay bastante cambio en la estructura del XML correspondiente. Han añadido un nuevo bloque para informar de las facturas con inversión de sujeto pasivo, teniendo en cuenta que también puedan tener una base sin inversión de sujeto pasivo (la inversión por artículo).

También existen cambios en la manera de informar el DUA para las facturas de importación.

La versión 0.6 sólo estará operativa hasta el 31 de mayo.

Un saludo,

Marian.

Francisco

unread,
May 12, 2017, 3:24:28 AM5/12/17
to Comunidad de Visual Foxpro en Español
A ver si dejan de pegar bandazos y establecen un protocolo ya porque sinceramente no es tan complejo hacerlo bien a la primera y más para unos modelos que ya estaban determinados. PATETICOS

FRANCISCO LOZANO

unread,
May 12, 2017, 4:21:52 AM5/12/17
to Comunidad de Visual Foxpro en Español

Hola a todos

En solo 3 días hemos podido hacer un envío de pruebas de fras. emitidas y consultarlas y ¡ con éxito ! gracias a vuestras aportaciones.
Cualquier cosa que pueda aportar o investigar contad conmigo.
Solo tengo una duda sobre consultas de emitidas, ahora me llegan las 4 facturas de pruebas sin problemas, pero ¿Qué pasa cuando la consulta devuelva mas de 10000 registros?, lo digo porque he visto un tag en el xml de respuesta de la consulta que dice <siiLRRC:IndicadorPaginacion>N</siiLRRC:IndicadorPaginacion>.
¿Paginará cada 10000 registros? ¿Alguien ha hecho pruebas?


Gracias a todos 

FRANCISCO LOZANO

unread,
May 12, 2017, 4:54:05 AM5/12/17
to Comunidad de Visual Foxpro en Español


Me respondo yo mismo.

No hay nada como leer la documentación, que dice:

8.5.2. Consulta paginada de facturas presentadas previamente ordenadas por fecha de presentación 

Si al realizar una consulta de facturas, se supera el tope de 10.000 facturas en la respuesta, habrá que realizar nuevas consultas con la identificación de la última factura obtenida (informando el bloque de la petición) para obtener el resto de facturas.

Pues eso.

Marian Gaston Galan

unread,
May 12, 2017, 5:16:11 AM5/12/17
to Comunidad de Visual Foxpro en Español
Hola:

Siguiendo con el tema, he estado realizando el proceso para enviar los pagos realizados a las facturas de RECC. Ya sé que no son muchos casos, pero yo tengo algún cliente que tiene acreedores acogidos a este régimen así que me toca también hacer la comunicación.

La estructura es un poco diferente, aunque muy sencilla. Lo que me ha llamado la atención es que no tiene tipo de comunicación (A0 -> Alta, A1-> modificación ...) además es lo que me ha dado guerra porque no me he fijado bien y le ponía el A0 por aquello de que estoy dando un alta y lógicamente me daba error.

Aquí os dejo el XML que me da correcto.

También hay que hacer el cobro en el caso de un titular acogido al RECC y además al SII (muy poco probable)

Un saludo,

  <sum:SuministroLRPagosRecibidas>

   <sum1:Cabecera>
            <sum1:IDVersionSii>0.6</sum1:IDVersionSii>
            <sum1:Titular>
               <sum1:NombreRazon>TITULAR ENVIO</sum1:NombreRazon>
               <sum1:NIF>CIF TITULAR ENVIO</sum1:NIF>
            </sum1:Titular>            
         </sum1:Cabecera>
       <sum:RegistroLRPagos>
             <sum:IDFactura>
                <sum1:IDEmisorFactura>
                  <sum1:NombreRazon>PROVEEDOR/ACREEDOR RECC</sum1:NombreRazon>
                          <sum1:NIF>CIF PROVEEDOR/ACREEDOR</sum1:NIF>
                </sum1:IDEmisorFactura>
                <sum1:NumSerieFacturaEmisor>RECC0000001</sum1:NumSerieFacturaEmisor>
                <sum1:FechaExpedicionFacturaEmisor>11-05-2017</sum1:FechaExpedicionFacturaEmisor>
             </sum:IDFactura>
   <sum:Pagos>  
    <sum1:Pago>
     <sum1:Fecha>11-05-2017</sum1:Fecha>
     <sum1:Importe>500.00</sum1:Importe>
     <sum1:Medio>01</sum1:Medio>  
     <sum1:Cuenta_O_Medio>ES1234764690180730103271</sum1:Cuenta_O_Medio>  
    </sum1:Pago>
   </sum:Pagos>  
  </sum:RegistroLRPagos> 
     </sum:SuministroLRPagosRecibidas>
 </soapenv:Body>
</soapenv:Envelope>    
It is loading more messages.
0 new messages