El tratamiento y entrega diario de los documentos a notificar vía SII
se puede automatizar mediante una tarea registrada en el gestor de tareas.
Los distintos procesos que componen el tratamiento y transmisión de los datos se pueden gestionar en tareas independientes gestionando la franja
de ejecución o estableciendo una única tarea que incluye la ejeución secuenciada de todos los procesos.
Los proceso que permiten su automatización como tareas programadas están descritos ampliamente en apartados anteriores, mostramos ahora una lista simple de los procesos susceptibles de automatizar. La gestión de estos procesos en una o varias tareas y su frecuencia de ejecución debe valorarse según el perfil de cada instalación.
-
Registrar datos de impuestos en
SII Facturas
-
Registrar datos de impuestos en
SII Pagos
-
Crear y enviar ficheros desde
SII Facturas
a la agencia fiscal -
Crear y enviar ficheros desde
SII Pagos
a la agencia fiscal -
Conversión
SII Facturas
de documentos tipo factura =F1
en documentos tipo factura =F2
por NIF/CIF incorrecto. - Cierre de periodo fiscal por Agencia tributaria
Se muestra a continuación una configuración de tareas programadas básicas. La última de ellas no corresponde a ningún proceso propio del entorno
SII
.
Se programa una tarea de control cuya única función es comprobar la correcta ejecución de las tareas anteriores.
1 Facturas.Generación registros y Entrega mensajes
Proceso de registro de impuestos en
SII Facturas
. Asimismo, generación y entrega de ficheros ante las Agencias Tributarias.
Periodicidad diaria. En una sola tarea se ejecutan varios procesos :
-
Registrar datos de impuestos en
SII Facturas
- Generar mensajes y envío a la agencia tributaria
- Reenviar mensajes con estado de entrega erróneo o pendientes de integrar la respuesta.
-
Notificar por email los errores en
SII Facturas

<script> // Registrar y enviar SII Facturas de los impuestos pendientes // // cimp_essii_facturas_generate(fecini, fecfin, strQry, envioSii, errorContinue) // // EnvioSii = 0 Generar registros SII desde impuestos // EnvioSii = 1 Generar registros SII y enviar fichero SII a la Agencia Fiscal // // strQuery: filtro de selección de essii_facturas // // EL JS de proceso essii_facturas_generate revisa que el dato de // impuesto esté pendiente de entregar (status = 0) // No es necesario fijar condición 1=1 Ax.db.call("cimp_essii_facturas_generate", null, null, "cimpcont_head.fecha BETWEEN TODAY - 90 UNITS DAY AND TODAY", 1, 1); // Seleccionar y enviar los registros ya en SII Facturas pero no entregados // y finalizados. // // essii_facturas_cwsi_messages(enviosii, strQuery, isRefcat15) // // EnvioSii = 0 Generar fichero SII pero no enviar // EnvioSii = 1 Generar fichero SII y enviar // // strQuery: filtro de selección de essii_facturas // // El JS revisa TODOS los registros essii_facturas del rango de fechas // seleccionado que o son pendientes de procesar, o son enviados pero // no totalmente aceptados. No hay rango temporal. Ax.db.call("essii_facturas_cwsi_messages", 1, "1=1", 1); // ======================================================================================= // Reenviar mensajes con estado de entrega erroneo o pendientes de integrar la respuesta. // ======================================================================================= Ax.db.call("essii_cwsi_messages_send", '1=1'); //======================================================================================== // Notificar por mail . Registros essii_facturas en estado erroneo //======================================================================================== var m_rs = Ax.db.executeQuery(` SELECT libro, ejercicio, periodo, facidx, numfactura, fechafactura, sii_estado, sii_errnum, sii_errmsg FROM essii_facturas WHERE sii_errnum IS NOT NULL OR sii_errmsg IS NOT NULL`).toMemory();; if (m_rs.getRowCount() == 0) { return; } var report = new Ax.rs.Report(m_rs); var md = report.getMetaData(); // Add styles colors md.setColumnColor("sii_estado", "'#D32F2F:#FFFFFF'"); md.setColumnColor("sii_errnum", "'#D32F2F:#FFFFFF'"); md.setColumnColor("sii_errmsg", "'#D32F2F:#FFFFFF'"); // Create a combo for type md.setColumnCombo("sii_estado", { "0" : "No entregado", "2" : "Con errores", "3" : "Incorrecto" } ); md.setColumnLabels([ "Libro", "Ejercicio", "Periodo", "Id.", "Número factura", "Fecha factura", "Estado SII", "Número error", "Mensaje error"]); // Render to PDF var pdf = report.toPDF(config => { config.setTitle("Incidencias SII-Facturas"); }); var mail = new Ax.mail.MailerMessage() .to("responsable@cliente.es") .from("info@deister.es") .subject(`Incidencias en SII-Facturas de: [${Ax.db.getName()}]`) .setText("Ver el docuemnto adjunto.") .addAttachment("document", pdf, "application/pdf"); var mailer = new Ax.mail.Mailer(); mailer.setSMTPServer("localhost",25); mailer.send(mail); </script>
2 Pagos.Generación registros y Entrega mensajes
Proceso de registro de impuestos en
SII Pagos
. Asimismo, generación y entrega de ficheros ante las Agencias Tributarias.
Periodicidad diaria. En una sola tarea se ejecutan 2 procesos :
-
Registrar datos de impuestos en
SII Pagos
- Generar mensajes y envío a la agencia tributaria

