Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

loop error

Former Member
0 Likes
2,157

hii,

the output of my report showing correct data for one employee.

but, on selecting 2 or more employees it is showing data corresponding to last employee for all of them.

where m i getting wrong.

thanks

26 REPLIES 26
Read only

shishupalreddy
Active Contributor
0 Likes
2,108

hELLO ,

Better paste u r code.

regards,

Read only

Former Member
0 Likes
2,108

Hi,

Check your code wheather it is overwriting the previous data.

Its better if you give the code.

Regards,

Anirban

Read only

Former Member
0 Likes
2,108

check where you have written the append statement in the loop. if u are using a loop within a loop, the append should be in the 2nd loop and not in the first. but posting ur code here would be of much help.

Regards,

SG

Read only

Former Member
0 Likes
2,108

The possible error may be you would not have cleared the structure and so the last value in the structure will be taken into consideration.

Read only

Former Member
0 Likes
2,108

Used function modules for payroll result

LOOP AT i_pa0001 INTO fs_pa0001.

*& Reading of the Payresult for all the Periods

REFRESH:

it_rgdir,

i_rgdir.

CLEAR:fs_rgdir.

CALL FUNCTION 'CU_READ_RGDIR'

EXPORTING

persnr = fs_pa0001-pernr

TABLES

in_rgdir = it_rgdir

EXCEPTIONS

no_record_found = 1

OTHERS = 2.

IF sy-subrc = 0.

CALL FUNCTION 'PYXX_GET_RELID_FROM_PERNR'

EXPORTING

employee = fs_pa0001-pernr

IMPORTING

relid = lv_relid

molga = lv_molga

EXCEPTIONS

error_reading_infotype_0001 = 1

error_reading_molga = 2

error_reading_relid = 3

OTHERS = 4.

IF sy-subrc NE 0.

ENDIF.

SELECT SINGLE typename

FROM t52relid

INTO lv_type

WHERE relid EQ lv_relid

AND tabname = 'PCL2'.

IF sy-subrc NE 0.

lv_relid = 'IN'.

lv_type = 'PAYIN_RESULT'.

ENDIF.

lv_typename = lv_type.

CREATE DATA ref_payresult TYPE (lv_typename).

ASSIGN ref_payresult->* TO <payresult>.

  • SRTZA--Status Of records.

  • SRTZA = 'A' --Current Result.

DELETE it_rgdir WHERE srtza NE 'A'.

  • PAYTY --> Payment Type ( Regular or Bonus)

  • PAYTY = SPACE --'Regular Payroll'.

  • PAYTY = 'B' --> 'Bonus'.

LOOP AT it_rgdir INTO fs_rgdir WHERE payty = ''

AND fpbeg GE v_begda

AND fpend LE v_endda.

APPEND fs_rgdir TO i_rgdir.

ENDLOOP. " LOOP AT it_rgdir

SORT i_rgdir BY seqnr DESCENDING.

CLEAR: lv_unpaid,lv_paid.

LOOP AT i_rgdir INTO fs_rgdir.

CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'

EXPORTING

clusterid = lv_relid

employeenumber = fs_pa0001-pernr

sequencenumber = fs_rgdir-seqnr

CHANGING

payroll_result = <payresult>

EXCEPTIONS

illegal_isocode_or_clusterid = 1

error_generating_import = 2

import_mismatch_error = 3

subpool_dir_full = 4

no_read_authority = 5

no_record_found = 6

versions_do_not_match = 7

error_reading_archive = 8

error_reading_relid = 9

OTHERS = 10.

IF sy-subrc EQ 0.

ASSIGN COMPONENT 'INTER-RT' OF STRUCTURE <payresult> TO <li_rt>.

LOOP AT <li_rt> INTO lfs_rt .

if lfs_rt-lgart = '/460'.

fs_pa0001-betrg = lfs_rt-betrg.

endif.

if lfs_rt-lgart = '4101'.

fs_pa0001-betrg1 = lfs_rt-betrg.

endif.

ENDLOOP.

ENDIF.

ENDLOOP.

ENDIF.

ENDLOOP.

LOOP AT TABFINAL INTO W_FINAL.

WRITE:/6(8) W_FINAL-PERNR .

WRITE:/100(10) fs_pa0001-betrg .

ENDLOOP.

ENDFORM.

Edited by: AKSHAYA A on May 20, 2009 12:18 PM

