Suministro Inmediato de Informacion - SII

Re: Suministro Inmediato de Informacion - SII

Postby AngelSalom » Thu May 18, 2017 1:12 pm

No acabo de entender tu postura Juanp. Entras en este foro con un mensaje de presentación que me parece perfecto. Se te indica una posible solución a la que algunos miembros del foro hemos decidido apoyar y colaborar para llevarla a cabo desde bastante antes de que aparecieras por aquí. Puedo comprender que esa solución no te guste o no se te acople o lo que sea, pero de ahí a ir despotricando y "pelando" al personal que decida usarla hay un abismo.

Si te molestas en ver el archivo de mensajes entenderás porque algunos confiamos plenamente en el saber hacer de Rafa y Quim, llevan muchísimos años colaborando con la comunidad y en infinidad de ocasiones han donado de forma altruista grandes clases que han aportado mucho y muy bueno a este lenguaje.

No digo que tu idea de cómo debe hacerse sea mejor o peor, sencillamente como en todo en esta vida hay infinidad de opiniones, pero desde el respeto por favor.
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Suministro Inmediato de Informacion - SII

Postby josevalle » Thu May 18, 2017 2:40 pm

Hola:
Yo tengo un dbf con las cabeceras de las facturas. Y he puesto solo dos campos adicionales.
{"SII_CSV ","C", 16, 0},;
{"SII_OK ","C", 1, 0},; // S=ok, 1=aceptada con errores

Cuando parseo la respuesta de la aeat si encuentro el tag
IF cTag="siiR:CSV" ; cCsv:=cDato
y es correcto
ELSEIF cTag="siiR:EstadoRegistro"
IF cDato="Correcto" ; cCorrecta :="S"

Entonces actualizo esos campos de la factura. Y ya se que no la tendré que volver a enviar.
REPLA SII_CSV WITH cCsv
REPLA SII_OK WITH "S"

Aunque dejo la opción por si la han borrado en la web de aeat y la quieren volver a enviar.

Ahora voy a hacer que si hay errores los visualice para que el usuario los corrija. Y antes de enviarlas voy a comprobar que no envie el recargo de equivalencia si es cero, que avise de descripción vacía, etc. Creo que todas las reglas están en en fichero .xsd y que Rafa ya las validará antes de enviar nada.
Jose Valle
Bilbao
Spain
User avatar
josevalle
 
Posts: 65
Joined: Fri Oct 14, 2005 6:20 pm
Location: Bilbao

Re: Suministro Inmediato de Informacion - SII

Postby AngelSalom » Thu May 18, 2017 2:48 pm

Hola Jose, por las pruebas que he hecho no se puede borrar una factura desde la AEAT. Permite anularla y la deja marcada como Anulada y Modificada.
Si entonces intentas enviar la factura con el mismo número te devuelve un "3000 - Factura duplicada"

Yo he contemplado el proceso de "baja" desde la aplicación y el resultado es el mismo, la marca como Anulada pero no permite reutilizar el número.
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Suministro Inmediato de Informacion - SII

Postby juanp » Thu May 18, 2017 3:47 pm

AngelSalom wrote:Hola Jose, por las pruebas que he hecho no se puede borrar una factura desde la AEAT. Permite anularla y la deja marcada como Anulada y Modificada.
Si entonces intentas enviar la factura con el mismo número te devuelve un "3000 - Factura duplicada"

Yo he contemplado el proceso de "baja" desde la aplicación y el resultado es el mismo, la marca como Anulada pero no permite reutilizar el número.




¿ Estas diciendo que has modificado tu programa para que, en la bbdd de tu programa, ahora las facturas no se borren, sino que se marquen como anuladas ?
juanp
 
Posts: 15
Joined: Wed May 10, 2017 4:30 pm

Re: Suministro Inmediato de Informacion - SII

Postby AngelSalom » Thu May 18, 2017 3:57 pm

No, en mi programa igual elimino la factura pero creo un registro para que se envíe la "baja" al SII.
Realmente lo que tengo es una tabla en la que creo un registro (IDSII , por ejemplo). Luego cada factura (emitida, recibida) se relaciona con el IDSII, de este modo cuando hago envíos me baso en la tabla donde tengo todos los identificadores y ahí es donde marco si está enviado, modificado o anulado ... no se si me explico bien :lol: :lol:
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Suministro Inmediato de Informacion - SII

Postby juanp » Thu May 18, 2017 4:25 pm

Angel,

no se si me explico bien :lol: :lol:


Seguro que te explicas perfectamente y yo de la misma forma quisiera entenderte.

