Uno de los objetivos principales del
...
b+ Core Framework y los intérpretes es brindar la flexibilidad para los procesos de facturación electrónica, permitiendo adicionar o quitar pasos según las normativas de las agencias tributarias de cada país y según las reglas de negocio de los clientes. Por esta razón, en cada implementación de facturación electrónica es posible crear pasos que implementen cierta lógica requerida.
A continuación, se explica cómo se deben crear a nivel ABAP cada paso:
- Se debe tener claro el escenario funcional para el paso, es decir, se debe saber cómo se configuró desde la parte funcional el manejo del estado final y el estado de error. Ya que de esto depende si se debe hacer una lógica especial para determinar dichos estados, o ésta se calcula de acuerdo a la configuración estándar.
- La clase que implementa la lógica del paso, debe implementar la interfaz /EDGE/IF_FC_INTERPRE_STEP. Sin embargo, se recomienda que se herede de la clase abstracta /EDGE/CL_FC_GENERAL_STEP; ya que esta última contiene lógica que acelera el desarrollo del paso.
Por ejemplo, contiene la lógica para determinar si el paso se ejecuta o no, dependiendo del estado en que se encuentra el paso (método MATCH_STATUS), también calcula el estado final dependiendo de la configuración funcional del paso (método GET_FINAL_STATUS). - Al heredar de las clase /EDGE/CL_FC_GENERAL_STEP, solo se debe implementar o redefinir el método EXECUTE_STEP.
- Solo se debe reimplementar o redefinir el método GET_FINAL_STATUS, si no se definió por configuración funcional el estado en el que debe quedar el proceso luego de la ejecución del paso; siempre y cuando no se requiera dejar el proceso en el estado inicial en el que estaba el proceso antes de ejecutar el paso.
- Al implementar el método EXECUTE_STEP, se deben tener en cuenta las siguientes premisas:
Si el método termina en estado satisfactorio, se debe retornar en el parámetro returning PE_SUCCESS un true, es decir un ABAP_TRUE.
Si el método no termina en estado satisfactorio y se quiere hacer saber al
...
- producto que debe colocar el proceso en estado error, entonces se debe lanzar una excepción tipo /EDGE/CX_FC_EINVOICE_EXCEPTION.
Si se requiere indicar que el paso terminó pero no se requiere cambiar el estado, entonces se debe lanzar la excepción /EDGE/CX_FC_EINVOICE_SOFT_EXCE. Con esta excepción, se identifica que el proceso no se debe detener y que no debe quedar en estado error. - En el parámetro pc_context se encuentran los datos de la factura que actualmente se está procesando (esta parámetro se envía todos los pasos, por lo tanto se pueden enviar datos entre los pasos utilizando este parámetro y su atributo data). Allí se pueden encontrar en sus atributos los datos del proceso, al igual que una clase para realizar el log de los mensajes. Para acceder a ésta solo basta con utilizar la siguiente instrucción: pc_context->einvoice→log.
Con la atributo log que en realidad es la instancia de la clase /EDGE/CL_FC_EINVOICE_UTIL_LOGS, se pueden logear muchas clases de mensajes; y estos mensajes van quedando asociados a la factura, de tal forma que se pueden monitorear en el monitor /EDGE/FC_03. - Es posible actualizar los datos de la factura electrónica, esto se hace siguiendo las siguientes reglas:
Declarar un work area: wa_invoice TYPE /edge/fc_tb901.
Asignarle al work area los datos actuales de la factura: pc_context->einvoice->header.
Realizar los campos sobre el work area.
Actualizar la factura con el método: /edge/cl_fc_einvoice_util=>update_invoice_db( EXPORTING pi_tb_invoice = wa_invoice
CHANGING pc_einvoice = pc_context->einvoice ).
El diagrama de clases para la implementación de los pasos es el siguiente: