Sunday, 8 December 2013

Dynamic Payresult data display - Independent on Country grouping Structures!


*&---------------------------------------------------------------------*
*&      Form  READ_PAYROLL_RESULT
*&---------------------------------------------------------------------*
*       Read the Payroll Result
*----------------------------------------------------------------------*
FORM read_payroll_result CHANGING pt_t558b  TYPE  table
                                  pt_t558c  TYPE  table.


DATA             :   l_payresult   TYPE REF TO data.

FIELD-SYMBOLS    :   <fs_fields>   TYPE dfies,
                     <fs_orgeh>    LIKE LINE OF t_orgeh,
                     <l_payresult> TYPE ANY.

  DATA          : lx_t558c   TYPE ty_t558c,
                  lx_t558b   TYPE ty_t558b.

  DATA          : lv_lines   TYPE numc2.

  FIELD-SYMBOLS : <l_pay>    TYPE hrpay99_rt,
                  <l_betrg>  TYPE maxbt,
                  <l_betpe>  TYPE betpe,
                  <l_lgart>  TYPE lgart,
                  <l_anzhl>  TYPE pranz,
                  <l_rt>     TYPE pc207.

  CLEAR : v_molga, v_relid, t_rgdir[].

  CALL FUNCTION 'HR_PCLX_INIT_BUFFER'
    EXCEPTIONS
      OTHERS = 0.

  CALL FUNCTION 'CU_READ_RGDIR_NEW'
    EXPORTING
      persnr   = pernr-pernr
    IMPORTING
      molga    = v_molga
    TABLES
      in_rgdir = t_rgdir
    EXCEPTIONS
      OTHERS   = 1.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.

  IF t_rgdir[] IS INITIAL.
    EXIT.
  ENDIF.

  IF v_molga IS INITIAL.
    EXIT.
  ENDIF.

  PERFORM get_relid USING    v_molga
                    CHANGING v_relid l_payresult v_rc.

  IF v_rc <> 0.
    EXIT.
  ENDIF.

  UNASSIGN <l_payresult>.


  ASSIGN l_payresult->* TO <l_payresult>.
  IF sy-subrc <> 0.
    EXIT.
  ENDIF.

  LOOP AT t_rgdir WHERE fpbeg GE c_begda AND fpend LE c_endda.
    CLEAR <l_payresult>.
    CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
      EXPORTING
        clusterid      = v_relid
        employeenumber = pernr-pernr
        sequencenumber = t_rgdir-seqnr
      CHANGING
        payroll_result = <l_payresult>
      EXCEPTIONS
        OTHERS         = 1.
    CASE sy-subrc.
      WHEN 0.
        UNASSIGN <l_pay>.
        ASSIGN COMPONENT 'INTER-RT' OF STRUCTURE <l_payresult> TO <l_pay>.
        CHECK <l_pay> IS ASSIGNED.
        lv_lines = LINES( <l_pay> ).
        DO lv_lines TIMES.
          READ TABLE <l_pay> ASSIGNING <l_rt> INDEX sy-index.
          CHECK <l_rt> IS ASSIGNED.
          ASSIGN COMPONENT 'LGART'  OF STRUCTURE <l_rt> TO <l_lgart>.
          ASSIGN COMPONENT 'BETPE'  OF STRUCTURE <l_rt> TO <l_betpe>.
          ASSIGN COMPONENT 'BETRG'  OF STRUCTURE <l_rt> TO <l_betrg>.
          ASSIGN COMPONENT 'ANZHL'  OF STRUCTURE <l_rt> TO <l_anzhl>.
          CHECK <l_lgart>           IS ASSIGNED   AND
                <l_betpe>           IS ASSIGNED   AND
                <l_betrg>           IS ASSIGNED   AND
                <l_anzhl>           IS ASSIGNED.
          MOVE : <l_lgart>          TO lx_t558c-lgart,
                 <l_betrg>          TO lx_t558c-betrg,
                 <l_betpe>          TO lx_t558c-betpe,
                 <l_anzhl>          TO lx_t558c-anzhl,
                  pernr-pernr       TO lx_t558c-pernr,
                  t_rgdir-seqnr     TO lx_t558c-seqnr,
                  v_molga           TO lx_t558c-molga,
                  t_rgdir-fpend     TO lx_t558c-keydate.
          APPEND : lx_t558c         TO pt_t558c.
          UNASSIGN <l_rt>.
          CLEAR lx_t558c.
        ENDDO.
        MOVE : pernr-pernr          TO lx_t558b-pernr,
               t_rgdir-seqnr        TO lx_t558b-seqnr,
               t_rgdir-payty        TO lx_t558b-payty,
               t_rgdir-payid        TO lx_t558b-payid,
               t_rgdir-paydt        TO lx_t558b-paydt,
               t_rgdir-permo        TO lx_t558b-permo,
               t_rgdir-fpper+0(4)   TO lx_t558b-pabrj,
               t_rgdir-fpper+4(2)   TO lx_t558b-pabrp,
               t_rgdir-fpbeg        TO lx_t558b-fpbeg,
               t_rgdir-fpend        TO lx_t558b-fpend.
        APPEND lx_t558b             TO pt_t558b.
        CLEAR  : lx_t558b.
      WHEN OTHERS.
        CONTINUE.
    ENDCASE.
  ENDLOOP.