Por lo que entiendo en esa tabla tienes un registro por factura, es decir, relacion uno a uno.
En sesa tabla tienes un campo que indica el estado de la factura.

Pero ese estado no me termina cuadrar:

Será enviado cuando envies la factura a la sede electronica
Será anulado CUANDO BORRES LA FACTURA EN TU PROGRAMA. Si es así, entonces no refleja el estado actual de la factura, sino el futuro, cuando sea enviado y tramitado el xml que incluya la baja.
Será modificado ¿ cuando ? ¿ Cuando envies la factura modificada ?

A ver si por favor me lo aclaras, ese tema me tiene la cabeza descuadrada, intentando hacerlo de la mejor manera posible.

Saludos
juanp
 
Posts: 15
Joined: Wed May 10, 2017 4:30 pm

Re: Suministro Inmediato de Informacion - SII

Postby juanp » Thu May 18, 2017 4:36 pm

juanp wrote:Angel,

no se si me explico bien :lol: :lol:


Seguro que te explicas perfectamente y yo de la misma forma quisiera entenderte.

Por lo que entiendo en esa tabla tienes un registro por factura, es decir, relacion uno a uno.
En sesa tabla tienes un campo que indica el estado de la factura.

Pero ese estado no me termina cuadrar:

Será enviado cuando envies la factura a la sede electronica
Será anulado CUANDO BORRES LA FACTURA EN TU PROGRAMA. Si es así, entonces no refleja el estado actual de la factura, sino el futuro, cuando sea enviado y tramitado el xml que incluya la baja.
Será modificado ¿ cuando ? ¿ Cuando envies la factura modificada ?

A ver si por favor me lo aclaras, ese tema me tiene la cabeza descuadrada, intentando hacerlo de la mejor manera posible.

Saludos



Bueno, me respondo,

Supongo que lo que tienes es una tabla mas o menos asi


SiiEstado.Dbf
-------------------
Numero_Factura C 20
Estado_Factura C 10
Anulada_Factura L 1


Así cuando la factura es anulada, rapidamente creas un registro marcandolo como Anulada_Factura a True y Estado_Factura a "Pendiente"

¿ Es eso ?
juanp
 
Posts: 15
Joined: Wed May 10, 2017 4:30 pm

Re: Suministro Inmediato de Informacion - SII

Postby AngelSalom » Thu May 18, 2017 4:44 pm

Viene a ser así. Escribo desde el móvil, luego cuando llegue a la oficina te copio unos pantallazos.
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Suministro Inmediato de Informacion - SII

Postby AngelSalom » Thu May 18, 2017 5:28 pm

juanp, te cuento.

Lo cierto es que estuve dando bastantes vueltas para ver qué sistema me simplificaría más las cosas, y además y muy importante, no afectara al resto del funcionamiento del programa. Dado que tenemos bastantes cientos de usuarios registrados, y de momento sólo cinco o seis van a ser los que van a utilizarlo, por ello que no quiero que el tema del SII sea muy "intrusivo" en la interfaz. De este modo llegué a la conclusión de crear un registro único para todos los documentos y un menú "aparte" en el programa que sólo se activara si el usuario desea utilizar el SII.

De este modo tengo esta tabla
Code: Select all  Expand view
DEFINE DATABASE SII NAME "Registro SII"
  FIELD IDSII       TYPE N LEN   6 BROWSE  1  NAME "Identificador para relacionar documentos con tabla SII"  
  FIELD FECHA       TYPE D LEN   8 BROWSE  3  NAME "Fecha de la factura"
  FIELD FECHAREC    TYPE D LEN   8 BROWSE  4  NAME "Fecha de recepción del documento"
  FIELD DOCUMENTO   TYPE C LEN  30 BROWSE  5  NAME "Documento"
  FIELD TIPODOC     TYPE C LEN  50 BROWSE  6  NAME "Tipo Documento"
  FIELD TIPOFAC     TYPE C LEN   2            NAME "Tipo de factura"
  FIELD TIPOFACL    TYPE C LEN 100 BROWSE  7  NAME "Literal tipo de factura"
  FIELD REGIMEN     TYPE C LEN   2            NAME "Clave de regimen especial o trascendencia"
  FIELD REGIMENL    TYPE C LEN 100 BROWSE  8  NAME "Literal regimen especial o trascendencia"
  FIELD SIIDESC     TYPE C LEN  50 BROWSE  9  NAME "Descripción de la operación"
 
  // Estados
  FIELD MODIFICADO  TYPE L LEN   1 BROWSE 10  NAME "Modificado"
  FIELD BAJA        TYPE L LEN   1 BROWSE 11  NAME "Marcado para baja"
  FIELD ES_BAJA     TYPE L LEN   1 BROWSE 12  NAME "Registro dado de baja"
  FIELD ENVIADO     TYPE L LEN   1 BROWSE 12  NAME "Registro enviado"
  FIELD EXITO       TYPE L LEN   1 BROWSE 13  NAME "Enviado con éxito"

 
  // Registros de envio
  FIELD CSV         TYPE C LEN  50            NAME "Identificador CSV - Respuesta del SII"
  FIELD VSII        TYPE C LEN  10            NAME "Versión SII de la comunicación - Respuesta del SII"
  FIELD ESTADOENV   TYPE C LEN  50            NAME "Estado envío - Respuesta del SII"
  FIELD TIMESTAMP   TYPE C LEN  50 BROWSE 14  NAME "TimeStamp - Respueta del SII"
 
  // Información extra
  FIELD PARTIDA     TYPE C LEN  13            NAME "Partida de la factura"  
 
  INDEX IDSII TO SII1
