Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   SII -Nuevo sistema de la Agencia Tributaria española de envío de datos vía Webservice (https://www.clubdelphi.com/foros/showthread.php?t=91252)

nachoexe 21-04-2017 17:12:20

Indice pais CountryType2
 
Hola a todos los pertenecientes a este gremio de pringaos (los informáticos de contabilidad :))

Después de haber leído las 36 páginas que me han ayudado a resolver bastantes dudas os aporto mi grano de arena.

Para resolver cual es el indice de un país (según su CODIGO COMUNITARIO PAIS (UE)) he utilizado el siguiente código:
Cita:

//Declaración de constantes y funciones
const
LPaises : array[1..243] of string = (
'AF','AX','AL','DZ','AS','AD','AO','AI','AQ','AG','AR','AM','AW','AU','AT','AZ','BS','BH','BD','BB', 'BY','BE','BZ','BJ',
'BM','BT','BO','BA','BW','BV','BR','IO','BN','BG','BF','BI','KH','CM','CA','CV','KY','CF','TD','CL', 'CN','CX','CC','CO',
'KM','CG','CD','CK','CR','CI','HR','CU','CY','CZ','DK','DJ','DM','DO','EC','EG','SV','GQ','ER','EE', 'ET','FK','FO','FJ',
'FI','FR','GF','PF','TF','GA','GM','GE','DE','GH','GI','GR','GL','GD','GP','GU','GT','GG','GN','GW', 'GY','HT','HM','VA',
'HN','HK','HU','IS','IN','ID','IR','IQ','IE','IM','IL','IT','JM','JP','JE','JO','KZ','KE','KI','KP', 'KR','KW','KG','LA',
'LV','LB','LS','LR','LY','LI','LT','LU','MO','MK','MG','MW','MY','MV','ML','MT','MH','MQ','MR','MU', 'YT','MX','FM','MD',
'MC','MN','MS','MA','MZ','MM','NA','NR','NP','NL','AN','NC','NZ','NI','NE','NG','NU','NF','MP','NO', 'OM','PK','PW','PS',
'PA','PG','PY','PE','PH','PN','PL','PT','PR','QA','RE','RO','RU','RW','SH','KN','LC','PM','VC','WS', 'SM','ST','SA','SN',
'CS','SC','SL','SG','SK','SI','SB','SO','ZA','GS','ES','LK','SD','SR','SJ','SZ','SE','CH','SY','TW', 'TJ','TZ','TH','TL',
'TG','TK','TO','TT','TN','TR','TM','TC','TV','UG','UA','AE','GB','US','UM','UY','UZ','VU','VE','VN', 'VG','VI','WF','EH',
'YE','ZM','ZW');

function SiiPaisInd(pPais: String):Integer;

//Implementación

function SiiPaisInd(pPais: String):Integer;
var
I: Integer;
vCad: STring;
begin
Result := 202; // ES por defecto :)
for I := 0 to 242 do
begin
vCad := LPaises[i] ;
if pPais = copy(vCad,1,2) then
begin
Result := I;
end;
end;
end;
Edito: Perdón por el formato de código, lo pongo con espacios y con tabuladores y sale siempre alineado a la izquierda... consigo enviar facturas pero no puedo formatear un texto en el editor del foro :(

nachoexe 21-04-2017 17:21:21

FechaOperacion de IVA
 
Lo que yo siempre he pensado sobre la fecha de operación

La FechaOperacion de IVA es la fecha en que se originó el devengo del IVA.

En una factura directa es la misma fecha que la fecha de factura y no es necesario ponerla
En una factura de albaranes es la fecha del PRIMER albarán (o nota de entrega de mercancía), pero ojo que hay una ley que dice que los albaranes se han de facturar antes de 15 días con lo que si hay un intervalo superior a 15 días entre la fecha de operación y la fecha factura Hacienda podría decir algo.
En una factura de abono es la fecha de la factura que originó el abono, por ejemplo, si te devuelven material que se vendió al 18% de IVA la fecha de operación sería 31/08/2012 o anterior.

Esta fecha también se tenía que informar en el 340

nachoexe 21-04-2017 18:59:41

sesionId de la cabecera HTTP
 
Por curiosidad, ¿alguien sabe que es el sesionId y donde localizarlo?
la pregunta técnica 16 de Hacienda habla de este Id de sesión que se debería de coger de la cabecera de la primera respuesta del día y que es conveniente que todas las conexiones del mismo día lleven este Id de sesión, yo ya le había creado un campo pero no lo veo por ningún lado

No puedo poner el enlace de Hacienda (aún no me lo permite el foro, no me llevo bien con los foros :(), pero lo podéis ver en "Información técnica SII \ Preguntas técnicas frecuentes \ 1. Cuestiones Generales \ 16. ¿Cómo se debe utilizar el dato sesionId?"

CMB 21-04-2017 22:14:30

Cita:

Empezado por nachoexe (Mensaje 515755)
Por curiosidad, ¿alguien sabe que es el sesionId y donde localizarlo?
la pregunta técnica 16 de Hacienda habla de este Id de sesión que se debería de coger de la cabecera de la primera respuesta del día y que es conveniente que todas las conexiones del mismo día lleven este Id de sesión, yo ya le había creado un campo pero no lo veo por ningún lado
No puedo poner el enlace de Hacienda (aún no me lo permite el foro, no me llevo bien con los foros :(), pero lo podéis ver en "Información técnica SII \ Preguntas técnicas frecuentes \ 1. Cuestiones Generales \ 16. ¿Cómo se debe utilizar el dato sesionId?"

En los XML de respuesta que se reciben, en ningún sitio aparece ese dato (sesionId). Algunos días hago docenas de peticiones sin citarlo y todo funciona correctamente.

Sería interesante tener más información sobre ello si alguien puede ayudar.

http://www.agenciatributaria.es/AEAT...sionId__.shtml

Saludos,

PASPAS 21-04-2017 23:27:52

Cita:

Empezado por nachoexe (Mensaje 515749)
Hola a todos los pertenecientes a este gremio de pringaos (los informáticos de contabilidad :))

Después de haber leído las 36 páginas que me han ayudado a resolver bastantes dudas os aporto mi grano de arena.

Para resolver cual es el indice de un país (según su CODIGO COMUNITARIO PAIS (UE)) he utilizado el siguiente código:


Edito: Perdón por el formato de código, lo pongo con espacios y con tabuladores y sale siempre alineado a la izquierda... consigo enviar facturas pero no puedo formatear un texto en el editor del foro :(

Buenas Nacho, te aconsejo que utilices la funcion AnsiIndexStr(AstrPais,ArrPaises) esto hace lo mismo que la funcion que indicas. En caso de ser -1 = indicas el indice de españa
Luego veo que introduces todos los paises y deberias añadir otro array para los de la UE y hacer lo mismo llamar a AnsiIndexStr
Espero q te sirva ,
Saludos

PASPAS 22-04-2017 11:37:18

Cita:

Empezado por CMB (Mensaje 515777)
En los XML de respuesta que se reciben, en ningún sitio aparece ese dato (sesionId). Algunos días hago docenas de peticiones sin citarlo y todo funciona correctamente.

Sería interesante tener más información sobre ello si alguien puede ayudar.

http://www.agenciatributaria.es/AEAT...sionId__.shtml

Saludos,

Comparto lo de CMB no existe limitacion si realizas los envios sin tener en cuenta el sessionid. Por tanto no lo controlan. Lo unico q se me ocurre es que si guardamos en la primera peticion diaria el sesion generado en nuestro componente ya sea de indy o eldos ssb , este string guardarlo de forma temporal durante un dia para que asi posteriormente en otros envios sea mas eficiente el envio. Pero esto me da que pensar porque que ocurre cuando la aplicacion la utilizan varios usuarios y en equipos distintos ??? Siempre se deben generar nuevos sesionid y por tanto no creo q sea el caso. Mantendre de momento lo q tengo sin hacer caso de sesionid.
Lo unico seria hacer prueblas de velocidad de todos los casos
Saludos

CMB 22-04-2017 23:25:12

PrestacionServicios y Entrega, cómo separarlos
 
En facturas a clientes extranjeros, o con NIF empezado por N, hay que separar los importes de lo que son <PrestacionServicios> y lo que son <Entrega>. Tal como se muestra en el ejemplo del documento con los esquemas.

Yo entiendo que habrá que distinguir los servicios prestados de las entregas de género.

Dado que hay facturas con muchas líneas donde se mezclan unos y otros, ¿cómo se desglosa todo eso programáticamente? ¿Alguien tiene idea?

Saludos,

newtron 23-04-2017 08:51:48

Cita:

Empezado por CMB (Mensaje 515809)
En facturas a clientes extranjeros, o con NIF empezado por N, hay que separar los importes de lo que son <PrestacionServicios> y lo que son <Entrega>. Tal como se muestra en el ejemplo del documento con los esquemas.

Yo entiendo que habrá que distinguir los servicios prestados de las entregas de género.

Dado que hay facturas con muchas líneas donde se mezclan unos y otros, ¿cómo se desglosa todo eso programáticamente? ¿Alguien tiene idea?

Saludos,

Imagino que lo que tendrás que hacer es definir en la tabla de los conceptos de facturas si el concepto en particular corresponde a servicios o a artículos para luego hacer un total de cada uno de ellos, guardarlo en la tabla resumen de facturas y de ahí sacar el dato para enviarlo por el SII.

Esto es algo parecido a los programas de taller que en el pie te hacen un subtotal con lo que corresponde a mano de obra y a repuestos.

Saludos

CMB 23-04-2017 15:39:52

Cita:

Empezado por newtron (Mensaje 515814)
Imagino que lo que tendrás que hacer es definir en la tabla de los conceptos de facturas si el concepto en particular corresponde a servicios o a artículos para luego hacer un total de cada uno de ellos, guardarlo en la tabla resumen de facturas y de ahí sacar el dato para enviarlo por el SII. Esto es algo parecido a los programas de taller que en el pie te hacen un subtotal con lo que corresponde a mano de obra y a repuestos.
Saludos

Esto complica mucho las cosas, pero la idea es buena.

De todos modos, si envías al SII una factura emitida a un extranjero poniéndolo todo en el tag <sii:Entrega> (servicios y bienes unificados), cuela sin problemas, pues el sistema no tiene manera de validarlo, a menos que abran una inspección muy detallada.

¡Muchas gracias!

corus 24-04-2017 08:37:59

Presentación de las novedades versión 0.7
 
En la sección Novedades de la página de hacienda del SII hay un nuevo link con "Presentación de las novedades versión 0.7"

nachoexe 24-04-2017 10:32:02

Cita:

Empezado por PASPAS (Mensaje 515778)
Buenas Nacho, te aconsejo que utilices la funcion AnsiIndexStr(AstrPais,ArrPaises) esto hace lo mismo que la funcion que indicas. En caso de ser -1 = indicas el indice de españa
Luego veo que introduces todos los paises y deberias añadir otro array para los de la UE y hacer lo mismo llamar a AnsiIndexStr
Espero q te sirva ,
Saludos

Perfecto PASPAS, muchas gracias por el AnsiIndexStr, siempre es un placer el aprender a optimizar el código

vboloradito 24-04-2017 17:06:59

como vais a gestionar la respuesta de la AEAT
 
Hola:

Como vais a gestionar la respuesta de la AEAT.

Habia pensado meter en una pantalla información basica de la factura y 4 columnas adicionales.

1 - Estado (Pendiente / OK / KO / OK con ERROR)

2 - Codigo error

3 - Descripcion

4 - CSV (codigo de control de la respuesta recibida)

KO- En caso de KO habrá que modificar la información de la factura y volver a enviarla.
¿como lo vais a hacer? ¿Cambiandole el estado a pendiente para que lo coja la proxima ejecución?

ok con error. Lo mismo para los casos en los que acepta el xml pero pendiente de corregir el error.
corregir los datos. Pasarla a pendiente y que la coja la siguiente ejecución.

¿Sabeis si se puede implementar un hipervinculo dinamico que te lleve a la factura para que te habrá en el navegador web la factura que ha aceptado la AEAT y corregirla a mano?



Si da OK.

newtron 24-04-2017 19:20:15

Cita:

Empezado por vboloradito (Mensaje 515868)
Hola:

Como vais a gestionar la respuesta de la AEAT.

Habia pensado meter en una pantalla información basica de la factura y 4 columnas adicionales.

1 - Estado (Pendiente / OK / KO / OK con ERROR)

2 - Codigo error

3 - Descripcion

4 - CSV (codigo de control de la respuesta recibida)

KO- En caso de KO habrá que modificar la información de la factura y volver a enviarla.
¿como lo vais a hacer? ¿Cambiandole el estado a pendiente para que lo coja la proxima ejecución?

ok con error. Lo mismo para los casos en los que acepta el xml pero pendiente de corregir el error.
corregir los datos. Pasarla a pendiente y que la coja la siguiente ejecución.

¿Sabeis si se puede implementar un hipervinculo dinamico que te lleve a la factura para que te habrá en el navegador web la factura que ha aceptado la AEAT y corregirla a mano?



Si da OK.

Yo en particular solo dejo al cliente dos opciones Pendientes de traspasar/Traspasadas con errores. Cuando se piden las pendientes aparecen todas las que no se han enviado más las que no se han enviado por errores (en este caso con el último error para que las identifiquen y puedan subsanar el error antes de volver a enviar). Cuando se envían guardo el csv aunque todavía no sé qué haremos con él.

Saludos

nachoexe 24-04-2017 19:41:12

Cita:

Empezado por vboloradito (Mensaje 515868)
Hola:

Como vais a gestionar la respuesta de la AEAT.

Revisa la gestión de errores:
- Error al enviar (KO): lo puedes marcar como pendiente y volver a procesarlo como una alta
- OK con errores: no lo marques como pendiente porque ya esta enviado y lo debes de gestionar como una modificación no como un alta. Creo que te falta el estado "Modificado Pte Env" o como tu quieras llamarlo

Guardar el número de error y la descripción es muy útil para poder listarlos y ver donde están los fallos sin tener que volver a enviar las facturas, el campo csv no sirve para nada salvo en caso de haber errores informáticos en los servidores de hacienda como justificante de envío.

No había visto la opción online para modificar las facturas, esto es un arma de doble filo porque los usuarios pueden alterar o anular las facturas y nuestro sistema no se enteraría y no cuadrarían los listados.
Yo lo tendré en cuenta en el sistema de revisión de facturas para que además del estado del cuadre compruebe los importes.

Generar el hipervinculo dinámico a la modificación o consulta de la factura estaría muy bien y yo me lo apunto para hacerlo, tiene pinta de ser complicaillo pero no imposible, hay que incluir varios campos de la cabecera de la factura y se hace dificil solo cuando hay signos especiales "," "&" o "<" en el nombre. Se trata de hacer varios ejemplos e ir probando
Ejemplos:

3w7.aeat.es/wlpl/SSII-FACT/FRecibidasServlet?fAccion=7&LFR_NIFFACTURA_EMI=&LFR_PAIS_FACT_EMI=IT&LFR_TIPO_FACT_EMI=02&LFR_ID_FAC T_EMI=IT12342201222&LFR_NOMRAZ_CONTR=PROVEEDOR+SIGNO+%26amp+Y+DESPUES+%26ltINTRA%3E&LFR_SERIENUM_FAC _EMI=12345&LFR_FECHA_EXPEFAC_EMI=2017-04-03&LFR_NIF_TITULAR=XXXXXXXXX

3w7.aeat.es/wlpl/SSII-FACT/FRecibidasServlet?fAccion=7&LFR_NIFFACTURA_EMI=BXXXXXXXX&LFR_PAIS_FACT_EMI=null&LFR_TIPO_FACT_EMI=nu ll&LFR_ID_FACT_EMI=&LFR_NOMRAZ_CONTR=NOMBRE1+NOMBRE2%2C+S.L.&LFR_SERIENUM_FAC_EMI=354&LFR_FECHA_EXPE FAC_EMI=2017-01-05&LFR_NIF_TITULAR=XXXXXXXXX

CMB 24-04-2017 20:21:23

Cita:

Empezado por vboloradito (Mensaje 515868)
Hola:
Como vais a gestionar la respuesta de la AEAT.
Habia pensado meter en una pantalla información basica de la factura y 4 columnas adicionales.
1 - Estado (Pendiente / OK / KO / OK con ERROR)

Existe otro estado. Las facturas dadas de baja, que pueden ser enviadas de nuevo como modificación, pero no como alta pues generan el error Factura duplicada.

Saludos,

CMB 24-04-2017 20:30:54

Cita:

Empezado por nachoexe (Mensaje 515885)
No había visto la opción online para modificar las facturas, esto es un arma de doble filo porque los usuarios pueden alterar o anular las facturas y nuestro sistema no se enteraría y no cuadrarían los listados.

El usuario podrá hacer cualquier operación directamente en la página de la AEAT. Altas, bajas y modificaciones, además de consultas. Pero hacer eso por la puerta de atrás es su responsabilidad. Es muy difícil controlar esas operaciones paralelas desde el programa, pues con verificar importes podría no ser suficiente. ¿Qué pasa con las altas, qué pasa con las bajas? ¿Qué pasa si cambia la descripción de la operación? ¿O cambia el tipo de factura, normal / simplificada? Y probablemente más...

vboloradito 24-04-2017 20:56:22

Cita:

Empezado por CMB (Mensaje 515890)
El usuario podrá hacer cualquier operación directamente en la página de la AEAT. Altas, bajas y modificaciones, además de consultas. Pero hacer eso por la puerta de atrás es su responsabilidad. Es muy difícil controlar esas operaciones paralelas desde el programa, pues con verificar importes podría no ser suficiente. ¿Qué pasa con las altas, qué pasa con las bajas? ¿Qué pasa si cambia la descripción de la operación? ¿O cambia el tipo de factura, normal / simplificada? Y probablemente más...

Puede ser util si para resolver el error de una factura te toca hacer un desarrollo y no lo tienes antes de cuatro dias. TE evitas la multa.
Tambien puede ser util para no implementar por codigo los libros de
- Libro registro de bienes de inversión.
- Libro registro de determinadas operaciones intracomunitarias

La mayoria de las empresas no tienen esos libros y si los tienen puede ser que tengan muy pocas operaciones a lo largo del año.

vboloradito 24-04-2017 21:24:23

Cita:

Empezado por CMB (Mensaje 515889)
Existe otro estado. Las facturas dadas de baja, que pueden ser enviadas de nuevo como modificación, pero no como alta pues generan el error Factura duplicada.

Saludos,

Creo que finalmente voy a implementar 4 estados.

- pendiente (no enviada todavia)
- Pendiente con ERROR ( el sistema en el proximo intento la reenviara automaticamente asumiendo que el usuario la ha corregido)
- OK
- OK con ERROR ( esta me preocupa menos porque no tiene multa) el sistema la relanzará al acabar el dia automaticamente, asumiendo que el usuario la ha corregido) esta creo que la tengo que enviar como modificacion, no como alta.

Lo del tema de baja de facturas todavia no lo he abordado ni la rectificación.
Teneis claro como hacerlo. Acepto sugerencias.

-

CMB 24-04-2017 21:32:08

Cita:

Empezado por vboloradito (Mensaje 515891)
Puede ser util si para resolver el error de una factura te toca hacer un desarrollo y no lo tienes antes de cuatro dias. TE evitas la multa.
Tambien puede ser util para no implementar por codigo los libros de
- Libro registro de bienes de inversión.
- Libro registro de determinadas operaciones intracomunitarias
La mayoria de las empresas no tienen esos libros y si los tienen puede ser que tengan muy pocas operaciones a lo largo del año.

Totalmente de acuerdo.

La página de la AEAT para operaciones directas es un salvavidas para nosotros los programadores. Con la complejidad que tiene este asunto es casi imposible que no nos encontremos tarde o temprano con un problema que no habíamos previsto. Nadie está a salvo. Llegados a ese punto, si se trata de algo que no puedes resolver en un par de horas, la solución más rápida es aconsejar al usuario que use la página directa.

Además, de sobras es conocido que muchas empresas se esperan siempre al último día y, si entonces surge el problema, el que tiene que correr (creo que injustamente) es el responsable del software. En aquella época no muy lejana en que los autónomos presentaban trimestralmente los modelos 130 y 303 en la ventanilla del banco, los días 30 de enero, 20 de abril, julio y octubre se formaban largas colas. Y los empleados bancarios ya sabían que aquellos días tenían que hacer horas extra.

Saludos,

CMB 24-04-2017 21:43:45

Cita:

Empezado por vboloradito (Mensaje 515895)
Lo del tema de baja de facturas todavia no lo he abordado ni la rectificación. Teneis claro como hacerlo. Acepto sugerencias.

Es muy sencillo. En el documento SII_Descripcion_ServicioWeb_v0.6.pdf están los esquemas y hay unos ejemplos, que siguen un criterio casi igual a las altas. Con ver los ejemplos ya es suficiente, los XML son casi iguales.

Cualquier factura ya presentada y aceptada con o sin errores puede ser enviada de nuevo por cambios tantas veces como se desee, incluso sin introducir cambio alguno. El servidor te da cada vez un nuevo CSV. Las facturas de baja (o anuladas) sólo se pueden recuperar por cambios. No se pueden mandar de nuevo como pendientes porque te las rechazan por duplicadas, pues el servidor las mantiene indefinidamente en su base de datos.

Saludos,


La franja horaria es GMT +2. Ahora son las 20:28:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi