Etiquetas

20121107

ABAP HR Tips: Inscribir Persona a Tipo de Evento

Esta función permite realizar la inscripción de una Persona a un Tipo de Evento de HR
Transacción: PV00 / PV07

FUNCTION Z_HR_UC35_INSCRIPCIONES.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  TABLES
*"      T_INSCRIPCIONES STRUCTURE  ZXTV_INSCRIPCIONES
*"----------------------------------------------------------------------


DATA: v_tope  TYPE i,
        v_cont  TYPE i,
        v_begda TYPE d,
        v_endda TYPE d,
        v_mens  TYPE char50.


  SORT T_INSCRIPCIONES BY objid.

  LOOP AT T_INSCRIPCIONES.
    AT NEW objid.
      CLEAR: v_tope, v_cont, v_begda, v_endda, gt_hrp1001[].
*     se obtienen datos como: número max de participantes, número actual de participantes
      PERFORM get_datos USING    T_INSCRIPCIONES-objid
                        CHANGING v_tope
                                 v_cont
                                 v_begda
                                 v_endda.
    ENDAT.

    IF v_begda IS INITIAL.
      T_INSCRIPCIONES-mensaje = text-m04.
      MODIFY T_INSCRIPCIONES.
      CONTINUE.
    ENDIF.


*   validacion de no inscripción en el mismo curso
    READ TABLE gt_hrp1001 WITH KEY sobid = T_INSCRIPCIONES-pernr.
    IF SY-SUBRC EQ 0.
      T_INSCRIPCIONES-mensaje = text-m02.
       MODIFY T_INSCRIPCIONES.
      CONTINUE.
    ENDIF.

*   BEGIN DDC180311
    ADD 1 TO v_cont.
*   validacion de tope
    IF v_cont GT v_tope.
      T_INSCRIPCIONES-mensaje = text-m01.
       MODIFY T_INSCRIPCIONES.
      SUBTRACT 1 FROM v_cont.
      CONTINUE.
    ENDIF.
*   END DDC180311

    CLEAR v_mens.
*   llamada a BI
    PERFORM call_transaction USING    T_INSCRIPCIONES-pernr
                                      T_INSCRIPCIONES-objid
                                      v_begda
                                      v_endda
                             CHANGING v_mens.

    IF v_mens IS NOT INITIAL.
      T_INSCRIPCIONES-mensaje = v_mens.
      MODIFY T_INSCRIPCIONES.

      SUBTRACT 1 FROM v_cont.
    ENDIF.

  ENDLOOP.

ENDFUNCTION.


*&---------------------------------------------------------------------*
*&      Form  GET_DATOS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_T_RETURN_OBJID  text
*      <--P_V_TOPE  text
*      <--P_V_CONT  text
*      <--P_V_BEGDA  text
*      <--P_V_ENDDA  text
*----------------------------------------------------------------------*
FORM get_datos  USING    p_objid
                CHANGING p_tope
                         p_cont
                         p_begda
                         p_endda.

  DATA: d_hrp1024 TYPE hrp1024,
        d_hrp1001 TYPE hrp1001,
        d_hrp1000 TYPE hrp1000,
        v_objid   LIKE hrp1001-objid.

* infotipo 1000
  SELECT SINGLE * INTO d_hrp1000
  FROM hrp1000
  WHERE plvar EQ '01'    AND
        otype EQ 'E'     AND
        objid EQ p_objid.

  IF sy-subrc EQ 0.
    p_begda = d_hrp1000-begda.
    p_endda = d_hrp1000-endda.
  ELSE.
    EXIT.  "curso no valido
  ENDIF.

* infotipo 1024 (tope maximo)
  SELECT SINGLE * INTO d_hrp1024
  FROM hrp1024
  WHERE plvar EQ '01'    AND
        otype EQ 'E'     AND
        objid EQ p_objid AND
        begda EQ p_begda AND
        endda EQ p_endda.

  IF sy-subrc NE 0.
*   se busca tipo de curso asociado
    SELECT SINGLE * INTO d_hrp1001
    FROM hrp1001
    WHERE plvar EQ '01'    AND
          otype EQ 'E'     AND
          objid EQ p_objid AND
          relat EQ '020'   AND
          sclas EQ 'D'.

    v_objid = d_hrp1001-sobid.
*   infotipo 1024 (de tipo de curso)
    SELECT SINGLE * INTO d_hrp1024
    FROM hrp1024
    WHERE plvar EQ '01'            AND
          otype EQ 'D'             AND
          objid EQ v_objid         AND
          begda EQ d_hrp1001-begda AND
          endda EQ d_hrp1001-endda.
  ENDIF.

  p_tope = d_hrp1024-kapz3.

* cantidad de enlaces (participantes actuales)
  SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_hrp1001
  FROM hrp1001
  WHERE plvar EQ '01'            AND
        otype EQ 'E'             AND
        objid EQ p_objid         AND
        istat EQ d_hrp1000-istat AND
        begda EQ d_hrp1000-begda AND
        endda EQ d_hrp1000-endda AND
        relat EQ '025'           AND
        sclas EQ 'P'.

  DESCRIBE TABLE gt_hrp1001 LINES p_cont.

ENDFORM.                    " GET_DATOS



*&---------------------------------------------------------------------*
* Estructura ZXTV_INSCRIPCIONES:
*&---------------------------------------------------------------------* 
PERNR      PERSNO
OBJID      HROBJID
MENSAJE    CHAR256