Edited by: AKSHAYA A on May 20, 2009 12:20 PM

Edited by: AKSHAYA A on May 20, 2009 12:20 PM

Edited by: AKSHAYA A on May 20, 2009 12:21 PM

Edited by: AKSHAYA A on May 20, 2009 12:25 PM

Read only

0 Likes
2,108

HI,

try clearing lv_relid before calling PYXX_GET_RELID_FROM_PERNR.

Read only

0 Likes
2,108

Hi,

ASSIGN COMPONENT 'INTER-RT' OF STRUCTURE TO .

"here refresh lfs_rt[] and clear lfs_rt.

LOOP AT lfs_rt .

if lfs_rt-lgart = '/460'.

..

Read only

Former Member
0 Likes
2,108

hi ,

i suggest .

first check your internal table contain all the data,in debugg mode....

enter the multiple values and check whether your internal table is filtering the required values.

Clear all the workarea you are using inside the loop after appending or displaying.

clear the internal table before fetching datas.

regards,

Safel

Read only

Former Member
0 Likes
2,108

thanks

Edited by: AKSHAYA A on May 20, 2009 12:30 PM

Read only

Former Member
0 Likes
2,108

you are not appending the records in to internal table that's why you are getting last record in the out put.

chek the inter nal table or select statement. it will work .

Read only

Former Member
0 Likes
2,108

Hi,

Close the thread if solved.

Regards,

Nikhil.

Read only

0 Likes
2,108

hii nikhil,

thanks for your advice but it is not solved yet.

Edited by: AKSHAYA A on May 20, 2009 12:38 PM

Read only

Former Member
0 Likes
2,108

LOOP AT TABFINAL INTO W_FINAL.

WRITE:/6(8) W_FINAL-PERNR .

WRITE:/100(10) fs_pa0001-betrg .

ENDLOOP.

instead of this

write

LOOP AT TABFINAL INTO W_FINAL.

append W_FINAL TO IT_FINAL.

ENDLOOP.

AND THEN

WRITE IT_FINAL-PERNR .

WRITE IT_FINAL-BETRG.

Read only

0 Likes
2,108

how to use the markup for posting code

Read only

0 Likes
2,108

' ' '

WRITE IN SMALL LETTERS

Read only

0 Likes
2,108

TYPES: BEGIN OF ty_pa0001,
         pernr TYPE pa0001-pernr,
         begda TYPE pa0001-begda,
         orgeh TYPE pa0001-orgeh,
         ename TYPE pa0001-ename,
   betrg TYPE netwr,
          betrg1 TYPE netwr,

       END OF ty_pa0001.
TYPES: BEGIN OF ty_output,
        sno TYPE i,
        orgeh TYPE pa0001-orgeh,
        orgtx TYPE t527x-orgtx,
        pernr TYPE pa0001-pernr,
        ename TYPE pa0001-ename,
        lgart TYPE pa0008-lga01,
        betrg TYPE netwr,
        betrg1 TYPE netwr,
       END OF ty_output.
***********************************************************************
*         Internal Tables Declaration                                 *
***********************************************************************
DATA i_pa0001 TYPE STANDARD TABLE OF ty_pa0001 with header line.
DATA: it_rgdir   TYPE STANDARD TABLE OF pc261.
DATA: i_rgdir    TYPE STANDARD TABLE OF pc261.
DATA i_output TYPE STANDARD TABLE OF ty_output with header line.
*& Header structure declaration
DATA fs_pa0001 TYPE ty_pa0001.
DATA: fs_rgdir    TYPE pc261.
***********************************************************************
*              Variable Declaration                                   *
***********************************************************************
DATA:
  v_begda      TYPE begda,
  v_endda      TYPE endda,
  v_atext      TYPE t549t-atext,
  v_error      TYPE c.
DATA: v_mname(15).
DATA: v_mname2(20).
***********************************************************************
*              Constants Declaration                                  *
***********************************************************************
CONSTANTS:
 c_x TYPE c VALUE 'X'.
***********************************************************************
*              SELECTION SCREEN                                       *
***********************************************************************
**********************************************************************
***********************************************************************
*               START-OF-SELECTION EVENT                              *
***********************************************************************
START-OF-SELECTION.
* Getting the starting and ending date of the period.
  PERFORM get_period.
*& Select the Employees.
  PERFORM get_pernrs.