<script> // Enviar al SII TODOS los registros pendientes // // cimp_essii_pagos_generate(pFecIni, pFecFin, pSqlCond, pEnvioSii, errorContinue) // // pEnvioSii = 0 Generar registros SII desde impuestos // pEnvioSii = 1 Generar registros SII y enviar fichero SII a la Agencia Fiscal // // EL JS de proceso essii_pagos_generate revisa que el dato de // impuesto esté pendiente de entregar (status = 0) // No és necesario fijar condición 1=1 Ax.db.call("cimp_essii_pagos_generate", null, null, 'cimpcont_head.fecha BETWEEN TODAY - 90 UNITS DAY AND TODAY', 1, 1); // Seleccionar y enviar los registros ya en SII Pagos pero no entregados // y finalizados. // // essii_pagos_cwsi_messages(enviosii, strQuery) // // EnvioSii = 0 Generar fichero SII pero no enviar // EnvioSii = 1 Generar fichero SII y enviar // // strQuery: filtro de selección de essii_pagos // // El JS revisa TODOS los registros essii_pagos del rango seleccionado // que o son pendientes de procesar, o son enviados pero // no totalmente aceptados. No hay rango temporal. Ax.db.call("essii_pagos_cwsi_messages", 1, "1=1"); </script>
3 Conversión tipo factura F1 a F2 por error CIF/NIF
Proceso de conversión tipo factura. Trata documentos tipo factura = F1 y con errores relacionados con CIF/NIF.Se transforma el documento en tipo factura F2, permitiendo reenviarlo como documento simplificado sin identificación de CIF/NIF.

