Datasources validation

Hi Bi Experts.
I have an issue... how can I be sure than each Bi Content Datasource implemented, are extracting correctly the information from the ECC system? Is there a method to verify that the information in BW is exactly the same than in ECC system?, I'm not talking about the RSMON transaction, I mean the information in the infoproviders (for example, inventory or sales).
Thanks in advance.

You can run the reports in BW for a period of time and cross check the  values in R/3 against relevant Tables or
Execute the DS in RSA3 for certain selections in R/3 and export to excel and cross check the contents of the targets(cube/dso) in BW with same selections and export to excel.
You can write small excel formulas to compare the values from both R/3 and BW
You can also check
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/docs/library/uuid/7a5ee147-0501-0010-0a9d-f7abcba36b14
Edited by: Srinivas on Sep 20, 2010 9:25 PM

Similar Messages

  • Failing the datasource validation

    I am trying to install LiveCycle ES on Webspsher and SQL server. I am getting the following errors when validating the datasource. Is there a way to find out what is causing the error.
    Validating datasource...
    IDP_DS Fail
    Name:IDP_DS
    JNDI:
    http://NTW72:9082/adobe-lcm-lcvalidator/validate?validation_type=DS_validation&DS_jndi_nam e=IDP_DS
    ALC-LCM-120-300: Data source settings failed validation.
    RM_DS Fail
    Name:EDC_DS
    JNDI:
    http://NTW72:9082/adobe-lcm-lcvalidator/validate?validation_type=DS_validation&DS_jndi_nam e=EDC_DS
    ALC-LCM-120-300: Data source settings failed validation.

    Found the reason in the Websphere log. Should restart websphere after changing the j2c authentication data.

  • Error by creating datasource in r/3

    Hi,
    i have a problem with creating a datasouce in r/3.
    Error message :
    Units field WAERS for field VERPR of DataSource ZBW_MBEW is hidden
    I use for extraction function module with extraction structure. There is in this structure field VERPR, which is CURR with reference field WAERS in another table.
    Thanks for help
    Radka

    Yes, i have done thos before. But I have to change code for extracion function module, but i don't know how....
    FUNCTION Z_BW_MBEW.
    ""Local interface:
    *"  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_CALLMODE) LIKE  ROARCHD200-CALLMODE OPTIONAL
    *"     VALUE(I_REMOTE_CALL) TYPE  SBIWA_FLAG DEFAULT 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  ZBW_MBEW_STRUCT OPTIONAL
    *"  EXCEPTIONS
    *"      NO_MORE_DATA
    *"      ERROR_PASSED_TO_MESS_HANDLER
    Example: DataSource for table SFLIGHT
    TABLES: sflight.
    Auxiliary Selection criteria structure
      DATA: l_s_select TYPE srsc_s_select.
    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.
    Select ranges
    RANGES: l_r_carrid  FOR sflight-carrid,
             l_r_connid  FOR sflight-connid.
    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 'ZBW_MBEW'.
          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.
    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.
    Fill range tables BW will only pass down simple selection criteria
    of the type SIGN = 'I' and OPTION = 'EQ' or OPTION = 'BT'.
         LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'CARRID'.
           MOVE-CORRESPONDING l_s_select TO l_r_carrid.
           APPEND l_r_carrid.
         ENDLOOP.
         LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'CONNID'.
           MOVE-CORRESPONDING l_s_select TO l_r_connid.
           APPEND l_r_connid.
         ENDLOOP.
    Determine number of database records to be read per FETCH statement
    from input parameter I_MAXSIZE. If there is a one to one relation
    between DataSource table lines and database entries, this is trivial.
    In other cases, it may be impossible and some estimated value has to
    be determined.
          OPEN CURSOR WITH HOLD s_cursor FOR
          SELECT (s_s_if-t_fields) FROM mbew.
        ENDIF.                             "First data package ?
    Fetch records into interface table.
      named E_T_'Name of extract structure'.
        FETCH NEXT CURSOR s_cursor
                   APPENDING CORRESPONDING FIELDS
                   OF TABLE e_t_data
                   PACKAGE SIZE s_s_if-maxsize.
        IF sy-subrc <> 0.
          CLOSE CURSOR s_cursor.
          RAISE no_more_data.
        ENDIF.
        s_counter_datapakid = s_counter_datapakid + 1.
      ENDIF.              "Initialization mode or data extraction ?
    ENDFUNCTION.

  • Can anybody explain me creating Generic Datasource using Function module?

    Hi,
    can anybody explain me creating Generic Datasource using Function module?
    Thax in advance,
    Ravi.

    Generic Extraction via Function Module
    /people/siegfried.szameitat/blog/2005/09/29/generic-extraction-via-function-module
    1. Create s structure with the fields that you need from the 4 tables . Activate.
    2. Goto SE 80 Select The Function Group , Copy , Select the Function module
    " RSAX_BIW_GET_DATA_SIMPLE " and Give a New name starting With
    Y or Z .
    3. SE37 ->Your Function module name -> Change , In table tab give your structure
    name by deleting the associated type given in " E_T_DATA " .
    4. Now select source code and Do the coding . Give Data source name in Coding .
    In your case you have to take data from more that 1 table .
    5. Activate the Function Group .
    6. In RSO2 Create the Data source , Give the Function Module Name , And Save.
    7. RSA3 -> Give data source name and Check for the Records .
    Creation of custom datasource. (Using function module)
    <b>is an example</b>
    1.Create a function group .
    2. Structure ZTEST123
    ZMATNR MATNR CHAR 18 0 Material Number
    ZMTART MTART CHAR 4 0 Material type
    ZMBRSH MBRSH CHAR 1 0 Industry sector
    ZMATKL MATKL CHAR 9 0 Material group
    ZBISMT BISMT CHAR 18 0 Old material number
    ZMAKTX MAKTX CHAR 40 0 Material description
    3. Create function module (i.e. ZTEST….) .
    FM - YMARA_DATA_TRNS
    FUNCTION YMARA_DATA_TRNS.
    ""Local Interface:
    *" 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
    *" 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 ZTEST123 OPTIONAL
    *" EXCEPTIONS
    *" NO_MORE_DATA
    *" ERROR_PASSED_TO_MESS_HANDLER
    data : ZTEST123 type ZTEST123 occurs 0 with header line.
    Maximum number of lines for DB table
    STATICS: S_S_IF TYPE SRSC_S_IF_SIMPLE,
    S_COUNTER_DATAPAKID LIKE SY-TABIX.
    DATA: begin of t_mara occurs 0,
    ZMATNR type MATNR,
    ZMTART type MTART,
    ZMBRSH type MBRSH,
    ZMATKL type MATKL,
    ZBISMT type BISMT,
    end of t_mara.
    DATA: begin of t_makt occurs 0,
    ZMATNR type MATNR,
    ZMAKTX type MAKTX,
    end of t_makt.
    Initialization mode (first call by SAPI) or data transfer mode
    (following calls) ?
    IF I_INITFLAG = SBIWA_C_FLAG_ON.
    Check DataSource validity
    CASE I_DSOURCE.
    WHEN 'ZZMARA_DATA'.
    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.
    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.
    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.
    Determine number of database records to be read per FETCH statement
    from input parameter I_MAXSIZE. If there is a one to one relation
    between DataSource table lines and database entries, this is trivial.
    In other cases, it may be impossible and some estimated value has to
    be determined.
    select MATNR
    MTART
    MBRSH
    MATKL
    BISMT
    from mara up to 10 rows
    into table t_mara.
    if not t_mara[] is initial.
    select MATNR
    maktx
    from makt
    into table t_makt
    for all entries in t_mara
    where matnr = t_mara-zmatnr.
    endif.
    loop at t_mara.
    read table t_makt with key zmatnr = t_mara-zmatnr.
    ZTEST123-zmatnr = t_mara-zmatnr.
    ZTEST123-ZMTART = t_mara-ZMTART.
    ZTEST123-ZBISMT = t_mara-ZBISMT.
    ZTEST123-ZMBRSH = t_mara-ZMBRSH.
    ZTEST123-ZMATKL = t_mara-ZMATKL.
    ZTEST123-zmaktx = t_makt-zmaktx.
    append ZTEST123.
    clear ZTEST123.
    endloop.
    clear E_T_DATA.
    refresh E_T_DATA.
    E_T_DATA[] = ZTEST123[].
    ENDIF.
    S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.
    ENDIF. "Initialization mode or data extractio
    ENDFUNCTION.
    3. Create the data source using transaction (RSO2).
    4. If structure exists for the table parameter of your function module then ok else create a structure for the table parameter ‘E_T_DATA’.
    5. Test the datasource in R/3 using transaction RSA3.
    6. Transfer the data source to BW –System and replicate it in the BW-System.

  • Problem with Generic datasource from function

    I developed generic datasource from function module.
    But I have problem with the select options.
    First one is order number  OBJECT_ID type char 10. When I input Object_ID = 45755 , no data selected.
    When input 0000045755, one data record selected.
    But I called functiion CONVERSION_EXIT_ALPHA_INPUT to conevet the input data. And I found  45755 was converted to 0000045755, but no record selected.
         LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'OBJECT_ID'.
            MOVE-CORRESPONDING L_S_SELECT TO L_R_OBJECT_ID.
            APPEND L_R_OBJECT_ID.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         = L_R_OBJECT_ID-high
      IMPORTING
       OUTPUT        = L_R_OBJECT_ID-high
             CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         = L_R_OBJECT_ID-low
      IMPORTING
       OUTPUT        = L_R_OBJECT_ID-low
          ENDLOOP.
    Another problem is CREATED_AT, which type is DEC 15,  how could I handle it ?  input is yyyymmdd, I tried to add '000000', but can't select any data.
    Thanks for any help.

    code is :
    FUNCTION ZACTIVITY_PLAN_PARTNER.
    ""Local Interface:
    *"  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 DEFAULT 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  ZACTIVITY_PLAN_PARTNER OPTIONAL
    *"  EXCEPTIONS
    *"      NO_MORE_DATA
    *"      ERROR_PASSED_TO_MESS_HANDLER
    Example: DataSource for table SFLIGHT
      TABLES: CRMD_ORDERADM_H.
    Auxiliary Selection criteria structure
      DATA: L_S_SELECT TYPE SRSC_S_SELECT.
      DATA:   BEGIN OF ACTIVITY,
                       OBJECT_ID       type CRMT_OBJECT_ID_DB,
                       PROCESS_TYPE    type CRMT_PROCESS_TYPE_DB,
                       OBJECT_TYPE     type CRMT_SUBOBJECT_CATEGORY_DB,
                       CREATED_BY      type CRMT_CREATED_BY,
                       CREATED_AT      type CRMT_CREATED_AT,
               END OF ACTIVITY.
      DATA: ZACTIVITY   LIKE TABLE OF ACTIVITY WITH HEADER LINE,
            Zorder   LIKE TABLE OF ZORDER_S WITH HEADER LINE,
            d_start type c length 15,
            d_end type c length 15
    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.
    Select ranges
      RANGES: L_R_OBJECT_ID FOR CRMD_ORDERADM_H-OBJECT_ID,
              L_R_CREATED_AT FOR CRMD_ORDERADM_H-CREATED_AT,
              L_R_date for ZACTIVITY_PLAN_PARTNER-ZPLAN_DAT.
    Initialization mode (first call by SAPI) or data transfer mode
    (following calls) ?
      IF I_INITFLAG = SBIWA_C_FLAG_ON.
    Check DataSource validity
        CASE I_DSOURCE.
          WHEN 'ZACTIVITY_PLAN_PARTNER'.
          WHEN OTHERS.
            IF 1 = 2. MESSAGE E009(R3). ENDIF.
    this is a typical log call. Please write every error message like this
            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.
        APPEND LINES OF I_T_FIELDS TO S_S_IF-T_FIELDS.
      ELSE.                 "Initialization mode or data extraction ?
    First data package -> OPEN CURSOR
        IF S_COUNTER_DATAPAKID = 0.
          LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'OBJECT_ID'.
            MOVE-CORRESPONDING L_S_SELECT TO L_R_OBJECT_ID.
            APPEND L_R_OBJECT_ID.
         ENDLOOP.
    if  L_R_OBJECT_ID-option is initial.
      L_R_OBJECT_ID-option = 'EQ'.
      L_R_OBJECT_ID-sign ='I'.
      endif.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         = L_R_OBJECT_ID-high
      IMPORTING
       OUTPUT        = L_R_OBJECT_ID-high
             CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT         = L_R_OBJECT_ID-low
      IMPORTING
       OUTPUT        = L_R_OBJECT_ID-low
          LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'CREATED_AT'.
            MOVE-CORRESPONDING L_S_SELECT TO L_R_CREATED_AT.
            APPEND L_R_CREATED_AT.
          ENDLOOP.
          OPEN CURSOR WITH HOLD S_CURSOR FOR
          SELECT OBJECT_ID FROM CRMD_ORDERADM_H
                                  WHERE OBJECT_ID  IN  L_R_OBJECT_ID
                                  AND          CREATED_AT IN L_R_CREATED_AT    and
                                        PROCESS_TYPE EQ 'Z220'.
        ENDIF.                             "First data package ?
    Fetch records into interface table.
      named E_T_'Name of extract structure'.
        FETCH NEXT CURSOR S_CURSOR
                   APPENDING CORRESPONDING FIELDS
                   OF TABLE E_T_DATA
                   PACKAGE SIZE S_S_IF-MAXSIZE.
        IF SY-SUBRC <> 0.
          CLOSE CURSOR S_CURSOR.
          RAISE NO_MORE_DATA.
        ENDIF.
        S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.
      ENDIF.              "Initialization mode or data extraction ?
    ENDFUNCTION.

  • Generic Datasource with Delta and functionmodule

    Hi together,
    who can help me ??
    Ihave created a generic datasource with function module and
    delta.
    the extractor runs well while i use full update and also initialization.
    If i start the delta extraction, the extractor crashed with short-dump.
    the message is SAPSQL_INVALID_FIELDNAME
    What can i do, and what is wrong.
    regards
    thorsten Weiss

    Hi Roberto,
    here is the code from the function-module:
    FUNCTION zbw_mm_get_eket.
    ""Lokale Schnittstelle:
    *"  IMPORTING
    *"     VALUE(I_REQUNR) TYPE  SBIWA_S_INTERFACE-REQUNR
    *"     VALUE(I_DSOURCE) TYPE  SBIWA_S_INTERFACE-ISOURCE OPTIONAL
    *"     VALUE(I_MAXSIZE) TYPE  SBIWA_S_INTERFACE-MAXSIZE DEFAULT 1000
    *"     VALUE(I_INITFLAG) TYPE  SBIWA_S_INTERFACE-INITFLAG OPTIONAL
    *"     VALUE(I_READ_ONLY) TYPE  SBIW_BOOL DEFAULT SBIW_C_FALSE
    *"  TABLES
    *"      I_T_SELECT TYPE  SBIWA_T_SELECT OPTIONAL
    *"      I_T_FIELDS TYPE  SBIWA_T_FIELDS OPTIONAL
    *"      E_T_DATA OPTIONAL
    *"  EXCEPTIONS
    *"      NO_MORE_DATA
    *"      ERROR_PASSED_TO_MESS_HANDLER
      INCLUDE lrsalk01.
    DataSource for table EKET
      TABLES: zv_mm_eket.
    interne Tabelle für Bearbeitung
      DATA:   itab_0 TYPE TABLE OF zstr_eket WITH HEADER LINE.
      TYPES: BEGIN OF typ_categ,
              j_4kbwef    TYPE atnam,
              /afs/bwel   TYPE j_4kbwef,
             END OF typ_categ.
      DATA: l_s_data_eket  TYPE zstr_eket,
            ld_cat_struct  TYPE j_4kcsgr,
            lt_cat_fields  TYPE TABLE OF j_4kcif001,
            ls_cat_fields  TYPE j_4kcif001,
            ls_mara        TYPE mara,
            l_tabix        LIKE sy-tabix,
            itab_cat       TYPE TABLE OF typ_categ ,
            ls_cat         TYPE typ_categ,
            h_feldsize1(8)        TYPE c,"wegen Typ-konflikt im FB
            h_feldsize2(8)        TYPE c."wegen Typ-konflikt im FB
    Auxiliary Selection criteria structure
      DATA: l_s_select TYPE rsselect.
    Maximum number of lines for DB table
      STATICS: s_t_select     LIKE rsselect OCCURS 0 WITH HEADER LINE,
               s_t_fields     LIKE rsfieldsel OCCURS 0 WITH HEADER LINE,
    counter
              s_counter_datapakid LIKE sy-tabix,
    cursor
              s_cursor TYPE cursor.
    Select ranges
      RANGES: l_r_ebeln       FOR zv_mm_eket-ebeln,
              l_r_ebelp       FOR zv_mm_eket-ebelp,
              l_r_bsart       FOR zv_mm_eket-bsart.
    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 'ZDS_V_MM_EKET'.
          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
                      ' function modul was created for DS ' &
                      'ZDS_V_MM_EKET"!'.
            "message variable 2
            RAISE error_passed_to_mess_handler.
        ENDCASE.
        APPEND LINES OF i_t_select TO s_t_select.
    Fill parameter buffer for data extraction calls
       S_T_SELECT-REQUNR    = I_REQUNR.
       S_T_SELECT-DSOURCE   = I_DSOURCE.
       S_T_SELECT-MAXSIZE   = I_MAXSIZE.
    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_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.
    Fill range tables BW will only pass down simple selection criteria
    of the type SIGN = 'I' and OPTION = 'EQ' or OPTION = 'BT'.
          LOOP AT s_t_select INTO l_s_select WHERE fieldnm = 'EBELN'.
            MOVE-CORRESPONDING l_s_select TO l_r_ebeln.
            APPEND l_r_ebeln.
          ENDLOOP.
          LOOP AT s_t_select INTO l_s_select WHERE fieldnm = 'EBELP'.
            MOVE-CORRESPONDING l_s_select TO l_r_ebelp.
            APPEND l_r_ebelp.
          ENDLOOP.
          LOOP AT s_t_select INTO l_s_select WHERE fieldnm = 'BSART'.
            MOVE-CORRESPONDING l_s_select TO l_r_bsart.
            APPEND l_r_bsart.
          ENDLOOP.
    Determine number of database records to be read per FETCH statement
    from input parameter I_MAXSIZE. If there is a one to one relation
    between DataSource table lines and database entries, this is trivial.
    In other cases, it may be impossible and some estimated value has to
    be determined.
          OPEN CURSOR WITH HOLD s_cursor FOR
          SELECT (s_t_fields) FROM zv_mm_eket
          WHERE
          ebeln      IN               l_r_ebeln           AND
          ebelp      IN               l_r_ebelp         AND
          bsart    IN             l_r_bsart.
        ENDIF.                             "First data package ?
    Fetch records into interface table.
      named E_T_'Name of extract structure'.
       FETCH NEXT CURSOR s_cursor
                  APPENDING CORRESPONDING FIELDS
                  OF TABLE e_t_data
                  PACKAGE SIZE i_maxsize.
        FETCH NEXT CURSOR s_cursor
                   APPENDING CORRESPONDING FIELDS
                   OF TABLE itab_0
                   PACKAGE SIZE i_maxsize.
        LOOP AT itab_0 INTO l_s_data_eket.
          l_tabix = sy-tabix.
    Lesen Erstellungsdatum aus EKKO
          SELECT SINGLE aedat FROM ekko INTO l_s_data_eket-sydat
                         WHERE ebeln = l_s_data_eket-ebeln.
    Lesen Partner aus EKPA
          SELECT SINGLE lifn2 FROM ekpa INTO l_s_data_eket-plief
                         WHERE ebeln = l_s_data_eket-ebeln AND
                               ebelp = l_s_data_eket-ebelp AND
                               ekorg = l_s_data_eket-ekorg AND
                               werks = l_s_data_eket-werks .
          IF NOT l_s_data_eket-matnr IS INITIAL .
    *A Lesen material für Kategoriestruktur j_4kcsgr(F001 oder R002)
            CLEAR ls_mara.
            CALL FUNCTION 'J_3A1_LESEN_MARA_SINGLE'
                 EXPORTING
                      i_matnr         = l_s_data_eket-matnr
                 IMPORTING
                      e_mara          = ls_mara
                 EXCEPTIONS
                      param_not_valid = 1
                      OTHERS          = 2.
            IF sy-subrc NE 0.
            ENDIF.
    *E Lesen material für Kategoriestruktur j_4kcsgr(F001 oder R002)
    *A Aufsplitten Bestandskategorie
            REFRESH lt_cat_fields.
            CALL FUNCTION 'J_4KG_SPLIT_CAT'
              EXPORTING
                client                            = sy-mandt
                csgr                              = ls_mara-j_4kcsgr
                cat_appl                          = 'S'
                cat_value                         = l_s_data_eket-j_4kscat
      NECESSARY_SPECIFIED               = ' '
              TABLES
                cat_fields_tab                    = lt_cat_fields
              EXCEPTIONS
                no_category_structure_found       = 1
              OTHERS                            = 2.
            IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
            ELSE."sy-subrc <> 0
    Verarbeitung der Ergebnisse
              LOOP AT lt_cat_fields INTO ls_cat_fields.
                IF ls_cat_fields-j_4kbwef EQ 'BW_CAT_SCONFIG'.
                  l_s_data_eket-zz_bwel_sconfig = ls_cat_fields-j_4kcatv.
                ENDIF.
                IF ls_cat_fields-j_4kbwef EQ 'BW_CAT_CONFIG'.
                  l_s_data_eket-zz_bwel_config = ls_cat_fields-j_4kcatv.
                ENDIF.
                IF ls_cat_fields-j_4kbwef EQ 'BW_CAT_COUNTRY'.
                  l_s_data_eket-j_3abwel_country = ls_cat_fields-j_4kcatv.
                ENDIF.
                IF ls_cat_fields-j_4kbwef EQ 'BW_CAT_COUNTRYGRP'.
                  l_s_data_eket-zz_bwel_coungrp = ls_cat_fields-j_4kcatv.
                ENDIF.
                IF ls_cat_fields-j_4kbwef EQ 'BW_CAT_STOCKTYPE'.
                  l_s_data_eket-zz_bwel_stktype = ls_cat_fields-j_4kcatv.
                ENDIF.
                IF ls_cat_fields-j_4kbwef EQ 'BW_CAT_ORDER'.
                  l_s_data_eket-zz_bwel_order = ls_cat_fields-j_4kcatv.
                ENDIF.
                IF ls_cat_fields-j_4kbwef EQ 'BW_CAT_QUALITY'.
                  l_s_data_eket-j_3abwel_qual = ls_cat_fields-j_4kcatv.
                ENDIF.
              ENDLOOP."lt_cat_fields
            ENDIF.
    *E Aufsplitten Bestandskategorie
    *A Aufsplitten MAtrix
            IF NOT l_s_data_eket-j_3asize IS INITIAL.
              CALL FUNCTION 'J_3A_SPLIT_SIZES'
                   EXPORTING
                        matnr              = l_s_data_eket-matnr
                        j_3asize           = l_s_data_eket-j_3asize
                   IMPORTING
                        j_3akord1          = l_s_data_eket-j_3abwel_color
                        j_3akord2          = h_feldsize1
                        j_3akord3          = h_feldsize2
                   EXCEPTIONS
                        no_grid_determined = 1
                        OTHERS             = 2.
              IF sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
              ELSE.
                l_s_data_eket-zz_bwel_size1 = h_feldsize1.
                l_s_data_eket-zz_bwel_size2 = h_feldsize2.
              ENDIF.
            ENDIF."not l_s_data_eket-J_3ASIZE is initial
    *E Aufsplitten MAtrix
            MODIFY itab_0 FROM l_s_data_eket INDEX l_tabix.
          ENDIF."not l_s_data_eket-matnr is initial
        ENDLOOP.                                                "itab_0
      An Ausgabe-Tabelle übergeben
        APPEND LINES OF itab_0 TO e_t_data.
        IF sy-subrc <> 0.
          CLOSE CURSOR s_cursor.
          RAISE no_more_data.
        ENDIF.
        s_counter_datapakid = s_counter_datapakid + 1.
      ENDIF.              "Initialization mode or data extraction ?
    ENDFUNCTION.
    regards
    thorsten

  • Delta extraction for a generic datasource

    Hi BWers,
    I want put in Delta the extraction of a generic datasource.
    Currently this generic datasource is based on the table VBPA (Sales Document: Partner). Any time field exists.
    We need a time field in order to converse to a Delta extraction. This time field exists in the table VBAP (Sales Document: Item data). In fact two time fields exist: one which is filled at the creation of the sales order (ERDAT), another at the change of the sales order (AEDAT).
    The fields VBELN, POSNR and MANDT are keys in the tables VBAP and VBPA.
    The table VBAP changes when partner functions is created or changed in a sales order (VBELN) :
    - When it is a creation of a new sales order (with new partner functions), a new record is created in VBAP and the field ERDAT (Created on) is filled. The field AEDAT (Changed on) is empty.
    - When is a change of an existing sales order, the corresponding record in VBAP changed, and the field AEDAT is filled. ERDAT stays unchanged.
    In order to converse to the Delta extraction, i need a only one time-field (calendar day) in RSO2 / Generic Delta.
    But there is 2 time-fields ERDAT and AEDAT. So i just need to get AEDAT if it is filled, else if AEDAT is empty I will get ERDAT.
    I would base my datasource on a view between VBPA and VBAP with one field which will be filled by AEDAT or ERDAT (with the conditions below). But it seems it is not possible.
    Can you give me other ideas ?
    Thanks a lot.
    Cheers,
    Vince.

    In order to create a generic delta from two source fields, ERDAT and AEDAT in this case, you're going to have to create your generic extractor from a Function Module. Otherwise you'll only have the standard functionality available to you for creating the generic delta, which allows you to base it on only one column.
    Here's a sample you can use, that was created for VBFA, and change for your DataSource.
    FUNCTION y_docu_flow.
    *"*"Local interface:
    *"  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 DEFAULT 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  YSDS_DOCU_FLOW OPTIONAL
    *"  EXCEPTIONS
    *"      NO_MORE_DATA
    *"      ERROR_PASSED_TO_MESS_HANDLER
    *& Global Data Declarations
    * Type for VBFA Data
      TYPES : BEGIN OF ty_vbfa            ,
                mandt   TYPE vbfa-mandt   ,
                vbelv   TYPE vbfa-vbelv   ,
                posnv   TYPE vbfa-posnv   ,
                vbeln   TYPE vbfa-vbeln   ,
                posnn   TYPE vbfa-posnn   ,
                vbtyp_n TYPE vbfa-vbtyp_n ,
                rfmng   TYPE vbfa-rfmng   ,
                meins   TYPE vbfa-meins   ,
                rfwrt   TYPE vbfa-rfwrt   ,
                waers   TYPE vbfa-waers   ,
                vbtyp_v TYPE vbfa-vbtyp_v ,
                plmin   TYPE vbfa-plmin   ,
                erdat   TYPE vbfa-erdat   ,
                aedat   TYPE vbfa-aedat   ,
              END   OF ty_vbfa            .
    * Internal Tables and Selection Criteria Structure
      DATA : t_vbfa     TYPE STANDARD TABLE OF ty_vbfa ,
             l_s_select TYPE srsc_s_select             .
    * Field Symbols
      FIELD-SYMBOLS : <fs_fields> TYPE rsfieldsel.
    * Constants
      CONSTANTS : c_error_msgty TYPE rslogparms-msgty VALUE 'E'            ,
                  c_error_msgid TYPE rslogparms-msgid VALUE 'YAERO_WTY_VSR',
                  c_error_msgv1 TYPE rslogparms-msgv1 VALUE ' MESSAGE_V1 ' ,
                  c_error_msgv2 TYPE rslogparms-msgv1 VALUE ' MESSAGE_V2 ' ,
                  c_error_msgv3 TYPE rslogparms-msgv1 VALUE ' MESSAGE_V3 ' ,
                  c_error_msgv4 TYPE rslogparms-msgv1 VALUE ' MESSAGE_V4 ' ,
                  c_error_msgno TYPE rslogparms-msgno VALUE 999            ,
                  c_alias(2)    TYPE c                VALUE 'A~'           ,
                  c_vbfa        TYPE dntab-tabname    VALUE 'VBFA'         .
    * Maximum Database Lines, Data Package Counter and Cursor
      STATICS : s_s_if              TYPE srsc_s_if_simple ,
                s_counter_datapakid TYPE sy-tabix         ,
                s_cursor            TYPE cursor           .
    * Select Ranges
      RANGES : r_erdat FOR vbfa-erdat ,
               r_aedat FOR vbfa-aedat ,
               r_vbelv FOR vbfa-vbelv ,
               r_posnv FOR vbfa-posnv ,
               r_vbeln FOR vbfa-vbeln ,
               r_posnn FOR vbfa-posnn .
    *& Processing Logic
    * Refresh Internal Table and Clear work area
      REFRESH: t_vbfa   ,
               e_t_data .
    * Check the Extraction Mode (Delta Initialization Or Delta)
      IF i_initflag EQ sbiwa_c_flag_on.
    *   Determine DataSource Validity
        IF i_dsource NE 'YSDDS_DOCU_FLOW'.
    *     Call Function to Write Log
          CALL FUNCTION 'RSAL_LOG_WRITE'
            EXPORTING
              i_msgty = c_error_msgty
              i_msgid = c_error_msgid
              i_msgno = c_error_msgno
              i_msgv1 = c_error_msgv1
              i_msgv2 = c_error_msgv2
              i_msgv3 = c_error_msgv3
              i_msgv4 = c_error_msgv4.
    *     Raise Exception
          RAISE error_passed_to_mess_handler.
        ENDIF.                  " IF i_dsource NE 'YSDDS_DOCU_FLOW'.
    *   Append the Selection Criteria
        APPEND LINES OF i_t_select TO s_s_if-t_select.
    *   Fill parameter buffer for data extraction calls
        MOVE : i_requnr  TO s_s_if-requnr  ,
               i_dsource TO s_s_if-dsource ,
               i_maxsize TO s_s_if-maxsize .
    *   Append Fields to be Selected
        APPEND LINES OF i_t_fields TO s_s_if-t_fields.
    *   Add the Alias to Fields
        LOOP AT s_s_if-t_fields
          ASSIGNING <fs_fields>.
          CONCATENATE c_alias
                      <fs_fields>-fieldnm
                 INTO <fs_fields>-fieldnm.
          CONDENSE <fs_fields>-fieldnm NO-GAPS.
        ENDLOOP.                " LOOP AT s_s_if-t_fields..
      ELSE.                     " IF i_initflag EQ sbiwa_c_flag_on
    *   For First Data Package, Open Cursor
        IF s_counter_datapakid EQ 0.
    *     Clear Ranges
          CLEAR : r_erdat ,
                  r_aedat ,
                  r_vbelv ,
                  r_posnv ,
                  r_vbeln ,
                  r_posnn .
    *     Fill Selection Ranges
          LOOP AT s_s_if-t_select
            INTO l_s_select.
    *       Determine Selection Range Field Name
            CASE l_s_select-fieldnm.
    *         Created On Date
              WHEN 'ERDAT'.
                MOVE : l_s_select-sign   TO r_erdat-sign   ,
                       l_s_select-option TO r_erdat-option ,
                       l_s_select-low    TO r_erdat-low    ,
                       l_s_select-high   TO r_erdat-high   .
                APPEND r_erdat.
    *           Fill the change date too
                MOVE r_erdat[] TO r_aedat[].
    *         Predecessor Document Number
              WHEN 'VBELV'.
                MOVE : l_s_select-sign   TO r_vbelv-sign   ,
                       l_s_select-option TO r_vbelv-option ,
                       l_s_select-low    TO r_vbelv-low    ,
                       l_s_select-high   TO r_vbelv-high   .
                APPEND r_vbelv.
    *         Predecessor Document Line Item
              WHEN 'POSNV'.
                MOVE : l_s_select-sign   TO r_posnv-sign   ,
                       l_s_select-option TO r_posnv-option ,
                       l_s_select-low    TO r_posnv-low    ,
                       l_s_select-high   TO r_posnv-high   .
                APPEND r_posnv.
    *         Successor Document Number
              WHEN 'VBELN'.
                MOVE : l_s_select-sign   TO r_vbeln-sign   ,
                       l_s_select-option TO r_vbeln-option ,
                       l_s_select-low    TO r_vbeln-low    ,
                       l_s_select-high   TO r_vbeln-high   .
                APPEND r_vbeln.
    *         Successor Document Line Item
              WHEN 'POSNN'.
                MOVE : l_s_select-sign   TO r_posnn-sign   ,
                       l_s_select-option TO r_posnn-option ,
                       l_s_select-low    TO r_posnn-low    ,
                       l_s_select-high   TO r_posnn-high   .
                APPEND r_posnn.
            ENDCASE.            " CASE l_s_select-fieldnm.
          ENDLOOP.              " LOOP AT s_s_if-t_select..
    *     Open Cursor on View to Fetch data
    *     If full load with Selection on Fiscal Year
          IF r_aedat[] IS INITIAL.
    *       Full Extraction
            OPEN CURSOR
            WITH HOLD s_cursor FOR
          SELECT (s_s_if-t_fields)
            FROM vbfa      AS a
            JOIN pnwtyv    AS b
              ON a~vbelv   EQ b~sdvbeln
           WHERE a~vbelv   IN r_vbelv
             AND a~posnv   IN r_posnv
             AND a~vbeln   IN r_vbeln
             AND a~posnn   IN r_posnn
             AND a~rfmng   NE 0
             AND a~erdat   IN r_erdat
             AND b~sdvbeln NE space.
          ELSE.
    *       Delta Extraction Using ERDAT and AEDAT
            OPEN   CURSOR
            WITH   HOLD s_cursor FOR
          SELECT   (s_s_if-t_fields)
            FROM   vbfa      AS a
            JOIN   pnwtyv    AS b
              ON   a~vbelv   EQ b~sdvbeln
           WHERE   a~vbelv   IN r_vbelv
             AND   a~posnv   IN r_posnv
             AND   a~vbeln   IN r_vbeln
             AND   a~posnn   IN r_posnn
             AND   a~rfmng   NE 0
             AND ( a~erdat   IN r_erdat
              OR   a~aedat   IN r_aedat )
             AND   b~sdvbeln NE space.
          ENDIF.                " IF r_aedat[] IS INITIAL
        ENDIF.                  " IF s_counter_datapakid..
    *   Fetch Records into Interface Table
        FETCH NEXT CURSOR s_cursor
             APPENDING CORRESPONDING FIELDS
              OF TABLE t_vbfa
          PACKAGE SIZE s_s_if-maxsize.
    *   No More Data, Raise Exception
        IF sy-subrc NE 0.
    *     Close the Cursor
          CLOSE CURSOR s_cursor.
    *     Raise Exception
          RAISE no_more_data.
        ELSE.
    *     Move Extracted Data to Output Structure
          MOVE t_vbfa[] TO e_t_data[].
    *     Release Memory
          FREE t_vbfa.
    *     Sort Output Structure
          SORT e_t_data BY vbelv
                           posnv
                           vbeln
                           posnn
                           vbtyp_n.
    *     Delete Duplicate Records from Output Structure
          DELETE ADJACENT DUPLICATES
            FROM e_t_data
       COMPARING vbelv
                 posnv
                 vbeln
                 posnn
                 vbtyp_n.
    *     Increment Data Package Number
          s_counter_datapakid = s_counter_datapakid + 1.
        ENDIF.                  " IF sy-subrc NE 0
      ENDIF.                    " IF i_initflag EQ sbiwa_c_flag_on
    ENDFUNCTION.              
    Edited by: Dennis Scoville on Jul 16, 2009 8:29 AM
    Edited by: Dennis Scoville on Jul 16, 2009 8:29 AM

  • Generic Datasource eventhough delta enabled not working

    Hi Experts,
    I have created a Datasource by creating a Function Module and also this function module i copied and did the changes the function module i used as a template is RSAX_BIW_GET_DATA_SIMPLE
    and after creating the thing i have created a generic delta by using LAST_CHANGED_ON date as delta specific field and i have initialized the delta its fine it creating an entry in RSA7
    in my first init load i got 4000 records so immly i have done delta again it brought 4000 but when i checked in RSA7 for delta their are no records but still its brining 4000 records ...but as per my assumption it should not get any records becoz we already got the delta.
    Thanks and regards
    Sreedhar

    Hi
    Even after making changes to code its still bring all the records with each load.
    below i am pasting my code please advise what is that i am doing wrong so that delta is not getting picked up. instead every time its a full load.
    FUNCTION ZRSAX_BIW_GET_DATA_SIMPLE.
    ""Local Interface:
    *"  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 DEFAULT 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 TYPE  ZDPR_DASHBOARD_T OPTIONAL
    *"  EXCEPTIONS
    *"      NO_MORE_DATA
    *"      ERROR_PASSED_TO_MESS_HANDLER
    Example: DataSource for table SFLIGHT
    TABLES: DPR_DASHBOARD.
    Auxiliary Selection criteria structure
      DATA: L_S_SELECT TYPE SRSC_S_SELECT.
    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.
    DATA : LF_OBJECT TYPE EVE_TV_OBJECT_GUID.
    DATA : LF_DATE TYPE DPR_TV_LAST_CHANGE_DATE.
    Select ranges
      RANGES: L_R_OBJECT  FOR LF_OBJECT .
      RANGES: L_R_DATE FOR LF_DATE.
    L_R_CONNID  FOR SFLIGHT-CONNID.
    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 'ZDPREXTRACTION'.
          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.
    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.
    Fill range tables BW will only pass down simple selection criteria
    of the type SIGN = 'I' and OPTION = 'EQ' or OPTION = 'BT'.
         LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'OBJECT_GUID'.
           MOVE-CORRESPONDING L_S_SELECT TO L_R_OBJECT.
           APPEND L_R_OBJECT.
        ENDLOOP.
    LOOP AT g_t_select INTO l_s_select WHERE fieldnm = 'LAST_CHANGE_DATE'.
            MOVE-CORRESPONDING l_s_select TO l_r_date.
            APPEND l_r_date.
          ENDLOOP.
         ENDLOOP.
    Determine number of database records to be read per FETCH statement
    from input parameter I_MAXSIZE. If there is a one to one relation
    between DataSource table lines and database entries, this is trivial.
    In other cases, it may be impossible and some estimated value has to
    be determined.
          OPEN CURSOR WITH HOLD S_CURSOR FOR
          SELECT (S_S_IF-T_FIELDS) FROM  DPR_DASHBOARD
                                   WHERE LAST_CHANGE_DATE in l_R_DATE. "AND
                                           OBJECT_GUID  IN L_R_OBJECT.
    ENDIF.                             "First data package ?
    Fetch records into interface table.
      named E_T_'Name of extract structure'.
        FETCH NEXT CURSOR S_CURSOR
                   APPENDING CORRESPONDING FIELDS
                   OF TABLE E_T_DATA
                   PACKAGE SIZE S_S_IF-MAXSIZE.
        IF SY-SUBRC <> 0.
          CLOSE CURSOR S_CURSOR.
          RAISE NO_MORE_DATA.
        ENDIF.
        S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.
      ENDIF.              "Initialization mode or data extraction ?
    ENDFUNCTION.
    Regards
    Sreedhar
    Message was edited by:
            Sreedhar M

  • Regarding Datasource

    Hi,
       I have a question datasource is nothing but fields consist from a table.
       My requirement has the following has to get fields from 3 different tables., so at datasource how i have to write abap code
      for 3 tables of fields to have at datasource.
    Can anyone please guide me. I know how to check table names for fields at datasource by checking at RSA2 tcode.
    For the above one, can anybody share the solution.
                                   Thanks in advance.

    Hi,
    Here is code to create fuction module based on three tables:
    FUNCTION ZBI_GRNIREP.
    ""Local Interface:
    *"  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 DEFAULT 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  ZBI_GRNIREP_ST OPTIONAL
    *"  EXCEPTIONS
    *"      ERROR_PASSED_TO_MESS_HANDLER
    *"      NO_MORE_DATA
      TYPES : BEGIN OF TYPE_BSIS,
                BUKRS TYPE BSIS-BUKRS,
                BELNR TYPE BSIS-BELNR,
                GJAHR TYPE BSIS-GJAHR,
                BUZEI TYPE BSIS-BUZEI,
                BUDAT TYPE BSIS-BUDAT,
                BLDAT TYPE BSIS-BLDAT,
              END OF TYPE_BSIS,
              BEGIN OF TYPE_BSEG,
                BUKRS TYPE BSEG-BUKRS,
                BELNR TYPE BSEG-BELNR,
                GJAHR TYPE BSEG-GJAHR,
                BUZEI TYPE BSEG-BUZEI,
                EBELN TYPE BSEG-EBELN,
                EBELP TYPE BSEG-EBELP,
                DMBTR TYPE BSEG-DMBTR,
                PSWSL TYPE BSEG-PSWSL,
                HKONT TYPE BSEG-HKONT,
                LIFNR TYPE BSEG-LIFNR,
                PRCTR TYPE BSEG-PRCTR,
                WERKS TYPE BSEG-WERKS,
                SHKZG TYPE BSEG-SHKZG,
              END OF TYPE_BSEG,
              BEGIN OF TYPE_EKKO,
                EBELN TYPE EKKO-EBELN,
                EKORG TYPE EKKO-EKORG,
                BUKRS TYPE EKPO-BUKRS,
                EKGRP TYPE EKKO-EKGRP,
                WAERS TYPE EKKO-WAERS,
                EBELP TYPE EKPO-EBELP,
                KNTTP TYPE EKPO-KNTTP,
              END OF TYPE_EKKO,
             BEGIN OF TYPE_OUT,
              EBELN TYPE BSEG-EBELN,
              EBELP TYPE BSEG-EBELP,
              LOAMT TYPE BSEG-DMBTR,
              PSWSL TYPE BSEG-PSWSL,
              GCAMT TYPE BSEG-DMBTR,
              WAERS TYPE EKKO-WAERS,
              BELNR TYPE BSEG-BELNR,
              BUZEI TYPE BSEG-BUZEI,
              HKONT TYPE BSEG-HKONT,
              LIFNR TYPE BSEG-LIFNR,
              BUDAT TYPE BSIS-BUDAT,
              BLDAT TYPE BSIS-BLDAT,
              BUKRS TYPE BSEG-BUKRS,
              PRCTR TYPE BSEG-PRCTR,
              WERKS TYPE BSEG-WERKS,
              EKORG TYPE EKKO-EKORG,
              EKGRP TYPE EKKO-EKGRP,
              KNTTP TYPE EKPO-KNTTP,
              SHKZG TYPE BSEG-SHKZG,
              GJAHR TYPE BSEG-GJAHR,
              FIYEV TYPE CHAR2,
             END OF TYPE_OUT.
      DATA :  IT_BSIS TYPE STANDARD TABLE OF TYPE_BSIS WITH HEADER LINE,
              IT_BSEG TYPE STANDARD TABLE OF TYPE_BSEG WITH HEADER LINE,
              IT_EKKO TYPE STANDARD TABLE OF TYPE_EKKO WITH HEADER LINE,
              IT_OUT  TYPE STANDARD TABLE OF TYPE_OUT  WITH HEADER LINE.
      DATA : W_INDEX LIKE SY-INDEX,
             FIYEV1 TYPE CHAR2.
      DATA: L_S_SELECT TYPE SRSC_S_SELECT.
    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,
              B_CURSOR TYPE CURSOR,
              C_CURSOR TYPE CURSOR.
      RANGES: L_R_BUDAT FOR BSIS-BUDAT.
    IF I_INITFLAG = SBIWA_C_FLAG_ON.
    Initialization: check input parameters
                    buffer input parameters
                    prepare data selection
    Check DataSource validity
        CASE I_DSOURCE.
          WHEN 'ZBI_GRNIREP_EXT'.
          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.
    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.
    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)
    ELSE.
       IF S_COUNTER_DATAPAKID = 0.
          LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'BUDAT'.
            MOVE-CORRESPONDING L_S_SELECT TO L_R_BUDAT.
            APPEND L_R_BUDAT.
          ENDLOOP.
    Determine number of database records to be read per FETCH statement
    from input parameter I_MAXSIZE. If there is a one to one relation
    between DataSource table lines and database entries, this is trivial.
    In other cases, it may be impossible and some estimated value has to
    be determined.
               OPEN CURSOR WITH HOLD S_CURSOR FOR
          SELECT BELNR
                 BUKRS
                 GJAHR
                 BUZEI
                 BUDAT
                 BLDAT
            FROM BSIS
           WHERE BUDAT IN L_R_BUDAT.
       ENDIF.
           FETCH NEXT CURSOR S_CURSOR
                   APPENDING CORRESPONDING FIELDS
                   OF TABLE IT_BSIS
                   PACKAGE SIZE S_S_IF-MAXSIZE.
        IF SY-SUBRC <> 0.
          CLOSE CURSOR S_CURSOR.
          RAISE NO_MORE_DATA.
        ENDIF.
       IF NOT IT_BSIS[] IS INITIAL.
         SELECT EBELN
                EBELP
                DMBTR
                PSWSL
                BELNR
                GJAHR
                BUZEI
                HKONT
                LIFNR
                BUKRS
                PRCTR
                WERKS
                SHKZG
           FROM BSEG
           INTO CORRESPONDING FIELDS OF TABLE IT_BSEG
           FOR ALL ENTRIES IN IT_BSIS
               WHERE BELNR EQ IT_BSIS-BELNR
                 AND BUKRS EQ IT_BSIS-BUKRS
                 AND GJAHR EQ IT_BSIS-GJAHR
                 AND BUZEI EQ IT_BSIS-BUZEI.
         ENDIF.
         IF NOT IT_BSEG[] IS INITIAL.
                 SELECT EKKO~EBELN
                   EKKO~EKORG
                   EKPO~BUKRS
                   EKKO~EKGRP
                   EKKO~WAERS
                   EKPO~EBELP
                   EKPO~KNTTP
              FROM EKKO
        INNER JOIN EKPO ON EKKOEBELN = EKPOEBELN
        INTO CORRESPONDING FIELDS OF TABLE IT_EKKO
        FOR ALL ENTRIES IN IT_BSEG
             WHERE EKKO~EBELN EQ IT_BSEG-EBELN
               AND EKPO~EBELP EQ IT_BSEG-EBELP.
        ENDIF.
      DELETE IT_BSEG WHERE EBELN IS INITIAL.
      SORT IT_BSIS BY BUKRS BELNR GJAHR BUZEI.
      SORT IT_BSEG BY BUKRS BELNR GJAHR BUZEI.
      SORT IT_EKKO BY EBELN EBELP.
      LOOP AT IT_BSIS.
      LOOP AT IT_BSEG FROM W_INDEX.
       IF IT_BSIS-BUKRS NE IT_BSEG-BUKRS OR
          IT_BSIS-BELNR NE IT_BSEG-BELNR OR
          IT_BSIS-GJAHR NE IT_BSEG-GJAHR OR
          IT_BSIS-BUZEI NE IT_BSEG-BUZEI.
        W_INDEX = SY-TABIX.
        EXIT.
        ENDIF.
            READ TABLE IT_EKKO
                   WITH KEY EBELN = IT_BSEG-EBELN
                            EBELP = IT_BSEG-EBELP.
            IF SY-SUBRC IS INITIAL.
            CALL FUNCTION '/IBS/RB_FI_GET_FISCAL_YEAR_VAR'
              EXPORTING
                I_COMPANY_CODE               = IT_BSEG-BUKRS
             IMPORTING
               E_FISCAL_YEAR_VARIANT        = FIYEV1.
            IF SY-SUBRC IS INITIAL.
             MOVE FIYEV1 TO IT_OUT-FIYEV.
            ENDIF.
            IF IT_BSEG-PSWSL EQ 'USD'.
               MOVE : IT_BSEG-DMBTR TO IT_OUT-GCAMT.
             ELSE.
            ENDIF.
            MOVE :IT_BSEG-EBELN TO IT_OUT-EBELN,
                  IT_BSEG-EBELP TO IT_OUT-EBELP,
                  IT_BSEG-DMBTR TO IT_OUT-LOAMT,
                  IT_BSEG-PSWSL TO IT_OUT-PSWSL,
                  IT_EKKO-WAERS TO IT_OUT-WAERS,
                  IT_BSEG-BELNR TO IT_OUT-BELNR,
                  IT_BSEG-BUZEI TO IT_OUT-BUZEI,
                  IT_BSEG-HKONT TO IT_OUT-HKONT,
                  IT_BSEG-LIFNR TO IT_OUT-LIFNR,
                  IT_BSIS-BUDAT TO IT_OUT-BUDAT,
                  IT_BSIS-BLDAT TO IT_OUT-BLDAT,
                  IT_BSEG-BUKRS TO IT_OUT-BUKRS,
                  IT_BSEG-PRCTR TO IT_OUT-PRCTR,
                  IT_BSEG-WERKS TO IT_OUT-WERKS,
                  IT_EKKO-EKORG TO IT_OUT-EKORG,
                  IT_EKKO-EKGRP TO IT_OUT-EKGRP,
                  IT_EKKO-KNTTP TO IT_OUT-KNTTP,
                  IT_BSEG-SHKZG TO IT_OUT-SHKZG,
                  IT_BSEG-GJAHR TO IT_OUT-GJAHR.
             APPEND IT_OUT.
            ENDIF.
      ENDLOOP.
      ENDLOOP.
        E_T_DATA[] = IT_OUT[].
        S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.
    ENDIF.
    ENDFUNCTION.
    The above code is helpful for your requirement.
    Regards,
    BBC

  • What is the best way, while creating Function Module based extractor

    Hi Friends,
    I am Sreekanth.
    I have created a Functio Module based Extractor,
    To fetch data from COPA tables.
    In this extracton 3 tables are getting involved.
    1) CE3OP01 2) CE4OP01 and 3) CE1OP01.
    Logic required is as follow:
    1) get data from CE3OP01 and for all entries of this data set,
    get data from CE4OP01 and CE1OP01 and finally send the data set to BW after few manupulations.
    I have implemented the whole logic and its working fine in DEVELOPMENT box where data volume is less.
    But the same code is timing out in Quality Box, due to huge volues of data.
    Below I am copying the code that i am using . Any body can suggest me how to proceed further so that my code works with huge volumes of data.
    Now I am getting the time out error while selection data from CE3IOP01 table itself.
    FUNCTION /ds1/c_bw_zds_copa_recon.
    ""Local interface:
    *"  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
    *"  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  /DS1/FI_COPA_RECN OPTIONAL
    *"  EXCEPTIONS
    *"      NO_MORE_DATA
    *"      ERROR_PASSED_TO_MESS_HANDLER
                            PROGRAM INFORMATION                          *
    RIEF ID.......: N/A                                                  *
    PROGRAM.......: /DS1/C_BW_ZDS_COPA_RECON               
    PROGRAM FUNCTION: This Function Module Extracts Cost Center, Company *
    Code, and all Amount fields form CE3OP01 table and  sectaktbo       "
    *     Current profitability segment (CO-PA)                          *
         paobjnr     "     Profitability Segment Number (CO-PA)       *
         pasubnr     "     Profitability segment changes (CO-PA)      *
         bukrs            "     Company Code
         kndnr       "     Customer from CE4Op01 table.               *
    Segrigate one record from CE3Op01 into 93 based on Value fields.    *
    PROGRAM TYPE..Function Module                                        *
    DEV. CLASS..../DS1/MI_01                                             *
    LOGICAL DB.... N/A                                                   *
                   Conventions used in the Program                       *
    *     global variables      --> g_*                                    *
    *     local variables       --> l_*                                    *
    *     constants             --> c_*                                    *
    *     internal tables       --> t_*                                    *
    *     structures            --> x_*                                    *
    *     parameters            --> p_*                                    *
    *     select-options        --> s_*                                    *
    *     ranges                --> r_*                                    *
    *     workarea          --> w_*                                    *
    *     field symbol            --> fs_*                                   *
    Declaration for Interface: Selection criteria
      STATICS: s_s_if TYPE srsc_s_if_simple,
    Maximum number of lines for DB table
      ls_s_if TYPE srsc_s_if_simple, "Static Structure
    counter
              ls_counter_datapakid LIKE sy-tabix,"Static Counter
    cursor
              ls_cursor TYPE cursor,"Static Cursor.
              ls_cursor1 TYPE cursor."Static Cursor.
    *CONSTANTS
      CONSTANTS:  lc_datasource TYPE char14 VALUE 'ZDS_COPA_RECON',
                                                 " Data Source Name
                  lc_msgtype TYPE char1 VALUE 'E',  "message type
                  lc_msgcls  TYPE char2 VALUE 'R3', "message class
                  lc_msgnum  TYPE char3 VALUE '009',"Message Number.
                  lc_001 TYPE char3 VALUE '001',
                  lc_b0 TYPE char2 VALUE 'B0',
                  lc_10 TYPE char2 VALUE '10',
                  lc_01 TYPE char2 VALUE '01',
                  lc_02 TYPE char2 VALUE '02',
                  lc_1 TYPE sy-tabix VALUE 1.
    *Data Declaration.
      DATA: lt_ce3op01  TYPE STANDARD TABLE OF x_ce3op01,
            " Internal table for ce3op01
            lt_ce3op02  TYPE STANDARD TABLE OF x_ce3op01,
            lt_ce4op01  TYPE STANDARD TABLE OF x_ce4op01,
            " Internal table for ce4op01
            lw_ce3op01  TYPE x_ce3op01,
            " Work area for ce3op01
            lw_ce3op02  TYPE x_ce3op01,                         "MOD-002
            lw_ce4op01  TYPE x_ce4op01,
            " Work area for ce4op01
            lw_e_t_data TYPE /ds1/fi_copa_recn,
      " Work area for /ds1/fi_copa_recn.
    *CE1op01
      lt_ce1op01 TYPE STANDARD TABLE OF x_ce1op01,"Internaltable
      lw_ce1op01 TYPE x_ce1op01,"Work area for CE1op01.
    **CE1op01
      lt_fldlist TYPE STANDARD TABLE OF lx_fldlist, "fields list
      lw_fldlist TYPE lx_fldlist,"  FIELDS list work area
      lt_flnmval TYPE STANDARD TABLE OF lx_flnmval,"table for splitting
      lw_flnmval TYPE lx_flnmval,"work area for spilitting
      l_index TYPE i VALUE 1, "to keep track of index.
      l_len   TYPE i,
      l_s_no_recs   TYPE sy-tabix VALUE 99,
      l_s_loop_from        TYPE sy-tabix,     "from "MOD-002
      l_s_loop_to          TYPE sy-tabix,                       "to"MOD-002
      l_norecs             TYPE sy-tabix,                       "MOD-002
      l_count              TYPE sy-tabix.                       "MOD-002
    *Field Symbols.
      FIELD-SYMBOLS:
         <fs_flnmval> TYPE lx_flnmval."Field symbol for fild values
    Selection Ranges
      RANGES:  lr_bukrs      FOR ce4op01-bukrs, " Range for company code
      lr_versi      FOR ce3op01-versi," Range for version
      lr_paledger   FOR ce3op01-paledger,"Range for paledger
      lr_vrgar      FOR ce3op01-vrgar,"Range for vrgar
      lr_gjahr      FOR ce3op01-gjahr,"Range for Fiscal year
      lr_perbl      FOR ce3op01-perbl."Range for perbl
    Initialization mode (first call by SAPI) or data transfer mode
      IF i_initflag = sbiwa_c_flag_on.
    Initialization: check input parameters
                    buffer input parameters
                    prepare data selection
    Check DataSource validity
        IF ls_counter_datapakid = 0.
          CASE i_dsource.
            WHEN lc_datasource.
            WHEN OTHERS.
              IF 1 = 2. MESSAGE e009(r3). ENDIF.                "#EC *
    this is a typical log call. Please write every error message like this
              log_write lc_msgtype "'E'                  "message type
                        lc_msgcls  "'R3'                 "message class
                        lc_msgnum  "'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.
          APPEND LINES OF i_t_fields TO s_s_if-t_fields.
    Fill parameter buffer for data extraction calls
          ls_s_if-requnr    = i_requnr.
          ls_s_if-dsource   = i_dsource.
          ls_s_if-maxsize   = i_maxsize.
          ls_s_if-initflag  = i_initflag.
      Company Code
          LOOP AT s_s_if-t_select  INTO  i_t_select WHERE fieldnm = c_bukrs.
            MOVE: i_t_select-sign   TO lr_bukrs-sign,
                  i_t_select-option TO lr_bukrs-option,
                  i_t_select-low    TO lr_bukrs-low,
                  i_t_select-high   TO lr_bukrs-high.
            APPEND lr_bukrs.
          ENDLOOP.
    *Version (0)
    *SRSC_S_IF_SIMPLE-T_SELECT
          LOOP AT s_s_if-t_select INTO i_t_select WHERE fieldnm = c_versi.
       LOOP AT i_t_select  INTO  s_s_if-t_select WHERE fieldnm = c_versi.
            MOVE: i_t_select-sign   TO lr_versi-sign,
                  i_t_select-option TO lr_versi-option,
                  i_t_select-low    TO lr_versi-low,
                  i_t_select-high   TO lr_versi-high.
            APPEND lr_versi.
          ENDLOOP.
    *Currency Type (company code only)
         LOOP AT s_s_if-t_select INTO i_t_select WHERE fieldnm = c_paledger.
            MOVE: i_t_select-sign   TO lr_paledger-sign,
                  i_t_select-option TO lr_paledger-option.
            IF i_t_select-low = lc_b0.
              MOVE lc_01 TO lr_paledger-low.
            ELSEIF  i_t_select-low = lc_10.
              MOVE lc_02 TO lr_paledger-low.
            ENDIF.
            APPEND lr_paledger.
          ENDLOOP.
    *Record Type
          LOOP AT s_s_if-t_select INTO i_t_select WHERE fieldnm = c_vrgar.
            MOVE: i_t_select-sign   TO lr_vrgar-sign,
                  i_t_select-option TO lr_vrgar-option,
                  i_t_select-low    TO lr_vrgar-low,
                  i_t_select-high   TO lr_vrgar-high.
            APPEND lr_vrgar.
          ENDLOOP.
    *Fiscal Year
          LOOP AT s_s_if-t_select INTO i_t_select WHERE fieldnm = c_gjahr.
            MOVE: i_t_select-sign   TO lr_gjahr-sign,
                  i_t_select-option TO lr_gjahr-option,
                  i_t_select-low    TO lr_gjahr-low,
                  i_t_select-high   TO lr_gjahr-high.
            APPEND lr_gjahr.
          ENDLOOP.
    *Period Block/Year
          LOOP AT s_s_if-t_select INTO i_t_select WHERE fieldnm = c_perbl.
            MOVE: i_t_select-sign   TO lr_perbl-sign,
                  i_t_select-option TO lr_perbl-option,
                  i_t_select-low    TO lr_perbl-low,
                  i_t_select-high   TO lr_perbl-high.
            APPEND lr_perbl.
          ENDLOOP.
    *Value Field Name.
          LOOP AT s_s_if-t_select INTO i_t_select WHERE fieldnm = c_fldnm.
            MOVE:
            i_t_select-sign   TO gr_zfldnm-sign,
            i_t_select-option TO gr_zfldnm-option,
            i_t_select-low   TO gr_zfldnm-low,
            i_t_select-high   TO gr_zfldnm-high.
            APPEND gr_zfldnm.
          ENDLOOP.
    First data package -> OPEN CURSOR
          IF ls_counter_datapakid = 0.
    *Create 93 Field names in an internal table.
         MOVE 'VV010' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV011' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV012' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV013' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV014' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV015' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV016' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV020' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV021' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV030' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV031' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV032' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV033' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV034' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV035' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV200' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV201' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV202' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV203' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV036' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV037' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV038' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV039' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV040' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV041' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV042' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV043' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV204' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV205' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV211' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV212' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV213' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV222' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV223' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV230' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV232' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV233' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV500' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV501' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV502' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV503' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV504' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV505' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV506' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV507' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV508' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV509' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV510' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV511' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV512' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV513' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV514' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV515' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV516' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV517' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV518' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV519' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV520' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV236' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV206' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV051' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV052' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV053' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV054' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV055' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV056' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV057' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV058' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV059' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV060' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV241' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV242' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV243' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV244' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV245' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV246' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV247' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV248' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV249' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV250' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV521' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV522' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV523' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV524' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV525' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV526' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV527' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV528' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV529' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV530' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV227' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV226' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
         MOVE 'VV224' TO lw_fldlist-fldnam. APPEND lw_fldlist TO lt_fldlist.
            OPEN CURSOR WITH HOLD ls_cursor FOR
                 SELECT
                 paobjnr      " Profitability Segment Number (CO-PA)
                 paledger     " Currency type for an operating concern
                 vrgar        " Record Type
                 versi        " Plan version (CO-PA)
                 gjahr            " Fiscal Year
                 perbl            " Fiscal year/period block
                 pasubnr
                 vv010001     " List Price
                 vv011001     " Formula Price
                 vv012001     " Customer Price
                 vv013001     " Manual Price
                 vv014001     " Retail Pump Price
                 vv015001     " Markup
                 vv016001     " Net Proceeds Other
                 vv020001     " Excise Duty Offset
                 vv021001     " Duties & Government
                 vv030001     " Sales Discounts
                 vv031001     " Sales Surcharges
                 vv032001     " Sales Rebates
                 vv033001     " Agents Comm Paid
                 vv034001     " RBA CR Royalties
                 vv035001     " Other Revenues
                 vv200001     " Transfer PriceSupply
                 vv201001     " Prim Tran Tariff Sup
                 vv202001     " S&Handling TariffDis
                 vv203001     " Sec Trans Tariff Dis
                 vv036001     " Proceeds from Servic
                 vv037001     " Exchanges
                 vv038001     " Throughput fees
                 vv039001     " Output Tax Offset
                 vv040001     " CR comm & Oth Oil Pr
                 vv041001     " Supplier fees
                 vv042001     " RBA Fairshare Adjust
                 vv043001     " Contr Comm Paid IG
                 vv204001     " Sec Tran Tariff Supp
                 vv205001     " Comp Stock Obligatio
                 vv211001     " Prim Tran Tar Transf
                 vv212001     " S&Handling Tar Trans
                 vv213001     " Sec Trans TariffTran
                 vv222001     " DIS:S&Handl Tar OvUn
                 vv223001     " DIS:Sec Tr TarifOvUn
                 vv230001     " Transfer Price LSC
                 vv232001     " S&Handling Tar LSC
                 vv233001     " Sec Trans Tariff LSC
                 vv500001     " 3rd Party Purchases
                 vv501001     " Transf from Oth Sect
                 vv502001     " Purchases IG
                 vv503001     " Inter-Seg Transf Pur
                 vv504001     " Import Freight
                 vv505001     " Stock Variations
                 vv506001     " Other Product Cost
                 vv507001     " Pipeline Operat Exp
                 vv508001     " Primary Transp Expen
                 vv509001     " Manufacturing Expens
                 vv510001     " Supply /Process Exp
                 vv511001     " MK Processing Plants
                 vv512001     " S&Handling Expenses
                 vv513001     " Sec Transp Expenses
                 vv514001     " Point of Sale Expens
                 vv515001     " Contr Comm Rec IG
                 vv516001     " Assoc Inc Dividend
                 vv517001     " Marketing & Sell Exp
                 vv518001     " Other Rev from Dist
                 vv519001     " Other Rev Transferrd
                 vv520001     " Stock Write-Off
                 vv236001     " Oth cost Tar LSC SMP
                 vv206001     " Prim Trp tariff Dist
                 vv051001     " CR Net Turnover
                 vv052001     " Dummy Price 2
                 vv053001     " Dummy Price 3
                 vv054001     " Dummy Price 4
                 vv055001     " Dummy Price 5
                 vv056001     " Dummy Price 6
                 vv057001     " Dummy Price 7
                 vv058001     " Dummy Price 8
                 vv059001     " Dummy Price 9
                 vv060001     " Dummy Price10
                 vv241001     " DummyTariff 1
                 vv242001     " DummyTariff 2
                 vv243001     " DummyTariff 3
                 vv244001     " DummyTariff 4
                 vv245001     " DummyTariff 5
                 vv246001     " DummyTariff 6
                 vv247001     " DummyTariff 7
                 vv248001     " DummyTariff 8
                 vv249001     " DummyTariff 9
                 vv250001     " DummyTariff10
                 vv521001     " SD&A Rebates
                 vv522001     " Dummy Cost 2
                 vv523001     " Dummy Cost 3
                 vv524001     " Dummy Cost 4
                 vv525001     " Dummy Cost 5
                 vv526001     " Dummy Cost 6
                 vv527001     " Dummy Cost 7
                 vv528001     " Dummy Cost 8
                 vv529001     " Dummy Cost 9
                 vv530001     " Dummy Cost 10
                 vv227001     " Sec Tr TarifOvUn LSC
                 vv226001     " S&Handl Tar OvUn LSC
                 vv224001     " Pr Tra TariffOvU DIS
                 FROM ce3op01
                 WHERE   paledger = lc_02 AND
                 vrgar    IN lr_vrgar AND
                 versi    IN lr_versi AND
                 perbl    IN lr_perbl AND
                 gjahr    IN lr_gjahr.
          ENDIF.
    For all other cursors.
          FETCH NEXT CURSOR ls_cursor
              APPENDING TABLE lt_ce3op02
              PACKAGE SIZE ls_s_if-maxsize.
          IF sy-subrc <> 0.
            EXIT.
          ENDIF.
          SORT lt_ce3op02 BY paobjnr pasubnr paledger vrgar versi gjahr
               perbl.
          DELETE ADJACENT DUPLICATES FROM lt_ce3op02 COMPARING paobjnr.
    *Begin of MODE-002
          DESCRIBE TABLE lt_ce3op02 LINES l_norecs.
          l_s_loop_from = lc_1.
          DO.
            l_s_loop_to = l_s_loop_from + l_s_no_recs.
            LOOP AT lt_ce3op02 INTO lw_ce3op02
            FROM l_s_loop_from TO l_s_loop_to .
              APPEND lw_ce3op02 TO lt_ce3op01.
            ENDLOOP.
            SORT lt_ce3op01 BY paobjnr.
    *End of MOS-002
            SELECT
              aktbo       "     Current profitability segment (CO-PA)
              paobjnr     "     Profitability Segment Number (CO-PA)
              pasubnr     "     Profitability segment changes (CO-PA)
              kndnr       "     Customer
              artnr
              bukrs     "     Company Code
              prctr
              kokrs
           FROM ce4op01
           INTO TABLE lt_ce4op01
           FOR ALL ENTRIES IN lt_ce3op01
           WHERE paobjnr = lt_ce3op01-paobjnr AND
                 pasubnr = lt_ce3op01-pasubnr AND
                 bukrs  IN lr_bukrs.
    *CE1op01
            SELECT
            paledger
            vrgar
            versi
            perio
            paobjnr
            pasubnr
            belnr
            posnr
            rbeln
            rposn
           FROM ce1op01
           INTO TABLE lt_ce1op01
           FOR ALL ENTRIES IN lt_ce3op01
           WHERE paledger = lt_ce3op01-paledger AND
                 vrgar    = lt_ce3op01-vrgar AND
                 versi    = lt_ce3op01-versi AND
                 perio    = lt_ce3op01-perbl AND
                 paobjnr = lt_ce3op01-paobjnr AND
                 pasubnr = lt_ce3op01-pasubnr.
    **CE1op01
            LOOP AT lt_ce3op01 INTO lw_ce3op01.
              MOVE:
              lw_ce3op01-paobjnr   TO lw_flnmval-paobjnr,
             lw_ce3op01-paledger  TO lw_flnmval-paledger,
             lw_ce3op01-vrgar     TO lw_flnmval-vrgar,
                      lw_ce3op01-versi     TO lw_flnmval-versi,
                      lw_ce3op01-gjahr     TO lw_flnmval-gjahr,
                      lw_ce3op01-perbl     TO lw_flnmval-perbl.
    *appending all 93 fields as records
              MOVE lw_ce3op01-vv010001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv011001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv012001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv013001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv014001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv015001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv016001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv020001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv021001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv030001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv031001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv032001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv033001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv034001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv035001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv200001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv201001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv202001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv203001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv036001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv037001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv038001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv039001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv040001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv041001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv042001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv043001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv204001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv205001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv211001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv212001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv213001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv222001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv223001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv230001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv232001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv233001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv500001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv501001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv502001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv503001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv504001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv505001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv506001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv507001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv508001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv509001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv510001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv511001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv512001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv513001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv514001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv515001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv516001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv517001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv518001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv519001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv520001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv236001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv206001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv051001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv052001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv053001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv054001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv055001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv056001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv057001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv058001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv059001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv060001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv241001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv242001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv243001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv244001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv245001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv246001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv247001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv248001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv249001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv250001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv521001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv522001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv523001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv524001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv525001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv526001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv527001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv528001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv529001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv530001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv227001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv226001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
              MOVE lw_ce3op01-vv224001    TO lw_flnmval-zamunt.
              APPEND lw_flnmval TO lt_flnmval.
    *Segrigating all one record into 102 records is complete
            ENDLOOP.
            LOOP AT lt_flnmval ASSIGNING <fs_flnmval>.
              IF l_index > 93.
                l_index = 1.
              ENDIF.
              READ TABLE lt_fldlist INTO lw_fldlist INDEX l_index.
              IF sy-subrc = 0.
                CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
                  EXPORTING
                    input  = lw_fldlist-fldnam
                  IMPORTING
                    output = <fs_flnmval>-fldnam.
              ENDIF.
              l_index = l_index + 1.
            ENDLOOP.
            SORT lt_ce4op01 BY paobjnr.
            SORT lt_ce1op01 BY paobjnr  paledger vrgar  versi.
            SORT gr_zfldnm BY low.
            DELETE lt_flnmval WHERE fldnam NOT IN gr_zfldnm.
            LOOP AT lt_flnmval INTO lw_flnmval.
              READ TABLE lt_ce4op01 INTO  lw_ce4op01 WITH KEY
                                 paobjnr = lw_flnmval-paobjnr BINARY SEARCH.
              IF sy-subrc = 0.
                MOVE :   lw_flnmval-paledger  TO lw_e_t_data-paledger,
                         lw_flnmval-vrgar     TO lw_e_t_data-vrgar,
                         lw_flnmval-versi     TO lw_e_t_data-versi ,
                         lw_flnmval-gjahr     TO lw_e_t_data-gjahr,
                         lw_flnmval-perbl     TO lw_e_t_data-perbl,
                         lw_ce4op01-bukrs     TO lw_e_t_data-bukrs,
                         lw_ce4op01-kndnr     TO lw_e_t_data-kndnr,
                         lw_ce4op01-artnr     TO lw_e_t_data-artnr,
                         lw_ce4op01-prctr     TO lw_e_t_data-prctr,
                         lw_ce4op01-kokrs     TO lw_e_t_data-kokrs,
                         lw_flnmval-fldnam   TO lw_e_t_data-zfldnm,
                         lw_flnmval-zamunt   TO lw_e_t_data-zamount.
    CE1op01
                READ TABLE lt_ce1op01 INTO lw_ce1op01 WITH KEY
                            paobjnr = lw_flnmval-paobjnr
                            paledger = lw_flnmval-paledger
                            vrgar  = lw_flnmval-vrgar
                            versi = lw_flnmval-versi BINARY SEARCH.
                IF sy-subrc = 0.
                  MOVE: lw_ce1op01-rbeln  TO lw_e_t_data-rbeln,
                        lw_ce1op01-rposn  TO lw_e_t_data-rposn.
                ENDIF.
    CE1op01
                APPEND lw_e_t_data TO gt_out_data.
              ENDIF.
            ENDLOOP.
    *Begin of MOD-002
            FREE lt_flnmval.
            REFRESH :lt_ce3op01,lt_ce4op01,lt_ce1op01.
            e_t_data[] = gt_out_data[].
            DELETE e_t_data WHERE zfldnm NOT IN gr_zfldnm.
            l_s_loop_from = l_s_loop_to + lc_1.
            l_count = l_count + 20.
            IF l_count GE l_norecs.
              EXIT.
            ENDIF.
          ENDDO.
    *End of MOD-002
          ls_counter_datapakid = ls_counter_datapakid + 1.
        ENDIF.                        "IF S_COUNTER_DATAPAKID = 0
      ELSE.
        IF i_maxsize IS INITIAL.
          RAISE error_passed_to_mess_handler.
        ENDIF.
        IF g_start IS INITIAL.
          g_start = 1.
        ELSE.
          g_start  = g_end + 1.
        ENDIF.
        g_end = g_start + i_maxsize - 1.
    Population of E_T_DATA based on Data records size
        APPEND LINES OF gt_out_data FROM g_start TO g_end TO e_t_data.
        DELETE e_t_data WHERE zfldnm NOT IN gr_zfldnm.
        IF e_t_data[] IS INITIAL.
          RAISE no_more_data.
        ENDIF.
        ls_counter_datapakid = ls_counter_datapakid + 1.
      ENDIF.
    ENDFUNCTION.
    Thanks & regards,
    Sreekanth
    +91 9740091981

    Hello Sreekanth,
    See this blog [Generic Extraction via Function Module|/people/siegfried.szameitat/blog/2005/09/29/generic-extraction-via-function-module]
    Also see this
    [Line Item Level Data Extraction for Financial Accounting and Controlling|https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/a7f2f294-0501-0010-11bb-80e0d67c3e4a]
    Thanks
    Chandran

  • Unable to get delta observation,

    i am trying get delta records from ztable based on time stamp with 900sec lower timestamp,,,,,,,,,,
    please correct my code,
    Example: DataSource for table SFLIGHT
      TABLES: zsales_order1.
    Auxiliary Selection criteria structure
      DATA: l_s_select TYPE srsc_s_select.
    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.
    Select ranges
      RANGES: l_r_zvbeln FOR zsales_order1-zvbeln,
              l_r_zerdat FOR zsales_order1-zerdat,
              l_r_zerzet FOR zsales_order1-zerzet,
              l_r_ztimestamp FOR zsales_order1-ztimestamp.
      DATA : startdate TYPE sy-datum,
             starttime TYPE sy-uzeit,
             enddate TYPE sy-datum,
             endtime TYPE sy-uzeit,
             timestamp TYPE tzonref-tstamps.
    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 'ZSALES_ORDER_FUN1'.
          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.
    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.
    Fill range tables BW will only pass down simple selection criteria
    of the type SIGN = 'I' and OPTION = 'EQ' or OPTION = 'BT'.
          LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'ZVBELN'.
            MOVE-CORRESPONDING l_s_select TO l_r_zvbeln.
            APPEND l_r_zvbeln.
           LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'ZERDAT'.
              MOVE-CORRESPONDING l_s_select TO l_r_zerdat.
              APPEND l_r_zerdat.
           LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'ZERZET'.
                MOVE-CORRESPONDING l_s_select TO l_r_zerzet.
                APPEND l_r_zerzet.
       LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'ZTIMESTAMP'.
                  timestamp = l_s_select-low.
                  CONVERT TIME STAMP timestamp
                  TIME ZONE sy-zonlo INTO DATE startdate TIME starttime.
                  timestamp = l_s_select-high.
                  CONVERT TIME STAMP timestamp
                  TIME ZONE sy-zonlo INTO DATE enddate TIME endtime.
                  l_r_zerdat-low = startdate.
                  l_r_zerdat-sign = l_s_select-sign.
                  l_r_zerdat-option = l_s_select-option.
                  l_r_zerdat-high = enddate.
                  APPEND l_r_zerdat.
                  l_r_zerzet-low = starttime.
                  l_r_zerzet-sign = l_s_select-sign.
                  l_r_zerzet-option = l_s_select-option.
                  l_r_zerzet-high = endtime.
                  APPEND l_r_zerzet.
                ENDLOOP.
              ENDLOOP.
            ENDLOOP.
          ENDLOOP.
    Determine number of database records to be read per FETCH statement
    from input parameter I_MAXSIZE. If there is a one to one relation
    between DataSource table lines and database entries, this is trivial.
    In other cases, it may be impossible and some estimated value has to
    be determined.
          OPEN CURSOR WITH HOLD s_cursor FOR
          SELECT zvbeln
    zerdat
    zerzet
    zland1
    zkunnr
    zlgort
    zposnv
    zmatnr
    znetpr
    waerk
    zkpein
    zkmein
    zarktx
    zstadat
    zaedat
    zaezet
    ztimestamp FROM zsales_order1 WHERE zvbeln IN l_r_zvbeln
                                  AND zerdat IN l_r_zerdat
                                  AND zerzet IN l_r_zerzet
                                  AND (
          ( zerdat >= startdate AND ( zerzet >= starttime     OR
          ( zerdat <= enddate   AND   zerzet <= endtime ) ) ) OR
          ( zaedat >= startdate AND ( zaezet >= starttime     OR
          ( zaedat <= enddate   AND   zaezet <= endtime ) ) )
        ENDIF.                             "First data package ?
    Fetch records into interface table.
      named E_T_'Name of extract structure'.
        FETCH NEXT CURSOR s_cursor
                   APPENDING CORRESPONDING FIELDS
                   OF TABLE e_t_data
                   PACKAGE SIZE s_s_if-maxsize.
        IF sy-subrc <> 0.
          CLOSE CURSOR s_cursor.
          RAISE no_more_data.
        ENDIF.
        s_counter_datapakid = s_counter_datapakid + 1.
      ENDIF.              "Initialization mode or data extraction ?
    ENDFUNCTION.
    thanks in advance

    As per the description of this forum at the top of the page I do not think this is posted correctly:
    This forum is dedicated to all other development-related questions which are not directly addressed by other forums. This includes Business Objects SDKs, products, or technologies which do not fall under BusinessObjects Enterprise, BusinessObjects Edge, Crystal Reports Server, or Crystal Reports (for example Desktop Intelligence SDK, Universe Designer SDK, Portal Integration Kits, Java User Function Libraries, and other third party technologies or development languages).
    - Ludek

  • GDE - function module.. code .. problem

    hi all,
    I am extracting data using FM
    from PAYR and REGUH.
    I need:
    Payr
    doc1 ven01.........filds.a b c.
    doc2 ven02.........filds..
    doc3 ven02.........filds..
    doc4 ven03.........filds..
    My Fm is working fine.
    I need from REGUH:
    doc1 ven01.........filds p q r..
    doc2 ven02.........filds..
    doc3 ven02.........filds..
    doc4 ven03.........filds..
    doc5 ven05.........filds..
    doc6 ven06.........filds..
    doc5 and Doc6 not there in Payr table. finally i need 6 records with a, b,c, p, q, r
    I wrote code:
    ========
    error : It returns dump..
    saying : INDEX problem..?
    Modify e_t_data index sy-tabix.
    FUNCTION z_biw_payr_get_data .
    ""Local interface:
    *"  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
    *"     REFERENCE(I_REMOTE_CALL) TYPE  SBIWA_FLAG DEFAULT
    *"       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  ZBIW_AP_PAYR OPTIONAL
    *"  EXCEPTIONS
    *"      NO_MORE_DATA
    *"      ERROR_PASSED_TO_MESS_HANDLER
    Example: DataSource for table SFLIGHT
      TABLES: payr.
    Auxiliary Selection criteria structure
      DATA: l_s_select TYPE srsc_s_select.
    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.
    *internal tables:
    I_payr like payr occurs 0 with header line.
    I_reguh like reguh occurs 0 with header line.
    Select ranges
      RANGES: l_r_gjahr   FOR zap_payr-gjahr,
              l_r_vblnr   FOR zap_payr-vblnr,
              l_r_zbukr   FOR zap_payr-zbukr.
    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
    please Check DataSource validity
        CASE i_dsource.
          WHEN 'ZAP_PAYR'.
          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.
    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.
    Fill range tables BW will only pass down simple selection criteria
    of the type SIGN = 'I' and OPTION = 'EQ' or OPTION = 'BT'.
          LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'GJAHR'.
            MOVE-CORRESPONDING l_s_select TO l_r_gjahr.
            APPEND l_r_gjahr.
          ENDLOOP.
          LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'VBLNR'.
                  MOVE-CORRESPONDING l_s_select TO l_r_vblnr.
            APPEND l_r_vblnr.
          ENDLOOP.
          LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'ZBUKR'.
            MOVE-CORRESPONDING l_s_select TO l_r_zbukr.
            APPEND l_r_zbukr.
          ENDLOOP.
    Determine number of database records to be read per FETCH statement
    from input parameter I_MAXSIZE. If there is a one to one relation
    between DataSource table lines and database entries, this is trivial.
    In other cases, it may be impossible and some estimated value has to
    be determined.
    Extracts from Tableu2026..1
          OPEN CURSOR WITH HOLD s_cursor FOR
          SELECT mandt zbukr hbkid hktid rzawe chect checf laufd laufi lifnr
            kunnr empfg ubhkt vblnr gjahr zaldt waers rwbtr strgb pridt
            priti prius xmanu xbanc bancd extrd extrt xbukr zanre znme1
            znme2 znme3 znme4 zpstl zort1 zstra zpfac zland zregi zbnks
            zbnkn zbnkl zbkon voidr voidd voidu checv hbkiv hktiv zpst2
            xragl pernr seqnr btznr rec_belnr rec_gjahr zpfor uzawe ichec
            irefe rwskt
          FROM  payr
          WHERE zbukr  IN l_r_zbukr
                AND   vblnr  IN l_r_vblnr
          AND   gjahr  IN l_r_gjahr.
        AND   rzawe  EQ 'C'.
        ENDIF.                             "First data package ?
    Fetch records into interface table.
      named E_T_'Name of extract structure'.
        FETCH NEXT CURSOR s_cursor
                   APPENDING CORRESPONDING FIELDS
                   OF TABLE e_t_data
                   PACKAGE SIZE s_s_if-maxsize.
        IF sy-subrc <> 0.
          CLOSE CURSOR s_cursor.
          RAISE no_more_data.
        ENDIF.
    **get all u2018Du2019 and 2 series VBLNR records from REGUH
    _** --- CHECK the codes for WITH CASE 1 OR CASE 2._
    Case 1 :
    *Select * from reguh*
         Into corresponding fields of table i_reguh
         For all entries in e_t_data
         Where lifnr = e_t_data-lifnr
          And  rzawe = u2018Du2019
          and  Vblnr like u20182%u2019.
    Or u2026u2026 Or u2026u2026 Or u2026u2026
    Case2 :
    *Select * from reguh*
         Into corresponding fields of table i_reguh
         Where rzawe = u2018Du2019
          and  Vblnr like u20182%u2019.
    Loop at e_t_data.
      Read table i_reguh with key lifnr = e_t_data-lifnr
        If sy-subrc = 0.
          E_t_data-laufi  like reguh- laufi.
          E_t_data-Zbukr like reguh-zbukr.
          E_t_data-lifnr like reguh- lifnr .
          E_t_data-empfg like reguh- empfg.
          E_t_data-vblnr  like reguh-vblnr
          E_t_data-waers like reguh-waers
          E_t_data-srtgb like reguh-srtgb.
          E_t_data-znme1 like reguh- znme1.
          E_t_data-znme2  like reguh- znme2.
          E_t_data-znme3 like reguh- znme3.
          E_t_data-znme4 like reguh- znme4.
          E_t_data-zpstl like reguh-zpstl.
          E_t_data-zort1   like reguh-zortl.
          E_t_data-zstra like reguh-zstra.
          E_t_data-zpfac like reguh-zpfac.
          E_t_data-zland like reguh-zland.
          E_t_data-zregi like reguh-zregi.
          E_t_data-zbnkl like reguh-zbnkl.
          E_t_data-rzawe like reguh-rzawe.
          E_t_data-hktid like reguh-hktid.
          E_t_data-hbkid like reguh-hbkid.
          E_t_data-zpst2 like reguh-zpst2.
          E_t_data-uzawe like reguh-uzawe.
                E_t_data-pernr like reguh-pernr.
         E_t_data-btznr like reguh-btanr.
         E_t_data-laufd like reguh-laufd.
         E_t_data-zaldt like reguh-zaldt.
         E_t_data-rwbtr like reguh-rwbtr.
         E_t_data-rwskt like reguh-rwskt.
         Modify e_t_data index sy-tabix.
    Else.
         E_t_data-laufi  like reguh- laufi.
                E_t_data-Zbukr like reguh-zbukr.
         E_t_data-lifnr like reguh- lifnr .
         E_t_data-empfg like reguh- empfg.
         E_t_data-vblnr  like reguh-vblnr
         E_t_data-waers like reguh-waers
         E_t_data-srtgb like reguh-srtgb.
         E_t_data-znme1 like reguh- znme1.
         E_t_data-znme2  like reguh- znme2.
         E_t_data-znme3 like reguh- znme3.
         E_t_data-znme4 like reguh- znme4.
         E_t_data-zpstl like reguh-zpstl.
         E_t_data-zort1   like reguh-zortl.
         E_t_data-zstra like reguh-zstra.
         E_t_data-zpfac like reguh-zpfac.
         E_t_data-zland like reguh-zland.
         E_t_data-zregi like reguh-zregi.
         E_t_data-zbnkl like reguh-zbnkl.
         E_t_data-rzawe like reguh-rzawe.
         E_t_data-hktid like reguh-hktid.
         E_t_data-hbkid like reguh-hbkid.
         E_t_data-zpst2 like reguh-zpst2.
         E_t_data-uzawe like reguh-uzawe.
         E_t_data-pernr like reguh-pernr.
         E_t_data-btznr like reguh-btanr.
         E_t_data-laufd like reguh-laufd.
         E_t_data-zaldt like reguh-zaldt.
         E_t_data-rwbtr like reguh-rwbtr.
         E_t_data-rwskt like reguh-rwskt.
    Modify e_t_data index sy-tabix.
    Endif.
    Endloop.
    Logic for eliminating voided Checks Begin
        itab[] = e_t_data[].
        SORT itab BY chect.
        LOOP AT itab WHERE ( voidu NE space ) AND ( voidd NE space ).
          wa_idx = sy-tabix.
          wa_chect = itab-chect. CLEAR wa_found.
                wa_zbukr = itab-zbukr.
          wa_hbkid = itab-hbkid.
          wa_hktid = itab-hktid.
          wa_rzawe = itab-rzawe.
          DO.
            SELECT SINGLE * FROM payr WHERE
            zbukr = wa_zbukr AND
            hbkid = wa_hbkid AND
            hktid = wa_hktid AND
            rzawe = wa_rzawe AND
            chect = wa_chect.
            IF sy-subrc NE 0.
    Not transferring this record to BW
          message 'Invalid Check No.' type 'I'.
              DELETE itab.
              wa_found = 'Y'. EXIT.
            ENDIF.
            IF ( payr-voidu NE space ) AND ( payr-voidd NE space ).
              wa_chect = payr-checv.
              wa_zbukr = payr-zbukr.
              wa_hbkid = payr-hbkid.
                        wa_hktid = payr-hktid.
              wa_rzawe = payr-rzawe.
    If the Replacement Check # points to Original Check No., this record
    will be skipped.
              IF itab-chect = payr-checv.
                DELETE itab INDEX wa_idx.
                EXIT.
              ENDIF.
            ELSE.
              MOVE-CORRESPONDING payr TO itab.
              APPEND itab. wa_found = 'Y'.
              MOVE-CORRESPONDING itab TO itab1.
              APPEND itab1.
              EXIT.
            ENDIF.
            IF wa_found = 'Y'.
              EXIT.
            ENDIF.
          ENDDO.
        ENDLOOP.
        SORT itab by zbukr hbkid hktid rzawe chect.
            DELETE ADJACENT DUPLICATES FROM itab COMPARING zbukr hbkid hktid
        rzawe chect.
        LOOP AT itab1.
          READ TABLE itab WITH KEY
          zbukr = itab1-zbukr
          hbkid = itab1-hbkid
          hktid = itab1-hktid
          rzawe = itab1-rzawe
          chect = itab1-chect BINARY SEARCH.
          IF ( itab-voidu IS NOT INITIAL ).
            DELETE TABLE itab FROM itab1.
          ENDIF.
        ENDLOOP.
    04/13/08 commented to satisfy 4th condition
    Do not extract the Original record of the replaced Check
       LOOP AT itab.
         IF ( itab-voidu IS NOT INITIAL ) AND
            ( itab-voidd IS NOT INITIAL ).
           DELETE itab.
         ENDIF.
       ENDLOOP.
    04/13/08 commented to satisfy 4th condition
    Logic for eliminating voided Checks End
    ***The below process can be used for Delta Extraction using Time Stamp
       loop at itab.
         concatenate itab-pridt itab-priti into wa_timstmp.
         move wa_timstmp to itab-timstmp.
         move-corresponding itab to e_t_data.
         append e_t_data.
       endloop.
        e_t_data[] =    itab[].
        s_counter_datapakid = s_counter_datapakid + 1.
      ENDIF.              "Initialization mode or data extraction ?
    ENDFUNCTION.
    =========
    Please advise me and where will i correct the code.
    Thanks in advance,
    Siri.
    Edited by: SIRI SIRI on Jun 3, 2008 3:26 PM

    Hi,
    use the following:
    define a index variable.
    data: l_index type sy-tabix.
    in your loop at e_t_data.
    loop at e_t_data.
    new statement
    l_index = sy-tabix.
    changed statement
    modify e_t_data index l_index.
    endloop.
    The other read operations on internal tables will reset sy-tabix so that it will point to a invalid record.
    regards
    Siggi

  • I_UPDMODE has no value in my Function Module when using Delta Extraction

    Help me please.
    My system is BW 3.52
    Please see the source code below and tell me why I_UPDMODE has not been passed value. I have ever used "I_SOURCE" but the value pass to I_DSOURCE. Can anyone tell me where is the upload mode pass to?
    FUNCTION ZBWFN_TEST_DELTA.
    ""Local Interface:
    *"  IMPORTING
    *"     VALUE(I_REQUNR) TYPE  SBIWA_S_INTERFACE-REQUNR
    *"     VALUE(I_DSOURCE) TYPE  SBIWA_S_INTERFACE-ISOURCE OPTIONAL
    *"     VALUE(I_MAXSIZE) TYPE  SBIWA_S_INTERFACE-MAXSIZE OPTIONAL
    *"     VALUE(I_INITFLAG) TYPE  SBIWA_S_INTERFACE-INITFLAG OPTIONAL
    *"     VALUE(I_UPDMODE) TYPE  SBIWA_S_INTERFACE-UPDMODE OPTIONAL
    *"     VALUE(I_DATAPAKID) TYPE  SBIWA_S_INTERFACE-DATAPAKID OPTIONAL
    *"     VALUE(I_RLOGSYS) TYPE  SRSC_S_INTERFACE-RLOGSYS OPTIONAL
    *"     VALUE(I_READ_ONLY) TYPE  SRSC_S_INTERFACE-READONLY OPTIONAL
    *"  TABLES
    *"      I_T_SELECT TYPE  SBIWA_T_SELECT OPTIONAL
    *"      I_T_FIELDS TYPE  SBIWA_T_FIELDS OPTIONAL
    *"      E_T_DATA STRUCTURE  ZISU_ERCHC OPTIONAL
    *"  EXCEPTIONS
    *"      NO_MORE_DATA
    *"      ERROR_PASSED_TO_MESS_HANDLER
    This extractor is part of a delta scenario based on a timestamp
    included in the fields of table ROVERCUBE1. The interesting part
    takes place in form get_time_interval, where the date range is
    calculated update modespecifically.
    The pointer for the date up to which delta was extracted during
    the last delta update is held in table ROBWQTSTAT.
      TABLES: ZISU_TP_ERCHC, ERCH, ERCHC.
    Auxiliary Selection criteria structure
      DATA: L_S_SELECT TYPE SBIWA_S_SELECT.
      DATA: L_ERCHC LIKE ZISU_TP_ERCHC OCCURS 0 WITH HEADER LINE.
      DATA: L_DATE LIKE SY-DATUM,
                L_ACTUAL_DATE LIKE SY-DATUM,
                L_LAST_DATE LIKE SY-DATUM.
    Maximum number of lines for DB table
      STATICS: L_MAXSIZE TYPE SBIWA_S_INTERFACE-MAXSIZE,
               BEGIN OF S_S_INTERFACE.
      INCLUDE TYPE SBIWA_S_INTERFACE.
      INCLUDE TYPE SRSC_S_INTERFACE.
      STATICS: END OF S_S_INTERFACE.
    STATICS: BEGIN OF S_R_TSTMP OCCURS 1,
                SIGN(1),
                OPTION(2),
                LOW  LIKE ROVERCUBE1-TSTMP,
                HIGH LIKE ROVERCUBE1-TSTMP,
              END   OF S_R_TSTMP.
    Initialization mode (first call by SAPI) or data transfer mode
    (following calls) ?
      IF I_INITFLAG = SBIWA_C_FLAG_ON.
    Invalid second initialization call -> error exit
        IF NOT G_FLAG_INTERFACE_INITIALIZED IS INITIAL.
          IF 1 = 2. MESSAGE E008(R3). ENDIF.
          LOG_WRITE 'E'                    "message type
                    'R3'                   "message class
                    '008'                  "message number
                    ' '                    "message variable 1
                    ' '.                   "message variable 2
          RAISE ERROR_PASSED_TO_MESS_HANDLER.
        ENDIF.
    Check DataSource validity
        CASE I_DSOURCE.
          WHEN 'ZOVER_TRANS'.
          WHEN 'TEST_ROVERCUBE'.
          WHEN 'DO_DATASOURCE'.
          WHEN '0VER_DELTA_WITH_LONG_NAME'.
          WHEN '0VER_CUBE_OLD_LIS'.
          WHEN '0VER_TYPE_ATTR'.
          WHEN OTHERS.
            IF 1 = 2. MESSAGE E009(R3). ENDIF.
            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.
    Check for supported update mode
        CASE I_UPDMODE.
          WHEN 'F'.
          WHEN 'D'.
          WHEN 'C'.
          WHEN 'R'.
          WHEN 'S'.
          WHEN OTHERS.
            IF 1 = 2. MESSAGE E011(R3). ENDIF.
            LOG_WRITE 'E'                  "message type
                      'R3'                 "message class
                      '011'                "message number
                      I_UPDMODE            "message variable 1
                      ' '.                 "message variable 2
            RAISE ERROR_PASSED_TO_MESS_HANDLER.
        ENDCASE.
        APPEND LINES OF I_T_SELECT TO G_T_SELECT.
    Fill parameter buffer for data extraction calls
        S_S_INTERFACE-REQUNR    = I_REQUNR.
        S_S_INTERFACE-ISOURCE   = I_DSOURCE.
        S_S_INTERFACE-MAXSIZE   = I_MAXSIZE.
        S_S_INTERFACE-INITFLAG  = I_INITFLAG.
        S_S_INTERFACE-UPDMODE   = I_UPDMODE.
        S_S_INTERFACE-RLOGSYS   = I_RLOGSYS.
        S_S_INTERFACE-READONLY  = I_READ_ONLY.
        G_FLAG_INTERFACE_INITIALIZED = SBIWA_C_FLAG_ON.
        APPEND LINES OF I_T_FIELDS TO G_T_FIELDS.
    here the timerange for update modes concerning delta is calculated
    and the status table is updated
        PERFORM GET_CAL_INTERVAL TABLES G_R_DELTA_DATE[]
                                  USING  S_S_INTERFACE-ISOURCE
                                             S_S_INTERFACE-UPDMODE
                                             S_S_INTERFACE-RLOGSYS.
      ELSE.                 "Initialization mode or data extraction ?
    Data transfer: First Call      calcualte range tables for key fields
                                   calculate date range due to update mode
                                   OPEN CURSOR + FETCH
                   Following Calls FETCH only
    First data package -> OPEN CURSOR
        G_COUNTER_DATAPAKID = G_COUNTER_DATAPAKID + 1.
        IF G_COUNTER_DATAPAKID = 1.
    Fill range tables.
         LOOP AT G_T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'COUNTRY'.
           MOVE-CORRESPONDING L_S_SELECT TO L_R_COUNTRY.
           APPEND L_R_COUNTRY.
         ENDLOOP.
         LOOP AT G_T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'REGION'.
           MOVE-CORRESPONDING L_S_SELECT TO L_R_REGION.
           APPEND L_R_REGION.
         ENDLOOP.
         LOOP AT G_T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'KUNNR'.
           MOVE-CORRESPONDING L_S_SELECT TO L_R_KUNNR.
           APPEND L_R_KUNNR.
         ENDLOOP.
         LOOP AT G_T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'TYPE'.
           MOVE-CORRESPONDING L_S_SELECT TO L_R_TYPE.
           APPEND L_R_TYPE.
         ENDLOOP.
         LOOP AT G_T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'GJAHR'.
           MOVE-CORRESPONDING L_S_SELECT TO L_R_GJAHR.
           APPEND L_R_GJAHR.
         ENDLOOP.
    no data must be selected in Init simulation mode
          CHECK S_S_INTERFACE-UPDMODE NE SRSC_C_UPDMODE_INITSIMU.
    Determine number of database records to be read per FETCH statement
    from input parameter I_MAXSIZE.
          L_MAXSIZE = G_S_INTERFACE-MAXSIZE.
          REFRESH: L_ERCHC.
          SELECT * FROM ERCH WHERE ERDAT IN G_R_DELTA_DATE
                                          OR AEDAT IN G_R_DELTA_DATE.
            SELECT SINGLE * FROM ERCHC WHERE BELNR = ERCH-BELNR.
            IF SY-SUBRC = 0.
              CLEAR: L_ERCHC.
              L_ERCHC-BUKRS = ERCH-BUKRS.
              L_ERCHC-ABRVORG = ERCH-ABRVORG.
              L_ERCHC-PORTION = ERCH-PORTION.
              L_ERCHC-GPARTNER = ERCH-GPARTNER.
              IF ERCHC-CPUDT IN G_R_DELTA_DATE.
                L_ERCHC-DELDT = ERCHC-CPUDT.
                L_ERCHC-DOCDT = ERCHC-BUDAT.
                L_ERCHC-RELNO = 1.
                COLLECT L_ERCHC.
              ENDIF.
              IF ERCHC-INTCPUDT IN G_R_DELTA_DATE AND
                 ERCHC-INTCPUDT IS NOT INITIAL.
                L_ERCHC-DELDT = ERCHC-INTCPUDT.
                L_ERCHC-DOCDT = ERCHC-INTBUDAT.
                L_ERCHC-REVNO = 1.
                COLLECT L_ERCHC.
              ENDIF.
            ENDIF.
          ENDSELECT.
          DELETE FROM ZISU_TP_ERCHC.
          LOOP AT L_ERCHC.
            MOVE-CORRESPONDING L_ERCHC TO ZISU_TP_ERCHC.
            INSERT ZISU_TP_ERCHC.
          ENDLOOP.
          OPEN CURSOR WITH HOLD G_CURSOR FOR
          SELECT * FROM ZISU_TP_ERCHC.
        ENDIF.                             "First data package ?
        IF S_S_INTERFACE-UPDMODE = SRSC_C_UPDMODE_INITSIMU.
          RAISE NO_MORE_DATA.
        ENDIF.
    Fetch records into interface table.
        FETCH NEXT CURSOR G_CURSOR
                   APPENDING CORRESPONDING FIELDS OF TABLE E_T_DATA
                   PACKAGE SIZE  S_S_INTERFACE-MAXSIZE.
        IF SY-SUBRC <> 0.
          RAISE NO_MORE_DATA.
        ENDIF.
      ENDIF.              "Initialization mode or data extraction ?
    ENDFUNCTION.

    Dave,
    1. You can fire SELECTS in an RFC as well, but in your case the data exists in SYSTEM A and the RFC is in System B, so you can't do that. You can fire SELECTS on tables in the same system.
    2. Quick example of two table loops - EKKO (HEADER) EKPO (ITEM).
    LOOP AT EKKO.
    LOOP AT EKPO WHERE EBELN = EKKO-EBELN.
    ENDLOOP.
    ENDLOOP.
    I hope this is clear now.
    Regards,
    Ravi

  • Generic extractor FM : taking 5-6 hours time for 3 months to BW urgent:

    Dear experts,
    I have designed a FM for generic extraction , which is taking 5-6 hoours time for 3 months data i.e 24 lakhs records to BW up to PSA .
    i have given the coding below plz provide any modifications to improve the performance.....
    FUNCTION zhr_att_analysis.
    ""Local Interface:
    *"  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_REMOTE_CALL) TYPE  SBIWA_FLAG DEFAULT SBIWA_C_FLAG_OFF
    *"  TABLES
    *"      I_T_SELECT TYPE  SBIWA_T_SELECT OPTIONAL
    *"      I_T_FIELDS TYPE  SBIWA_T_FIELDS OPTIONAL
    *"      E_T_DATA STRUCTURE  ZHR_ATT_MAIN OPTIONAL
    *"  EXCEPTIONS
    *"      NO_MORE_DATA
    *"      ERROR_PASSED_TO_MESS_HANDLER
    Auxiliary Selection criteria structure
      DATA: l_s_select TYPE sbiwa_s_select.
    Maximum number of lines for DB table
      STATICS: l_maxsize TYPE sbiwa_s_interface-maxsize.
    Select ranges
      RANGES: l_r_pernr FOR pa9004-pernr,
              l_r_bukrs FOR pa0001-bukrs,
              l_r_persg FOR pa0001-persg,
              l_r_begda FOR pa9004-begda,
              l_r_persk FOR pa0001-persk.
    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.
    *"Declaration of store data
    TYPES : BEGIN OF ty_9004,
             pernr TYPE persno,
             endda TYPE endda,
             begda TYPE begda,
             zrs TYPE zrs,
             zstorecode TYPE zstorecode,
            END OF ty_9004.
    *"Declaration of employee data
      TYPES : BEGIN OF ty_0001,
              pernr TYPE pernr_d,
              endda TYPE endda,
              begda TYPE begda,
             AEDTM TYPE AEDAT,
              bukrs TYPE bukrs,
              persg TYPE persg,
              persk TYPE persk,
              END OF ty_0001.
    *"Declaration of expected mandays
      TYPES : BEGIN OF ty_0000,
              pernr TYPE persno,
              endda TYPE endda,
              begda TYPE begda,
              aedtm TYPE aedat,
              stat2 TYPE stat2,
              massn TYPE massn,
              END OF ty_0000.
    *"Declaration of man days swiped
      TYPES : BEGIN OF ty_teven,
              pernr TYPE pernr_d,
              ldate TYPE ldate,
              satza TYPE retyp,
              aedtm TYPE aedat,
              counter_swiped TYPE i,
              END OF ty_teven.
    *"Declaration of Man days regularized
      TYPES : BEGIN OF ty_2002,
              pernr TYPE pernr_d,
              subty TYPE subty,
              endda TYPE endda,
              begda TYPE begda,
              aedtm TYPE aedat,
              END OF ty_2002.
    *"Declaration of Man days lostdue to leave
      TYPES : BEGIN OF ty_2001,
              pernr TYPE pernr_d,
              subty TYPE subty,
              endda TYPE endda,
              begda TYPE begda,
              aedtm TYPE aedat,
              END OF ty_2001.
    *****Declaration of weekly off
      TYPES : BEGIN OF ty_2003,
              pernr TYPE pernr_d,
              subty TYPE subty,
              endda TYPE endda,
              begda TYPE begda,
              aedtm TYPE aedat,
              tprog TYPE tprog,
              END OF ty_2003.
    Auxiliary Selection criteria structure
      DATA :
            it_0001 TYPE TABLE OF ty_0001,
            wa_0001 TYPE ty_0001,
            it_0000 TYPE TABLE OF ty_0000,
            wa_0000 TYPE ty_0000,
            it_teven TYPE TABLE OF ty_teven,
            wa_teven TYPE ty_teven,
            it_2002 TYPE TABLE OF ty_2002 ,
            wa_2002 TYPE ty_2002,
            it_2001 TYPE TABLE OF ty_2001,
            wa_2001 TYPE ty_2001,
            it_2003 TYPE TABLE OF ty_2003,
            wa_2003 TYPE ty_2003,
            wa_target TYPE zhr_att_main.
      DATA : date  TYPE dats,
      doj TYPE dats,
      dol TYPE dats,
      date1 TYPE dats,
      date2 TYPE dats,
             counter(9)  TYPE n.
    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 'ZHR_ATT_ANALYSIS'.
          WHEN OTHERS.
            IF 1 = 2. MESSAGE e009(r3). ENDIF.
            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.
    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 l_r_pernr.
            APPEND l_r_pernr.
          ENDLOOP.
          LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'BUKRS'.
            MOVE-CORRESPONDING l_s_select TO l_r_bukrs.
            APPEND l_r_bukrs.
          ENDLOOP.
          LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'PERSG'.
            MOVE-CORRESPONDING l_s_select TO l_r_persg.
            APPEND l_r_persg.
          ENDLOOP.
          LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'BEGDA'.
            MOVE-CORRESPONDING l_s_select TO l_r_begda.
            APPEND l_r_begda.
          ENDLOOP.
          LOOP AT s_s_if-t_select INTO l_s_select WHERE fieldnm = 'PERSK'.
            MOVE-CORRESPONDING l_s_select TO l_r_persk.
            APPEND l_r_persk.
          ENDLOOP.
          OPEN CURSOR WITH HOLD s_cursor FOR
    populate only store code employess does not have empty store codes
            SELECT apernr bpernr bendda bbegda bbukrs bpersg b~persk FROM pa9004 AS a INNER JOIN pa0001 AS b
                    ON  apernr = bpernr
                     WHERE a~pernr IN l_r_pernr AND
                          a~zstorecode <> ''    AND
                          bukrs IN l_r_bukrs  AND
                          persg IN l_r_persg AND
                          persk IN l_r_persk.
        ENDIF.
    Fetch records into interface table.
      named E_T_'Name of extract structure'.
        FETCH NEXT CURSOR s_cursor
                   APPENDING CORRESPONDING FIELDS
                   OF TABLE  it_0001
                   PACKAGE SIZE s_s_if-maxsize.
        IF sy-subrc <> 0.
          CLOSE CURSOR s_cursor.
          RAISE no_more_data.
        ELSE.
         break-point.
          IF l_r_begda-high = '00000000' AND l_r_begda-low = '00000000'.
            date1 = sy-datum - 1.
            date2 = sy-datum - 1.
          ELSE.
            date1 = l_r_begda-low .
            date2 = l_r_begda-high.
          ENDIF.
          SORT it_0001 BY pernr persg begda endda bukrs.
          DELETE it_0001 WHERE persg NE 'T' AND
                               persg NE 'K' AND
                               persg NE 'P' AND
                               persg NE 'W'.
          DELETE ADJACENT DUPLICATES FROM it_0001 COMPARING pernr begda endda bukrs.
    populate all the employees that are active in pa9004.
          IF NOT it_0001[] IS INITIAL.
            SELECT pernr endda begda aedtm massn FROM pa0000
                   INTO CORRESPONDING FIELDS OF TABLE it_0000
                   FOR ALL ENTRIES IN it_0001
                   WHERE pernr = it_0001-pernr
                     AND ( massn = 'A1' OR massn = '00' OR massn = 'A6' OR massn = 'A3' ).
            SORT it_0000 BY pernr begda DESCENDING.
          ENDIF.
    populate SWIPED MAN DAYS data
          IF NOT it_0001[] IS INITIAL.
            SELECT pernr ldate satza aedtm FROM teven
               INTO CORRESPONDING FIELDS OF  TABLE it_teven
               FOR ALL ENTRIES IN it_0001
               WHERE pernr = it_0001-pernr AND
                                 satza = 'P01'
                                 AND ldate IN l_r_begda.
            SORT it_teven BY pernr ldate.
          ENDIF.
    **populate REGULARIZATION DAYS data
          IF NOT it_0001[] IS INITIAL.
            SELECT pernr subty endda begda aedtm FROM pa2002
              INTO CORRESPONDING FIELDS OF  TABLE it_2002
               FOR ALL ENTRIES IN it_0001
               WHERE pernr = it_0001-pernr
                AND  begda >= date1
                AND endda <= date2 .
            SORT it_2002 BY pernr begda endda.
          ENDIF.
    **populate LEAVE DAYS data
          IF NOT it_0001[] IS INITIAL.
            SELECT pernr subty endda begda aedtm FROM pa2001
              INTO CORRESPONDING FIELDS OF   TABLE it_2001
               FOR ALL ENTRIES IN it_0001
               WHERE pernr = it_0001-pernr
                AND  begda >= date1
                AND endda <= date2  .
            SORT it_2001 BY pernr begda endda .
          ENDIF.
    **populate WEEKLY OFF data
          IF NOT it_0001[] IS INITIAL.
            SELECT pernr subty endda begda aedtm tprog FROM pa2003
              INTO CORRESPONDING FIELDS OF  TABLE it_2003
                 FOR ALL ENTRIES IN it_0001
                 WHERE pernr = it_0001-pernr AND
                              tprog = 'OFF'
                               AND  begda >= date1
                               AND endda <= date2  .
            SORT it_2003 BY pernr begda endda.
          ENDIF.
          date = sy-datum.
    ********added changes on 06.04.2008**************action type & date dependent extaction****
    loop over it_0001 table
         BREAK-POINT.
          LOOP AT it_0001 INTO wa_0001.
           if sy-tabix = 1.
            counter = 0.
    for expected mandays
            LOOP AT it_0000 INTO wa_0000 WHERE pernr = wa_0001-pernr .
              IF wa_0000-massn = 'A1' OR wa_0000-massn = '00' OR wa_0000-massn = 'A3'.
                doj = wa_0000-begda.
               if wa_0000-endda = '99991231'.
              date2  = sy-datum.
               else.
                dol = date2.
               endif.
              ELSEIF wa_0000-massn = 'A6'.
                dol = wa_0000-begda.
              ENDIF.
            ENDLOOP.
            IF  date1 <= wa_0001-begda AND date2 <= wa_0001-endda AND date2 >= wa_0001-begda AND date1 <= wa_0001-endda.
              counter = date2 - wa_0001-begda .
              counter = counter + 1.
              date = wa_0001-begda - 1.
            ELSEIF date1 >= wa_0001-begda  AND date2 >= wa_0001-endda AND date2 >= wa_0001-begda AND date1 <= wa_0001-endda.
              counter =  wa_0001-endda - date1.
              counter = counter + 1.
              date = date1 - 1.
            ELSEIF date1 >= wa_0001-begda AND date2 <= wa_0001-endda AND  date2 >= wa_0001-begda AND date1 <= wa_0001-endda.
              counter = date2  - date1.
              counter = counter + 1.
              date = date1 - 1.
            ELSEIF  date1 <= wa_0001-begda AND  date2 >= wa_0001-endda AND date2 >= wa_0001-begda AND date1 <= wa_0001-endda.
              counter = wa_0001-endda - wa_0001-begda.
              counter = counter + 1.
              date =  wa_0001-begda - 1.
            ELSE.
              CONTINUE.
            ENDIF.
    ********completed changes on 06.04.2008**************action type & date dependent extaction**
    split records from date of joining to till date
            DO counter  TIMES.
              CLEAR : wa_teven , wa_target.
              date = date + 1.
              wa_target-date1 = date.
              wa_target-pernr = wa_0001-pernr.
              wa_target-bukrs = wa_0001-bukrs.
              wa_target-persg = wa_0001-persg.
              wa_target-persk = wa_0001-persk.
    for expected mandays count
              IF wa_target-date1 >= doj AND wa_target-date1 <= dol.
                wa_target-expectedmandays = 1.
                wa_target-aedtm = wa_0000-aedtm.
    for swiped mandays
                READ TABLE it_teven INTO wa_teven WITH KEY pernr = wa_target-pernr
                                                           ldate = wa_target-date1 BINARY SEARCH.
                IF sy-subrc = 0.
                  wa_target-swiped_days = 1.
                  wa_target-aedtm = wa_teven-aedtm.
                ENDIF.
    for regularized days
                LOOP AT it_2002 INTO wa_2002 WHERE pernr = wa_target-pernr
                   AND  ( endda GE wa_target-date1 AND begda LE wa_target-date1 ).
                  wa_target-reg_days  = 1.
                  wa_target-subty2 = wa_2002-subty.
                  wa_target-aedtm = wa_2002-aedtm.
                ENDLOOP.
    for leave days
                LOOP AT it_2001 INTO wa_2001 WHERE pernr = wa_target-pernr
                   AND  ( endda GE wa_target-date1 AND begda LE wa_target-date1 ).
                  wa_target-leave_days  = 1.
                  wa_target-subty1 = wa_2001-subty.
                  wa_target-aedtm = wa_2001-aedtm.
                ENDLOOP.
    for weekly off days
                LOOP AT it_2003 INTO wa_2003 WHERE pernr = wa_target-pernr
                   AND  ( endda GE wa_target-date1 AND begda LE wa_target-date1 ).
                  wa_target-off_days   = 1.
                  wa_target-aedtm = wa_2003-aedtm.
                ENDLOOP.
    append work area to e_t_data
                APPEND wa_target TO  e_t_data.
              ENDIF.
            ENDDO.
          ENDLOOP.
    clear internal tables
          CLEAR :  it_0000 , it_0001 , it_2001 , it_2002 , it_2003 , it_teven.
        ENDIF.
        s_counter_datapakid = s_counter_datapakid + 1.
      ENDIF.   "Initialization mode or data extraction ?
    ENDFUNCTION.

    Hi Guys
    I can have both your cases looked into for you.
    Please send me an email using the contact us form in my profile. The address for this form in the section 'about me'.
    Thanks
    Stuart
    BTCare Community Mod
    If we have asked you to email us with your details, please make sure you are logged in to the forum, otherwise you will not be able to see our ‘Contact Us’ link within our profiles.
    We are sorry that we are unable to deal with service/account queries via the private message(PM) function so please don't PM your account info, we need to deal with this via our email account :-)

  • Data display on remote cube

    Hi Guru's
    I've created a generic ds using fm for direct access.creating virtual cube and mapped accordingluy with ds.
    Now when I do test extract on ds per a single posting day then it takes few secords to pull through the data and the no. of records are 45 on dev box.But I do data display on remote cub and it takes long and throughing a timed out error.
    I dont have any routines on transformaions.
    What could be the problem?
    Nagesh.

    HI
    here's the code in FM
    Example: DataSource for table SFLIGHT
      TABLES: BKPF,BSEG.
    Auxiliary Selection criteria structure
      DATA: L_S_SELECT TYPE SRSC_S_SELECT.
    Maximum number of lines for DB table
      STATICS: S_S_IF TYPE SRSC_S_IF_SIMPLE,
    counter
              S_COUNTER_DATAPAKID LIKE SY-TABIX,
    Starting point for each data package
             READ_NEXT LIKE SY-TABIX,
    Total Number of Extracted Records
             NO_RECS LIKE SY-TABIX,
    Number read so far
             TEMP_CNTR(9) TYPE N.
    cursor
    S_CURSOR TYPE CURSOR.
    Select ranges
      RANGES: R_BLDAT FOR BKPF-BLDAT,
              R_BUDAT FOR BKPF-BUDAT,
              R_CPUDT FOR BKPF-CPUDT,
              R_BUKRS FOR BKPF-BUKRS,
              R_GJAHR FOR BKPF-GJAHR,
              R_BELNR FOR BKPF-BELNR.
      DATA: GT_T_DATA LIKE ZFI_GL_4 OCCURS 0 WITH HEADER LINE.
      DATA: GT_BKPF TYPE TABLE OF BKPF,
            GS_BKPF TYPE BKPF.
      DATA: COUNTER(9) TYPE N.
      DATA: LV_MONAT(3).
    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 'ZFI_GL_4'.
          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.
    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.
    Fill range tables BW will only pass down simple selection criteria
    of the type SIGN = 'I' and OPTION = 'EQ' or OPTION = 'BT'.
          LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'BLDAT'.
            MOVE-CORRESPONDING L_S_SELECT TO r_bldat.
            APPEND R_BLDAT.
          ENDLOOP.
          LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'BUDAT'.
            MOVE-CORRESPONDING L_S_SELECT TO R_BUDAT.
            APPEND R_BUDAT.
          ENDLOOP.
          LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'CPUDT'.
            MOVE-CORRESPONDING L_S_SELECT TO R_CPUDT.
            APPEND R_CPUDT.
          ENDLOOP.
             LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'BUKRS'.
            MOVE-CORRESPONDING L_S_SELECT TO R_BUKRS.
            APPEND R_BUKRS.
          ENDLOOP.
             LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'GJAHR'.
            MOVE-CORRESPONDING L_S_SELECT TO R_GJAHR.
            APPEND R_GJAHR.
          ENDLOOP.
              LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = 'BELNR'.
            MOVE-CORRESPONDING L_S_SELECT TO R_BELNR.
            APPEND R_BELNR.
          ENDLOOP.
    Determine number of database records to be read per FETCH statement
    from input parameter I_MAXSIZE. If there is a one to one relation
    between DataSource table lines and database entries, this is trivial.
    In other cases, it may be impossible and some estimated value has to
    be determined.
          SELECT * FROM BKPF INTO TABLE GT_BKPF WHERE BLDAT IN R_BLDAT
                                                  AND BUDAT IN R_BUDAT
                                                  AND CPUDT IN R_CPUDT
                                                  AND BUKRS IN R_BUKRS
                                                  AND GJAHR IN R_GJAHR
                                                  AND BELNR IN R_BELNR.
          LOOP AT GT_BKPF INTO GS_BKPF.
            SELECT * FROM BSEG WHERE BELNR = GS_BKPF-BELNR
                               AND   BUKRS = GS_BKPF-BUKRS
                               AND   GJAHR = GS_BKPF-GJAHR.
              MOVE-CORRESPONDING GS_BKPF TO GT_T_DATA.
              MOVE-CORRESPONDING BSEG TO GT_T_DATA.
              CLEAR LV_MONAT.
              CONCATENATE '0' GT_T_DATA-MONAT INTO LV_MONAT.
              CONCATENATE GT_T_DATA-GJAHR LV_MONAT INTO GT_T_DATA-FISCPER.
              CALL FUNCTION 'BWFIU_GET_DOCUMENT_ORIGIN'
                EXPORTING
                  I_AWTYP    = GT_T_DATA-AWTYP
                  I_AWKEY    = GT_T_DATA-AWKEY
                IMPORTING
                  E_REFBELNR = GT_T_DATA-AWREF
                  E_REFGJAHR = GT_T_DATA-AWGJA
                  E_REFBUKRS = GT_T_DATA-AWBUK
                  E_REFKOKRS = GT_T_DATA-AWKOK.
    Lcal currency calculations.
              IF GT_T_DATA-SHKZG EQ 'S'.
                GT_T_DATA-DMSOL = GT_T_DATA-DMBTR.
                GT_T_DATA-DMSHB = GT_T_DATA-DMBTR.
                GT_T_DATA-DMHAB = 0.
              ELSEIF GT_T_DATA-SHKZG EQ 'H'.
                GT_T_DATA-DMHAB = GT_T_DATA-DMBTR.
                GT_T_DATA-DMSHB = GT_T_DATA-DMBTR * -1.
                GT_T_DATA-DMSOL = 0.
              ENDIF.
    Foriegn Currency calculations.
              IF GT_T_DATA-SHKZG EQ 'S'.
                GT_T_DATA-WRSOL = GT_T_DATA-DMBTR.
                GT_T_DATA-WRSHB = GT_T_DATA-DMBTR.
                GT_T_DATA-WRHAB = 0.
              ELSEIF GT_T_DATA-SHKZG EQ 'H'.
                GT_T_DATA-WRHAB = GT_T_DATA-DMBTR.
                GT_T_DATA-WRSHB = GT_T_DATA-DMBTR * -1.
                GT_T_DATA-WRSOL = 0.
              ENDIF.
              APPEND GT_T_DATA.
            ENDSELECT.
          ENDLOOP.
          DESCRIBE TABLE GT_T_DATA LINES NO_RECS.
          READ_NEXT = 0.
          TEMP_CNTR = 0.
        ENDIF.                             "First data package ?
    Fetch records into interface table.
        IF ( READ_NEXT GT NO_RECS ) OR ( NO_RECS EQ 0 ).
          REFRESH GT_T_DATA.
          CLEAR:S_COUNTER_DATAPAKID, COUNTER, READ_NEXT, S_S_IF, NO_RECS.
          RAISE NO_MORE_DATA.
        ENDIF.
        COUNTER = 0.
        LOOP AT GT_T_DATA FROM READ_NEXT.
          COUNTER = COUNTER + 1.
          IF COUNTER GT S_S_IF-MAXSIZE.
            IF TEMP_CNTR EQ NO_RECS.
              CLEAR: S_COUNTER_DATAPAKID,COUNTER,READ_NEXT,S_S_IF,NO_RECS.
              RAISE NO_MORE_DATA.
            ELSE.
              READ_NEXT = READ_NEXT + COUNTER.
            ENDIF.
            EXIT.
          ENDIF.
          MOVE-CORRESPONDING GT_T_DATA TO E_T_DATA.
          APPEND E_T_DATA.
          TEMP_CNTR = TEMP_CNTR + 1.
          iF TEMP_CNTR GT NO_RECS.
            CLEAR GT_T_DATA.
            CLEAR: S_COUNTER_DATAPAKID, COUNTER,READ_NEXT, S_S_IF,NO_RECS.
            RAISE NO_MORE_DATA.
            EXIT.
          ENDIF.
        ENDLOOP.
        S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1.
      ENDIF.              "Initialization mode or data extraction ?
    ENDFUNCTION.
    If it's a code then why it's quick on rsa3?
    Nagesh.

Maybe you are looking for

  • Problems with Remote Desktop and Back to My Mac

    It's impressive how quickly Apple removed my post because of its tone. I hope they respond with equal speed and verve to my concerns. I need to get Remote Desktop operational. Can someone walk me through the process of getting Remote Desktop to "see"

  • Updating HTML with external files...

    Is there any way that my customer updates parts of his Website using XML for example ? I have created a XML editor for a flash application hat works great, but now I need to integrate it to a only-HTML-web how do i do it ? thanks in advance.. (It ocu

  • ITunes not sending email notifications to iTunes and App Store gifts recipients

    I sent several iTunes and App Store gifts from my Apple ID... I set the date to be sent of Dec 25. The gift recipients have not received email notifications about their gifts. I went into my iTunes account and resent the gift, but the people I sent g

  • Making java.sql.Date dd.mm.yyyy format

    Hi, java.sql.Date format is m/d/yyyy. I must use  dd.mm.yyyy format. How can it be done? Thanks.

  • Find my iphone don't see my phone

    Hello, I have problem with Find My iPhone on iPhone 4 7.0.4 When I logged in icloud, I was activate Find my iPhone, turn on notification, but when I log in icloud.com, Fmi don't see my device, why? Is possible that earlier owner delete this phone fro