END-OF-SELECTION.
*&---------------------------------------------------------------------
*&      Form  get_pernrs
*&---------------------------------------------------------------------
* This subroutine is used to get the amount to pay.
*----------------------------------------------------------------------
* There are no interface parameters are there to pass
*----------------------------------------------------------------------

FORM get_period .
  SELECT SINGLE begda
                endda
           INTO (v_begda,
                 v_endda)
           FROM t549q
          WHERE permo = '01'
            AND pabrj = yr
            AND pabrp = mon.
ENDFORM.                               " Get_period

FORM get_pernrs .
  FIELD-SYMBOLS:
      <payresult>     TYPE ANY,
      <lv_payresult>  TYPE h99_clst_s_payresult,
      <lv_versc>      TYPE pc202,
      <li_rt>         TYPE hrpay99_rt,
      <li_ddntk>      TYPE hrpay99_ddntk.
  DATA: lfs_rt        TYPE pc207.
  DATA: lfs_ddntk     TYPE pc23e.
  DATA: lv_relid      TYPE t500l-relid.
  DATA: lv_type       TYPE t52relid-typename.
  DATA: lv_typename   TYPE hrpclx_type.
  DATA: ref_payresult TYPE REF TO data.
  DATA: lv_molga      TYPE molga.
  DATA: lv_type_1     TYPE tadir-obj_name.
  DATA: lv_tadir      TYPE tadir-obj_name.
  DATA: lv_unpaid     TYPE ktsol.
  DATA: lv_paid       TYPE ktsol.
*& Reading all the Personnel Numbers
 SELECT pernr
         begda
         orgeh
         ename
   FROM pa0001
   INTO TABLE i_pa0001
   WHERE endda GE v_begda
     AND begda LE v_endda
     and pernr in per.
*     AND abkrs EQ p_abkrs.

  SORT i_pa0001 BY pernr begda DESCENDING.
  DELETE ADJACENT DUPLICATES FROM i_pa0001 COMPARING pernr.
  SORT i_pa0001 BY orgeh pernr.



  LOOP AT i_pa0001 INTO fs_pa0001.

*& Reading of the Payresult for all the Periods
    REFRESH:
      it_rgdir,
      i_rgdir.
    CLEAR:fs_rgdir.
    CALL FUNCTION 'CU_READ_RGDIR'
      EXPORTING
        persnr          = fs_pa0001-pernr
      TABLES
        in_rgdir        = it_rgdir
      EXCEPTIONS
        no_record_found = 1
        OTHERS          = 2.
    IF sy-subrc = 0.
      CALL FUNCTION 'PYXX_GET_RELID_FROM_PERNR'
        EXPORTING
          employee                    = fs_pa0001-pernr
        IMPORTING
          relid                       = lv_relid
          molga                       = lv_molga
        EXCEPTIONS
          error_reading_infotype_0001 = 1
          error_reading_molga         = 2
          error_reading_relid         = 3
          OTHERS                      = 4.
      IF sy-subrc NE 0.
      ENDIF.
      SELECT SINGLE typename
               FROM t52relid
               INTO lv_type
              WHERE relid EQ lv_relid
                AND tabname = 'PCL2'.
      IF sy-subrc NE 0.
        lv_relid = 'IN'.
        lv_type = 'PAYIN_RESULT'.
      ENDIF.
      lv_typename = lv_type.
     CREATE DATA ref_payresult TYPE (lv_typename).
      ASSIGN ref_payresult->* TO <payresult>.
*      SRTZA--Status Of records.
*      SRTZA = 'A' --Current Result.
      DELETE it_rgdir WHERE srtza NE 'A'.
* PAYTY --> Payment Type ( Regular or Bonus)
* PAYTY =  SPACE --'Regular Payroll'.
* PAYTY = 'B'   --> 'Bonus'.
      LOOP AT it_rgdir INTO fs_rgdir WHERE payty = ''
                                     AND fpbeg GE v_begda
                                     AND fpend LE v_endda.
      APPEND fs_rgdir TO i_rgdir.
      ENDLOOP.                       " LOOP AT it_rgdir
      SORT i_rgdir BY seqnr DESCENDING.
      CLEAR: lv_unpaid,lv_paid.
      LOOP AT i_rgdir INTO fs_rgdir.
        CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
          EXPORTING
            clusterid                    = lv_relid
            employeenumber               = fs_pa0001-pernr
            sequencenumber               = fs_rgdir-seqnr
          CHANGING
            payroll_result               = <payresult>
          EXCEPTIONS
            illegal_isocode_or_clusterid = 1
            error_generating_import      = 2
            import_mismatch_error        = 3
            subpool_dir_full             = 4
            no_read_authority            = 5
            no_record_found              = 6
            versions_do_not_match        = 7
            error_reading_archive        = 8
            error_reading_relid          = 9
            OTHERS                       = 10.

           IF sy-subrc EQ 0.
           ASSIGN COMPONENT 'INTER-RT' OF STRUCTURE <payresult> TO <li_rt>.
              clear fs_pa0001.
           LOOP AT <li_rt> INTO lfs_rt .
*            refresh lfs_rt[].
*            clear lfs_rt.
           if lfs_rt-lgart = '/460'.
           fs_pa0001-betrg = lfs_rt-betrg.
           endif.
           if lfs_rt-lgart = '4101'.
           fs_pa0001-betrg1 = lfs_rt-betrg.
           endif.
           ENDLOOP.
           ENDIF.
           ENDLOOP.
           ENDIF.
           ENDLOOP.

*           on change of fs_pa0001-pernr.
*           clear : fs_pa0001-betrg , fs_pa0001-betrg1.
*           endon.

*          IF sy-subrc EQ 0.
*          ASSIGN COMPONENT 'INTER-RT' OF STRUCTURE <payresult> TO <li_rt>.
*          write /: fs_pa0001-pernr.

*          LOOP AT <li_rt> INTO lfs_rt.
**         write:/ lfs_rt-lgart,30 lfs_rt-betrg.
*          ENDLOOP.
*        ENDIF.
*      ENDLOOP.
*    ENDIF.
*  ENDLOOP.
*ENDFORM.                    "get_pernrs

*loop at i_rgdir into fs_rgdir.
*  wapay-pernr = fs_pa0001-pernr.
*  wapay-lgart = lfs_rt-lgart.
*  wapay-betrg = lfs_rt-betrg.
*  append wapay to tabpay.
*  endloop.
*&---------------------------------------------------------------------
*&      Form  get_period
*&---------------------------------------------------------------------
* This subroutine is used to calculate the period range
*----------------------------------------------------------------------
* There are no interface parameters are there to pass
*----------------------------------------------------------------------


 format color = 4.
 WRITE:/.
 WRITE:/(28)'Salary Slip Of The Month Of:',W_FINAL-MONAM.
 WRITE:/1(15)'DEPT:',W_FINAL-ORGTX.
 ULINE.
* endif.
 WRITE:/1(5)'S.No',6(6)'Code',20(25)'Name',40(30)'Days   OB EL   OB CL   OB MD'.
 WRITE:/40(30)'Worked EL TKN  CL TKN  MD TKN', 75(10)'L-W/O',85(10)'Net Days',110(10) 'NET SALARY',125(15) 'SIGNATURE'.
 ULINE.

 LOOP AT TABFINAL INTO W_FINAL.

* format color = 4.
 WRITE:/6(8) W_FINAL-PERNR ,20(25) W_FINAL-ENAME, 40(2) W_FINAL-DAYWORK,
 47(4) W_FINAL-OPNEL,55(4) W_FINAL-OPNCL,63(4) W_FINAL-OPNSL.
 WRITE:/47(4) W_FINAL-sel,55(4) W_FINAL-scl,65(2) W_FINAL-sSL,75(3) W_FINAL-sLWP,83(10) W_FINAL-net1.
 uline.
 format color = 2 inverse.
 WRITE:/6(15)'Father/Husband Name',21(1)':',W_FINAL-FAVOR,W_FINAL-FANAM.
 WRITE:/6(15)'Date Of Joining',21(1)':', W_FINAL-BEGDA,53(10)'PF no.',63(20) W_FINAL-EEPFN.
 WRITE:/6(15)'DESIGNATION',21(1)':', W_FINAL-STLTX,53(10)'ESI no.',63(20) W_FINAL-ESINO.
 uline.
* WRITE:/20(20)'STIPEND', 40(10) W_FINAL-ASTP,53(20)'STIPEND DUE',73(10) W_FINAL-STP_d,85(20)'WELFARE FUND',100(10) W_FINAL-welfare.
 WRITE:/20(20)'BASIC',40(10) W_FINAL-ABAS, 53(20)'BASIC DUE',73(10) W_FINAL-bas_d,85(20)'WELFARE FUND',100(10) W_FINAL-welfare.
 WRITE:/20(20)'HRA', 40(10) W_FINAL-AHR, 53(20)'HRA DUE',73(10) W_FINAL-hr_d,85(20)'INCOME',100(10) fs_pa0001-betrg .
 WRITE:/20(20)'CONVEYANCE', 40(10) W_FINAL-ACONY,53(20)'CONVEYANCE DUE',73(10) W_FINAL-CONY_d,85(20)'EMPLOYEE PF',100(10) W_FINAL-PF.
 WRITE:/20(20)'UNIFORM ALWN', 40(10) W_FINAL-AUNIF,53(20)'UNIFORM DUE',73(10) W_FINAL-UNIF_d,85(20)'EMPLOYEE ESI',100(10) W_FINAL-ESI.
 WRITE:/20(20)'SPECIAL ALW',40(10) W_FINAL-ASPEC,53(20)'SPECIAL ALW',73(10) W_FINAL-SPEC_d,85(20)'ADVANCES',100(10) fs_pa0001-betrg1 .
 WRITE:/20(20)'ALW',40(10) W_FINAL-AALWN,53(20)'ALW',73(10) W_FINAL-alwn_d.
 WRITE:/20(20)'MEDICAL ALW',40(10) W_FINAL-AMED,53(20)'MEDICAL ALW',73(10) W_FINAL-med_d,100(20) W_FINAL-NETSAL.
 WRITE:/20(20)'TRANSPORT ALW',40(10) W_FINAL-ATRNP,53(20)'TRANSPORT ALW',73(10) W_FINAL-trnp_d.
 WRITE:/20(20)'HELPER ALW',40(10) W_FINAL-AHEP,53(20)'HELPER ALW',73(10) W_FINAL-hep_d.
 WRITE:/20(20)'CHILD EDU ALW',40(10) W_FINAL-ACHD,53(20)'CHILD EDU ALW',73(10) W_FINAL-chd_d.
 WRITE:/20(20)'CITY COMPENSATORY',40(10) W_FINAL-ACTY,53(20)'CITY COMPENSATORY',73(10) W_FINAL-cty_d.
 WRITE:/20(20)'CHAMBA ALWN', 40(10) W_FINAL-ACHMBA,53(20)'CHAMBA ALWN DUE',73(10) W_FINAL-CHMBA_d.
 WRITE:/20(20)'FOOD ALWN', 40(10) W_FINAL-AFOD,53(20)'FOOD ALWN DUE',73(10) W_FINAL-FOD_d.
 format color = 5 inverse off.
 WRITE:/20(20)'GROSS SALARY',40(10) W_FINAL-GRS,53(20)'SALARY DUE',73(10) W_FINAL-SALARYDUE.
 WRITE:/.
 WRITE:/.
 ENDLOOP.
ENDFORM.

Edited by: AKSHAYA A on May 20, 2009 1:46 PM

Edited by: AKSHAYA A on May 20, 2009 1:48 PM

Read only

0 Likes
2,108

Hi,

Just before assign,refresh table and before loop clear work area.

IF sy-subrc EQ 0.

refresh li_rt[].

ASSIGN COMPONENT 'INTER-RT' OF STRUCTURE <payresult> TO <li_rt>.

clear lfs_rt.

LOOP AT <li_rt> INTO lfs_rt .

Read only

Former Member
0 Likes
2,108

Dear Akshaya,

Its simple just clear the work area after the data of the first employee is displayed. i.e. clear work area after the end of first loop pass.

Read only

Former Member
0 Likes
2,108

***********************************************************************
*              Types Declaration                                      *
***********************************************************************
TYPES: BEGIN OF ty_pa0001,
         pernr TYPE pa0001-pernr,
         begda TYPE pa0001-begda,
         orgeh TYPE pa0001-orgeh,
         ename TYPE pa0001-ename,
   betrg TYPE netwr,
          betrg1 TYPE netwr,

       END OF ty_pa0001.
TYPES: BEGIN OF ty_output,
        sno TYPE i,
        orgeh TYPE pa0001-orgeh,
        orgtx TYPE t527x-orgtx,
        pernr TYPE pa0001-pernr,
        ename TYPE pa0001-ename,
        lgart TYPE pa0008-lga01,
        betrg TYPE netwr,
        betrg1 TYPE netwr,
       END OF ty_output.