<call> <![CDATA[ <xsql-script name='bb_sii_f2_noidentificado'> <body> <foreach> <select prefix='m_'> <columns> essii_facturas.* </columns> <from table='essii_facturas'> <join table='cwsi_messages'> <on>essii_facturas.id_ws_request = cwsi_messages.id_ws_request</on> </join> </from> <where> essii_facturas.libro = 'FE' AND essii_facturas.erp_estado = 'E' AND essii_facturas.sii_estado = '3' <!-- los errores relacionados con el NIF son estos códigos --> AND essii_facturas.sii_errnum IN (1101, 1117, 4111) <!-- error haya dado hace mas de 4 dias --> AND DATE(essii_facturas.date_created) BETWEEN TODAY - 10 AND TODAY - 4 AND ABS(essii_facturas.importetotal) <= 400 </where> </select> <do> <!-- Revocar mensaje y modificar tipo factura --> <update table='essii_facturas'> <column name='erp_estado'>P</column> <!-- Pendiente de entrega --> <column name='sii_estado'><null/></column> <column name='sii_errnum'><null/></column> <column name='sii_errmsg'><null/></column> <column name='pro_errmsg'><null/></column> <column name='id_ws_request'><null/></column> <column name='tipocomunicacion' text='true'>(CASE WHEN sii_estado IN ('1', '2', '3') THEN (CASE WHEN tipocomunicacion = 'A5' THEN 'A6' ELSE tipocomunicacion END) ELSE tipocomunicacion END) </column> <column name='tipofactura'><string>F2</string></column> <column name='user_updated'><system.user.getCode/></column> <column name='date_updated'><date.current/></column> <where> essii_facturas.facidx = <m_facidx/> AND abs(essii_facturas.importetotal) <= 400 </where> </update> <update table='cwsi_messages'> <column name='status_message'><string>CA</string></column> <where> id_ws_request = <m_id_ws_request /> </where> </update> </do> </foreach> <delete table='cwsi_messages'> <where> status_message = 'CA' AND NOT EXISTS (SELECT a.id_ws_request FROM essii_facturas a WHERE a.id_ws_request = cwsi_messages.id_ws_request) AND NOT EXISTS (SELECT a.id_ws_request FROM cwsi_messages_single a WHERE a.id_ws_request = cwsi_messages.id_ws_request) AND NOT EXISTS (SELECT a.id_ws_request FROM essii_ageviaje a WHERE a.id_ws_request = cwsi_messages.id_ws_request) AND NOT EXISTS (SELECT a.id_ws_request FROM essii_bieninve a WHERE a.id_ws_request = cwsi_messages.id_ws_request) AND NOT EXISTS (SELECT a.id_ws_request FROM essii_cobmetal a WHERE a.id_ws_request = cwsi_messages.id_ws_request) AND NOT EXISTS (SELECT a.id_ws_request FROM essii_opesegur a WHERE a.id_ws_request = cwsi_messages.id_ws_request) AND NOT EXISTS (SELECT a.id_ws_request FROM essii_pagos a WHERE a.id_ws_request = cwsi_messages.id_ws_request) AND NOT EXISTS (SELECT a.id_ws_request FROM essii_pagos_sii a WHERE a.id_ws_request = cwsi_messages.id_ws_request) </where> </delete> </body> </xsql-script> ]]> </call>
4 Cierre de periodo fiscal por Agencia tributaria
Proceso de cierre periodo fiscal. Se cierra el periodo según la fecha finalización informada en el mismo.

UPDATE essii_agencia_periodo SET essii_agencia_periodo.peri_status = 'C' WHERE essii_agencia_periodo.peri_enddate < TODAY
5 Control Tareas. Envío mail resultado
Envío de mail con el resultado de las tareas programadas.

<![CDATA[ <xsql-script> <body> <connection name='wic20_conf_sii'> <foreach> <select prefix='m_'> <columns> cron_task_name </columns> <from table='wic_crontab_tasks' /> <where> wic_crontab_tasks.cron_task_disabled = 0 AND wic_crontab_tasks.cron_task_name != 'mail_errores' </where> </select> <do> <select first='1' prefix='m_'> <columns> task_date, task_type </columns> <from table='wic_crontab_execs' /> <where> wic_crontab_execs.task_code = <m_cron_task_name/> AND DATE(task_date) = <date.today/> </where> <order> wic_crontab_execs.task_date DESC </order> </select> <!-- m_task_type = N means finished --> <!-- m_task_type = E means erroneous --> <if> <expr> <eq><m_task_type/>E</eq> </expr> <then> <mail smtphost='localhost' from='info@deister.es' to='usario@deister.es,usuario@cliente.es' subject='Deister cron SII ERROR: [#m_cron_task_name] [#m_task_date]' > <content> <string>http://cliente.deistercloud.com/servlet/jrep?code=wic_crontab_execs&user=manager&dbms=wic20_conf_sii&cond=wic_crontab_execs.task_type%20%3D%20%27E%27&query=true</string> </content> </mail> </then> </if> </do> </foreach> </connection> </body> </xsql-script> ]]>