FUNCTION zgp_extract_pa0008.
*"----------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     VALUE(I_REQUNR) TYPE  SRSC_S_IF_SIMPLE-REQUNR
*"     VALUE(I_DSOURCE) TYPE  SRSC_S_IF_SIMPLE-DSOURCE OPTIONAL
*"     VALUE(I_MAXSIZE) TYPE  SRSC_S_IF_SIMPLE-MAXSIZE OPTIONAL
*"     VALUE(I_INITFLAG) TYPE  SRSC_S_IF_SIMPLE-INITFLAG OPTIONAL
*"     VALUE(I_READ_ONLY) TYPE  SRSC_S_IF_SIMPLE-READONLY OPTIONAL
*"     VALUE(I_REMOTE_CALL) TYPE SBIWA_FLAG DEF. SBIWA_C_FLAG_OFF
*"  TABLES
*"      I_T_SELECT TYPE  SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL
*"      I_T_FIELDS TYPE  SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL
*"      E_T_DATA STRUCTURE  ZHRSPA0008 OPTIONAL
*"  EXCEPTIONS
*"      NO_MORE_DATA
*"      ERROR_PASSED_TO_MESS_HANDLER
*"----------------------------------------------------------------

* Auxiliary Selection criteria structure
DATA: l_s_select TYPE srsc_s_select.

DATA: BEGIN OF ppbwla OCCURS 20.
        INCLUDE STRUCTURE pbwla.
DATA:   END OF ppbwla.

DATA: lt_pa0008 TYPE TABLE OF p0008,

      lt_pp0008 TYPE TABLE OF p0008,
      lt_pp0001 TYPE TABLE OF p0001,
      lt_pp0007 TYPE TABLE OF p0007,

      ls_pa0008 LIKE LINE OF lt_pa0008,
      ls_ppbwla LIKE LINE OF ppbwla,

      ls_result LIKE LINE OF e_t_data,

      lv_count TYPE i.

* Maximum number of lines for DB table
STATICS: s_s_if TYPE srsc_s_if_simple,

* counter
        s_counter_datapakid LIKE sy-tabix,

* cursor
        s_cursor TYPE cursor.

RANGES: lr_pernr FOR pa0008-pernr.


* Initialization mode (first call by SAPI) or data transfer mode
* (following calls) ?
IF i_initflag = sbiwa_c_flag_on.

******************************************************************
* Initialization: check input parameters
*                 buffer input parameters
*                 prepare data selection
******************************************************************

* Check DataSource validity
   CASE i_dsource.
      WHEN 'HR008TF1'.
      WHEN OTHERS.
         IF 1 = 2. MESSAGE e009(r3). ENDIF.
* this is a typical log call. Please write every error message 
* like this
         log_write 'E'                  "message type
                   'R3'                 "message class
                   '009'                "message number
                   i_dsource   "message variable 1
                   ' '.                 "message variable 2
         RAISE error_passed_to_mess_handler.
   ENDCASE.

   APPEND LINES OF i_t_select TO s_s_if-t_select.

* Fill parameter buffer for data extraction calls
   s_s_if-requnr    = i_requnr.
   s_s_if-dsource   = i_dsource.
   s_s_if-maxsize   = i_maxsize.

   FREE lt_pa0008.

* Fill field list table for an optimized select statement
* (in case that there is no 1:1 relation between InfoSource fields
* and database table fields this may be far from beeing trivial)
    APPEND LINES OF i_t_fields TO s_s_if-t_fields.

ELSE.                 "Initialization mode or data extraction ?

******************************************************************
* Data transfer: First Call      OPEN CURSOR + FETCH
*                Following Calls FETCH only
******************************************************************

* First data package -> OPEN CURSOR
   IF s_counter_datapakid = 0.
      LOOP AT s_s_if-t_select INTO l_s_select 
         WHERE fieldnm = 'PERNR'.
   
         MOVE-CORRESPONDING l_s_select TO lr_pernr.
         APPEND lr_pernr.
      ENDLOOP.

* Initialisierung notwendig? --> Prfen
      SELECT * FROM pa0008 
         INTO CORRESPONDING FIELDS OF TABLE lt_pa0008
         WHERE pernr IN lr_pernr
         ORDER BY pernr ASCENDING.
   ENDIF.                             "First data package ?

* Selektion/Extraktion

* Fr jeden Datensatz in IT 0008
   LOOP AT lt_pa0008 INTO ls_pa0008.
      CLEAR ls_result.

      IF ls_pa0008-lga06 IS NOT INITIAL.
         lv_count = 6.
      ELSEIF ls_pa0008-lga05 IS NOT INITIAL.
         lv_count = 5.
      ELSEIF ls_pa0008-lga04 IS NOT INITIAL.
         lv_count = 4.
      ELSEIF ls_pa0008-lga03 IS NOT INITIAL.
         lv_count = 3.
      ELSEIF ls_pa0008-lga02 IS NOT INITIAL.
         lv_count = 2. 
      ELSEIF ls_pa0008-lga01 IS NOT INITIAL.
         lv_count = 1.
      ENDIF.

      DO lv_count TIMES VARYING ls_result-lgart 
                           FROM ls_pa0008-lga01
                           NEXT ls_pa0008-lga02
                        VARYING ls_result-betrg 
                           FROM ls_pa0008-bet01
                           NEXT ls_pa0008-bet02
                        VARYING ls_result-indbw
                           FROM ls_pa0008-ind01
                           NEXT ls_pa0008-ind02.
         MOVE-CORRESPONDING ls_pa0008 TO ls_result.

         IF ls_result-indbw IS NOT INITIAL.

            FREE lt_pp0001.
            FREE lt_pp0007.
            FREE lt_pp0008.

            CALL FUNCTION 'RP_FILL_WAGE_TYPE_TABLE_EXT'
            EXPORTING
              begda                        = ls_result-begda
              endda                        = ls_result-endda
              infty                        = '0008'
              objps                        = ls_result-objps
              pernr                        = ls_result-pernr
              subty                        = ls_result-subty
            TABLES
              pp0001                       = lt_pp0001
              pp0007                       = lt_pp0007
              pp0008                       = lt_pp0008
              ppbwla                       = ppbwla
            EXCEPTIONS
              error_at_indirect_evaluation = 1
              OTHERS                       = 2.

            LOOP AT ppbwla INTO ls_ppbwla.
               ls_result-betrg = ls_ppbwla-betrg.
               ls_result-lgart = ls_ppbwla-lgart.
               ls_result-indbw = ls_ppbwla-indbw.

               APPEND ls_result TO e_t_data.
            ENDLOOP.

            EXIT.
         ELSE.
            APPEND ls_result TO e_t_data.
         ENDIF.
      ENDDO.
   ENDLOOP.

  IF sy-subrc > 0.
     RAISE no_more_data. " ABBRUCHKRITERIUM!!!
  ENDIF.
     s_counter_datapakid = s_counter_datapakid + 1.
  ENDIF.              "Initialization mode or data extraction ?

ENDFUNCTION.
