Su plantilla de datos de procesamiento de nómina
Su plantilla de datos de procesamiento de nómina
- Campos de `datos` estratégicos para el análisis de nómina
- Hitos clave para el descubrimiento de procesos
- Guía de extracción específica del sistema
Atributos de Procesamiento de Nómina
| Nombre | Descripción | ||
|---|---|---|---|
| Actividad Activity | La tarea o `evento` específico que ocurre en el proceso de nómina. | ||
| Descripción Este Los Por qué es importante Define los nodos en el gráfico de procesos, permitiendo la visualización de flujos de proceso, bucles y variantes. Dónde obtener Derivado de los cambios de estado de SWWLOGHIST (Workflow), CDHDR (Documentos de Cambio) o PA03 (Registro de Control). Ejemplos Hoja de Tiempo EnviadaSalario Bruto CalculadoExcepción de Auditoría MarcadaPago Ejecutado | |||
| Registro de Nómina PayrollRecord | El identificador único que combina empleado y período de pago. | ||
| Descripción El Registro de Nómina actúa como el identificador central del En SAP SuccessFactors Employee Central Payroll, esto se construye típicamente concatenando el Número de Personal (PERNR) con el Año de Nómina (PABRJ) y el Período de Nómina (PABRP), y potencialmente un número de secuencia (SEQNR) para distinguir múltiples ejecuciones. Esta granularidad asegura que cada ciclo de pago se analice como una instancia distinta, permitiendo una medición precisa del tiempo de ciclo y un seguimiento de errores. Por qué es importante Sirve como el ID de Caso, agrupando todos los eventos relevantes para reconstruir la ruta del proceso de principio a fin para cada cheque de pago emitido. Dónde obtener Construido a partir de las tablas de SAP Cluster B2 (Resultados de Evaluación de Tiempo) o PC_PAYRESULT (PERNR, PABRJ, PABRP, SEQNR). Ejemplos 10023499-2023-1088291022-2024-01-SEQ01US-10293-2023-52 | |||
| Timestamp del Evento EventTimestamp | La fecha y hora exactas en que ocurrió la actividad. | ||
| Descripción Este En SAP ECP, esto se obtiene de campos de Por qué es importante Permite el cálculo de la duración entre eventos, lo cual es esencial para identificar bottlenecks de rendimiento e incumplimientos de SLA. Dónde obtener CDHDR-UDATE/UTIME, SWWLOGHIST-WI_CD/WI_CT, o marcas de tiempo específicas del registro de auditoría. Ejemplos 2023-10-25T08:30:00Z2023-10-26T14:15:22Z2023-11-01T09:00:00Z | |||
| Source System SourceSystem | El sistema donde se originaron los `datos` del `evento`. | ||
| Descripción Este Es particularmente útil al analizar Por qué es importante Permite la segmentación de datos en entornos multisistema y ayuda a solucionar problemas de calidad de datos al identificar el origen. Dónde obtener ID del sistema (SID) de la instalación de SAP o la configuración de extracción. Ejemplos SAP_ECP_NASAP_ECP_EMEASuccessFactors_Core | |||
| Última actualización de datos LastDataUpdate | La timestamp de la extracción de datos más reciente. | ||
| Descripción Este Aunque no se utiliza directamente para el Por qué es importante Asegura que los usuarios estén al tanto de la latencia de los datos y ayuda a validar la vigencia de las métricas reportadas. Dónde obtener Generado por el script de ETL / extracción en tiempo de ejecución. Ejemplos 2023-11-05T00:00:00Z2023-11-05T12:00:00Z | |||
| Área de Nómina PayrollArea | Define el grupo de nómina específico al que pertenece un empleado. | ||
| Descripción El Área de Nómina agrupa a los empleados que se procesan juntos en la misma ejecución de nómina, a menudo basándose en la frecuencia de pago (por ejemplo, mensual vs. quincenal) o la estructura organizativa. Este En SAP, esto corresponde al campo técnico Por qué es importante Permite la comparación del rendimiento del ciclo de nómina entre diferentes grupos (p. ej., Por Horas vs. Asalariados). Dónde obtener Tabla PA0001 (Asignación Organizacional), campo ABKRS. Ejemplos Quincenal de EE. UU.Mensual DENómina Ejecutiva | |||
| Automatizado IsAutomated | Indicador que señala si la actividad fue realizada por un usuario del sistema. | ||
| Descripción Este Se deriva típicamente verificando el ID de Usuario contra una lista de cuentas de sistema conocidas (por ejemplo, 'BATCH', 'SAP_WORKFLOW'). Por qué es importante Ayuda a medir las tasas de automatización e identificar oportunidades para reducir el esfuerzo manual. Dónde obtener Derivado del ID de Usuario (p. ej., si el Usuario ESTÁ EN ['BATCH', 'SYSTEM'] entonces es verdadero). Ejemplos truefalse | |||
| Centro de Costos CostCenter | El centro de costos asociado al empleado. | ||
| Descripción El Centro de Costos representa el departamento o unidad financiera a la que se asignan los costos del empleado. Sirve como un Se encuentra en el infotipo de Asignación Organizacional (PA0001) como campo Por qué es importante Permite la exploración organizacional para identificar departamentos específicos que causan retrasos o retrabajo. Dónde obtener Tabla PA0001, campo KOSTL. Ejemplos CC-1000 FinanzasCC-2000 TICC-3000 Ventas | |||
| Especialista en Nómina PayrollSpecialist | El ID de usuario o nombre de la persona que procesa el registro. | ||
| Descripción Este Obtenido del campo Por qué es importante Es esencial para el equilibrio de la carga de trabajo y la identificación de bottlenecks humanos en el proceso. Dónde obtener Campos del sistema (SY-UNAME) registrados en CDHDR o ID de Actor de Ejemplos JSMITHKMILLERSYSTEM | |||
| Frecuencia del Ciclo de Pago PayCycleFrequency | Indica si la ejecución es regular o fuera de ciclo. | ||
| Descripción Este Se deriva de los campos Motivo de Fuera de Ciclo ( Por qué es importante Es crítico para medir el KPI de 'Ratio de Pago Fuera de Ciclo' y apuntar a reducciones en el procesamiento no estándar. Dónde obtener Tabla RGDIR (Directorio de Cluster), campo OCRSN o PAYTY. Ejemplos RegularCorrección APago de BonificaciónTerminación | |||
| Importe de Salario Bruto GrossPayAmount | El pago bruto total calculado para el registro. | ||
| Descripción Este Extraído de la tabla de resultados de nómina (RT), típicamente bajo tipos de salario específicos que representan el bruto total (por ejemplo, /101). Soporta el análisis de 'Precisión del Cálculo de Beneficios e Impuestos' proporcionando la base para el cálculo. Por qué es importante Permite el análisis del comportamiento del proceso basado en el valor del pago (p. ej., ¿los pagos más grandes tardan más en aprobarse?). Dónde obtener Tabla de Resultados de Nómina (RT), Tipo de Salario /101 o similar. Ejemplos 5000.002500.5010500.00 | |||
| Período de Pago PayPeriod | El número de período específico dentro del año fiscal. | ||
| Descripción Este Obtenido de Por qué es importante Permite el análisis de tendencias y la identificación de bottlenecks estacionales en épocas específicas del año. Dónde obtener Tabla PA0001 o Cluster de Resultados de Nómina (RGDIR), campo PABRP. Ejemplos 01122652 | |||
| Tipo de Empleado EmployeeType | Clasificación del empleado (p. ej., Permanente, Contratista). | ||
| Descripción Este Técnicamente obtenido de los campos Grupo de Empleado ( Por qué es importante Ayuda a identificar si las variaciones o retrasos en el proceso son específicos de ciertas categorías de empleo. Dónde obtener Tabla PA0001, campos PERSG (Grupo) y PERSK (Subgrupo). Ejemplos Empleado ActivoTraineePensionadoContratista por Horas | |||
| Bandera de Excepción de Auditoría AuditExceptionFlag | Indicador de si ocurrió una excepción de auditoría. | ||
| Descripción Este Los Por qué es importante Destaca problemas de calidad de datos y la necesidad de intervención manual. Dónde obtener Derivado de la presencia de mensajes de error en el registro de nómina o códigos de estado específicos. Ejemplos truefalse | |||
| Conteo de Retrabajo ReworkCount | Número de veces que se realizó una corrección. | ||
| Descripción Esta métrica calculada cuenta el número de veces que la actividad 'Corrección de Altos conteos de Por qué es importante Cuantifica el esfuerzo perdido en la corrección de errores y ayuda a justificar las iniciativas de calidad de datos. Dónde obtener Calculado contando las actividades de 'Corrección de Datos Realizada' por CaseId. Ejemplos 013 | |||
| Entidad jurídica LegalEntity | El código de empresa o entidad legal del empleado. | ||
| Descripción Este Obtenido del campo Por qué es importante Apoya la evaluación comparativa entre empresas y el análisis de asignación financiera. Dónde obtener Tabla PA0001, campo BUKRS. Ejemplos US01DE011000 | |||
| Fecha límite de procesamiento de SLA SLAProcessingDeadline | El `timestamp` objetivo para completar la ejecución de la nómina. | ||
| Descripción Este Aunque no siempre es un campo estándar en las tablas de SAP, a menudo se mantiene en una tabla de control personalizada o se define conceptualmente basándose en el calendario de nómina (por ejemplo, 2 días antes de la Fecha de Pago). Para este modelo de Por qué es importante Proporciona el punto de referencia para evaluar la puntualidad y el cumplimiento de los SLA. Dónde obtener Derivado de la Fecha de Pago (T549S) menos los días de procesamiento configurados. Ejemplos 2023-10-28T17:00:00Z2023-11-28T17:00:00Z | |||
| Jurisdicción Fiscal TaxJurisdiction | La región o autoridad fiscal aplicable al empleado. | ||
| Descripción Este En la Nómina de SAP EE. UU., este es el campo Por qué es importante Permite la segmentación de riesgos de cumplimiento y excepciones de auditoría por región regulatoria. Dónde obtener Tabla PA0001 o PA0207/PA0208, campo TXJCD. Ejemplos CANYTXNRW | |||
| Tiempo de Ciclo (Días) CycleTimeDays | Duración total del proceso de nómina en días. | ||
| Descripción Este Se calcula como la diferencia entre los Por qué es importante Es la métrica principal para evaluar la eficiencia y velocidad general del proceso. Dónde obtener Calculado: EndTime - StartTime del caso. Ejemplos 5.52.010.1 | |||
Actividades de Procesamiento de Nómina
| Actividad | Descripción | ||
|---|---|---|---|
| Archivo de Transferencia Bancaria Generado | La creación del archivo preliminar de Intercambio de Medios de `Datos` (pre-DME) o del archivo DME final. Esto crea las instrucciones de pago para el banco. | ||
| Por qué es importante Rastrea el Monitor de Automatización de Transferencias Bancarias. Las generaciones de archivos fallidas son paradas críticas del proceso. Dónde obtener Registros de la ejecución de DME / Payment Medium Workbench (PMW), a menudo almacenados en TemSe o tablas específicas de ejecución de pagos (ReguH/ReguP). Capturar Registrado cuando la ejecución de pago (F110/RPCIPE) crea una salida Tipo de evento explicit | |||
| Hoja de Tiempo Aprobada | La aprobación formal de los `datos` de tiempo por parte de un gerente o administrador. Este cambio de estado valida los `datos` para su transferencia al motor de nómina. | ||
| Por qué es importante Calcula el KPI de Tiempo de Espera para la Aprobación de Hoja de Tiempos. Los bottlenecks aquí indican retrasos gerenciales o jerarquías de aprobación complejas. Dónde obtener Tablas de Solicitud de Workflow de Employee Central (WfRequest), filtrando por estado COMPLETED o APPROVED. Capturar Registrado cuando el estado del workflow cambia a APPROVED Tipo de evento explicit | |||
| Hoja de Tiempo Enviada | El `evento` en el que un empleado o gerente envía `datos` de tiempo para el período de pago. Esto se captura de los registros de solicitud de `workflow` en el módulo Employee Central vinculado a ECP. | ||
| Por qué es importante Marca el inicio de la fase de acumulación de Dónde obtener Tablas de Solicitud de Workflow de Employee Central (WfRequest), filtrando por categorías de Hoja de Tiempos o Tiempo Libre. Capturar Registrado cuando el estado del workflow cambia a SUBMITTED Tipo de evento explicit | |||
| Pago Ejecutado | La finalización del proceso de pago, a menudo confirmada por el banco o la finalización de la ejecución de pago F110. | ||
| Por qué es importante El Dónde obtener Tablas de Ejecución de Pago (REGUH) Fecha y Hora de ejecución, o inferida de la Fecha Valor. Capturar Registrado cuando el estado de Ejecución de Pago se establece en Contabilizado/Completo Tipo de evento explicit | |||
| Presentación de Impuestos Completada | La generación de archivos de informes fiscales (por ejemplo, PU19 en EE. UU.) o la transferencia a un proveedor de presentación de impuestos de terceros. | ||
| Por qué es importante Asegura el cumplimiento normativo. Rastrea el paso final de cumplimiento en la secuencia. Dónde obtener Registros del Tax Reporter Log Manager o B2A (Business to Administration) Manager que indican la generación exitosa del archivo. Capturar Registrado cuando la ejecución de Tax Reporter se completa con éxito Tipo de evento explicit | |||
| Proceso de Nómina Inicializado | La creación de una instancia de proceso de nómina dentro del Payroll Control Center (PCC). Esto marca el inicio oficial del ciclo de nómina para un área de nómina específica. | ||
| Por qué es importante Establece la base para la duración total del ciclo de nómina de principio a fin. Define el alcance de los empleados a procesar. Dónde obtener Tablas del Payroll Control Center (por ejemplo, PYC_D_PY_PROC_INST), que rastrean la creación de un nuevo ID de proceso. Capturar Registrado cuando se crea la Instancia de Proceso de PCC Tipo de evento explicit | |||
| Registro de Nómina Aprobado | La aprobación formal de los resultados de nómina para un empleado o grupo de pago. Esto ocurre en el paso de 'Monitoreo' o 'Aprobación Final' de PCC. | ||
| Por qué es importante Marca el fin de la fase de cálculo/validación y la liberación para el pago. Fundamental para el análisis del rendimiento del especialista. Dónde obtener Registros de Instancia de Paso del Payroll Control Center (PYC_D_STEP_INST) para el paso de Aprobación o Confirmación. Capturar Registrado cuando el estado del Paso de Aprobación de PCC cambia a COMPLETED Tipo de evento explicit | |||
| Salario Bruto Calculado | La ejecución exitosa del cálculo del esquema de nómina bruta. En el procesamiento estándar, esto ocurre cuando el controlador de nómina escribe en el cluster PCL2. | ||
| Por qué es importante Un hito importante que indica que los datos de tiempo y tarifa se han combinado con éxito. Los retrasos aquí impactan la Eficiencia de Procesamiento de Bruto a Neto. Dónde obtener Cluster PCL2 (Resultados de Nómina), específicamente la marca de tiempo de la tabla de directorio (RGDIR) para el 'Período'. Capturar Registrado cuando se escribe un nuevo número de secuencia en el cluster de nómina Tipo de evento explicit | |||
| Simulación de Nómina Ejecutada | Una ejecución de prueba del controlador de nómina para identificar errores sin comprometer los resultados a la base de datos. Este es un paso clave en la fase de validación de PCC. | ||
| Por qué es importante Esencial para calcular la Tasa de Cálculo de Primera Pasada. Las simulaciones repetidas indican problemas de calidad de datos. Dónde obtener Registros de Instancia de Paso del Payroll Control Center (PYC_D_STEP_INST) donde el tipo de paso corresponde a Simulación. Capturar Registrado cuando el estado del Paso de Simulación de PCC cambia a COMPLETED Tipo de evento explicit | |||
| Corrección de Datos Realizada | Cambios realizados en datos maestros o datos de tiempo en respuesta a una excepción de auditoría. Esto representa el retrabajo requerido para eliminar una alerta de nómina. | ||
| Por qué es importante Rastrea las Tasas de Corrección Manual y Dónde obtener Inferido al unir las marcas de tiempo de las Alertas de PCC con los cambios posteriores en el Registro de Auditoría (PCL4) para el mismo empleado antes de que se cierre la alerta. Capturar Identifique las actualizaciones de datos maestros que ocurren mientras una alerta de PCC está activa Tipo de evento inferred | |||
| Datos de Incentivos Importados | La ingestión de `datos` de pago no estándar, como bonos o comisiones, en el sistema de nómina. Usualmente implica la carga de `datos` en los Infotipos 0015 o 2010. | ||
| Por qué es importante Las importaciones tardías impiden cálculos precisos de salario bruto. Analizar esto ayuda a optimizar el Tiempo de Espera para la Integración de Datos de Incentivos. Dónde obtener Registro de Auditoría (PCL4 o equivalente) mostrando la creación de registros en el Infotipo 0015 (Pagos Adicionales) o 2010 (Información de Remuneración del Empleado). Capturar Compare las marcas de tiempo de creación de Infotipos con los registros de trabajos de importación Tipo de evento inferred | |||
| Deducciones de Beneficios Aplicadas | El paso específico dentro del esquema de cálculo donde se procesa la lógica de beneficios. Aunque forma parte de la ejecución principal, aislar esto ayuda a identificar errores de configuración. | ||
| Por qué es importante Soporta el análisis de precisión del cálculo de beneficios e impuestos. Útil para depurar discrepancias complejas en la lógica de deducción. Dónde obtener Inferido de la existencia de la división V0 en los resultados de nómina o entradas de registro específicas si el registro detallado está habilitado (raro en producción). Capturar Coincide con Salario Bruto Calculado pero conceptualmente distinto para el análisis Tipo de evento inferred | |||
| Excepción de Auditoría Marcada | La generación de una alerta de validación por las verificaciones de políticas del Payroll Control Center. Estas alertas identifican inconsistencias en los `datos` o riesgos de `cumplimiento`. | ||
| Por qué es importante Soporta directamente los dashboards de Frecuencia de Excepciones de Auditoría y Riesgo de Cumplimiento. Volúmenes altos sugieren problemas de calidad de datos upstream. Dónde obtener Tablas de Alertas del Payroll Control Center (PYC_D_ALERT), que vinculan códigos de error específicos al registro del empleado. Capturar Registrado cuando se crea una nueva entrada en la tabla de Alertas de PCC Tipo de evento explicit | |||
| Recibo de Nómina Publicado | La acción de poner a disposición del empleado el estado de remuneración a través de `Self-Service` (ESS). | ||
| Por qué es importante Mide el rendimiento del SLA de entrega de recibos de nómina. Los retrasos aquí generan tickets de soporte. Dónde obtener Inferido de la 'Fecha de Impresión' o la configuración de la fecha de disponibilidad en los registros del servicio mashup de Recibos de Nómina. Capturar Calcular basándose en la Fecha de Pago + Retraso de Configuración del Sistema Tipo de evento inferred | |||
Guías de Extracción
Pasos
- Identifique el área de nómina objetivo y los parámetros de período para la extracción. Extraerá datos principalmente de las tablas del Centro de Control de Nómina (PCC) (PYC_*) y del directorio de cluster de nómina (HRPY_RGDIR).
- Inicie su cliente SQL o SAP HANA Studio conectado al esquema backend de SAP SuccessFactors Employee Central Payroll (ECP).
- Ejecute el script de extracción de datos proporcionado en la sección de Consulta. Este script agrega datos de tablas maestras, resultados de nómina y registros de auditoría de PCC.
- Mapee las actividades 'Hoja de Tiempos Enviada' y 'Hoja de Tiempos Aprobada'. Dado que ECP a menudo recibe estos datos de Employee Central, utilice las marcas de tiempo de creación y última modificación en la tabla PA2001 o las tablas de interfaz de tiempo especializadas como PTREQ_HEADER, si están disponibles.
- Extraiga 'Datos de Incentivos Importados' consultando los Infotipos 0015 (Pagos Adicionales) y 2010 (Información de Remuneración del Empleado) para registros creados dentro del período de pago objetivo.
- Recupere los pasos del proceso PCC de las tablas PYC_D_PYP (Instancias de Proceso) y PYC_D_BINST (Instancias de Paso) para capturar 'Proceso de Nómina Inicializado', 'Simulación de Nómina Ejecutada', 'Registro de Nómina Aprobado' y 'Nómina Publicada'.
- Consulte la tabla PYC_D_ALERT para identificar eventos de 'Excepción de Auditoría Marcada'. Estos registros vinculan a empleados específicos con errores de validación encontrados durante los pasos de verificación de PCC.
- Genere eventos de 'Corrección de Datos Realizada' uniendo la tabla de Cabecera de Documentos de Cambio de SAP (CDHDR) con Infotipos relevantes para la nómina (p. ej., 0008, 0015, 2001) durante la ventana de nómina activa.
- Utilice la tabla HRPY_RGDIR para determinar el momento exacto de 'Salario Bruto Calculado'. Cree un evento derivado para 'Deducciones de Beneficios Aplicadas' utilizando la misma marca de tiempo, ya que estos ocurren simultáneamente durante la ejecución del esquema.
- Vincule los datos financieros de las tablas REGUH (Datos de Liquidación) y REGUT (Administración DME) para capturar 'Archivo de Transferencia Bancaria Generado' y 'Pago Ejecutado'.
- Transforme la columna 'PayrollRecord' para seguir estrictamente el formato [ID de Empleado]-[Período]-[Año] para asegurar la unicidad del ID de caso.
- Exporte el conjunto de datos final como un archivo CSV, asegurándose de que los encabezados coincidan con los atributos definidos en el contrato, y súbalo a ProcessMind.
Configuración
- Timeframe: Configure la extracción para cubrir una ventana móvil de los últimos 6 a 12 meses. Los procesos de nómina son cíclicos, y este rango captura suficiente variación en las ejecuciones regulares y fuera de ciclo.
- Payroll Area (ABKRS): Filtre por Áreas de Nómina específicas (p. ej., mensual de EE. UU., semanal de Alemania) para asegurar que el análisis compare ciclos de proceso similares.
- Language: Asegúrese de que las descripciones de Actividades y Pasos de Proceso se extraen en el idioma principal del sistema (p. ej., SPRAS = 'E').
- PCC Process IDs: Identifique los ID de Definición de Proceso (PYP_ID) específicos utilizados en su configuración de PCC para 'Monitorización', 'Producción' y 'Fuera de Ciclo' para filtrar los pasos relevantes.
- Currency: Normalice los importes financieros (GrossPayAmount) a una única moneda si extrae datos para operaciones de nómina globales.
- Authorization: El usuario de la base de datos requiere acceso de lectura a las tablas de Recursos Humanos (PA/PY) y, específicamente, al Directorio de Cluster (HRPY_RGDIR) y a las tablas PCC (PYC_*).
a Consulta de ejemplo config
/* Activity 1: Time Sheet Submitted */
SELECT
CONCAT(T.PERNR, CONCAT('-', T.PABRJ, T.PABRP)) AS PayrollRecord,
'Time Sheet Submitted' AS Activity,
T.BEGDA AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
T.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
T.PABRP AS PayPeriod,
CASE WHEN T.PABRP LIKE '9%' THEN 'Off-Cycle' ELSE 'Regular' END AS PayCycleFrequency,
0.00 AS GrossPayAmount,
T.UNAME AS PayrollSpecialist,
O.KOSTL AS CostCenter,
'True' AS IsAutomated
FROM PA2001 AS T
LEFT JOIN PA0001 AS O ON T.PERNR = O.PERNR AND O.ENDDA = '99991231'
WHERE T.AEDTM BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 2: Time Sheet Approved */
SELECT
CONCAT(T.PERNR, CONCAT('-', T.PABRJ, T.PABRP)) AS PayrollRecord,
'Time Sheet Approved' AS Activity,
T.AEDTM AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
T.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
T.PABRP AS PayPeriod,
CASE WHEN T.PABRP LIKE '9%' THEN 'Off-Cycle' ELSE 'Regular' END AS PayCycleFrequency,
0.00 AS GrossPayAmount,
T.UNAME AS PayrollSpecialist,
O.KOSTL AS CostCenter,
'False' AS IsAutomated
FROM PA2001 AS T
LEFT JOIN PA0001 AS O ON T.PERNR = O.PERNR AND O.ENDDA = '99991231'
WHERE T.AEDTM BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 3: Incentive Data Imported */
SELECT
CONCAT(I.PERNR, CONCAT('-', I.PABRJ, I.PABRP)) AS PayrollRecord,
'Incentive Data Imported' AS Activity,
I.AEDTM AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
I.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
I.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
I.BETRG AS GrossPayAmount,
I.UNAME AS PayrollSpecialist,
O.KOSTL AS CostCenter,
'True' AS IsAutomated
FROM PA0015 AS I
LEFT JOIN PA0001 AS O ON I.PERNR = O.PERNR AND O.ENDDA = '99991231'
WHERE I.AEDTM BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 4: Payroll Process Initialized */
SELECT
CONCAT('N/A', CONCAT('-', P.PABRJ, P.PABRP)) AS PayrollRecord,
'Payroll Process Initialized' AS Activity,
P.CREATED_TS AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
'ALL' AS PayrollArea,
NULL AS EmployeeType,
P.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
P.CREATED_BY AS PayrollSpecialist,
NULL AS CostCenter,
'False' AS IsAutomated
FROM PYC_D_PYP AS P
WHERE P.CREATED_TS BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 5: Payroll Simulation Executed */
SELECT
CONCAT('N/A', CONCAT('-', S.PABRJ, S.PABRP)) AS PayrollRecord,
'Payroll Simulation Executed' AS Activity,
S.END_TS AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
'ALL' AS PayrollArea,
NULL AS EmployeeType,
S.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
S.EXEC_USER AS PayrollSpecialist,
NULL AS CostCenter,
'True' AS IsAutomated
FROM PYC_D_BINST AS S
JOIN PYC_D_STEP AS D ON S.STEP_ID = D.ID
WHERE D.NAME LIKE '%Simulate%' AND S.END_TS BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 6: Audit Exception Flagged */
SELECT
CONCAT(A.RO_ID, CONCAT('-', P.PABRJ, P.PABRP)) AS PayrollRecord,
'Audit Exception Flagged' AS Activity,
A.CREATED_TS AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
P.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
P.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
'SYSTEM' AS PayrollSpecialist,
NULL AS CostCenter,
'True' AS IsAutomated
FROM PYC_D_ALERT AS A
JOIN PYC_D_PYP AS P ON A.PYP_ID = P.ID
WHERE A.CREATED_TS BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 7: Data Correction Performed */
SELECT
CONCAT(C.OBJECTID, CONCAT('-', P.PABRJ, P.PABRP)) AS PayrollRecord,
'Data Correction Performed' AS Activity,
TO_TIMESTAMP(CONCAT(C.UDATE, C.UTIME)) AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
P.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
P.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
C.USERNAME AS PayrollSpecialist,
NULL AS CostCenter,
'False' AS IsAutomated
FROM CDHDR AS C
JOIN HRPY_RGDIR AS P ON C.OBJECTID = P.PERNR
WHERE C.TCODE IN ('PA30', 'PA40') AND C.UDATE BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 8: Gross Pay Calculated */
SELECT
CONCAT(R.PERNR, CONCAT('-', R.PABRJ, R.PABRP)) AS PayrollRecord,
'Gross Pay Calculated' AS Activity,
TO_TIMESTAMP(CONCAT(R.RUNDT, R.RUNTM)) AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
R.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
R.PABRP AS PayPeriod,
CASE WHEN R.PABRP LIKE '9%' THEN 'Off-Cycle' ELSE 'Regular' END AS PayCycleFrequency,
0.00 AS GrossPayAmount,
R.UNAME AS PayrollSpecialist,
O.KOSTL AS CostCenter,
'True' AS IsAutomated
FROM HRPY_RGDIR AS R
LEFT JOIN PA0001 AS O ON R.PERNR = O.PERNR AND O.ENDDA = '99991231'
WHERE R.RUNDT BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 9: Benefit Deductions Applied */
SELECT
CONCAT(R.PERNR, CONCAT('-', R.PABRJ, R.PABRP)) AS PayrollRecord,
'Benefit Deductions Applied' AS Activity,
ADD_SECONDS(TO_TIMESTAMP(CONCAT(R.RUNDT, R.RUNTM)), 1) AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
R.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
R.PABRP AS PayPeriod,
CASE WHEN R.PABRP LIKE '9%' THEN 'Off-Cycle' ELSE 'Regular' END AS PayCycleFrequency,
0.00 AS GrossPayAmount,
R.UNAME AS PayrollSpecialist,
O.KOSTL AS CostCenter,
'True' AS IsAutomated
FROM HRPY_RGDIR AS R
LEFT JOIN PA0001 AS O ON R.PERNR = O.PERNR AND O.ENDDA = '99991231'
WHERE R.RUNDT BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 10: Payroll Record Approved */
SELECT
CONCAT('N/A', CONCAT('-', S.PABRJ, S.PABRP)) AS PayrollRecord,
'Payroll Record Approved' AS Activity,
S.END_TS AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
'ALL' AS PayrollArea,
NULL AS EmployeeType,
S.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
S.EXEC_USER AS PayrollSpecialist,
NULL AS CostCenter,
'False' AS IsAutomated
FROM PYC_D_BINST AS S
JOIN PYC_D_STEP AS D ON S.STEP_ID = D.ID
WHERE D.NAME LIKE '%Check%' AND S.STATUS = 'OK' AND S.END_TS BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 11: Bank Transfer File Generated */
SELECT
CONCAT(P.PERNR, CONCAT('-', P.PABRJ, P.PABRP)) AS PayrollRecord,
'Bank Transfer File Generated' AS Activity,
TO_TIMESTAMP(CONCAT(T.TSDAT, T.TSTIM)) AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
P.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
P.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
T.USRID AS PayrollSpecialist,
O.KOSTL AS CostCenter,
'True' AS IsAutomated
FROM REGUT AS T
JOIN REGUH AS H ON T.LAUFD = H.LAUFD AND T.LAUFI = H.LAUFI
JOIN HRPY_RGDIR AS P ON H.PERNR = P.PERNR
LEFT JOIN PA0001 AS O ON P.PERNR = O.PERNR AND O.ENDDA = '99991231'
WHERE T.TSDAT BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 12: Payment Executed */
SELECT
CONCAT(P.PERNR, CONCAT('-', P.PABRJ, P.PABRP)) AS PayrollRecord,
'Payment Executed' AS Activity,
TO_TIMESTAMP(CONCAT(H.LAUFD, '120000')) AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
P.ABKRS AS PayrollArea,
'Permanent' AS EmployeeType,
P.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
H.RBETR AS GrossPayAmount,
H.ZNME1 AS PayrollSpecialist,
O.KOSTL AS CostCenter,
'True' AS IsAutomated
FROM REGUH AS H
JOIN HRPY_RGDIR AS P ON H.PERNR = P.PERNR
LEFT JOIN PA0001 AS O ON P.PERNR = O.PERNR AND O.ENDDA = '99991231'
WHERE H.LAUFD BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 13: Pay Slip Published */
SELECT
CONCAT('N/A', CONCAT('-', S.PABRJ, S.PABRP)) AS PayrollRecord,
'Pay Slip Published' AS Activity,
S.END_TS AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
'ALL' AS PayrollArea,
NULL AS EmployeeType,
S.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
S.EXEC_USER AS PayrollSpecialist,
NULL AS CostCenter,
'True' AS IsAutomated
FROM PYC_D_BINST AS S
JOIN PYC_D_STEP AS D ON S.STEP_ID = D.ID
WHERE D.NAME LIKE '%Remuneration%' AND S.END_TS BETWEEN '[START_DATE]' AND '[END_DATE]'
UNION ALL
/* Activity 14: Tax Filing Completed */
SELECT
CONCAT('N/A', CONCAT('-', S.PABRJ, S.PABRP)) AS PayrollRecord,
'Tax Filing Completed' AS Activity,
S.END_TS AS EventTimestamp,
'SAP_ECP' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate,
'ALL' AS PayrollArea,
NULL AS EmployeeType,
S.PABRP AS PayPeriod,
'Regular' AS PayCycleFrequency,
0.00 AS GrossPayAmount,
S.EXEC_USER AS PayrollSpecialist,
NULL AS CostCenter,
'True' AS IsAutomated
FROM PYC_D_BINST AS S
JOIN PYC_D_STEP AS D ON S.STEP_ID = D.ID
WHERE D.NAME LIKE '%Tax%' AND S.END_TS BETWEEN '[START_DATE]' AND '[END_DATE]' Pasos
- Acceder al Editor ABAP: Inicie sesión en su sistema SAP SuccessFactors Employee Central Payroll (ECP) a través de la SAP GUI. Navegue al código de transacción SE38 (Editor ABAP).
- Crear Programa: Introduzca un nombre para el nuevo programa, como
Z_PROCESSMINING_PAYROLL_EXT, y haga clic en Crear. Seleccione Programa ejecutable como tipo y Guardar como Objeto Local (Paquete $TMP) para fines de prueba. - Implementar Código: Copie el código ABAP completo proporcionado en la sección de Consulta a continuación y péguelo en el editor, reemplazando cualquier código predeterminado existente.
- Verificar y Activar: Haga clic en el botón Verificar (Ctrl+F2) para validar la sintaxis. Una vez que el estado sea libre de errores, haga clic en Activar (Ctrl+F3).
- Ejecutar Extracción: Pulse Procesamiento Directo (F8) para ejecutar el informe.
- Configurar Selección: En la pantalla de selección, introduzca el
Área de Nómina(p. ej., US, 99), unRango de Fechasválido (p. ej., los últimos 3 meses) y, opcionalmente, filtre porNúmeros de Personal(PERNR) específicos para pruebas. - Ejecutar Extracción: Ejecute el informe. El sistema procesará las tablas HRPY_RGDIR, CATSDB, PA0015 y REGUH para construir el registro de eventos.
- Revisar Salida: El informe utiliza
cl_demo_outputpara mostrar los resultados en una vista de cuadrícula directamente en la pantalla para una validación inmediata. - Exportar Datos: Haga clic derecho en la cuadrícula de resultados, seleccione Hoja de cálculo, y guarde el archivo en formato CSV o Excel.
- Formato para ProcessMind: Abra el archivo exportado. Asegúrese de que la columna
EventTimestampesté formateada comoAAAA-MM-DD HH:MM:SS. Verifique que la columnaPayrollRecordidentifique de forma única el caso (generalmente PERNR-SEQNR). - Subir: Importe el archivo CSV limpio en ProcessMind, mapeando las columnas a ID de Caso, Actividad, Marca de Tiempo y Atributos según corresponda.
Configuración
- Date Range: Se recomienda extraer datos en bloques de 3 a 6 meses para evitar timeouts de memoria en el entorno de ejecución ABAP.
- Payroll Area: Este es un filtro crítico (Tabla T549A). Extraiga siempre un área de nómina a la vez (p. ej., mensual frente a quincenal) para asegurar la consistencia del proceso.
- Configuration Table: El script lee
HRPY_RGDIR(Directorio de Nómina) como controlador principal. Asegúrese de que su usuario tiene autorizaciónS_TABU_DISpara esta tabla. - Time Data Source: El script asume que los datos de la Hoja de Tiempos residen en
CATSDB. Si utiliza un reloj de tiempo de terceros que se interconecta directamente conIT2001oIT2010sin CATS, las actividades de la Hoja de Tiempos pueden regresar vacías y requerir adaptación del script. - Payment Data: El script vincula las ejecuciones de nómina con las ejecuciones de pago a través de
REGUH(Datos de Liquidación). Asegúrese de que la ejecución de pagosF110se haya realizado para el período seleccionado para ver los eventos de pago. - Performance: Para sistemas de alto volumen (más de 100 mil empleados), reemplace la lógica
SELECT *con una obtención basada en cursor o ejecute en modo background (F9).
a Consulta de ejemplo abap
REPORT Z_PROCESSMINING_PAYROLL_EXT.
TABLES: pernr, hrpy_rgdir, catsdb, pa0015, reguh.
TYPES: BEGIN OF ty_event_log,
payroll_record TYPE string,
activity TYPE string,
event_timestamp TYPE string,
source_system TYPE string,
last_data_update TYPE string,
payroll_area TYPE abkrs,
employee_type TYPE persg,
pay_period TYPE pabrj,
pay_cycle_freq TYPE string,
gross_pay_amount TYPE string,
payroll_specialist TYPE usnam,
cost_center TYPE kostl,
is_automated TYPE string,
END OF ty_event_log.
DATA: gt_output TYPE TABLE OF ty_event_log,
gs_output TYPE ty_event_log,
gt_rgdir TYPE TABLE OF hrpy_rgdir,
gs_rgdir TYPE hrpy_rgdir,
gt_cats TYPE TABLE OF catsdb,
gs_cats TYPE catsdb,
gt_p0015 TYPE TABLE OF pa0015,
gs_p0015 TYPE pa0015,
gt_reguh TYPE TABLE OF reguh,
gs_reguh TYPE reguh,
gv_tstamp TYPE timestamp,
gv_date TYPE d,
gv_time TYPE t,
gv_pernr TYPE pernr_d.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_pernr FOR pernr-pernr,
s_date FOR sy-datum OBLIGATORY.
PARAMETERS: p_abkrs TYPE abkrs OBLIGATORY DEFAULT '99'.
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION.
" 1. Fetch Payroll Directory (The Core Process Driver)
SELECT * FROM hrpy_rgdir INTO TABLE gt_rgdir
WHERE pernr IN s_pernr
AND fpper LIKE '%'
AND cdate IN s_date.
IF gt_rgdir IS INITIAL.
WRITE: / 'No payroll results found for selection.'.
EXIT.
ENDIF.
SORT gt_rgdir BY pernr seqnr.
" Loop through Payroll Directory to build events
LOOP AT gt_rgdir INTO gs_rgdir.
CLEAR gs_output.
CONCATENATE gs_rgdir-pernr '-' gs_rgdir-seqnr INTO gs_output-payroll_record.
gs_output-source_system = 'SAP_ECP'.
gs_output-last_data_update = sy-datum.
gs_output-payroll_area = p_abkrs.
gs_output-pay_period = gs_rgdir-fpper.
gs_output-payroll_specialist = gs_rgdir-uname.
" --- Activity: Payroll Process Initialized ---
" Derived from the run date start
gs_output-activity = 'Payroll Process Initialized'.
CONCATENATE gs_rgdir-cdate gs_rgdir-ctime INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
" --- Activity: Payroll Simulation Executed ---
IF gs_rgdir-srtza = 'S'. " S = Simulation
gs_output-activity = 'Payroll Simulation Executed'.
CONCATENATE gs_rgdir-cdate gs_rgdir-ctime INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
ENDIF.
" --- Activity: Audit Exception Flagged ---
IF gs_rgdir-void IS NOT INITIAL. " Void indicator means rejected/exception
gs_output-activity = 'Audit Exception Flagged'.
CONCATENATE gs_rgdir-cdate gs_rgdir-ctime INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
" --- Activity: Data Correction Performed ---
" Inferred: If voided, a correction usually follows immediately
gs_output-activity = 'Data Correction Performed'.
" Add 1 hour to simulate reaction time
DATA: lv_corr_time TYPE t.
lv_corr_time = gs_rgdir-ctime + 3600.
CONCATENATE gs_rgdir-cdate lv_corr_time INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'FALSE'.
APPEND gs_output TO gt_output.
ENDIF.
" --- Activity: Gross Pay Calculated ---
IF gs_rgdir-srtza = 'A'. " A = Actual Result
gs_output-activity = 'Gross Pay Calculated'.
CONCATENATE gs_rgdir-cdate gs_rgdir-ctime INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-gross_pay_amount = '1000.00'. " Placeholder: Cluster read required for actual amount
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
" --- Activity: Benefit Deductions Applied ---
" Logically occurs immediately after gross calc
gs_output-activity = 'Benefit Deductions Applied'.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
" --- Activity: Payroll Record Approved ---
" Inferred from successful write of 'A' record
gs_output-activity = 'Payroll Record Approved'.
DATA: lv_appr_time TYPE t.
lv_appr_time = gs_rgdir-ctime + 60. " +1 minute
CONCATENATE gs_rgdir-cdate lv_appr_time INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'FALSE'.
APPEND gs_output TO gt_output.
" --- Activity: Pay Slip Published ---
" Available via ESS usually next day
gs_output-activity = 'Pay Slip Published'.
DATA: lv_slip_date TYPE d.
lv_slip_date = gs_rgdir-cdate + 1.
CONCATENATE lv_slip_date '080000' INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
" --- Activity: Tax Filing Completed ---
" End of period logic
gs_output-activity = 'Tax Filing Completed'.
DATA: lv_tax_date TYPE d.
lv_tax_date = gs_rgdir-paydt.
CONCATENATE lv_tax_date '235959' INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
ENDIF.
ENDLOOP.
" 2. Fetch Time Sheet Data (CATSDB)
" Linking to Payroll Record loosely via Period/Date
SELECT * FROM catsdb INTO TABLE gt_cats
WHERE pernr IN s_pernr
AND workdate IN s_date.
LOOP AT gt_cats INTO gs_cats.
CLEAR gs_output.
CONCATENATE gs_cats-pernr '-00000' INTO gs_output-payroll_record. " Generic mapping
gs_output-payroll_area = p_abkrs.
gs_output-source_system = 'SAP_ECP'.
" --- Activity: Time Sheet Submitted ---
IF gs_cats-status = '20' OR gs_cats-status = '30'.
gs_output-activity = 'Time Sheet Submitted'.
CONCATENATE gs_cats-laudate gs_cats-lautime INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'FALSE'.
APPEND gs_output TO gt_output.
ENDIF.
" --- Activity: Time Sheet Approved ---
IF gs_cats-status = '30'. " 30 = Approved
gs_output-activity = 'Time Sheet Approved'.
CONCATENATE gs_cats-apdat gs_cats-aptime INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'FALSE'.
APPEND gs_output TO gt_output.
ENDIF.
ENDLOOP.
" 3. Fetch Incentive Data (Infotype 0015)
SELECT * FROM pa0015 INTO TABLE gt_p0015
WHERE pernr IN s_pernr
AND begda IN s_date.
LOOP AT gt_p0015 INTO gs_p0015.
CLEAR gs_output.
CONCATENATE gs_p0015-pernr '-00000' INTO gs_output-payroll_record.
gs_output-source_system = 'SAP_ECP'.
gs_output-payroll_area = p_abkrs.
" --- Activity: Incentive Data Imported ---
gs_output-activity = 'Incentive Data Imported'.
CONCATENATE gs_p0015-aedtm '120000' INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'FALSE'.
APPEND gs_output TO gt_output.
ENDLOOP.
" 4. Fetch Payment Data (REGUH)
SELECT * FROM reguh INTO TABLE gt_reguh
WHERE zaldt IN s_date.
LOOP AT gt_reguh INTO gs_reguh.
" Filter for our PERNRs roughly (REGUH does not always have PERNR directly indexable easily in all views)
" For simulation, we map broadly or require join logic. Here assuming simple extraction.
CLEAR gs_output.
CONCATENATE gs_reguh-pernr '-99999' INTO gs_output-payroll_record.
gs_output-source_system = 'SAP_ECP'.
gs_output-payroll_area = p_abkrs.
" --- Activity: Bank Transfer File Generated ---
gs_output-activity = 'Bank Transfer File Generated'.
CONCATENATE gs_reguh-laufd gs_reguh-cpzut INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
" --- Activity: Payment Executed ---
gs_output-activity = 'Payment Executed'.
CONCATENATE gs_reguh-zaldt '100000' INTO gs_output-event_timestamp SEPARATED BY space.
gs_output-is_automated = 'TRUE'.
APPEND gs_output TO gt_output.
ENDLOOP.
" Output Display
cl_demo_output=>display( gt_output ).