END DATABASE


En esta tabla el campo IDSII lo tengo creado también en facturas de compra y facturas de venta. Cuando se crea una factura, directamente creo un registro en la tabla SII con el mismo IDSII que no puede repetirse. Luego tengo una opción en el menú para acceder directamente a la tabla SII y de ahí hacer las operaciones de selección, envío y comprobación de resultados.

Básicamente el esquema de funcionamiento es :
- Creo factura : creo registro en SII
- Modifico factura : si SII->ENVIADO=.F. , dejo modificar, si SII->ENVIADO=.T. también dejo modificar pero aviso y marco el campo SII->MODIFICADO a .T.
- Borro factura : si SII->ENVIADO=.F., dejo borrar, si SII->ENVIADO=.T. también dejo borrar pero aviso y marco el campo SII->BAJA a .T.

De este modo cuando voy a hacer el envío al SII se los registros que tengo que añadir (ENVIADO=.F.), modificar (ENVIADO=.T. .AND. MODIFICADO=.T.) ó dar de baja (ENVIADO=.T. .AND. BAJA=.T.).

Con el resultado si va todo bien ya voy marcando , ENVIADO a .T. , EXITO a .T., pongo BAJA a .F. y ES_BAJA a .T. (esto último por tener claro si ya ha sido transmitido y dado de baja o si aún está pendiente de transmitir).

Por otro lado tengo otro fichero de líneas relacionado con la tabla SII donde guardo el resultado de la comunicación de cada registro de la tabla SII ya que pueden ser varios (alta, modificaciones varias, bajas ) De este modo se puede ver todo lo que ha pasado con cada factura.

Te pego un pantallazo que a veces se ve más claro porque menudo "tocho" me ha quedado :mrgreen: :mrgreen:

Image
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Suministro Inmediato de Informacion - SII

Postby juanp » Thu May 18, 2017 5:57 pm

Magnífico Angel y gracias por el aporte que sin duda nos servirá a todos.
Ya se ve que te lo has trabajado. Felicidades.

Se me ocurre que estos campos:
Code: Select all  Expand view

  // Registros de envio
  FIELD CSV         TYPE C LEN  50            NAME "Identificador CSV - Respuesta del SII"
  FIELD VSII        TYPE C LEN  10            NAME "Versión SII de la comunicación - Respuesta del SII"
  FIELD ESTADOENV   TYPE C LEN  50            NAME "Estado envío - Respuesta del SII"
  FIELD TIMESTAMP   TYPE C LEN  50 BROWSE 14  NAME "TimeStamp - Respueta del SII"


deberían ir al historico... aunque en el registro sii del documento tampoco está mal que esten porque asi tienes ahi los ultimos... mas a mano.

Por cierto ¿ Como compruebas si una factura ha sido modificada ?





AngelSalom wrote:juanp, te cuento.

Lo cierto es que estuve dando bastantes vueltas para ver qué sistema me simplificaría más las cosas, y además y muy importante, no afectara al resto del funcionamiento del programa. Dado que tenemos bastantes cientos de usuarios registrados, y de momento sólo cinco o seis van a ser los que van a utilizarlo, por ello que no quiero que el tema del SII sea muy "intrusivo" en la interfaz. De este modo llegué a la conclusión de crear un registro único para todos los documentos y un menú "aparte" en el programa que sólo se activara si el usuario desea utilizar el SII.

De este modo tengo esta tabla
Code: Select all  Expand view
DEFINE DATABASE SII NAME "Registro SII"
  FIELD IDSII       TYPE N LEN   6 BROWSE  1  NAME "Identificador para relacionar documentos con tabla SII"  
  FIELD FECHA       TYPE D LEN   8 BROWSE  3  NAME "Fecha de la factura"
  FIELD FECHAREC    TYPE D LEN   8 BROWSE  4  NAME "Fecha de recepción del documento"
  FIELD DOCUMENTO   TYPE C LEN  30 BROWSE  5  NAME "Documento"
  FIELD TIPODOC     TYPE C LEN  50 BROWSE  6  NAME "Tipo Documento"
  FIELD TIPOFAC     TYPE C LEN   2            NAME "Tipo de factura"
  FIELD TIPOFACL    TYPE C LEN 100 BROWSE  7  NAME "Literal tipo de factura"
  FIELD REGIMEN     TYPE C LEN   2            NAME "Clave de regimen especial o trascendencia"
  FIELD REGIMENL    TYPE C LEN 100 BROWSE  8  NAME "Literal regimen especial o trascendencia"
  FIELD SIIDESC     TYPE C LEN  50 BROWSE  9  NAME "Descripción de la operación"
 
  // Estados
  FIELD MODIFICADO  TYPE L LEN   1 BROWSE 10  NAME "Modificado"
  FIELD BAJA        TYPE L LEN   1 BROWSE 11  NAME "Marcado para baja"
  FIELD ES_BAJA     TYPE L LEN   1 BROWSE 12  NAME "Registro dado de baja"
  FIELD ENVIADO     TYPE L LEN   1 BROWSE 12  NAME "Registro enviado"
  FIELD EXITO       TYPE L LEN   1 BROWSE 13  NAME "Enviado con éxito"

 
  // Registros de envio
  FIELD CSV         TYPE C LEN  50            NAME "Identificador CSV - Respuesta del SII"
  FIELD VSII        TYPE C LEN  10            NAME "Versión SII de la comunicación - Respuesta del SII"
  FIELD ESTADOENV   TYPE C LEN  50            NAME "Estado envío - Respuesta del SII"
  FIELD TIMESTAMP   TYPE C LEN  50 BROWSE 14  NAME "TimeStamp - Respueta del SII"
 
  // Información extra
  FIELD PARTIDA     TYPE C LEN  13            NAME "Partida de la factura"  
 
  INDEX IDSII TO SII1
END DATABASE


En esta tabla el campo IDSII lo tengo creado también en facturas de compra y facturas de venta. Cuando se crea una factura, directamente creo un registro en la tabla SII con el mismo IDSII que no puede repetirse. Luego tengo una opción en el menú para acceder directamente a la tabla SII y de ahí hacer las operaciones de selección, envío y comprobación de resultados.

Básicamente el esquema de funcionamiento es :
- Creo factura : creo registro en SII
- Modifico factura : si SII->ENVIADO=.F. , dejo modificar, si SII->ENVIADO=.T. también dejo modificar pero aviso y marco el campo SII->MODIFICADO a .T.
- Borro factura : si SII->ENVIADO=.F., dejo borrar, si SII->ENVIADO=.T. también dejo borrar pero aviso y marco el campo SII->BAJA a .T.

De este modo cuando voy a hacer el envío al SII se los registros que tengo que añadir (ENVIADO=.F.), modificar (ENVIADO=.T. .AND. MODIFICADO=.T.) ó dar de baja (ENVIADO=.T. .AND. BAJA=.T.).

Con el resultado si va todo bien ya voy marcando , ENVIADO a .T. , EXITO a .T., pongo BAJA a .F. y ES_BAJA a .T. (esto último por tener claro si ya ha sido transmitido y dado de baja o si aún está pendiente de transmitir).

Por otro lado tengo otro fichero de líneas relacionado con la tabla SII donde guardo el resultado de la comunicación de cada registro de la tabla SII ya que pueden ser varios (alta, modificaciones varias, bajas ) De este modo se puede ver todo lo que ha pasado con cada factura.

Te pego un pantallazo que a veces se ve más claro porque menudo "tocho" me ha quedado :mrgreen: :mrgreen:

Image
juanp
 
Posts: 15
Joined: Wed May 10, 2017 4:30 pm

Re: Suministro Inmediato de Informacion - SII

Postby AngelSalom » Thu May 18, 2017 7:59 pm

Así es, en el histórico guardo estos campos y en la tabla SII tengo los de la última comunicación.

