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