Cuando trabajamos con SAP HCM definitivamente tenemos retos algo diferentes comparado a cuando tenemos que programar para otros módulos de SAP, ya que la lógica empleada para este módulo y sus sub módulos es algo diferente a lo que podemos estar acostumbrados a ver.
En este caso nos toca hablar de ampliaciones ya sean User Exits o BADIS.
Cuando estamos implementando algún tipo de ampliación en específico para el sub módulo de PA ya sea para On premise o para la integración con SSFF nos vamos a encontrar con un punto curioso, y es que SAP para estos módulos por la cantidad de infotipos que se pueden manejar en una sola transacción busco la manera más práctica y eficiente de poder procesarlos y es por esto que nos encontramos con una estructura PNNNN.
Cuando es la primera vez que nos encontramos con esto resulta algo desconcertante, pero básicamente lo que el sistema esta haciendo, es mandar una estructura dinámica, la cual puede llevar la información de cualquiera de los infotipos disponibles.
Cuando tratas de accesar a un campo dentro de dicha estructura, el compilador ABAP te marcará un error "XXXX no tiene una estructura por lo tanto no puede tener un campo XXX". Esto se debe a que es creada de manera dinámica y no posee la referencia de los campos que conforman la estructura.
Para poder trabajar con esta estructura correctamente podemos echar mano de una clase llamada:
cl_hr_pnnnn_type_cast
En específico del método : prelp_to_pnnnn
El procedimiento es proporcionar la estructura PNNNN que nos pone a disposición el sistema y la variable a la cual queremos bajar la información, la cual claramente va a depender del infotipo para el cual estamos trabajando la ampliación.
Hay que tener en cuenta que el tipo que debemos de tomar como referencia no puede ser los PAXXXX si no las estructuras PXXXX.
DATA:ls_p2001_newTYPE p2001.
CALL METHOD cl_hr_pnnnn_type_cast=>prelp_to_pnnnn
EXPORTING
prelp= new_innnn
IMPORTING
pnnnn= ls_p2001_new.