Respecto a comprobar si una factura ha sido modificada : guardo fecha, cliente o proveedor y el importe en variables locales antes de modificar. Cuango la grabo compruebo si difieren de los datos almacenados. También uso xBrowse modificado con una DATA que actualizo si ha sido alterado.

Ahora estoy trabajando en obtener un listado desde el SII de las facturas enviadas y cotejarlas con las que tengo en el registro "por si acaso". De todos modos aún me quedan probar envíos de bastantes combinaciones de facturas ... entiendo que la mayoría de usuarios tendrán de sobra con facturas nacionales y tal ... pero habrá que probarlo todo porque vaya telita si hay ... uf!!!

juanp wrote:...
Se me ocurre que estos campos:
Code: Select all  Expand view

  // Registros de envio
  FIELD CSV         TYPE C LEN  50            NAME "Identificador CSV - Respuesta del SII"
  FIELD VSII        TYPE C LEN  10            NAME "Versión SII de la comunicación - Respuesta del SII"
  FIELD ESTADOENV   TYPE C LEN  50            NAME "Estado envío - Respuesta del SII"
  FIELD TIMESTAMP   TYPE C LEN  50 BROWSE 14  NAME "TimeStamp - Respueta del SII"


deberían ir al historico... aunque en el registro sii del documento tampoco está mal que esten porque asi tienes ahi los ultimos... mas a mano.

Por cierto ¿ Como compruebas si una factura ha sido modificada ?

Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Suministro Inmediato de Informacion - SII

Postby juanp » Thu May 18, 2017 8:52 pm

Ahí estamos, vaya telita...

En algún momento, se me ocurrió utilizar el WS para cotejar los datos y así saber lo que hay que dar de alta, de baja o modificacion.
Ejemplo 1: si tengo yo la factura y no la tienen "ellos", pues eso es un alta.
Ejemplo 2: si la factura tiene unos importes distintos a los suyos, pues eso es una modificacion.

Pero lo descarté, por ser una locura.. ¿ o no ?



Así es, en el histórico guardo estos campos y en la tabla SII tengo los de la última comunicación.

Respecto a comprobar si una factura ha sido modificada : guardo fecha, cliente o proveedor y el importe en variables locales antes de modificar. Cuango la grabo compruebo si difieren de los datos almacenados. También uso xBrowse modificado con una DATA que actualizo si ha sido alterado.

Ahora estoy trabajando en obtener un listado desde el SII de las facturas enviadas y cotejarlas con las que tengo en el registro "por si acaso". De todos modos aún me quedan probar envíos de bastantes combinaciones de facturas ... entiendo que la mayoría de usuarios tendrán de sobra con facturas nacionales y tal ... pero habrá que probarlo todo porque vaya telita si hay ... uf!!!
juanp
 
Posts: 15
Joined: Wed May 10, 2017 4:30 pm

Re: Suministro Inmediato de Informacion - SII

Postby AngelSalom » Fri May 19, 2017 7:01 am

Pues tampoco es tan descabellado ... es otro planteamiento. De todos modos como aún no tengo claro el tema del listado de facturas que remiten (he visto que se pueden paginar los resultados en función a ciertas variables), aún no me aventuro a decir nada, cuando lo tenga bien comprobado lo expongo por aquí.

Saludos!

juanp wrote:Ahí estamos, vaya telita...

En algún momento, se me ocurrió utilizar el WS para cotejar los datos y así saber lo que hay que dar de alta, de baja o modificacion.
Ejemplo 1: si tengo yo la factura y no la tienen "ellos", pues eso es un alta.
Ejemplo 2: si la factura tiene unos importes distintos a los suyos, pues eso es una modificacion.

Pero lo descarté, por ser una locura.. ¿ o no ?



Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: Suministro Inmediato de Informacion - SII

Postby juanp » Fri May 19, 2017 7:19 am

Pero si es que al final, como un rio que inexorablemente, a pesar de todos los obstáculos, confluye en el mar, digo que al final tendremos que hacer un proceso de "cuadre", consistente en ver qué tiene la sede electrónica, ver qué tengo yo y sincronizar la sede electronica. ¿ O me equivoco ?
juanp
 
Posts: 15
Joined: Wed May 10, 2017 4:30 pm

Re: Suministro Inmediato de Informacion - SII

Postby AngelSalom » Fri May 19, 2017 7:26 am

No habrá más remedio, al menos antes de la declaración mensual, para ver que las cifras cuadren :roll: :roll: :roll:
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
User avatar
AngelSalom
 
Posts: 708
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

PreviousNext

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: karinha and 13 guests