***********************************************************************
*         Internal Tables Declaration                                 *
***********************************************************************
DATA i_pa0001 TYPE STANDARD TABLE OF ty_pa0001 with header line.
DATA: it_rgdir   TYPE STANDARD TABLE OF pc261.
DATA: i_rgdir    TYPE STANDARD TABLE OF pc261.
DATA i_output TYPE STANDARD TABLE OF ty_output with header line.
*& Header structure declaration
DATA fs_pa0001 TYPE ty_pa0001.
DATA: fs_rgdir    TYPE pc261.
***********************************************************************
*              Variable Declaration                                   *
***********************************************************************
DATA:
  v_begda      TYPE begda,
  v_endda      TYPE endda,
  v_atext      TYPE t549t-atext,
  v_error      TYPE c.
DATA: v_mname(15).
DATA: v_mname2(20).
***********************************************************************
*              Constants Declaration                                  *
***********************************************************************
CONSTANTS:
 c_x TYPE c VALUE 'X'.
***********************************************************************
*              SELECTION SCREEN                                       *
***********************************************************************
**********************************************************************
***********************************************************************
*               START-OF-SELECTION EVENT                              *
***********************************************************************
START-OF-SELECTION.
* Getting the starting and ending date of the period.
  PERFORM get_period.
*& Select the Employees.
  PERFORM get_pernrs.
END-OF-SELECTION.
*&---------------------------------------------------------------------
*&      Form  get_pernrs
*&---------------------------------------------------------------------
* This subroutine is used to get the amount to pay.
*----------------------------------------------------------------------
* There are no interface parameters are there to pass
*----------------------------------------------------------------------

FORM get_period .
  SELECT SINGLE begda
                endda
           INTO (v_begda,
                 v_endda)
           FROM t549q
          WHERE permo = '01'
            AND pabrj = yr
            AND pabrp = mon.
ENDFORM.                               " Get_period

FORM get_pernrs .
  FIELD-SYMBOLS:
      <payresult>     TYPE ANY,
      <lv_payresult>  TYPE h99_clst_s_payresult,
      <lv_versc>      TYPE pc202,
      <li_rt>         TYPE hrpay99_rt,
      <li_ddntk>      TYPE hrpay99_ddntk.
  DATA: lfs_rt        TYPE pc207.
  DATA: lfs_ddntk     TYPE pc23e.
  DATA: lv_relid      TYPE t500l-relid.
  DATA: lv_type       TYPE t52relid-typename.
  DATA: lv_typename   TYPE hrpclx_type.
  DATA: ref_payresult TYPE REF TO data.
  DATA: lv_molga      TYPE molga.
  DATA: lv_type_1     TYPE tadir-obj_name.
  DATA: lv_tadir      TYPE tadir-obj_name.
  DATA: lv_unpaid     TYPE ktsol.
  DATA: lv_paid       TYPE ktsol.
*& Reading all the Personnel Numbers
 SELECT pernr
         begda
         orgeh
         ename
   FROM pa0001
   INTO TABLE i_pa0001
   WHERE endda GE v_begda
     AND begda LE v_endda
     and pernr in per.
*     AND abkrs EQ p_abkrs.

  SORT i_pa0001 BY pernr begda DESCENDING.
  DELETE ADJACENT DUPLICATES FROM i_pa0001 COMPARING pernr.
  SORT i_pa0001 BY orgeh pernr.



  LOOP AT i_pa0001 INTO fs_pa0001.

*& Reading of the Payresult for all the Periods
    REFRESH:
      it_rgdir,
      i_rgdir.
    CLEAR:fs_rgdir.
    CALL FUNCTION 'CU_READ_RGDIR'
      EXPORTING
        persnr          = fs_pa0001-pernr
      TABLES
        in_rgdir        = it_rgdir
      EXCEPTIONS
        no_record_found = 1
        OTHERS          = 2.
    IF sy-subrc = 0.
      CALL FUNCTION 'PYXX_GET_RELID_FROM_PERNR'
        EXPORTING
          employee                    = fs_pa0001-pernr
        IMPORTING
          relid                       = lv_relid
          molga                       = lv_molga
        EXCEPTIONS
          error_reading_infotype_0001 = 1
          error_reading_molga         = 2
          error_reading_relid         = 3
          OTHERS                      = 4.
      IF sy-subrc NE 0.
      ENDIF.
      SELECT SINGLE typename
               FROM t52relid
               INTO lv_type
              WHERE relid EQ lv_relid
                AND tabname = 'PCL2'.
      IF sy-subrc NE 0.
        lv_relid = 'IN'.
        lv_type = 'PAYIN_RESULT'.
      ENDIF.
      lv_typename = lv_type.
     CREATE DATA ref_payresult TYPE (lv_typename).
      ASSIGN ref_payresult->* TO <payresult>.
