SII - Eventos
Introducción
iDynamics SII cuenta con multitud de eventos disponibles, diseñados para simplificar la personalización de los datos a enviar a la agencia tributaria. Aunque existen multitud de eventos listados en este documento, le recomendamos que preste especial atención a estos dos, ya que suelen ser los eventos adecuados para la gran mayoría de personalizaciones:
- OnAfterAddDocument. Se ejecuta cuando se crea un documento en la cola de salida y es el evento a usar si quiere personalizar los datos del mensaje.
- OnAfterUpdateAmounts. Se ejecuta cada vez que se actualizan los importes del documento, sea durante su creación o al pulsar el botón de actualizar importes.
Eventos disponibles
A continuación se detallan los principales eventos disponibles en iDynamics SII. Recuerde que en la página de ejemplos encontrarán código con ejemplos concretos de uso.
OnAfterAddDocument
OnAfterAddDocument(var SiiDocument: Record "IDPSII Document")
Emitido por: codeunit "IDPSII Load Document Mgt".
Este evento/método se ejecuta cada vez que se crea un registro de alta en la cola de documentos a enviar al SII.
Recibe como parámetro el registro, con todos los datos ya cálculados. A partir de ese momento, se pueden realizar todos los cambios necesarios al registro, incluyendo la posibilidad generar nuevos registros y/o incluso eliminar el creado por el estándar.
Este es el evento más utilizado para realizar personalizaciones, ya que permite recuperar la factura o documento de origen, y a partir de ella actualizar los datos que sean necesarios.
Nota: si la personalización desarrollada afecta a los importes de la factura, recomendamos usar el evento OnAfterUpdateAmounts, que se ejecuta igualmente cuando se crea un documento en la cola de salida, pero se ejecuta también cuando se pulsa sobre la acción Recalcular importes.
OnAfterAddDocumentFromPosted
OnAfterAddDocumentFromPosted(var SiiDocument: Record "IDPSII Document")
Emitido por: tabla "IDPSII Posted Document".
Este evento/método se ejecuta cada vez que se crea un registro de modificación en la cola de documentos a enviar al SII. Se diferencia del anterior en que el primero se ejecuta cuando se crean nuevos registros desde los movimientos de contabilidad, y este se ejecuta cuando alguien entra en el histórico de envíos y pulsa el botón de Crear solicitud de modificación.
Recibe como parámetro el registro, con los datos originales del envío, pero configurado para enviar una solicitud de modificación.
OnBeforeLoadDocuments
OnBeforeLoadDocuments()
Emitido por: todos los informes de carga "IDPSII Load (...)".
Este evento/método se ejecuta antes de comenzar la carga de registros en la cola de documentos a enviar al SII.
OnAfterLoadDocuments
OnAfterLoadDocuments()
Emitido por: todos los informes de carga "IDPSII Load (...)".
Este evento/método se ejecuta al finalizar la carga de registros en la cola de documentos a enviar al SII.
OnAfterValidateDocument
OnAfterValidateDocument(var SiiDocument: Record "IDPSII Document")
Emitido por: tabla "IDPSII Document".
Este evento/método se llama tras realizar las comprobaciones que lanza iDynamics SII para verificar si faltan datos que requieran dejar el documento en estado "A revisar". Aunque se podrían añadir validaciones personalizadas en el evento OnAfterAddDocumentFromPosted, este evento en particular se ejecuta, además de al añadir un documento a la cola, cada vez que se pulsa el botón de Establecer estado a Enviar.
La manera recomendada de proceder, si se desea dejar un documento en estado "A revisar" porque no cumple alguna condición, es asignar el estado "A revisar", indicar un código de error interno que permite identificar el problema, y añadir un mensaje de error que informe al usuario de qué acciones debe realizar para solucionarlo. Ej.
if Condicion then begin
SiiDocument.Validate(Status, Status::"To Review");
SiiDocument.Validate("Error Code", 'ERR0001');
SiiDocument.Validate("Error Message", 'Los documentos de tipo X requieren que la descripción contenga...');
end;
OnDocumentResponse
OnDocumentResponse(var SiiDocument: Record "IDPSII Document")
Emitido por: informe "IDPSII Send Data to Tax Agency".
Este evento se produce una vez enviado un registro a la agencia tributaria, con el campo Status actualizado, indicando si ha sido enviado con éxito, si ha sido "Aceptado con errores", o si se ha producido un error. Se ejecuta con los datos de respuesta de la agencia tributaria ya aplicados, justo antes de ser archivado (si el envío se ha realizado con éxito).
OnBeforeUpdateAmounts
OnBeforeUpdateAmounts(var SiiDocument: Record "IDPSII Document"; var Handled: Boolean)
Emitido por: tabla "IDPSII Document".
Este evento se produce justo antes de calcular los importes de un documento, tanto en el momento de cargar datos en la cola, como al pulsar el botón de "Actualizar importes", dentro del mismo.
En caso de asignarse la variable Handled a VERDADERO, se considerará que la personalización ha realizado dicho cálculo, y la aplicación no realizará el cálculo estándar.
OnAfterUpdateAmounts
OnAfterUpdateAmounts(var SiiDocument: Record "IDPSII Document")
Emitido por: tabla "IDPSII Document".
Se ejecuta una vez se han calculado los importes del documento, tanto en el momento de cargar datos en la cola, como al pulsar el botón de "Actualizar importes", dentro del mismo.
OnBeforeGetOperationDescription
OnBeforeGetOperationDescription(SiiDocument: Record "IDPSII Document"; var OperationDescription: Text; var Handled: Boolean)
Emitido por: tabla "IDPSII Document".
Se ejecuta cuando el documento se envía a la agencia tributaria, para obtener su descripción. Por omisión, el producto envía la concatenación de los campos "Operation Description" y "Operation Description 2", que serían personalizables/modificables usando el evento OnAfterAddDocument. Este método, no obstante, tiene la ventaja de que no está limitado por la longitud de dichos campos y permite llegar al límite de 500 caracteres ofrecido por el servicio del SII.