¿Cómo actualizar un infotipo de HR ?

Hola @abapers ,

Necesito crear un nuevo registro en el infotipo 0008 por la tx PA30, luego nos enganche con el infotipo 61 para crear un nuevo registro y que en el infotipo 61 se proponga automáticamente el grupo de cotización GRCOT y la categoría profesional BERKT según la combinación de grupo / subgrupo profesional que hayamos elegido en una tabla Z.

Estoy utilizando la función estándar de SAP HR_INFOTYPE_OPERATION, pero me está permitiendo actualizar el inf 0061, el return me devuelve un error que indica “inicializar el campo”, este campo al parecer es el BEGDA.

Este es el código que he tirado, por motivo de pruebas he harcodiado unas variables, pero esto no es problema. Agradezco comentarios de experto en HR o que haya trabajado con esta función estándar de SAP.

    -------------//------------------------------------------------
    Programa MP000800 -> Módulos PAI (PRE_INPUT_CHECKS) Include MPPERS00
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1 ) Forma END_OF_SCREEN, Inicio                                                                                                                  S
    *$*$-Start: (1 )--------------------------------------------------------------------------------$*$*
    ENHANCEMENT 2  Z_ACT_INFO61.    "active version

    infotypes: 0008, 0061.

    *Declaración de una estructura del mismo tipo de la estructura global del infotipo 0061
    DATA: s_info61 TYPE P0061.

    *Declaración de la variable que envia el mensaje de retorno en la modificaciones del infotipo.
    DATA: return_1 TYPE BAPIRETURN1,
          return_2 TYPE BAPIRETURN1,
          return_3 TYPE BAPIRETURN1.

    *Harcodeo los datos que quiero registrar en el infotipo 0061
    s_info61-infty = '0061'.
    s_info61-PERNR = '10000015'.
    s_info61-AEDTM = SY-DATUM.
    s_info61-UNAME = SY-UNAME.
    s_info61-ENDDA = '99991231'.
    s_info61-BEGDA = '20160101'.
    s_info61-NATSS = '282342342394'.
    s_info61-EPIGR = '000'.
    s_info61-GRCOT = '02'.
    s_info61-BERKT = 'JD'.
    s_info61-TICON = '01'.

    *# Es necesario invocar la funcion que bloquea el registro del usuario para modificarlo
    CALL FUNCTION 'HR_EMPLOYEE_ENQUEUE'
      EXPORTING
        number        = s_info61-PERNR
    * IMPORTING
        RETURN        = return_1.
    CLEAR return_1.

    *# Un nuevo registro en el infotipo 0061
        CALL FUNCTION 'HR_INFOTYPE_OPERATION'
          EXPORTING
            infty                  = s_info61-infty
            number                 = s_info61-PERNR
            SUBTYPE                = s_info61-subty
            OBJECTID               = s_info61-objps
            LOCKINDICATOR          = s_info61-sprps
            VALIDITYEND            = s_info61-ENDDA
            VALIDITYBEGIN          = s_info61-BEGDA
            RECORDNUMBER           = s_info61-seqnr
            record                 = s_info61 " Le mando los datos de la estructura
            operation              = 'MOD'
    *       TCLAS                  = 'A'
    *       DIALOG_MODE            = '0'
    *       NOCOMMIT               =
    *       VIEW_IDENTIFIER        =
    *       SECONDARY_RECORD       =
            IMPORTING
            RETURN                 = return_2.
    *       KEY                    =
    CLEAR return_2.

    *# Es necesario invocar la funcion que desbloquea el registro del usuario
    CALL FUNCTION 'HR_EMPLOYEE_DEQUEUE'
      EXPORTING
        number        = s_info61-PERNR
      IMPORTING
        RETURN        = return_3.

    CLEAR return_3.
    COMMIT WORK AND WAIT.
    CLEAR s_info61.

viejito lo que quieres es crear un registro nuevo o modificar uno existente ???

Asi por lo que veo en el codigo yo no veo nada malo, todo lo veo bien…ahora si lo que quieres es modificar yo te recomendaria leer el infotipo con hr_read_infotype y ahi ubicas el registro que quieres modificar y trabajas sobre ese mismo a ver !!

Hola, lo que se requiere es crear, pero cuando hago el debugging sobre la funcion ‘HR_INFOTYPE_OPERATION’, la variable “operation” solo tiene las opciones de comparar por ‘MOD’, ‘DEL’ y ‘EDQ’. Lo que encontre en la web me dice:

OPERATION: Código de operación representado en un CHAR de longitud 20, por ejemplo:
‘INS’: Crear
‘COP’: Copiar
‘MOD’: Modificar
‘DEL’: Borrar
‘DIS’: Mostrar

La opcion ‘INS’ no la tiene.

Saludos y gracias.

Hola @abapers , lo logramos !! Pero … no es posible modificar si lo intentamos mientras está ejecutando la tx PA30, me explico …

Estaba intentando crear el registro nuevo en el inf 61, a través de un ENHANCEMENT en el programa de la tx PA30, justo después de grabar un nuevo registro en el inf 008, pero este no lo permite porque no me deja bloquear el usuario en cuestión, ya que está siendo tratado en la misma tx PA30.

He creado un programa por separado y de esta manera me permite bloquear el usuario y por ende modificar o crear un nuevo registró en el infotipo 61, ahora tendré que ingeniar la manera que esto conecte con el inf 008.

Saludos y gracias!

ummmm, si se puede hacer directamente…quizas por alguna configuracion del infogrupo es que no podias o algo y la opcion ‘INS’ es para crear, si probaste y no te funciono con eso, raro !! pero buehhhh fino que hayas resuelto

Alguien de @RRHH sabe esto?
Si nadie sabe, disculpen las molestias…

Este tema se cerró automáticamente 91 días después del último post. No se permiten nuevas respuestas.