*      SRTZA--Status Of records.
*      SRTZA = 'A' --Current Result.
      DELETE it_rgdir WHERE srtza NE 'A'.
* PAYTY --> Payment Type ( Regular or Bonus)
* PAYTY =  SPACE --'Regular Payroll'.
* PAYTY = 'B'   --> 'Bonus'.
      LOOP AT it_rgdir INTO fs_rgdir WHERE payty = ''
                                     AND fpbeg GE v_begda
                                     AND fpend LE v_endda.
      APPEND fs_rgdir TO i_rgdir.
      ENDLOOP.                       " LOOP AT it_rgdir
      SORT i_rgdir BY seqnr DESCENDING.
      CLEAR: lv_unpaid,lv_paid.
      LOOP AT i_rgdir INTO fs_rgdir.
        CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
          EXPORTING
            clusterid                    = lv_relid
            employeenumber               = fs_pa0001-pernr
            sequencenumber               = fs_rgdir-seqnr
          CHANGING
            payroll_result               = <payresult>
          EXCEPTIONS
            illegal_isocode_or_clusterid = 1
            error_generating_import      = 2
            import_mismatch_error        = 3
            subpool_dir_full             = 4
            no_read_authority            = 5
            no_record_found              = 6
            versions_do_not_match        = 7
            error_reading_archive        = 8
            error_reading_relid          = 9
            OTHERS                       = 10.

           IF sy-subrc EQ 0.
           ASSIGN COMPONENT 'INTER-RT' OF STRUCTURE <payresult> TO <li_rt>.
              clear fs_pa0001.
           LOOP AT <li_rt> INTO lfs_rt .
*            refresh lfs_rt[].
*            clear lfs_rt.
           if lfs_rt-lgart = '/460'.
           fs_pa0001-betrg = lfs_rt-betrg.
           endif.
           if lfs_rt-lgart = '4101'.
           fs_pa0001-betrg1 = lfs_rt-betrg.
           endif.
           ENDLOOP.
           ENDIF.
           ENDLOOP.
           ENDIF.
           ENDLOOP.






 LOOP AT TABFINAL INTO W_FINAL.

 WRITE:/6(8) W_FINAL-PERNR ,20(25) W_FINAL-ENAME,

 ENDLOOP.
ENDFORM.
Read only

0 Likes
2,108

hi,

had u tried my previous solution.

do this


 LOOP AT TABFINAL INTO W_FINAL.

 WRITE:/6(8) W_FINAL-PERNR ,20(25) W_FINAL-ENAME,

 clear w_final .
 ENDLOOP.

Read only

0 Likes
2,108

thanks monica,

cleared work area , i think there is some other problem.

and

not able to write code in correct format even.

Read only

0 Likes
2,108

IT IS BCAUSE UR CODE EXCEEDING 15000 CHARACTERS... OTHERWISE ITS CORRECT

Read only

0 Likes
2,108

ok monica, got it.

Read only

0 Likes
2,108

Hi,

LOOP AT <li_rt> INTO lfs_rt .
*            refresh lfs_rt[].
*            clear lfs_rt.
            IF lfs_rt-lgart = '/460'.
              fs_pa0001-betrg = lfs_rt-betrg.
            ENDIF.
            IF lfs_rt-lgart = '4101'.
              fs_pa0001-betrg1 = lfs_rt-betrg.
            ENDIF.
          ENDLOOP.

in this loop you are assigning value for betrg1 in fs_pa0001.

but what are you doing with this assignment... what exactly is the purpose of it... is it to update the table tabfinal or to modify the table i_pa0001... if the record has to be appended to tabfinal or to any other table you have to write code after this loop so that the loop has some meaning...

hope it will resolve the issue

Regards,

Siddarth

Read only

0 Likes
2,108

ok let me explain..

i m using function modules for payroll result data corresponding to wage type '/460' and '4101'.

now i want this data to be in my final table i.e tabfinal

so that i can hav my final data in one internal table. how to achieve this....

Read only

0 Likes
2,108

can anyone tell?