ABAP: Procesar Infotipo en SAP HCM

Facebooktwitterlinkedinmail

Buenas Saper@s, en pasadas ocasiones ya hemos entrado en el mundo del infotipo en SAP HCM e incluso hemos creado algún infotipo ¿Lo recuerdan? Hemos hablado también de guardar textos en el infotipo, e incluso como ampliar infotipos estándar.  Sin embargo, nunca hemos hablado como procesar un infotipo correctamente desde ABAP, por eso hoy traigo esta entrada.

Registro infotipo 2001
Ejemplo de infotipo – IT 2001

Declaración

Antes de procesar un infotipo hay que declararlo. Para declararlo hay que usar la sentencia INFOTYPES.

El rango de infotipo es el siguiente:

  • 0000 y 0999 tenemos los datos maestros del infotipo.
  • 1000 y el 1999 tenemos los datos de planificación.
  • 2000 y el 2999 tenemos los datos de tiempo.
  • 3000 y 8999 no tenemos nada.
  • 9000 y 9999 tenemos los infotipos de cliente.

La sintaxis sería:

  • INFOTYPES: nnnn [NAME c] [OCCURS n] [MODE N] [VALID FROM comp1 TO comp2]

Donde nnnn es el número del infotipo que vamos a declarar.

Cuando se declara un infotipo en memoria se crea una tabla interna con la siguiente estructura:

DATA BEGIN OF Pnnnn OCCURS 10.

INCLUDE STRUCTURE Pnnnn.

DATA END OF Pnnnn VALID BETWEEN BEGDA AND ENDDA.

La cláusula VALID BETWEEN BEGDA AND ENDDA indica que período se va a coger registros.

Los parámetros opcionales son:

  • NAME C Nos crea una tabla interna, con la misma estructura que el infotipo declarado, con el nombre indicado en C. C tiene un longitud máxima de 20 caracteres.
  • OCCURS n Nos crea una tabla interna poniendo el valor n en la cláusula OCCURS.
  • MODE n Esta cláusula solo esta disponible para las bases de datos lógica PNP y PCH, y su efecto es que no llena el infotipo cuando se ejecuta la sentencia GET PERNR.
  • VALID FROM comp1 TO comp2 Cuando se ejecuta la sentencia GET PERNR el infotipo se llenará con los registros cuyo período este comprendido entre comp1 y comp2.

Procesamiento del infotipo

Existen dos maneras de procesar un infotipo:

  • Procesamiento de un registro especifico del infotipo, el más reciente/más antiguo.
  • Procesamiento de todo el infotipo.

Procesar de un registro específico del infotipo

En muchos casos no necesitaremos leer todos los registros del infotipo, sino que necesitaremos leer al último o primer registro. Para ello utilizaremos las siguientes macroinstrucciones:

  1. RP-PROVIDE-FROM-LAST Pnnn SPACE PN-BEGDA PN-ENNDA  Nos devuelve el último registro.
  2. RP-PROVIDE-FROM-FIRST Pnnn SPACE PN-BEGDA PN-ENNDA  Nos devuelve el primer registro.

Donde nnnn es el numero de infotipo, en la variable PN-BEGDA o PNPENDDA tenemos la fecha inicial del período introducido por pantalla, y en PN-ENDDA o PNPENDDA tenemos la fecha final del período introducido por pantalla.

Las macroinstrucciones se definen en la tabla TRMAC.

Procesamiento de todo el infotipo

Ya hemos comentado que cuando se realiza un GET PERNR las tablas internas de los infotipos son llenadas con el historial completo (del más antiguo al más reciente) del empleado leído. Por lo tanto podemos tener que en una tabla interna existan más de un registro o períodos o intervalos de validez.

El procesamiento de registros del infotipo es dependiente del tiempo, es decir, depende del período de selección de datos introducido en la imagen de selección. Pueden procesarse al mismo tiempo los datos de varios infotipos y pueden prepararse para un período de tiempo parcial específico.

Las tablas internas del infotipo se procesan con la sentencia PROVIDE. La sintaxis es:

PROVIDE * FROM Pnnnn BETWEEN PN-BEGDA AND PN-ENDDA.

……..

ENDPROVIDE.

Donde nnnn sería el numero del infotipo. La relación entre el infotipo y el período de selección de datos de la imagen de selección se establece mediante las variables PN-BEGDA (Inicio) y PN-ENDDA (Fin).

Actualización de un infotipo

Como hemos se ha visto antes a los infotipos no se les puede insertar ni borrar, pero si que podemos es modificar sus datos. Para ello esta la macroinstrucción RP-UPDATE. Cuya sintaxis es:

  • RP-UPDATE datos_antiguos datos_nuevos.

Un ejemplo sería:

NOTA IMPORTANTE:

Si no entiendes muy bien el código, recuerda debugearlo, y si no recuerdas como hacerlo ir a:

Recuerda:

Si quieres esta página siga en pié pudiéndote ayudar en el día a día, dona, cualquier donativo hará que pueda ayudarte más




Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

diez − cuatro =