ENDFORM.                    " READ_PAYROLL_RESULT
*&--------------------------------------------------------------------*
*&      Form  get_relid
*&--------------------------------------------------------------------*
*       Read the RELID Value
*----------------------------------------------------------------------*
FORM get_relid USING    value(p_molga) TYPE molga
               CHANGING p_relid        TYPE relid_pcl
                        p_payresult    TYPE REF TO data
                        p_rc           TYPE sysubrc.

  DATA: ls_t500l    TYPE t500l,
        l_payresult TYPE REF TO data.

  PERFORM get_t500l USING p_molga
                    CHANGING ls_t500l l_payresult p_rc.

  IF p_rc EQ 0.
    p_relid     = ls_t500l-relid.
    p_payresult = l_payresult.
  ELSE.
    CLEAR: p_relid, p_payresult.
  ENDIF.

ENDFORM.                    "get_relid
*&--------------------------------------------------------------------*
*&      Form  get_t500l
*&--------------------------------------------------------------------*
*       Read the T5001 Values
*----------------------------------------------------------------------*
FORM get_t500l USING    value(p_molga) TYPE molga
               CHANGING ps_t500l       TYPE t500l
                        p_payresult    TYPE REF TO data
                        p_rc           TYPE sysubrc.

  DATA: l_typename TYPE typename.

  READ TABLE  t_t500l WITH TABLE KEY molga = p_molga.

  IF sy-subrc <> 0.
    CLEAR t_t500l.
    SELECT SINGLE * FROM t500l INTO t_t500l-t500l
      WHERE molga = p_molga.
    IF sy-subrc <> 0.
      t_t500l-molga = p_molga.
      t_t500l-rc    = 4.
    ELSE.
      SELECT SINGLE typename FROM t52relid INTO l_typename
        WHERE relid = t_t500l-relid.
      t_t500l-rc = sy-subrc.
      IF t_t500l-rc = 0.
        CREATE DATA t_t500l-payresult TYPE (l_typename).
        IF sy-subrc <> 0.
          t_t500l-rc = 4.
          CLEAR t_t500l-t500l.
        ENDIF.
      ENDIF.
    ENDIF.
    INSERT table t_t500l.
  ENDIF.

  ps_t500l    = t_t500l-t500l.
  p_payresult = t_t500l-payresult.
  p_rc        = t_t500l-rc.

ENDFORM.                                                    "get_t500l

No comments:

Post a Comment

Note: only a member of this blog may post a comment.