Raise exception in Start Routine

Hi,
In my start routine of the update rules, I would like to raise an exception when an entry is not found in the master data...
like this,
SELECT Y FROM TABLEX
where X = A.
IF SY-SUBRC NOT 0.
Raise Exception "Value X not maintained in TABLEX.
If you can provide me an example on how to do it, that would be great...
Thanks
Gova

Hi Gova,
you might even be able to use one of 2 standard features to solve your problem:
1.) use referential integrity check in the transfer rules
2.) use the check of existing master data (in the InfoPackage)
You find detailed description of both features in the standard documentation of the BW system.
    Cheers
      Andreas

Similar Messages

  • Raising cx_rsrout_abort exception in Start Routine of Transformations

    Hello Abap OO Gurus:
    This is likely a very simple question but I'm brand new to Abap OO and despite reading and searching, I cannot convert some old abap code used in the start routine of business content in BW to be used in the Transformation start routine in SAP BI.
    My Start Routine inside a BI 7.0 transformation rule has a method declared like this:
    <b>METHODS
    start_routine
    IMPORTING
    request type rsrequest
    datapackid type rsdatapid
    EXPORTING
    monitor type rstr_ty_t_monitors
    CHANGING
    SOURCE_PACKAGE type tyt_SC_1
    RAISING
    cx_rsrout_abort.</b>
    The Exception "cx_rsrout_abort" has replaced what used to be a simple ABORT data field. The <u>old code I want to replace was just "abort = 1'.</u>
    But now it seems like I have to use TRY... ENDTRY statement to raise Exception "cx_rsrout_abort". I am inside the abap code of the Method "start routine"
    METHOD start_routine.
    *=== Segments ===
    Could some kind soul educate me as to how to raise the Exception "cx_rsrout_abort" inside the Method start routine?
    thanks in advance, David

    Tx HDev:
    we are almost there...  I have that PDF but never got thru to the rest of the Appendix B as my project is just too crazy...
    When try what Appenix B suggest..
    <u>"raise exception type CX_RSROUT_SKIP_RECORD."</u>
    I get the following Warning msg which makes sense...
    <b>"W:The exception CX_RSROUT_SKIP_RECORD is neither caught nor is it
    declared in the RAISING clause of "START_ROUTINE".</b>
    The METHOD statement in the start routine never declares another exception other than cx_rsrout_abort as seen below:
        METHODS
          start_routine
            IMPORTING
              request                  type rsrequest
              datapackid               type rsdatapid
            EXPORTING
              monitor                  type rstr_ty_t_monitors
            CHANGING
              SOURCE_PACKAGE              type tyt_SC_1
            RAISING
              cx_rsrout_abort.
    Maybe NW2004s has a bug here... I'm hoping that a SAP Developer reads this posting and can enlighten us all... otherwise I'll have to post a OSS msg
    So the mystery is still how to do
    "raise exception type CX_RSROUT_ABORT" and make this equal to ABORT = 1
    which makes the start routine skip a record
    tx again,  David

  • Start Routine to populate the Logical Source System

    Hi Friends please help me with the below
    1. <b>Requirement</b> : to Populate The system Date , Source System
    in BI for Each load request.
    <b>
    1 Solution:</b> I thought of writing the Start Routine for this but it is giving me error
    syntax Error: END METHOD MISSING?????
    2. Also I have requirement to populate 0sourcsys source system id, can any body help how to populate that.
    Thanks
    Poonam Roy
    <b>ABAP Code.</b>
    I have the End Method. what more to do.
      METHOD start_routine.
    *=== Segments ===
        FIELD-SYMBOLS:
          <SOURCE_FIELDS>    TYPE tys_SC_1.
        DATA:
          MONITOR_REC     TYPE rstmonitor.
    <b>
    $$ begin of routine - insert your code only below this line        -</b>
    ... "insert your code here
    <b>
    FORM STARTROUTINE
    USING G_S_MINFO TYPE RSSM_S_MINFO
    CHANGING DATAPAK type TRANSTRU
    ABORT LIKE SY-SUBRC.
    DATA: ZLOAD_DAT LIKE SY-DATUM
    ZZSOURSYS TYPE RSLOGSYS
    IF G_S_MINFO-DATAPAKID=1
    SOURCE_FIELDS-ZLOAD_DAT = SY-DATE.
    SOURCE_FIELDS-ZZSOURSYS = G_S_MINFO-LOGSYS.
    ENDIF.
    ABORT = 0.
    ENDFORM.
    ENDMETHOD.
    ENDCLASS</b>.
    *--  fill table "MONITOR" with values of structure "MONITOR_REC"
    *-   to make monitor entries
    ... "to cancel the update process
       raise exception type CX_RSROUT_ABORT.
    $$ end of routine - insert your code only before this line         -
      ENDMETHOD.

    Hi,
    Check whether the formula is useful here than Routine. Because you can see the Sy-datum , source system( I Guess) fields as avaialable formula elements .
    With rgds,
    Anil Kumar Sharma .P

  • Start Routine code error of Perform routine 9998

    Hi,
    I have install standard and then migrate to 7.0 all the flow of modeling.
    but after loading data in PSA, while activation i will found following problem (error in routine).
    In PERFORM or CALL FUNCTION ROUTINE_9998, the actual parameter SOURCE_PACKAGE is incompatible with the formal parameter DATA_PACKAGE.
    please suggest me.

    PROGRAM trans_routine.
          CLASS routine DEFINITION
    CLASS lcl_transform DEFINITION.
      PUBLIC SECTION.
    Attributs
        DATA:
          p_check_master_data_exist
                TYPE RSODSOCHECKONLY READ-ONLY,
    *-    Instance for getting request runtime attributs;
        Available information: Refer to methods of
        interface 'if_rsbk_request_admintab_view'
          p_r_request
                TYPE REF TO if_rsbk_request_admintab_view READ-ONLY.
      PRIVATE SECTION.
        TYPE-POOLS: rsd, rstr.
      Rule specific types
        TYPES:
          BEGIN OF tys_SC_1,
         InfoObject: 0MPOINT Measuring point.
            MPOINT           TYPE /BI0/OIMPOINT,
         InfoObject: 0MDOC Measurement Document.
            MDOC           TYPE /BI0/OIMDOC,
         InfoObject: 0MPOBJ Object Number of Measuring Point Object.
            MPOBJ           TYPE /BI0/OIMPOBJ,
         InfoObject: 0MPTYP Type of Measuring Point.
            MPTYP           TYPE /BI0/OIMPTYP,
         InfoObject: 0PSORT Position Number of Measuring Point in Object (
    *Sort Field).
            PSORT           TYPE /BI0/OIPSORT,
         InfoObject: 0ASSEMBLY Assembly.
            ASSEMBLY           TYPE /BI0/OIASSEMBLY,
         InfoObject: 0ATINN Internal Characteristic Number.
            ATINN           TYPE /BI0/OIATINN,
         InfoObject: 0MDATE Date of Measurement.
            MDATE           TYPE /BI0/OIMDATE,
         InfoObject: 0TIME Time.
            TIME           TYPE /BI0/OITIME,
         InfoObject: 0DESIRSI Target Value for Measuring Point in SI Unit.
            DESIRSI           TYPE /BI0/OIDESIRSI,
         InfoObject: 0TVIND Target Value for Measuring Point Is Defined.
            TVIND           TYPE /BI0/OITVIND,
         InfoObject: 0MRMINI Lower Measurement Area Limit Is Defined.
            MRMINI           TYPE /BI0/OIMRMINI,
         InfoObject: 0MRMINSI Lower Meas. Limit or Min. Total Counter Read
    *ing in SI Unit.
            MRMINSI           TYPE /BI0/OIMRMINSI,
         InfoObject: 0MRMAXI Upper Measurement Area Limit Is Defined.
            MRMAXI           TYPE /BI0/OIMRMAXI,
         InfoObject: 0SIUNIT SI unit.
            SIUNIT           TYPE /BI0/OISIUNIT,
         InfoObject: 0CJUMPSI Counter Overflow Reading in SI Unit.
            CJUMPSI           TYPE /BI0/OICJUMPSI,
         InfoObject: 0PYEARSI Annual Performance in SI Unit.
            PYEARSI           TYPE /BI0/OIPYEARSI,
         InfoObject: 0CREATED_BY Created By.
            CREATED_BY           TYPE /BI0/OICREATED_BY,
         InfoObject: 0READSI Measured Value/Total Counter Reading in SI Un
    *it.
            READSI           TYPE /BI0/OIREADSI,
         InfoObject: 0READEU Measured Value in Document Entry Unit.
            READEU           TYPE /BI0/OIREADEU,
         InfoObject: 0RECDU Unit of Measurement for Document Entry.
            RECDU           TYPE /BI0/OIRECDU,
         InfoObject: 0CNTRRSI Counter Reading in SI Unit.
            CNTRRSI           TYPE /BI0/OICNTRRSI,
         InfoObject: 0CDIFFSI Counter Reading Difference in SI Unit.
            CDIFFSI           TYPE /BI0/OICDIFFSI,
         InfoObject: 0CAT_TYPE Catalog.
            CAT_TYPE           TYPE /BI0/OICAT_TYPE,
         InfoObject: 0CAT_GROUP Code group.
            CAT_GROUP           TYPE /BI0/OICAT_GROUP,
         InfoObject: 0FI_STATUS Processing Status.
            FI_STATUS           TYPE /BI0/OIFI_STATUS,
         InfoObject: 0DIM_ID Dimension Key.
            DIM_ID           TYPE /BI0/OIDIM_ID,
         InfoObject: 0CNTIND Measuring Point is Counter.
            CNTIND           TYPE /BI0/OICNTIND,
         InfoObject: 0EQUIPMENT Equipment Number.
            EQUIPMENT           TYPE /BI0/OIEQUIPMENT,
         InfoObject: 0FUNCT_LOC Functional Location.
            FUNCT_LOC           TYPE /BI0/OIFUNCT_LOC,
         InfoObject: 0CAT_CODE Code.
            CAT_CODE           TYPE /BI0/OICAT_CODE,
         InfoObject: 0MRMAXSI Upper Meas. Limit or Max. Total Counter Read
    *ing in SI Unit.
            MRMAXSI           TYPE /BI0/OIMRMAXSI,
         InfoObject: 0DOCAF Measurement Document Included for Associated T
    *ask.
            DOCAF           TYPE /BI0/OIDOCAF,
         InfoObject: 0RECORDMODE BW Delta Process: Update Mode.
            RECORDMODE           TYPE RODMUPDMOD,
         InfoObject: ZSTEXT Object Number Text.
            /BIC/ZSTEXT           TYPE /BIC/OIZSTEXT,
         Field: RECORD.
            RECORD           TYPE RSARECORD,
          END   OF tys_SC_1.
        TYPES:
          tyt_SC_1        TYPE STANDARD TABLE OF tys_SC_1
                            WITH NON-UNIQUE DEFAULT KEY.
    $$ begin of global - insert your declaration only below this line  -
        ... "insert your code here
    $$ end of global - insert your declaration only before this line   -
        METHODS
          start_routine
            IMPORTING
              request                  type rsrequest
              datapackid               type rsdatapid
            EXPORTING
              monitor                  type rstr_ty_t_monitors
            CHANGING
              SOURCE_PACKAGE              type tyt_SC_1
            RAISING
              cx_rsrout_abort.
        METHODS
          inverse_start_routine
            IMPORTING
              i_th_fields_outbound         TYPE rstran_t_field_inv
              i_r_selset_outbound          TYPE REF TO cl_rsmds_set
              i_is_main_selection          TYPE rs_bool
              i_r_selset_outbound_complete TYPE REF TO cl_rsmds_set
              i_r_universe_inbound         TYPE REF TO cl_rsmds_universe
            CHANGING
              c_th_fields_inbound          TYPE rstran_t_field_inv
              c_r_selset_inbound           TYPE REF TO cl_rsmds_set
              c_exact                      TYPE rs_bool.
    ENDCLASS.                    "routine DEFINITION
    $$ begin of 2nd part global - insert your code only below this line  *
    TYPES:
      BEGIN OF tys_SC_1_full,
         InfoObject: 0MPOINT Measuring point.
        MPOINT           TYPE /BI0/OIMPOINT,
         InfoObject: 0MDOC Measurement Document.
        MDOC           TYPE /BI0/OIMDOC,
         InfoObject: 0MPOBJ Object Number of Measuring Point Object.
        MPOBJ           TYPE /BI0/OIMPOBJ,
         InfoObject: 0MPTYP Type of Measuring Point.
        MPTYP           TYPE /BI0/OIMPTYP,
         InfoObject: 0PSORT Position Number of Measuring Point in Object (
    *Sort Field).
        PSORT           TYPE /BI0/OIPSORT,
         InfoObject: 0ASSEMBLY Assembly.
        ASSEMBLY           TYPE /BI0/OIASSEMBLY,
         InfoObject: 0ATINN Internal Characteristic Number.
        ATINN           TYPE /BI0/OIATINN,
         InfoObject: 0MDATE Date of Measurement.
        MDATE           TYPE /BI0/OIMDATE,
         InfoObject: 0TIME Time.
        TIME           TYPE /BI0/OITIME,
         InfoObject: 0DESIRSI Target Value for Measuring Point in SI Unit.
        DESIRSI           TYPE /BI0/OIDESIRSI,
         InfoObject: 0TVIND Target Value for Measuring Point Is Defined.
        TVIND           TYPE /BI0/OITVIND,
         InfoObject: 0MRMINI Lower Measurement Area Limit Is Defined.
        MRMINI           TYPE /BI0/OIMRMINI,
         InfoObject: 0MRMINSI Lower Meas. Limit or Min. Total Counter Read
    *ing in SI Unit.
        MRMINSI           TYPE /BI0/OIMRMINSI,
         InfoObject: 0MRMAXI Upper Measurement Area Limit Is Defined.
        MRMAXI           TYPE /BI0/OIMRMAXI,
         InfoObject: 0SIUNIT SI unit.
        SIUNIT           TYPE /BI0/OISIUNIT,
         InfoObject: 0CJUMPSI Counter Overflow Reading in SI Unit.
        CJUMPSI           TYPE /BI0/OICJUMPSI,
         InfoObject: 0PYEARSI Annual Performance in SI Unit.
        PYEARSI           TYPE /BI0/OIPYEARSI,
         InfoObject: 0CREATED_BY Created By.
        CREATED_BY           TYPE /BI0/OICREATED_BY,
         InfoObject: 0READSI Measured Value/Total Counter Reading in SI Un
    *it.
        READSI           TYPE /BI0/OIREADSI,
         InfoObject: 0READEU Measured Value in Document Entry Unit.
        READEU           TYPE /BI0/OIREADEU,
         InfoObject: 0RECDU Unit of Measurement for Document Entry.
        RECDU           TYPE /BI0/OIRECDU,
         InfoObject: 0CNTRRSI Counter Reading in SI Unit.
        CNTRRSI           TYPE /BI0/OICNTRRSI,
         InfoObject: 0CDIFFSI Counter Reading Difference in SI Unit.
        CDIFFSI           TYPE /BI0/OICDIFFSI,
         InfoObject: 0CAT_TYPE Catalog.
        CAT_TYPE           TYPE /BI0/OICAT_TYPE,
         InfoObject: 0CAT_GROUP Code group.
        CAT_GROUP           TYPE /BI0/OICAT_GROUP,
         InfoObject: 0FI_STATUS Processing Status.
        FI_STATUS           TYPE /BI0/OIFI_STATUS,
         InfoObject: 0DIM_ID Dimension Key.
        DIM_ID           TYPE /BI0/OIDIM_ID,
         InfoObject: 0CNTIND Measuring Point is Counter.
        CNTIND           TYPE /BI0/OICNTIND,
         InfoObject: 0EQUIPMENT Equipment Number.
        EQUIPMENT           TYPE /BI0/OIEQUIPMENT,
         InfoObject: 0FUNCT_LOC Functional Location.
        FUNCT_LOC           TYPE /BI0/OIFUNCT_LOC,
         InfoObject: 0CAT_CODE Code.
        CAT_CODE           TYPE /BI0/OICAT_CODE,
         InfoObject: 0MRMAXSI Upper Meas. Limit or Max. Total Counter Read
    *ing in SI Unit.
        MRMAXSI           TYPE /BI0/OIMRMAXSI,
         InfoObject: 0DOCAF Measurement Document Included for Associated T
    *ask.
        DOCAF           TYPE /BI0/OIDOCAF,
         InfoObject: 0RECORDMODE BW Delta Process: Record Mode.
        RECORDMODE           TYPE RODMUPDMOD,
         Field: RECNO Data record number.
        RECNO           TYPE RSARECORD,
      END   OF tys_SC_1_full.
    TYPES:
      tyt_SC_1_full        TYPE STANDARD TABLE OF tys_SC_1_full
                        WITH NON-UNIQUE DEFAULT KEY.
    TYPES:
      BEGIN OF tys_TG_1_full,
         Field: SID Master data ID.
        SID           TYPE RSSID,
         Field: DATAPAKID Data packet number.
        DATAPAKID           TYPE RSDATAPID,
         Field: RECORD Data record number.
        RECORD           TYPE RSARECORD,
         InfoObject: 0MPOINT Measuring point.
        MPOINT           TYPE /BI0/OIMPOINT,
         InfoObject: 0MDOC Measurement Document.
        MDOC           TYPE /BI0/OIMDOC,
         InfoObject: 0MRMINSI Lower Meas. Limit or Min. Total Counter Read
    *ing in SI Unit.
        MRMINSI           TYPE /BI0/OIMRMINSI,
         InfoObject: 0FI_STATUS Processing Status.
        FI_STATUS           TYPE /BI0/OIFI_STATUS,
         InfoObject: 0DIM_ID Dimension Key.
        DIM_ID           TYPE /BI0/OIDIM_ID,
         InfoObject: 0CNTIND Measuring Point is Counter.
        CNTIND           TYPE /BI0/OICNTIND,
         InfoObject: 0EQUIPMENT Equipment Number.
        EQUIPMENT           TYPE /BI0/OIEQUIPMENT,
         InfoObject: 0FUNCT_LOC Functional Location.
        FUNCT_LOC           TYPE /BI0/OIFUNCT_LOC,
         InfoObject: 0CAT_CODE Code.
        CAT_CODE           TYPE /BI0/OICAT_CODE,
         InfoObject: 0CAT_TYPE Catalog.
        CAT_TYPE           TYPE /BI0/OICAT_TYPE,
         InfoObject: 0CAT_GROUP Code group.
        CAT_GROUP           TYPE /BI0/OICAT_GROUP,
         InfoObject: 0CREATED_BY Created By.
        CREATED_BY           TYPE /BI0/OICREATED_BY,
         InfoObject: 0MPOBJ Object Number of Measuring Point Object.
        MPOBJ           TYPE /BI0/OIMPOBJ,
         InfoObject: 0READEU Measured Value in Document Entry Unit.
        READEU           TYPE /BI0/OIREADEU,
         InfoObject: 0CJUMPSI Counter Overflow Reading in SI Unit.
        CJUMPSI           TYPE /BI0/OICJUMPSI,
         InfoObject: 0PYEARSI Annual Performance in SI Unit.
        PYEARSI           TYPE /BI0/OIPYEARSI,
         InfoObject: 0PSORT Position Number of Measuring Point in Object (
    *Sort Field).
        PSORT           TYPE /BI0/OIPSORT,
         InfoObject: 0ASSEMBLY Assembly.
        ASSEMBLY           TYPE /BI0/OIASSEMBLY,
         InfoObject: 0ATINN Internal Characteristic Number.
        ATINN           TYPE /BI0/OIATINN,
         InfoObject: 0MDATE Date of Measurement.
        MDATE           TYPE /BI0/OIMDATE,
         InfoObject: 0TIME Time.
        TIME           TYPE /BI0/OITIME,
         InfoObject: 0TVIND Target Value for Measuring Point Is Defined.
        TVIND           TYPE /BI0/OITVIND,
         InfoObject: 0MRMINI Lower Measurement Area Limit Is Defined.
        MRMINI           TYPE /BI0/OIMRMINI,
         InfoObject: 0DESIRSI Target Value for Measuring Point in SI Unit.
        DESIRSI           TYPE /BI0/OIDESIRSI,
         InfoObject: 0SIUNIT SI unit.
        SIUNIT           TYPE /BI0/OISIUNIT,
         InfoObject: 0DESIREU Target Value for Measuring Point in Document
    Entry Unit.
        DESIREU           TYPE /BI0/OIDESIREU,
         InfoObject: 0CNTRRSI Counter Reading in SI Unit.
        CNTRRSI           TYPE /BI0/OICNTRRSI,
         InfoObject: 0CDIFFSI Counter Reading Difference in SI Unit.
        CDIFFSI           TYPE /BI0/OICDIFFSI,
         InfoObject: 0RECDU Unit of Measurement for Document Entry.
        RECDU           TYPE /BI0/OIRECDU,
         InfoObject: 0MRMINEU Lower Meas. Limit or Min. Total Counter Read
    *ing Document UoM.
        MRMINEU           TYPE /BI0/OIMRMINEU,
         InfoObject: 0MRMAXEU Upper Meas. Limit or Max. Total Counter Read
    *ing in Doc. M.U..
        MRMAXEU           TYPE /BI0/OIMRMAXEU,
         InfoObject: 0MRMAXI Upper Measurement Area Limit Is Defined.
        MRMAXI           TYPE /BI0/OIMRMAXI,
         InfoObject: 0CNTRREU Counter Reading in Document Entry Unit.
        CNTRREU           TYPE /BI0/OICNTRREU,
         InfoObject: 0CDIFFEU Counter Reading Difference in Document Entry
    Unit.
        CDIFFEU           TYPE /BI0/OICDIFFEU,
         InfoObject: 0RECORDMODE BW Delta Process: Record Mode.
        RECORDMODE           TYPE RODMUPDMOD,
         InfoObject: 0MRMAXSI Upper Meas. Limit or Max. Total Counter Read
    *ing in SI Unit.
        MRMAXSI           TYPE /BI0/OIMRMAXSI,
         InfoObject: 0READSI Measured Value/Total Counter Reading in SI Un
    *it.
        READSI           TYPE /BI0/OIREADSI,
      END   OF tys_TG_1_full.
    TYPES:
      BEGIN OF tys_SC_1__RULE_34,
         InfoObject: 0DESIRSI Target Value for Measuring Point in SI Unit.
        DESIRSI           TYPE /BI0/OIDESIRSI,
         InfoObject: 0TVIND Target Value for Measuring Point Is Defined.
        TVIND           TYPE /BI0/OITVIND,
         InfoObject: 0SIUNIT SI unit.
        SIUNIT           TYPE /BI0/OISIUNIT,
         InfoObject: 0RECDU Unit of Measurement for Document Entry.
        RECDU           TYPE /BI0/OIRECDU,
         Field: RECORD.
        RECORD           TYPE RSARECORD,
      END   OF tys_SC_1__RULE_34.
    TYPES:
      BEGIN OF tys_SC_1__RULE_35,
         InfoObject: 0MRMINI Lower Measurement Area Limit Is Defined.
        MRMINI           TYPE /BI0/OIMRMINI,
         InfoObject: 0MRMINSI Lower Meas. Limit or Min. Total Counter Read
    *ing in SI Unit.
        MRMINSI           TYPE /BI0/OIMRMINSI,
         InfoObject: 0SIUNIT SI unit.
        SIUNIT           TYPE /BI0/OISIUNIT,
         InfoObject: 0RECDU Unit of Measurement for Document Entry.
        RECDU           TYPE /BI0/OIRECDU,
         Field: RECORD.
        RECORD           TYPE RSARECORD,
      END   OF tys_SC_1__RULE_35.
    TYPES:
      BEGIN OF tys_SC_1__RULE_36,
         InfoObject: 0MRMAXI Upper Measurement Area Limit Is Defined.
        MRMAXI           TYPE /BI0/OIMRMAXI,
         InfoObject: 0SIUNIT SI unit.
        SIUNIT           TYPE /BI0/OISIUNIT,
         InfoObject: 0RECDU Unit of Measurement for Document Entry.
        RECDU           TYPE /BI0/OIRECDU,
         InfoObject: 0MRMAXSI Upper Meas. Limit or Max. Total Counter Read
    *ing in SI Unit.
        MRMAXSI           TYPE /BI0/OIMRMAXSI,
         Field: RECORD.
        RECORD           TYPE RSARECORD,
      END   OF tys_SC_1__RULE_36.
    TYPES:
      BEGIN OF tys_SC_1__RULE_37,
         InfoObject: 0SIUNIT SI unit.
        SIUNIT           TYPE /BI0/OISIUNIT,
         InfoObject: 0RECDU Unit of Measurement for Document Entry.
        RECDU           TYPE /BI0/OIRECDU,
         InfoObject: 0CNTRRSI Counter Reading in SI Unit.
        CNTRRSI           TYPE /BI0/OICNTRRSI,
         InfoObject: 0CNTIND Measuring Point is Counter.
        CNTIND           TYPE /BI0/OICNTIND,
         Field: RECORD.
        RECORD           TYPE RSARECORD,
      END   OF tys_SC_1__RULE_37.
    TYPES:
      BEGIN OF tys_SC_1__RULE_38,
         InfoObject: 0SIUNIT SI unit.
        SIUNIT           TYPE /BI0/OISIUNIT,
         InfoObject: 0RECDU Unit of Measurement for Document Entry.
        RECDU           TYPE /BI0/OIRECDU,
         InfoObject: 0CDIFFSI Counter Reading Difference in SI Unit.
        CDIFFSI           TYPE /BI0/OICDIFFSI,
         InfoObject: 0CNTIND Measuring Point is Counter.
        CNTIND           TYPE /BI0/OICNTIND,
         Field: RECORD.
        RECORD           TYPE RSARECORD,
      END   OF tys_SC_1__RULE_38.
    Additional types for start routine interface
    TYPES:
      data_package_structure type tys_SC_1_full.
    Additional declaration for update rule interface
    DATA:
      MONITOR       type standard table of rsmonitor  WITH HEADER LINE,
      MONITOR_RECNO type standard table of rsmonitors WITH HEADER LINE,
      RECORD_NO     LIKE SY-TABIX,
      RECORD_ALL    LIKE SY-TABIX,
      SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS.
    global definitions from update rules
    TABLES: ...
    DATA:   ...
    *******DATA:  G_T_0EQUIPMENT  TYPE STANDARD TABLE OF /BI0/MEQUIPMENT.
    data: lt_data type ref to data.
    data: ls_data type ref to data.
    field-symbols: <G_T_0EQUIPMENT> type standard table.
    field-symbols: <G_S_0EQUIPMENT> type any.
    field-symbols: <FUNCT_LOC> type any.
    field-symbols: <DATEFROM> type any.
    field-symbols: <DATETO> type any.
    constants: c_tabname type rstlogotab value '/BI0/MEQUIPMENT'.
    *&      Form  routine_9998
          text
         -->DATA_PACKAGE            text
         -->ABORT                   text
         -->RAISING                 text
         -->CX_SY_ARITHMETIC_ERROR  text
         -->CX_SY_CONVERSION_ERROR  text
    FORM routine_9998
      TABLES DATA_PACKAGE TYPE tyt_SC_1_full
      CHANGING
        ABORT          LIKE sy-subrc
      RAISING
        cx_sy_arithmetic_error
        cx_sy_conversion_error.
    init variables
    fill the internal tables "MONITOR" and/or "MONITOR_RECNO",
    to make monitor entries
    In this start routine missing functional location for
    an equipment is added to a Data Package record, if it is available
    in the master data of the equipment
      create data lt_data type table of (c_tabname).
      assign lt_data->* to <G_T_0EQUIPMENT>.
      create data ls_data type (c_tabname).
      assign ls_data->* to <G_S_0EQUIPMENT>.
      assign component 'FUNCT_LOC' of structure <G_S_0EQUIPMENT> to
    <FUNCT_LOC>.
      assign component 'DATE_FROM' of structure <G_S_0EQUIPMENT> to
    <DATEFROM>.
      assign component 'DATE_TO' of structure <G_S_0EQUIPMENT> to
    <DATETO>.
      CALL FUNCTION 'RSAU_READ_MASTER_DATA'
        EXPORTING
          I_IOBJNM                = '0EQUIPMENT'
          I_FLG_WHOLE_TABLE       = 'X'
        IMPORTING
          E_TABLE                 = <G_T_0EQUIPMENT>
        EXCEPTIONS
          READ_ERROR              = 1
          NO_SUCH_ATTRIBUTE       = 2
          WRONG_IMPORT_PARAMETERS = 3
          CHAVL_NOT_FOUND         = 4
          OTHERS                  = 5.
      CASE SY-SUBRC.
        WHEN 0.
          LOOP AT <G_T_0EQUIPMENT> INTO <G_S_0EQUIPMENT>.
            IF <FUNCT_LOC> IS INITIAL.
              DELETE <G_T_0EQUIPMENT>.
            ENDIF.
    master data collected and condensed
          ENDLOOP.
          LOOP AT DATA_PACKAGE.
            IF ( DATA_PACKAGE-FUNCT_LOC IS INITIAL ) AND
               ( DATA_PACKAGE-EQUIPMENT IS NOT INITIAL ).
              READ TABLE <G_T_0EQUIPMENT> WITH KEY
                ('EQUIPMENT') = DATA_PACKAGE-EQUIPMENT INTO <G_S_0EQUIPMENT>
              IF SY-SUBRC = 0.
                IF ( DATA_PACKAGE-MDATE >= <DATEFROM> )
                   AND ( DATA_PACKAGE-MDATE <= <DATETO> ).
    record for equipment exists and valid
                  DATA_PACKAGE-FUNCT_LOC = <FUNCT_LOC>.
                  MODIFY DATA_PACKAGE.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDLOOP.
        WHEN 4.
    master data is not (yet) loaded
        WHEN OTHERS.
    problem occured, output as warning
          MONITOR-MSGID = SY-MSGID.
          MONITOR-MSGTY = 'W'.
          MONITOR-MSGNO = SY-MSGNO.
          MONITOR-MSGV1 = SY-MSGV1.
          MONITOR-MSGV2 = SY-MSGV2.
          MONITOR-MSGV3 = SY-MSGV3.
          MONITOR-MSGV4 = SY-MSGV4.
          APPEND MONITOR.
      ENDCASE.
    if abort is not equal zero, the update process will be canceled
      ABORT = 0.
    ENDFORM.                    "routine_9998
    *&      Form  routine_0001
          text
         -->COMM_STRUCTURE          text
         -->RESULT                  text
         -->RETURNCODE              text
         -->ABORT                   text
         -->RAISING                 text
         -->CX_SY_ARITHMETIC_ERROR  text
         -->CX_SY_CONVERSION_ERROR  text
    FORM routine_0001
      USING
        COMM_STRUCTURE type tys_SC_1__RULE_34
      CHANGING
        RESULT         TYPE tys_TG_1_full-DESIREU
        RETURNCODE     LIKE sy-subrc
        ABORT          LIKE sy-subrc
      RAISING
        cx_sy_arithmetic_error
        cx_sy_conversion_error.
    init variables
    fill the internal table "MONITOR", to make monitor entries
      CLEAR RESULT.
      IF COMM_STRUCTURE-TVIND = 'X'.
        CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
          EXPORTING
            INPUT                      = COMM_STRUCTURE-DESIRSI
            NO_TYPE_CHECK              = 'X'
      ROUND_SIGN                 = ' '
            UNIT_IN                    = COMM_STRUCTURE-SIUNIT
            UNIT_OUT                   = COMM_STRUCTURE-RECDU
          IMPORTING
      ADD_CONST                  =
      DECIMALS                   =
      DENOMINATOR                =
      NUMERATOR                  =
            OUTPUT                     = RESULT
       EXCEPTIONS
         CONVERSION_NOT_FOUND       = 1
         DIVISION_BY_ZERO           = 2
         INPUT_INVALID              = 3
         OUTPUT_INVALID             = 4
         OVERFLOW                   = 5
         TYPE_INVALID               = 6
         UNITS_MISSING              = 7
         UNIT_IN_NOT_FOUND          = 8
         UNIT_OUT_NOT_FOUND         = 9
         OTHERS                     = 10
        IF SY-SUBRC <> 0.
          MONITOR-MSGID = SY-MSGID.
          MONITOR-MSGTY = 'W'.
          MONITOR-MSGNO = SY-MSGNO.
          MONITOR-MSGV1 = SY-MSGV1.
          MONITOR-MSGV2 = SY-MSGV2.
          MONITOR-MSGV3 = SY-MSGV3.
          MONITOR-MSGV4 = SY-MSGV4.
          APPEND MONITOR.
        ENDIF.
      ENDIF.
    if abort is not equal zero, the update process will be canceled
      ABORT = 0.
    ENDFORM.                    "routine_0001
    *&      Form  routine_0002
          text
         -->COMM_STRUCTURE          text
         -->RESULT                  text
         -->RETURNCODE              text
         -->ABORT                   text
         -->RAISING                 text
         -->CX_SY_ARITHMETIC_ERROR  text
         -->CX_SY_CONVERSION_ERROR  text
    FORM routine_0002
      USING
        COMM_STRUCTURE type tys_SC_1__RULE_35
      CHANGING
        RESULT         TYPE tys_TG_1_full-MRMINEU
        RETURNCODE     LIKE sy-subrc
        ABORT          LIKE sy-subrc
      RAISING
        cx_sy_arithmetic_error
        cx_sy_conversion_error.
    init variables
    fill the internal table "MONITOR", to make monitor entries
      CLEAR RESULT.
      IF COMM_STRUCTURE-MRMINI = 'X'.
        CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
          EXPORTING
            INPUT                      = COMM_STRUCTURE-MRMINSI
            NO_TYPE_CHECK              = 'X'
      ROUND_SIGN                 = ' '
            UNIT_IN                    = COMM_STRUCTURE-SIUNIT
            UNIT_OUT                   = COMM_STRUCTURE-RECDU
          IMPORTING
      ADD_CONST                  =
      DECIMALS                   =
      DENOMINATOR                =
      NUMERATOR                  =
            OUTPUT                     = RESULT
       EXCEPTIONS
         CONVERSION_NOT_FOUND       = 1
         DIVISION_BY_ZERO           = 2
         INPUT_INVALID              = 3
         OUTPUT_INVALID             = 4
         OVERFLOW                   = 5
         TYPE_INVALID               = 6
         UNITS_MISSING              = 7
         UNIT_IN_NOT_FOUND          = 8
         UNIT_OUT_NOT_FOUND         = 9
         OTHERS                     = 10
        IF SY-SUBRC <> 0.
          MONITOR-MSGID = SY-MSGID.
          MONITOR-MSGTY = 'W'.
          MONITOR-MSGNO = SY-MSGNO.
          MONITOR-MSGV1 = SY-MSGV1.
          MONITOR-MSGV2 = SY-MSGV2.
          MONITOR-MSGV3 = SY-MSGV3.
          MONITOR-MSGV4 = SY-MSGV4.
          APPEND MONITOR.
        ENDIF.
      ENDIF.
    if abort is not equal zero, the update process will be canceled
      ABORT = 0.
    ENDFORM.                    "routine_0002
    *&      Form  routine_0003
          text
         -->COMM_STRUCTURE          text
         -->RESULT                  text
         -->RETURNCODE              text
         -->ABORT                   text
         -->RAISING                 text
         -->CX_SY_ARITHMETIC_ERROR  text
         -->CX_SY_CONVERSION_ERROR  text
    FORM routine_0003
      USING
        COMM_STRUCTURE type tys_SC_1__RULE_36
      CHANGING
        RESULT         TYPE tys_TG_1_full-MRMAXEU
        RETURNCODE     LIKE sy-subrc
        ABORT          LIKE sy-subrc
      RAISING
        cx_sy_arithmetic_error
        cx_sy_conversion_error.
    init variables
    fill the internal table "MONITOR", to make monitor entries
      CLEAR RESULT.
      IF COMM_STRUCTURE-MRMAXI = 'X'.
        CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
          EXPORTING
            INPUT                      = COMM_STRUCTURE-MRMAXSI
            NO_TYPE_CHECK              = 'X'
      ROUND_SIGN                 = ' '
            UNIT_IN                    = COMM_STRUCTURE-SIUNIT
            UNIT_OUT                   = COMM_STRUCTURE-RECDU
          IMPORTING
      ADD_CONST                  =
      DECIMALS                   =
      DENOMINATOR                =
      NUMERATOR                  =
            OUTPUT                     = RESULT
       EXCEPTIONS
         CONVERSION_NOT_FOUND       = 1
         DIVISION_BY_ZERO           = 2
         INPUT_INVALID              = 3
         OUTPUT_INVALID             = 4
         OVERFLOW                   = 5
         TYPE_INVALID               = 6
         UNITS_MISSING              = 7
         UNIT_IN_NOT_FOUND          = 8
         UNIT_OUT_NOT_FOUND         = 9
         OTHERS                     = 10
        IF SY-SUBRC <> 0.
          MONITOR-MSGID = SY-MSGID.
          MONITOR-MSGTY = 'W'.
          MONITOR-MSGNO = SY-MSGNO.
          MONITOR-MSGV1 = SY-MSGV1.
          MONITOR-MSGV2 = SY-MSGV2.
          MONITOR-MSGV3 = SY-MSGV3.
          MONITOR-MSGV4 = SY-MSGV4.
          APPEND MONITOR.
        ENDIF.
      ENDIF.
    if abort is not equal zero, the update process will be canceled
      ABORT = 0.
    ENDFORM.                    "routine_0003
    *&      Form  routine_0004
          text
         -->COMM_STRUCTURE          text
         -->RESULT                  text
         -->RETURNCODE              text
         -->ABORT                   text
         -->RAISING                 text
         -->CX_SY_ARITHMETIC_ERROR  text
         -->CX_SY_CONVERSION_ERROR  text
    FORM routine_0004
      USING
        COMM_STRUCTURE type tys_SC_1__RULE_37
      CHANGING
        RESULT         TYPE tys_TG_1_full-CNTRREU
        RETURNCODE     LIKE sy-subrc
        ABORT          LIKE sy-subrc
      RAISING
        cx_sy_arithmetic_error
        cx_sy_conversion_error.
    init variables
    fill the internal table "MONITOR", to make monitor entries
      CLEAR RESULT.
      IF COMM_STRUCTURE-CNTIND = 'X'.
        CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
          EXPORTING
            INPUT                      = COMM_STRUCTURE-CNTRRSI
            NO_TYPE_CHECK              = 'X'
      ROUND_SIGN                 = ' '
            UNIT_IN                    = COMM_STRUCTURE-SIUNIT
            UNIT_OUT                   = COMM_STRUCTURE-RECDU
          IMPORTING
      ADD_CONST                  =
      DECIMALS                   =
      DENOMINATOR                =
      NUMERATOR                  =
            OUTPUT                     = RESULT
       EXCEPTIONS
         CONVERSION_NOT_FOUND       = 1
         DIVISION_BY_ZERO           = 2
         INPUT_INVALID              = 3
         OUTPUT_INVALID             = 4
         OVERFLOW                   = 5
         TYPE_INVALID               = 6
         UNITS_MISSING              = 7
         UNIT_IN_NOT_FOUND          = 8
         UNIT_OUT_NOT_FOUND         = 9
         OTHERS                     = 10
        IF SY-SUBRC <> 0.
          MONITOR-MSGID = SY-MSGID.
          MONITOR-MSGTY = 'W'.
          MONITOR-MSGNO = SY-MSGNO.
          MONITOR-MSGV1 = SY-MSGV1.
          MONITOR-MSGV2 = SY-MSGV2.
          MONITOR-MSGV3 = SY-MSGV3.
          MONITOR-MSGV4 = SY-MSGV4.
          APPEND MONITOR.
        ENDIF.
      ENDIF.
    if abort is not equal zero, the update process will be canceled
      ABORT = 0.
    ENDFORM.                    "routine_0004
    *&      Form  routine_0005
          text
         -->COMM_STRUCTURE          text
         -->RESULT                  text
         -->RETURNCODE              text
         -->ABORT                   text
         -->RAISING                 text
         -->CX_SY_ARITHMETIC_ERROR  text
         -->CX_SY_CONVERSION_ERROR  text
    FORM routine_0005
      USING
        COMM_STRUCTURE type tys_SC_1__RULE_38
      CHANGING
        RESULT         TYPE tys_TG_1_full-CDIFFEU
        RETURNCODE     LIKE sy-subrc
        ABORT          LIKE sy-subrc
      RAISING
        cx_sy_arithmetic_error
        cx_sy_conversion_error.
    init variables
    fill the internal table "MONITOR", to make monitor entries
      CLEAR RESULT.
      IF COMM_STRUCTURE-CNTIND = 'X'.
        CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
          EXPORTING
            INPUT                      = COMM_STRUCTURE-CDIFFSI
            NO_TYPE_CHECK              = 'X'
      ROUND_SIGN                 = ' '
            UNIT_IN                    = COMM_STRUCTURE-SIUNIT
            UNIT_OUT                   = COMM_STRUCTURE-RECDU
          IMPORTING
      ADD_CONST                  =
      DECIMALS                   =
      DENOMINATOR                =
      NUMERATOR                  =
            OUTPUT                     = RESULT
       EXCEPTIONS
         CONVERSION_NOT_FOUND       = 1
         DIVISION_BY_ZERO           = 2
         INPUT_INVALID              = 3
         OUTPUT_INVALID             = 4
         OVERFLOW                   = 5
         TYPE_INVALID               = 6
         UNITS_MISSING              = 7
         UNIT_IN_NOT_FOUND          = 8
         UNIT_OUT_NOT_FOUND         = 9
         OTHERS                     = 10
        IF SY-SUBRC <> 0.
          MONITOR-MSGID = SY-MSGID.
          MONITOR-MSGTY = 'W'.
          MONITOR-MSGNO = SY-MSGNO.
          MONITOR-MSGV1 = SY-MSGV1.
          MONITOR-MSGV2 = SY-MSGV2.
          MONITOR-MSGV3 = SY-MSGV3.
          MONITOR-MSGV4 = SY-MSGV4.
          APPEND MONITOR.
        ENDIF.
      ENDIF.
    if abort is not equal zero, the update process will be canceled
      ABORT = 0.
    ENDFORM.                    "routine_0005
    TYPES: BEGIN OF TY_/BI0/PMPOINT,
          MPOINT      TYPE /BI0/PMPOINT-MPOINT,
       MRNGU     TYPE /BI0/PMPOINT-MRNGU,
    END of TY_/BI0/PMPOINT.
    DATA: /BI0/PMPOINT_TEMP TYPE STANDARD TABLE OF
    TY_/BI0/PMPOINT,
          W_/BI0/PMPOINT_TEMP like line of /BI0/PMPOINT_TEMP.
    $$ end of 2nd part global - insert your code only before this line   *
          CLASS routine IMPLEMENTATION
    CLASS lcl_transform IMPLEMENTATION.
          Method start_routine
          Calculation of source package via start routine
      <-> source package
      METHOD start_routine.
    *=== Segments ===
        FIELD-SYMBOLS:
          <SOURCE_FIELDS>    TYPE tys_SC_1.
        DATA:
          MONITOR_REC     TYPE rstmonitor.
    *$*$ begin of routine - insert your code only below this line        *-*
        Data:
          l_subrc          type sy-tabix,
          l_abort          type sy-tabix,
          ls_monitor       TYPE rsmonitor,
          ls_monitor_recno TYPE rsmonitors.
        REFRESH:
          MONITOR,
          MONITOR_RECNO.
    Runtime attributs
        SOURCE_SYSTEM  = p_r_request->get_logsys( ).
    Migrated update rule call
        Perform routine_9998
        TABLES
          SOURCE_PACKAGE
        CHANGING
          l_abort.
    *-- Convert Messages in Transformation format
        LOOP AT MONITOR_RECNO INTO ls_monitor_recno.
          move-CORRESPONDING ls_monitor_recno to MONITOR_REC.
          append monitor_rec to MONITOR.
        ENDLOOP.
        LOOP AT MONITOR INTO ls_monitor.
          move-CORRESPONDING ls_monitor to MONITOR_REC.
          append monitor_rec to MONITOR.
        ENDLOOP.
        IF l_abort <> 0.
          RAISE EXCEPTION TYPE CX_RSROUT_ABORT.
        ENDIF.
    $$ end of routine - insert your code only before this line         -
      ENDMETHOD.                    "start_routine
          Method inverse_start_routine
          This subroutine needs to be implemented only for direct access
          (for better performance) and for the Report/Report Interface
          (drill through).
          The inverse routine should transform a projection and
          a selection for the target to a projection and a selection
          for the source, respectively.
          If the implementation remains empty all fields are filled and
          all values are selected.
      METHOD inverse_start_routine.
    $$ begin of inverse routine - insert your code only below this line-
        ... "insert your code here
    $$ end of inverse routine - insert your code only before this line -
      ENDMETHOD.                    "inverse_start_routine
    ENDCLASS.                    "routine IMPLEMENTATION

  • Error in start routine

    Hello All,
    I am trying to activate a couple transformations for cubes in purchasing. I am getting the error in start routine. I checked the start routine.
    E:In PERFORM or CALL FUNCTION "ROUTINE_9998", the actual parameter
    "SOURCE_PACKAGE" is incompatible with the formal parameter
    "DATA_PACKAGE"
    I did see a couple threads in sdn regarding this. But wanted to make sure if those thing sapplyin my case. I am new to SAP BW hence want to make sure before touching the code.
    Can someone help me resolve this soon?
    Thanks,
    Dee.

    Hello Rakesh,
    METHODS
          start_routine
            IMPORTING
              request                  type rsrequest
              datapackid               type rsdatapid
            EXPORTING
              monitor                  type rstr_ty_t_monitors
            CHANGING
              SOURCE_PACKAGE              type tyt_SC_1
            RAISING
              cx_rsrout_abort.
        METHODS
          inverse_start_routine
            IMPORTING
              i_th_fields_outbound         TYPE rstran_t_field_inv
              i_r_selset_outbound          TYPE REF TO cl_rsmds_set
              i_is_main_selection          TYPE rs_bool
              i_r_selset_outbound_complete TYPE REF TO cl_rsmds_set
              i_r_universe_inbound         TYPE REF TO cl_rsmds_universe
            CHANGING
              c_th_fields_inbound          TYPE rstran_t_field_inv
              c_r_selset_inbound           TYPE REF TO cl_rsmds_set
              c_exact                      TYPE rs_bool.
    ENDCLASS.                    "routine DEFINITION
    $$ begin of 2nd part global - insert your code only below this line  *
    *The above part is in gray and i cannot change it.
      MONITOR_RECNO.
    Runtime attributs
        SOURCE_SYSTEM  = p_r_request->get_logsys( ).
    Migrated update rule call
      Perform routine_9998
      TABLES
        SOURCE_PACKAGE
      CHANGING
        l_abort.
    *-- Convert Messages in Transformation format
        LOOP AT MONITOR_RECNO INTO ls_monitor_recno.
          move-CORRESPONDING ls_monitor_recno to MONITOR_REC.
          append monitor_rec to MONITOR.
        ENDLOOP.
        LOOP AT MONITOR INTO ls_monitor.
          move-CORRESPONDING ls_monitor to MONITOR_REC.
          append monitor_rec to MONITOR.
        ENDLOOP.
        IF l_abort <> 0.
          RAISE EXCEPTION TYPE CX_RSROUT_ABORT.
        ENDIF.
    I dont know abap..can you please guide me with this

  • Problems in Start Routine of Transfermations (DTP)

    Hi Abap OO Gurus,
    I am migrating the 3.x data source to BI 7.0 ,here I am getting problems in DTP especially in the start routine . we are using the SP10, pls see the below code  . I have fixed some code still I am getting problems  at the below loop statement .
    PROGRAM trans_routine.
          CLASS routine DEFINITION
    CLASS lcl_transform DEFINITION.
      PUBLIC SECTION.
        TYPES:
          BEGIN OF tys_SC_1,
         InfoObject: 0MPOINT Measuring point.
            MPOINT           TYPE /BI0/OIMPOINT,
         InfoObject: 0MDOC Measurement Document.
            MDOC           TYPE /BI0/OIMDOC,
         InfoObject: 0MPOBJ Object Number of Measuring Point Object.
            MPOBJ           TYPE /BI0/OIMPOBJ,
         InfoObject: 0MPTYP Type of Measuring Point.
            MPTYP           TYPE /BI0/OIMPTYP,
         InfoObject: 0PSORT Position Number of Measuring Point in Object (
    *Sort Field).
            PSORT           TYPE /BI0/OIPSORT,
         InfoObject: 0ASSEMBLY Assembly.
            ASSEMBLY           TYPE /BI0/OIASSEMBLY,
         InfoObject: 0ATINN Internal Characteristic Number.
            ATINN           TYPE /BI0/OIATINN,
         InfoObject: 0MDATE Date of Measurement.
            MDATE           TYPE /BI0/OIMDATE,
         InfoObject: 0TIME Time.
            TIME           TYPE /BI0/OITIME,
         InfoObject: 0DESIRSI Target Value for Measuring Point in SI Unit.
            DESIRSI           TYPE /BI0/OIDESIRSI,
         InfoObject: 0TVIND Target Value for Measuring Point Is Defined.
            TVIND           TYPE /BI0/OITVIND,
         InfoObject: 0MRMINI Lower Measurement Area Limit Is Defined.
            MRMINI           TYPE /BI0/OIMRMINI,
         InfoObject: 0MRMINSI Lower Meas. Limit or Min. Total Counter Read
    *ing in SI Unit.
            MRMINSI           TYPE /BI0/OIMRMINSI,
         InfoObject: 0MRMAXI Upper Measurement Area Limit Is Defined.
            MRMAXI           TYPE /BI0/OIMRMAXI,
         InfoObject: 0SIUNIT SI unit.
            SIUNIT           TYPE /BI0/OISIUNIT,
         InfoObject: 0CJUMPSI Counter Overflow Reading in SI Unit.
            CJUMPSI           TYPE /BI0/OICJUMPSI,
         InfoObject: 0PYEARSI Annual Performance in SI Unit.
            PYEARSI           TYPE /BI0/OIPYEARSI,
         InfoObject: 0CREATED_BY Created By.
            CREATED_BY           TYPE /BI0/OICREATED_BY,
         InfoObject: 0READSI Measured Value/Total Counter Reading in SI Un
    *it.
            READSI           TYPE /BI0/OIREADSI,
         InfoObject: 0READEU Measured Value in Document Entry Unit.
            READEU           TYPE /BI0/OIREADEU,
         InfoObject: 0RECDU Unit of Measurement for Document Entry.
            RECDU           TYPE /BI0/OIRECDU,
         InfoObject: 0CNTRRSI Counter Reading in SI Unit.
            CNTRRSI           TYPE /BI0/OICNTRRSI,
         InfoObject: 0CDIFFSI Counter Reading Difference in SI Unit.
            CDIFFSI           TYPE /BI0/OICDIFFSI,
         InfoObject: 0CAT_TYPE Catalog.
            CAT_TYPE           TYPE /BI0/OICAT_TYPE,
         InfoObject: 0CAT_GROUP Code group.
            CAT_GROUP           TYPE /BI0/OICAT_GROUP,
         InfoObject: 0FI_STATUS Processing Status.
            FI_STATUS           TYPE /BI0/OIFI_STATUS,
         InfoObject: 0DIM_ID Dimension Key.
            DIM_ID           TYPE /BI0/OIDIM_ID,
         InfoObject: 0CNTIND Measuring Point is Counter.
            CNTIND           TYPE /BI0/OICNTIND,
         InfoObject: 0EQUIPMENT Equipment Number.
            EQUIPMENT           TYPE /BI0/OIEQUIPMENT,
         InfoObject: 0FUNCT_LOC Functional Location.
            FUNCT_LOC           TYPE /BI0/OIFUNCT_LOC,
         InfoObject: 0CAT_CODE Code.
            CAT_CODE           TYPE /BI0/OICAT_CODE,
         InfoObject: 0MRMAXSI Upper Meas. Limit or Max. Total Counter Read
    *ing in SI Unit.
            MRMAXSI           TYPE /BI0/OIMRMAXSI,
         InfoObject: 0DOCAF Measurement Document Included for Associated T
    *ask.
            DOCAF           TYPE /BI0/OIDOCAF,
         InfoObject: 0RECORDMODE BW Delta Process: Update Mode.
            RECORDMODE           TYPE RODMUPDMOD,
         Field: RECORD.
            RECORD           TYPE RSARECORD,
          END   OF tys_SC_1.
        TYPES:
          tyt_SC_1        TYPE STANDARD TABLE OF tys_SC_1
                            WITH NON-UNIQUE DEFAULT KEY.
        DATA:
          p_check_master_data_exist
                TYPE RSODSOCHECKONLY READ-ONLY,
    *-    Instance for getting request runtime attributs;
        Available information: Refer to methods of
        interface 'if_rsbk_request_admintab_view'
          p_r_request
                TYPE REF TO if_rsbk_request_admintab_view READ-ONLY.
      PRIVATE SECTION.
        TYPE-POOLS: rsd, rstr.
    $$ begin of global - insert your declaration only below this line  -
    TABLES: ...
    DATA:   ...
    *constants: c_tabname type rstlogotab value '/BI0/MEQUIPMENT'.
    $$ end of global - insert your declaration only before this line   -
        METHODS
          start_routine
            IMPORTING
              request                  type rsrequest
              datapackid               type rsdatapid
            EXPORTING
              monitor                  type rstr_ty_t_monitors
            CHANGING
              SOURCE_PACKAGE              type tyt_SC_1
            RAISING
              cx_rsrout_abort.
        METHODS
          inverse_start_routine
            IMPORTING
              i_th_fields_outbound         TYPE rstran_t_field_inv
              i_r_selset_outbound          TYPE REF TO cl_rsmds_set
              i_is_main_selection          TYPE rs_bool
              i_r_selset_outbound_complete TYPE REF TO cl_rsmds_set
              i_r_universe_inbound         TYPE REF TO cl_rsmds_universe
            CHANGING
              c_th_fields_inbound          TYPE rstran_t_field_inv
              c_r_selset_inbound           TYPE REF TO cl_rsmds_set
              c_exact                      TYPE rs_bool.
    ENDCLASS.                    "routine DEFINITION
    $$ begin of 2nd part global - insert your code only below this line  *
    ... "insert your code here
    data: lt_data type ref to data.
    data: ls_data type ref to data.
    field-symbols: <G_T_0EQUIPMENT> type standard table.
    field-symbols: <G_S_0EQUIPMENT> type any.
    field-symbols: <FUNCT_LOC> type any.
    field-symbols: <DATEFROM> type any.
    field-symbols: <DATETO> type any.
    constants: c_tabname type rstlogotab value '/BI0/MEQUIPMENT'.
    $$ end of 2nd part global - insert your code only before this line   *
          CLASS routine IMPLEMENTATION
    CLASS lcl_transform IMPLEMENTATION.
          Method start_routine
          Calculation of source package via start routine
      <-> source package
      METHOD start_routine.
    *=== Segments ===
        FIELD-SYMBOLS:
          <SOURCE_FIELDS>    TYPE tys_SC_1.
        DATA:
          MONITOR_REC     TYPE rstmonitor.
    $$ begin of routine - insert your code only below this line        -
    fill the internal tables "MONITOR" and/or "MONITOR_RECNO",
    to make monitor entries
    In this start routine missing functional location for
    an equipment is added to a Data Package record, if it is available
        create data lt_data type table of (c_tabname).
        assign lt_data->* to <G_T_0EQUIPMENT>.
        create data ls_data type (c_tabname).
        assign ls_data->* to <G_S_0EQUIPMENT>.
        assign component 'FUNCT_LOC' of structure <G_S_0EQUIPMENT> to
        <FUNCT_LOC>.
        assign component 'DATE_FROM' of structure <G_S_0EQUIPMENT> to
        <DATEFROM>.
        assign component 'DATE_TO' of structure <G_S_0EQUIPMENT> to
        <DATETO>.
        CALL FUNCTION 'RSAU_READ_MASTER_DATA'
          EXPORTING
            I_IOBJNM                = '0EQUIPMENT'
            I_FLG_WHOLE_TABLE       = 'X'
          IMPORTING
            E_TABLE                 = <G_T_0EQUIPMENT>
          EXCEPTIONS
            READ_ERROR              = 1
            NO_SUCH_ATTRIBUTE       = 2
            WRONG_IMPORT_PARAMETERS = 3
            CHAVL_NOT_FOUND         = 4
            OTHERS                  = 5.
        CASE SY-SUBRC.
          WHEN 0.
            LOOP AT <G_T_0EQUIPMENT> INTO <G_S_0EQUIPMENT>.
              IF <FUNCT_LOC> IS INITIAL.
                DELETE <G_T_0EQUIPMENT>.
              ENDIF.
    master data collected and condensed
            ENDLOOP.
            <b>LOOP AT SOURCE_PACKAGE ASSIGNING <SOURCE_FIELDS>.
              IF ( SOURCE_PACKAGE-FUNCT_LOC IS INITIAL ) AND
              ( SOURCE_PACKAGE-EQUIPMENT IS NOT INITIAL ).
                READ TABLE <G_T_0EQUIPMENT> WITH KEY
                ('EQUIPMENT') = SOURCE_PACKAGE-EQUIPMENT INTO <G_S_0EQUIPMENT>
                IF SY-SUBRC = 0.
                  IF ( SOURCE_PACKAGE-MDATE >= <DATEFROM> )
                  AND ( SOURCE_PACKAGE-MDATE <= <DATETO> ).</b>* record for equipment exists and valid
                    SOURCE_PACKAGE-FUNCT_LOC = <FUNCT_LOC>.               MODIFY SOURCE_PACKAGE.
                  ENDIF.
                ENDIF.
              ENDIF.
            ENDLOOP.
          WHEN 4.
    master data is not (yet) loaded
          WHEN OTHERS.
    problem occured, output as warning
            MONITOR-MSGID = SY-MSGID.
            MONITOR-MSGTY = 'W'.
            MONITOR-MSGNO = SY-MSGNO.
            MONITOR-MSGV1 = SY-MSGV1.
            MONITOR-MSGV2 = SY-MSGV2.
            MONITOR-MSGV3 = SY-MSGV3.
            MONITOR-MSGV4 = SY-MSGV4.
            APPEND MONITOR.
        ENDCASE.
    if abort is not equal zero, the update process will be canceled
    DEL  :ABORT = 0.
    Please adjust the syntax manually.
        - Automatically replaced: COMM_STRUCTURE with SOURCE_FIELDS
        - Included the new Exception Handling (instead of ABORT)
    $$ end of routine - insert your code only before this line         -
      ENDMETHOD.                    "start_routine
          Method inverse_start_routine
          This subroutine needs to be implemented only for direct access
          (for better performance) and for the Report/Report Interface
          (drill through).
          The inverse routine should transform a projection and
          a selection for the target to a projection and a selection
          for the source, respectively.
          If the implementation remains empty all fields are filled and
          all values are selected.
      METHOD inverse_start_routine.
    $$ begin of inverse routine - insert your code only below this line-
        ... "insert your code here
    $$ end of inverse routine - insert your code only before this line -
      ENDMETHOD.                    "inverse_start_routine
    ENDCLASS.                    "routine IMPLEMENTATION
    here I am getting the error like ""SOURCE_PACKAGE" is a table without a header line and therefore has no component called "FUNCT_LOC". I tried many ways to fix this problem.
    Could you some kind soul educate how to fix the problem .
    Thanks in advacne ,RP.

    Since the MONITOR is a table without header-line, u can no longer use it as a workarea for record entry. You can use MONITOR_REC defined in the data-section of this method to fill in the record and then append it to the table.
    MONITOR-MSGID = SY-MSGID.
    MONITOR-MSGTY = 'W'.
    MONITOR-MSGNO = SY-MSGNO.
    MONITOR-MSGV1 = SY-MSGV1.
    MONITOR-MSGV2 = SY-MSGV2.
    MONITOR-MSGV3 = SY-MSGV3.
    MONITOR-MSGV4 = SY-MSGV4.
    APPEND MONITOR.
    has to be replaced with
    clear MONITOR_REC.
    MONITOR_REC-MSGID = SY-MSGID.
    MONITOR_REC-MSGTY = 'W'.
    MONITOR_REC-MSGNO = SY-MSGNO.
    MONITOR_REC-MSGV1 = SY-MSGV1.
    MONITOR_REC-MSGV2 = SY-MSGV2.
    MONITOR_REC-MSGV3 = SY-MSGV3.
    MONITOR_REC-MSGV4 = SY-MSGV4.
    APPEND MONITOR_REC to MONITOR.

  • I can't convert my 3.x start routine to BI 7.0 start routine...

    Hi All,
    Can anyone help me to convert the below coding from 3.x start routine to BI 7.0 start routine.
    PROGRAM UPDATE_ROUTINE.
    $$ begin of global - insert your declaration only below this line  -
    TABLES: ...
    DATA:   ...
    $$ end of global - insert your declaration only before this line   -
    The follow definition is new in the BW3.x
    TYPES:
      BEGIN OF DATA_PACKAGE_STRUCTURE.
         INCLUDE STRUCTURE /BIC/CSCOIS_GMAS.
    TYPES:
         RECNO   LIKE sy-tabix,
      END OF DATA_PACKAGE_STRUCTURE.
    DATA:
      DATA_PACKAGE TYPE STANDARD TABLE OF DATA_PACKAGE_STRUCTURE
           WITH HEADER LINE
           WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.
    FORM startup
      TABLES   MONITOR STRUCTURE RSMONITOR "user defined monitoring
               MONITOR_RECNO STRUCTURE RSMONITORS " monitoring with record n
               DATA_PACKAGE STRUCTURE DATA_PACKAGE
      USING    RECORD_ALL LIKE SY-TABIX
               SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS
      CHANGING ABORT LIKE SY-SUBRC. "set ABORT <> 0 to cancel update
    $$ begin of routine - insert your code only below this line        -
    fill the internal tables "MONITOR" and/or "MONITOR_RECNO",
    to make monitor entries
    DATA : BEGIN OF t_yjepum OCCURS 0.
              INCLUDE STRUCTURE /bic/pyjepum.
    DATA : END OF t_yjepum.
    DATA : T_VER LIKE  ZTCO_VERCK OCCURS 10 WITH HEADER LINE.
      SELECT  * INTO CORRESPONDING FIELDS OF t_yjepum
      FROM  /bic/pyjepum
    WHERE  /bic/yopc IN ('AP', 'AS' ,'AR')  .
        APPEND  t_yjepum.
        CLEAR   t_yjepum.
      ENDSELECT.
    SELECT *   INTO  CORRESPONDING FIELDS OF T_VER
    FROM ZTCO_VERCK.
    APPEND T_VER.
      CLEAR  T_VER.
      ENDSELECT.
      LOOP AT DATA_PACKAGE.
    IF DATA_PACKAGE-/BIC/YJOBGUBUN = '3'.
    DATA_PACKAGE-/BIC/YAVERSI = '0'.
    ELSE.
    READ TABLE T_VER WITH KEY
      CALMONTH =  DATA_PACKAGE-CALMONTH
      YJOBGUBUN = DATA_PACKAGE-/BIC/YJOBGUBUN.
      DATA_PACKAGE-/BIC/YAVERSI = T_VER-YAVERSI.
    ENDIF.
    IF DATA_PACKAGE-/BIC/YJOBGUBUN = '3'
      and DATA_PACKAGE-/BIC/YCOM = 'C4C0'.
    IF  DATA_PACKAGE-/BIC/YACHAR+18(4) = 'C4CV' OR
        DATA_PACKAGE-/BIC/YACHAR+18(4) = 'C4CX' OR
        DATA_PACKAGE-/BIC/YACHAR+18(4) = 'C4CW'.
        DATA_PACKAGE-/BIC/YCOM =  DATA_PACKAGE-/BIC/YACHAR+18(4).
    ENDIF.
    ENDIF.
          MODIFY DATA_PACKAGE.
          CLEAR : DATA_PACKAGE.
    ENDLOOP.
    if abort is not equal zero, the update process will be canceled
      ABORT = 0.
    $$ end of routine - insert your code only before this line         -
    ENDFORM.

    There are a few basic rules you're not keeping to here.  Can't use header lines on your internal tables. Also you can't use the 'into corresponding fields of table' in a select loop.  So you don't need the append or the endselect statements.
    Try this:
    $$ begin of global - insert your declaration only below this line  -
    types:
    begin of tp_yjepum,
    include type /bic/pyjepm,
    end of tp_yjepum.
    *declare tables based on types without header lines
    data:
    t_yjepum   type standard table of tp_yjepum,
    s_vjepum  type tp_yjepum.  "work area for t_vjepum,
    *if you need a work area to use with the table use the same typing as your internal table
    t_ver      type standard table of ztco_verck.
    $$ end of global - insert your declaration only before this line   -
    $$ begin of routine - insert your code only below this line        -
        ... "insert your code here
    *--  fill table "MONITOR" with values of structure "MONITOR_REC"
    *-   to make monitor entries
        ... "to cancel the update process
       raise exception type CX_RSROUT_ABORT.
    select * into corresponding fields of table t_yjepum from /bic/pyjepum
    where /bic/yopc IN ('AP', 'AS' ,'AR') .
    no append or endselect required
    if sy-subrc ne 0.
    a message to the log if there was nothing in the table?
    endif.
    select * into corresponding fields of table t_ver from ztco_verck.
    if sy-subrc ne 0.
    a message to the log if there was nothing in the table?
    endif.

  • Identify the last data package in start routine

    Hi Everyone
    We have a start routine in transformations. We require to do some special processing in the start routine only when the last data package is executing. How can we determine in the start routine that current package is last one or not ? Any pointers in this direction are appreciated.

    Hi,
    You can get packet Id from datapackid in start routine and end routine. But I'm not so sure how to identify the last packet ID, alternatively you can store this packet id in some where else and read the same value in End routine if your logic(processing) permits to do this in End routine instead of Start routine.
    METHODS
          start_routine
            IMPORTING
              request                  type rsrequest
              datapackid               type rsdatapid
            EXPORTING
              monitor                  type rstr_ty_t_monitors
            CHANGING
              SOURCE_PACKAGE              type tyt_SC_1
            RAISING
              cx_rsrout_abort.
    hope it helps...
    regards.
    Raju

  • Start routine error - infosource 2LIS_13_VDITM

    Hello,
    During the activation of the standard InfoCube 0SD_C03 (Sales: Overview), I have encountered a problem in a transformation between the infosource 2LIS_13_VDITM and the afrementioned Cube (this transformation has been transferred during the activation of Business Content).
    The transformation is inactive after the installation (other dataflow structures, for other datasources attached to this Cube have been automatically activated). When I try to active it, an error message appers, informing that:
    a) Initial update has been set for some of the key rules (e.g. for target field 0VERSION) - but that is a minor obstacle; the bigger problem is that
    b) there is a syntax error in the start routine for this transformation
    Checking that start routine results with the following error:
    E:In PERFORM or CALL FUNCTION "ROUTINE_9998", the actual parameter
    "SOURCE_PACKAGE" is incompatible with the formal parameter
    "DATA_PACKAGE".
    Since I'm not an ABAPer, that info is a bit vague to me.
    I have tried to find an answer in the forums but with no success. So if anyone could provide a solution this problem or point me to a thread where it has been answered, I would be very grateful.
    I can provide more details should those be needed.
    Best Regards,
    Alek

    Thanks for the info Umesh,
    Just to be sure - I should simply change "SOURCE_PACKAGE" to "DATA_PACKAGE" in the code of the start routine? "Source_Package" is present in two places in that code:
    METHODS
          start_routine
            IMPORTING
              request                  type rsrequest
              datapackid               type rsdatapid
            EXPORTING
              monitor                  type rstr_ty_t_monitors
            CHANGING
              SOURCE_PACKAGE              type tyt_SC_1
            RAISING
              cx_rsrout_abort.
    and then after that in:
    Migrated update rule call
      Perform routine_9998
      TABLES
        SOURCE_PACKAGE
      CHANGING
        l_abort.
    Or should I revert to the 3.5 version? (as a side note, that Data Source (2LIS_13_VDITM) has been activated in 7.0 version by default, when I replicated data sources in BW).
    Praveen, as to your remarks, I have the datasource 2LIS_13_VDITM (in version 7.0) active, along with the appropriate Infosource. Transformation between the DataSource and InfoSource is active, and only the transformation between the InforSource and the Cube poses problems.
    BR,
    Alek

  • 0IC_C03: 2LIS_03_BF Transformation Start Routine Activation error

    Hi all,
    Iam getting activation error (Start Routine) while activating the transformation for the 2LIS_03_BF (Material Movements) data source for 0IC_C03 INFO CUBE. Iam getting an error for the Start Routine  and the error message is as follows:
    + E:In PERFORM or CALL FUNCTION "ROUTINE_9998", the actual parameter "SOURCE_PACKAGE" is incompatible with the formal parameter "DATA_PACKAGE".+
    Scenario: As per my client requirment i have tried to add on info object in to the existing info cube i.e., Movement Type which is an existing field in the info source and the data source and i have tried to map the same in the transformations between the info source and the info cube and activated the transformation. Then iam getting the above said start routine error, so to avoid this i have removed that object i.e., movement type from the info cube and tried to reactivate the transformations still iam getting the same routine error.
    Please suggest me th approach to resolve this issue.
    Regards,
    Prabhakar

    Hi Chandu,
    Please find below is the routine:
    PROGRAM trans_routine.
          CLASS routine DEFINITION
    CLASS lcl_transform DEFINITION.
      PUBLIC SECTION.
    Attributs
        DATA:
          p_check_master_data_exist
                TYPE RSODSOCHECKONLY READ-ONLY,
    *-    Instance for getting request runtime attributs;
        Available information: Refer to methods of
        interface 'if_rsbk_request_admintab_view'
          p_r_request
                TYPE REF TO if_rsbk_request_admintab_view READ-ONLY.
      PRIVATE SECTION.
        TYPE-POOLS: rsd, rstr.
      Rule specific types
        TYPES:
          BEGIN OF tys_SC_1,
         InfoObject: 0STORNO Reversal Indicator.
            STORNO           TYPE /BI0/OISTORNO,
         InfoObject: 0RT_PROMO promotion.
            RT_PROMO           TYPE /BI0/OIRT_PROMO,
         InfoObject: 0VAL_CLASS Valuation  class.
            VAL_CLASS           TYPE /BI0/OIVAL_CLASS,
         InfoObject: 0DOC_DATE Document Date.
            DOC_DATE           TYPE /BI0/OIDOC_DATE,
         InfoObject: 0STOCKTYPE StockType.
            STOCKTYPE           TYPE /BI0/OISTOCKTYPE,
         InfoObject: 0STOCKCAT Stock  Categories.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0PSTNG_DATE Posting date in the document.
            PSTNG_DATE           TYPE /BI0/OIPSTNG_DATE,
         InfoObject: 0COMP_CODE Company Code.
            COMP_CODE           TYPE /BI0/OICOMP_CODE,
         InfoObject: 0BWAPPLNM Application component.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0MOVETYPE movement Type (Inventory Management).
            MOVETYPE           TYPE /BI0/OIMOVETYPE,
         InfoObject: 0STOCKRELEV BW: Relevance to Stock.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0CPPVLC BW: Purchase Value in Local currency.
            CPPVLC           TYPE /BI0/OICPPVLC,
         InfoObject: 0CPSVLC BW: Sales Value in Local currency.
            CPSVLC           TYPE /BI0/OICPSVLC,
         InfoObject: 0CPSTLC BW: Sales Value in Local currency.
            CPSTLC           TYPE /BI0/OICPSTLC,
         InfoObject: 0CPQUABU BW: Amount in base unit of Measure.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0VAL_TYPE Valuation Type.
            VAL_TYPE           TYPE /BI0/OIVAL_TYPE,
         InfoObject: 0PROCESSKEY BW: Transaction Key.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0BATCH Batch number.
            BATCH           TYPE /BI0/OIBATCH,
         InfoObject: 0MATMREA Reason for Goods Movement.
            MATMREA           TYPE /BI0/OIMATMREA,
         InfoObject: 0BUS_AREA Business Area.
            BUS_AREA           TYPE /BI0/OIBUS_AREA,
         InfoObject: 0COSTCENTER Cost Center.
            COSTCENTER           TYPE /BI0/OICOSTCENTER,
         InfoObject: 0SOLD_TO Sold-to Party.
            SOLD_TO           TYPE /BI0/OISOLD_TO,
         InfoObject: 0WHSE_NUM Warehouse Number / warehouse complex.
            WHSE_NUM           TYPE /BI0/OIWHSE_NUM,
         InfoObject: 0STOR_LOC Storage Location.
            STOR_LOC           TYPE /BI0/OISTOR_LOC,
         InfoObject: 0STRGE_BIN Storage Bin.
            STRGE_BIN           TYPE /BI0/OISTRGE_BIN,
         InfoObject: 0STRGE_TYPE Storage Type.
            STRGE_TYPE           TYPE /BI0/OISTRGE_TYPE,
         InfoObject: 0VENDOR  Vendor.
            VENDOR           TYPE /BI0/OIVENDOR,
         InfoObject: 0MATERIAL Material.
            MATERIAL           TYPE /BI0/OIMATERIAL,
         InfoObject: 0DOC_NUM BW: Document Number.
            DOC_NUM           TYPE /BI0/OIDOC_NUM,
         InfoObject: 0BASE_UOM Base Unit of Measure.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
         InfoObject: 0DOC_YEAR BW: Document Year.
            DOC_YEAR           TYPE /BI0/OIDOC_YEAR,
         InfoObject: 0PROFIT_CTR Profit center.
            PROFIT_CTR           TYPE /BI0/OIPROFIT_CTR,
         InfoObject: 0DCINDIC Debit/Credit Indicator.
            DCINDIC           TYPE /BI0/OIDCINDIC,
         InfoObject: 0LOC_CURRCY Local currency.
            LOC_CURRCY           TYPE /BI0/OILOC_CURRCY,
         InfoObject: 0PLANT Plant.
            PLANT           TYPE /BI0/OIPLANT,
         InfoObject: 0FISCVARNT Fiscal year variant.
            FISCVARNT           TYPE /BI0/OIFISCVARNT,
         InfoObject: 0CPNOITEMS BW: Number of activities.
            CPNOITEMS           TYPE /BI0/OICPNOITEMS,
         InfoObject: 0CO_AREA Controlling Area.
            CO_AREA           TYPE /BI0/OICO_AREA,
         InfoObject: 0DOC_ITEM BW: Document Line Number.
            DOC_ITEM           TYPE /BI0/OIDOC_ITEM,
         InfoObject: 0VALUE_LC Amount in local currency.
            VALUE_LC           TYPE /BI0/OIVALUE_LC,
         InfoObject: 0QUANT_B Quantity in base units of Measure.
            QUANT_B           TYPE /BI0/OIQUANT_B,
         InfoObject: 0MOVE_PLANT Receiving Plant/Issuing Plant.
            MOVE_PLANT           TYPE /BI0/OIMOVE_PLANT,
         InfoObject: 0RECORDMODE BW Delta Process: Update Mode.
            RECORDMODE           TYPE RODMUPDMOD,
         InfoObject: 0RT_RMAPIDA RMA Physical Inventory Date.
            RT_RMAPIDA           TYPE /BI0/OIRT_RMAPIDA,
         InfoObject: 0BWCOUNTER Additional Key Field Revaluation Document
    *Record.
            BWCOUNTER           TYPE /BI0/OIBWCOUNTER,
         InfoObject: 0INDSPECSTK Indicator: Valuation of Special stock.
            INDSPECSTK           TYPE /BI0/OIINDSPECSTK,
         InfoObject: 0GN_R3_SSY Source System for  R/3 Entity.
            GN_R3_SSY           TYPE /BI0/OIGN_R3_SSY,
         InfoObject: 0RT_MOVINV movement Type is Physical Inventory.
            RT_MOVINV           TYPE /BI0/OIRT_MOVINV,
         InfoObject: 0RT_MOVADJ movement Type is Stock Adjustment.
            RT_MOVADJ           TYPE /BI0/OIRT_MOVADJ,
         InfoObject: 0RSL_STMAT Structured  Article.
            RSL_STMAT           TYPE /BI0/OIRSL_STMAT,
         InfoObject: 0RT_MOVRET movement Type is Return.
            RT_MOVRET           TYPE /BI0/OIRT_MOVRET,
         InfoObject: 0RSL_STAUTO Automatically Completed Component.
            RSL_STAUTO           TYPE /BI0/OIRSL_STAUTO,
         InfoObject: 0RT_MOVTRAN movement Type is Stock Transfer.
            RT_MOVTRAN           TYPE /BI0/OIRT_MOVTRAN,
         InfoObject: 0RT_MATPOST Transfer Posting from  Article to Article
            RT_MATPOST           TYPE /BI0/OIRT_MATPOST,
         InfoObject: 0RT_SASTSV Share of Business Volume for Set Sales Val
    *ue in Local crcy.
            RT_SASTSV           TYPE /BI0/OIRT_SASTSV,
         InfoObject: 0RT_SASTST Share of Business Volume for Set with Tax
    *in Local currency.
            RT_SASTST           TYPE /BI0/OIRT_SASTST,
         InfoObject: 0COORDER order number.
            COORDER           TYPE /BI0/OICOORDER,
         InfoObject: 0RMA_LNK RMA Stock Transfer Reference Item.
            RMA_LNK           TYPE /BI0/OIRMA_LNK,
         InfoObject: 0RMA_RFLG RMA Relevance Flag.
            RMA_RFLG           TYPE /BI0/OIRMA_RFLG,
         InfoObject: 0RTHFEES Stock Transfer Fees.
            RTHFEES           TYPE /BI0/OIRTHFEES,
         Field: RECORD.
            RECORD           TYPE RSARECORD,
          END   OF tys_SC_1.
        TYPES:
    tyt_SC_1        TYPE STANDARD TABLE OF tys_SC_1
                            WITH NON-UNIQUE DEFAULT KEY.
    $$ begin of global - insert your declaration only below this line  -
    ... "insert your code here
    $$ end of global - insert your declaration only before this line   -
        METHODS
          start_routine
            IMPORTING
              request                  type rsrequest
              datapackid               type rsdatapid
            EXPORTING
              monitor                  type rstr_ty_t_monitors
            CHANGING
              SOURCE_PACKAGE              type tyt_SC_1
            RAISING
              cx_rsrout_abort.
        METHODS
          inverse_start_routine
            IMPORTING
              i_th_fields_outbound         TYPE rstran_t_field_inv
              i_r_selset_outbound          TYPE REF TO cl_rsmds_set
              i_is_main_selection          TYPE rs_bool
              i_r_selset_outbound_complete TYPE REF TO cl_rsmds_set
              i_r_universe_inbound         TYPE REF TO cl_rsmds_universe
            CHANGING
              c_th_fields_inbound          TYPE rstran_t_field_inv
              c_r_selset_inbound           TYPE REF TO cl_rsmds_set
              c_exact                      TYPE rs_bool.
    ENDCLASS.                    "routine DEFINITION
    $$ begin of 2nd part global - insert your code only below this line  *
        TYPES:
          BEGIN OF tys_SC_1_full,
         InfoObject: 0STORNO Stornokennzeichen.
            STORNO           TYPE /BI0/OISTORNO,
         InfoObject: 0RT_PROMO Aktion.
            RT_PROMO           TYPE /BI0/OIRT_PROMO,
         InfoObject: 0VAL_CLASS Bewertungsklasse.
            VAL_CLASS           TYPE /BI0/OIVAL_CLASS,
         InfoObject: 0DOC_DATE Belegdatum.
            DOC_DATE           TYPE /BI0/OIDOC_DATE,
         InfoObject: 0STOCKTYPE Bestandsausprägung.
            STOCKTYPE           TYPE /BI0/OISTOCKTYPE,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0PSTNG_DATE Buchungsdatum im Beleg.
            PSTNG_DATE           TYPE /BI0/OIPSTNG_DATE,
         InfoObject: 0COMP_CODE Buchungskreis.
            COMP_CODE           TYPE /BI0/OICOMP_CODE,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0MOVETYPE Bewegungsart (Bestandsführung).
            MOVETYPE           TYPE /BI0/OIMOVETYPE,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0CPPVLC BW: Einkaufswert in Hauswährung.
            CPPVLC           TYPE /BI0/OICPPVLC,
         InfoObject: 0CPSVLC BW: Verkaufswert in Hauswährung.
            CPSVLC           TYPE /BI0/OICPSVLC,
         InfoObject: 0CPSTLC BW: VerkWmS Hauswährung.
            CPSTLC           TYPE /BI0/OICPSTLC,
         InfoObject: 0CPQUABU BW: Menge in Basismengeneinheit.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0VAL_TYPE Bewertungsart.
            VAL_TYPE           TYPE /BI0/OIVAL_TYPE,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0BATCH Chargennummer.
            BATCH           TYPE /BI0/OIBATCH,
         InfoObject: 0MATMREA Grund für die Warenbewegung.
            MATMREA           TYPE /BI0/OIMATMREA,
         InfoObject: 0BUS_AREA Geschäftsbereich.
            BUS_AREA           TYPE /BI0/OIBUS_AREA,
         InfoObject: 0COSTCENTER Kostenstelle.
            COSTCENTER           TYPE /BI0/OICOSTCENTER,
         InfoObject: 0SOLD_TO Auftraggeber.
            SOLD_TO           TYPE /BI0/OISOLD_TO,
         InfoObject: 0WHSE_NUM Lagernummer/Lagerkomplex.
            WHSE_NUM           TYPE /BI0/OIWHSE_NUM,
         InfoObject: 0STOR_LOC Lagerort.
            STOR_LOC           TYPE /BI0/OISTOR_LOC,
         InfoObject: 0STRGE_BIN Lagerplatz.
            STRGE_BIN           TYPE /BI0/OISTRGE_BIN,
         InfoObject: 0STRGE_TYPE Lagertyp.
            STRGE_TYPE           TYPE /BI0/OISTRGE_TYPE,
         InfoObject: 0VENDOR Lieferant.
            VENDOR           TYPE /BI0/OIVENDOR,
         InfoObject: 0MATERIAL Material.
            MATERIAL           TYPE /BI0/OIMATERIAL,
         InfoObject: 0DOC_NUM BW: Belegnummer.
            DOC_NUM           TYPE /BI0/OIDOC_NUM,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
         InfoObject: 0DOC_YEAR BW: Belegjahr.
            DOC_YEAR           TYPE /BI0/OIDOC_YEAR,
         InfoObject: 0PROFIT_CTR Profit Center.
            PROFIT_CTR           TYPE /BI0/OIPROFIT_CTR,
         InfoObject: 0DCINDIC Soll-/Haben-Kennzeichen.
            DCINDIC           TYPE /BI0/OIDCINDIC,
         InfoObject: 0LOC_CURRCY Hauswährung.
            LOC_CURRCY           TYPE /BI0/OILOC_CURRCY,
         InfoObject: 0PLANT Werk.
            PLANT           TYPE /BI0/OIPLANT,
         InfoObject: 0FISCVARNT Geschäftsjahresvariante.
            FISCVARNT           TYPE /BI0/OIFISCVARNT,
         InfoObject: 0CPNOITEMS BW: Anzahl Vorgänge.
            CPNOITEMS           TYPE /BI0/OICPNOITEMS,
         InfoObject: 0CO_AREA Kostenrechnungskreis.
            CO_AREA           TYPE /BI0/OICO_AREA,
         InfoObject: 0DOC_ITEM BW: Belegpositionsnummer.
            DOC_ITEM           TYPE /BI0/OIDOC_ITEM,
         InfoObject: 0VALUE_LC Betrag in Hauswährung.
            VALUE_LC           TYPE /BI0/OIVALUE_LC,
         InfoObject: 0COORDER Auftragsnummer.
            COORDER           TYPE /BI0/OICOORDER,
         InfoObject: 0QUANT_B Menge in Basismengeneinheiten.
            QUANT_B           TYPE /BI0/OIQUANT_B,
         InfoObject: 0MOVE_PLANT Empfangendes/Abgebendes Werk.
            MOVE_PLANT           TYPE /BI0/OIMOVE_PLANT,
         InfoObject: 0RECORDMODE BW Deltaverfahren: Update Modus.
            RECORDMODE           TYPE RODMUPDMOD,
         InfoObject: 0RT_RMAPIDA RMA Inventurdatum.
            RT_RMAPIDA           TYPE /BI0/OIRT_RMAPIDA,
         InfoObject: 0BWCOUNTER Zusätzliches Schlüsselfeld Umbewertungsbel
    *egsatz.
            BWCOUNTER           TYPE /BI0/OIBWCOUNTER,
         InfoObject: 0INDSPECSTK Kennzeichen Bewertung Sonderbestand.
            INDSPECSTK           TYPE /BI0/OIINDSPECSTK,
         InfoObject: 0GN_R3_SSY Quellsystem der R/3 Entität.
            GN_R3_SSY           TYPE /BI0/OIGN_R3_SSY,
         InfoObject: 0RT_MOVINV Bewegungsart ist Inventur.
            RT_MOVINV           TYPE /BI0/OIRT_MOVINV,
         InfoObject: 0RT_MOVADJ Bewegungsart ist Bestandskorrektur.
            RT_MOVADJ           TYPE /BI0/OIRT_MOVADJ,
         InfoObject: 0RSL_STMAT Strukturierter Artikel.
            RSL_STMAT           TYPE /BI0/OIRSL_STMAT,
         InfoObject: 0RT_MOVRET Bewegungsart ist Retoure.
            RT_MOVRET           TYPE /BI0/OIRT_MOVRET,
         InfoObject: 0RSL_STAUTO Automatisch ergänzte Komponente.
            RSL_STAUTO           TYPE /BI0/OIRSL_STAUTO,
         InfoObject: 0RT_MOVTRAN Bewegungsart ist Umlagerung.
            RT_MOVTRAN           TYPE /BI0/OIRT_MOVTRAN,
         InfoObject: 0RT_MATPOST Umbuchung Artikel an Artikel.
            RT_MATPOST           TYPE /BI0/OIRT_MATPOST,
         InfoObject: 0RT_SASTSV Umsatzanteil am Set Verkaufswert in Hauswä
    *hrung.
            RT_SASTSV           TYPE /BI0/OIRT_SASTSV,
         InfoObject: 0RT_SASTST Umsatzanteil am Set Verkaufswert mit Steue
    *r in Hauswährung.
            RT_SASTST           TYPE /BI0/OIRT_SASTST,
         Field: RECORD.
            RECORD           TYPE RSARECORD,      END   OF tys_SC_1_full.
        TYPES:
    tyt_SC_1_full        TYPE STANDARD TABLE OF tys_SC_1_full
                            WITH NON-UNIQUE DEFAULT KEY.
        TYPES:
          BEGIN OF tys_TG_1_full,
         InfoObject: 0CHNGID Änderungslauf ID.
            CHNGID           TYPE /BI0/OICHNGID,
         InfoObject: 0RECORDTP Satztyp.
            RECORDTP           TYPE /BI0/OIRECORDTP,
         InfoObject: 0REQUID Request ID.
            REQUID           TYPE /BI0/OIREQUID,
         InfoObject: 0CALDAY Kalendertag.
            CALDAY           TYPE /BI0/OICALDAY,
         InfoObject: 0CALMONTH Kalenderjahr / Monat.
            CALMONTH           TYPE /BI0/OICALMONTH,
         InfoObject: 0CALWEEK Kalenderjahr / Woche.
            CALWEEK           TYPE /BI0/OICALWEEK,
         InfoObject: 0CALYEAR Kalenderjahr.
            CALYEAR           TYPE /BI0/OICALYEAR,
         InfoObject: 0MATERIAL Material.
            MATERIAL           TYPE /BI0/OIMATERIAL,
         InfoObject: 0PLANT Werk.
            PLANT           TYPE /BI0/OIPLANT,
         InfoObject: 0STOR_LOC Lagerort.
            STOR_LOC           TYPE /BI0/OISTOR_LOC,
         InfoObject: 0BATCH Chargennummer.
            BATCH           TYPE /BI0/OIBATCH,
         InfoObject: 0STOCKTYPE Bestandsausprägung.
            STOCKTYPE           TYPE /BI0/OISTOCKTYPE,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0GN_VENDOR Lieferant.
            GN_VENDOR           TYPE /BI0/OIGN_VENDOR,
         InfoObject: 0RECVS_VAL Zugangswert Bewerteter Bestand.
            RECVS_VAL           TYPE /BI0/OIRECVS_VAL,
         InfoObject: 0ISSVS_VAL Abgangswert Bewerteter Bestand.
            ISSVS_VAL           TYPE /BI0/OIISSVS_VAL,
         InfoObject: 0ISSBLOSTCK Abgangsmenge Gesperrter Bestand.
            ISSBLOSTCK           TYPE /BI0/OIISSBLOSTCK,
         InfoObject: 0ISSCNSSTCK Abgangsmenge Konsignationsbestand.
            ISSCNSSTCK           TYPE /BI0/OIISSCNSSTCK,
         InfoObject: 0ISSQMSTCK Abgangsmenge Qualitätsbestand.
            ISSQMSTCK           TYPE /BI0/OIISSQMSTCK,
         InfoObject: 0ISSTRANSST Abgangsmenge Transitbestand.
            ISSTRANSST           TYPE /BI0/OIISSTRANSST,
         InfoObject: 0RECBLOSTCK Zugangsmenge Gesperrter Bestand.
            RECBLOSTCK           TYPE /BI0/OIRECBLOSTCK,
         InfoObject: 0RECCNSSTCK Zugangsmenge Konsignationsbestand.
            RECCNSSTCK           TYPE /BI0/OIRECCNSSTCK,
         InfoObject: 0RECQMSTCK Zugangsmenge Qualitätsbestand.
            RECQMSTCK           TYPE /BI0/OIRECQMSTCK,
         InfoObject: 0RECTRANSST Zugangsmenge Transitbestand.
            RECTRANSST           TYPE /BI0/OIRECTRANSST,
         InfoObject: 0ISSSCRP Abgangsmenge Ausschuss.
            ISSSCRP           TYPE /BI0/OIISSSCRP,
         InfoObject: 0ISSVALSCRP Abgangswert Ausschuss.
            ISSVALSCRP           TYPE /BI0/OIISSVALSCRP,
         InfoObject: 0RECTOTSTCK Zugangsmenge Gesamt Bestand.
            RECTOTSTCK           TYPE /BI0/OIRECTOTSTCK,
         InfoObject: 0ISSTOTSTCK Abgangsmenge Gesamtbestand.
            ISSTOTSTCK           TYPE /BI0/OIISSTOTSTCK,
         InfoObject: 0ISSVALSTCK Abgangsmenge Bewerteter Bestand.
            ISSVALSTCK           TYPE /BI0/OIISSVALSTCK,
         InfoObject: 0RECVALSTCK Zugangsmenge Bewerteter Bestand.
            RECVALSTCK           TYPE /BI0/OIRECVALSTCK,
         InfoObject: 0VENCONCON Verbrauchswerte Lieferantenkonsignationsbe
    *stand.
            VENCONCON           TYPE /BI0/OIVENCONCON,
         InfoObject: 0LOC_CURRCY Hauswährung.
            LOC_CURRCY           TYPE /BI0/OILOC_CURRCY,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
         Field: RECORD Nummer des Datensatzes.
            RECORD           TYPE RSARECORD,
          END   OF tys_TG_1_full.
        TYPES:
          BEGIN OF tys_SC_1__RULE_9,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPQUABU BW: Menge in Basismengeneinheit.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0STOCKTYPE Bestandsausprägung.
            STOCKTYPE           TYPE /BI0/OISTOCKTYPE,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
          END   OF tys_SC_1__RULE_9.
        TYPES:
          BEGIN OF tys_SC_1__RULE_10,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPQUABU BW: Menge in Basismengeneinheit.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0STOCKTYPE Bestandsausprägung.
            STOCKTYPE           TYPE /BI0/OISTOCKTYPE,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
          END   OF tys_SC_1__RULE_10.
        TYPES:
          BEGIN OF tys_SC_1__RULE_11,
         InfoObject: 0GN_R3_SSY Quellsystem der R/3 Entität.
            GN_R3_SSY           TYPE /BI0/OIGN_R3_SSY,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0VENDOR Lieferant.
            VENDOR           TYPE /BI0/OIVENDOR,
          END   OF tys_SC_1__RULE_11.
        TYPES:
          BEGIN OF tys_SC_1__RULE_12,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPPVLC BW: Einkaufswert in Hauswährung.
            CPPVLC           TYPE /BI0/OICPPVLC,
         InfoObject: 0INDSPECSTK Kennzeichen Bewertung Sonderbestand.
            INDSPECSTK           TYPE /BI0/OIINDSPECSTK,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0LOC_CURRCY Hauswährung.
            LOC_CURRCY           TYPE /BI0/OILOC_CURRCY,
          END   OF tys_SC_1__RULE_12.
        TYPES:
          BEGIN OF tys_SC_1__RULE_13,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPPVLC BW: Einkaufswert in Hauswährung.
            CPPVLC           TYPE /BI0/OICPPVLC,
         InfoObject: 0INDSPECSTK Kennzeichen Bewertung Sonderbestand.
            INDSPECSTK           TYPE /BI0/OIINDSPECSTK,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0LOC_CURRCY Hauswährung.
            LOC_CURRCY           TYPE /BI0/OILOC_CURRCY,
          END   OF tys_SC_1__RULE_13.
        TYPES:
          BEGIN OF tys_SC_1__RULE_15,
         InfoObject: 0GN_R3_SSY Quellsystem der R/3 Entität.
            GN_R3_SSY           TYPE /BI0/OIGN_R3_SSY,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0STOCKTYPE Bestandsausprägung.
            STOCKTYPE           TYPE /BI0/OISTOCKTYPE,
         InfoObject: 0VENDOR Lieferant.
            VENDOR           TYPE /BI0/OIVENDOR,
          END   OF tys_SC_1__RULE_15.
        TYPES:
          BEGIN OF tys_SC_1__RULE_19,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPQUABU BW: Menge in Basismengeneinheit.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
          END   OF tys_SC_1__RULE_19.
        TYPES:
          BEGIN OF tys_SC_1__RULE_20,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPQUABU BW: Menge in Basismengeneinheit.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
          END   OF tys_SC_1__RULE_20.
        TYPES:
          BEGIN OF tys_SC_1__RULE_21,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPQUABU BW: Menge in Basismengeneinheit.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0INDSPECSTK Kennzeichen Bewertung Sonderbestand.
            INDSPECSTK           TYPE /BI0/OIINDSPECSTK,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
          END   OF tys_SC_1__RULE_21.
        TYPES:
          BEGIN OF tys_SC_1__RULE_22,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPQUABU BW: Menge in Basismengeneinheit.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0INDSPECSTK Kennzeichen Bewertung Sonderbestand.
            INDSPECSTK           TYPE /BI0/OIINDSPECSTK,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
          END   OF tys_SC_1__RULE_22.
        TYPES:
          BEGIN OF tys_SC_1__RULE_25,
         InfoObject: 0GN_R3_SSY Quellsystem der R/3 Entität.
            GN_R3_SSY           TYPE /BI0/OIGN_R3_SSY,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0STOCKTYPE Bestandsausprägung.
            STOCKTYPE           TYPE /BI0/OISTOCKTYPE,
         InfoObject: 0VENDOR Lieferant.
            VENDOR           TYPE /BI0/OIVENDOR,
          END   OF tys_SC_1__RULE_25.
        TYPES:
          BEGIN OF tys_SC_1__RULE_31,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPPVLC BW: Einkaufswert in Hauswährung.
            CPPVLC           TYPE /BI0/OICPPVLC,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0LOC_CURRCY Hauswährung.
            LOC_CURRCY           TYPE /BI0/OILOC_CURRCY,
          END   OF tys_SC_1__RULE_31.
        TYPES:
          BEGIN OF tys_SC_1__RULE_37,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPQUABU BW: Menge in Basismengeneinheit.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0STOCKTYPE Bestandsausprägung.
            STOCKTYPE           TYPE /BI0/OISTOCKTYPE,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
          END   OF tys_SC_1__RULE_37.
        TYPES:
          BEGIN OF tys_SC_1__RULE_38,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPQUABU BW: Menge in Basismengeneinheit.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0STOCKTYPE Bestandsausprägung.
            STOCKTYPE           TYPE /BI0/OISTOCKTYPE,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
          END   OF tys_SC_1__RULE_38.
        TYPES:
          BEGIN OF tys_SC_1__RULE_39,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPQUABU BW: Menge in Basismengeneinheit.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0STOCKTYPE Bestandsausprägung.
            STOCKTYPE           TYPE /BI0/OISTOCKTYPE,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
          END   OF tys_SC_1__RULE_39.
        TYPES:
          BEGIN OF tys_SC_1__RULE_40,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPQUABU BW: Menge in Basismengeneinheit.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0STOCKTYPE Bestandsausprägung.
            STOCKTYPE           TYPE /BI0/OISTOCKTYPE,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
          END   OF tys_SC_1__RULE_40.
        TYPES:
          BEGIN OF tys_SC_1__RULE_41,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPQUABU BW: Menge in Basismengeneinheit.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKCAT Bestandstypen.
            STOCKCAT           TYPE /BI0/OISTOCKCAT,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0STOCKTYPE Bestandsausprägung.
            STOCKTYPE           TYPE /BI0/OISTOCKTYPE,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
          END   OF tys_SC_1__RULE_41.
        TYPES:
          BEGIN OF tys_SC_1__RULE_42,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPQUABU BW: Menge in Basismengeneinheit.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0PROCESSKEY BW:Vorgangsschlüssel.
            PROCESSKEY           TYPE /BI0/OIPROCESSKEY,
         InfoObject: 0STOCKRELEV BW: Best.Relevanz.
            STOCKRELEV           TYPE /BI0/OISTOCKRELEV,
         InfoObject: 0STOCKTYPE Bestandsausprägung.
            STOCKTYPE           TYPE /BI0/OISTOCKTYPE,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
          END   OF tys_SC_1__RULE_42.
        TYPES:
          BEGIN OF tys_SC_1__RULE_43,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPQUABU BW: Menge in Basismengeneinheit.
            CPQUABU           TYPE /BI0/OICPQUABU,
         InfoObject: 0MOVETYPE Bewegungsart (Bestandsführung).
            MOVETYPE           TYPE /BI0/OIMOVETYPE,
         InfoObject: 0BASE_UOM Basismengeneinheit.
            BASE_UOM           TYPE /BI0/OIBASE_UOM,
          END   OF tys_SC_1__RULE_43.
        TYPES:
          BEGIN OF tys_SC_1__RULE_51,
         InfoObject: 0BWAPPLNM Anwendungskomponente.
            BWAPPLNM           TYPE /BI0/OIBWAPPLNM,
         InfoObject: 0CPPVLC BW: Einkaufswert in Hauswährung.
            CPPVLC           TYPE /BI0/OICPPVLC,
         InfoObject: 0MOVETYPE Bewegungsart (Bestandsführung).
            MOVETYPE           TYPE /BI0/OIMOVETYPE,
         InfoObject: 0LOC_CURRCY Hauswährung.
            LOC_CURRCY           TYPE /BI0/OILOC_CURRCY,
          END   OF tys_SC_1__RULE_51.
    Additional types for start routine interface
      TYPES:
        data_package_structure type tys_SC_1_full.
    Additional declaration for update rule interface
      DATA:
        MONITOR       type standard table of rsmonitor  WITH HEADER LINE,
        MONITOR_RECNO type standard table of rsmonitors WITH HEADER LINE,
        RECORD_NO     LIKE SY-TABIX,
        RECORD_ALL    LIKE SY-TABIX,
        SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS.
    global definitions from update rules
    INCLUDE rsbctgn_top.
    INCLUDE rsbctgn_update_rules.
    FORM routine_9998
      TABLES DATA_PACKAGE TYPE tyt_SC_1_full
      CHANGING
        ABORT          LIKE sy-subrc
      RAISING
        cx_sy_arithmetic_error
        cx_sy_conversion_error.
    init variables
    fill the internal table "MONITOR", to make monitor entries
    see OSS note 571669
      LOOP AT DATA_PACKAGE.
        IF DATA_PACKAGE-stockcat EQ 'V' OR
           DATA_PACKAGE-stocktype EQ 'V'.
          DELETE DATA_PACKAGE.
        ENDIF.
      ENDLOOP.
    if abort is not equal zero, the update process will be canceled
      ABORT = 0.
    ENDFORM.                    "routine_9998
    FORM routine_0012
      USING
        COMM_STRUCTURE type tys_SC_1__RULE_9
      CHANGING
        RESULT         TYPE tys_TG_1_full-ISSCNSSTCK
        RETURNCODE     LIKE sy-subrc
        ABORT          LIKE sy-subrc
      RAISING
        cx_sy_arithmetic_error
        cx_sy_conversion_error.
    init variables
    fill the internal table "MONITOR", to make monitor entries
    only goods issue is considered
      IF ( COMM_STRUCTURE-processkey EQ '100'   "Other Issues
        OR COMM_STRUCTURE-processkey EQ '101'   "Returns / Vendor
        OR COMM_STRUCTURE-processkey EQ '104'   "Material Transfer
        OR COMM_STRUCTURE-processkey EQ '105'   "Stock Adjustment InvD
        OR COMM_STRUCTURE-processkey EQ '106'   "Stock Adjustment Other
        OR COMM_STRUCTURE-processkey EQ '110' ) "Issue from Stock Transfer
       AND COMM_STRUCTURE-bwapplnm EQ 'MM'
    only movements which are relevant for stock control
       AND COMM_STRUCTURE-stockrelev EQ '1'
       AND COMM_STRUCTURE-cpquabu <> 0.
    only consignment stock is considered
        CASE COMM_STRUCTURE-stockcat.
          WHEN 'K'.
            RESULT = COMM_STRUCTURE-cpquabu.
            RETURNCODE = 0.
          WHEN space.
            IF COMM_STRUCTURE-stocktype CA 'KLM'.
              RESULT = COMM_STRUCTURE-cpquabu.
              RETURNCODE = 0.
            ELSE.
              RETURNCODE = 4.
            ENDIF.
          WHEN OTHERS.
            RETURNCODE = 4.
        ENDCASE.
      ELSE.
    if the returncode is not equal zero, the result will not be updated
        RETURNCODE = 4.
      ENDIF.
    if abort is not equal zero, the update process will be canceled
      ABORT = 0.
    ENDFORM.                    "routine_0012
    FORM routine_0014
      USING
        COMM_STRUCTURE type tys_SC_1__RULE_10
      CHANGING
        RESULT         TYPE tys_TG_1_full-RECCNSSTCK
        RETURNCODE     LIKE sy-subrc
        ABORT          LIKE sy-subrc
      RAISING
        cx_sy_arithmetic_error
        cx_sy_conversion_error.
    init variables
    fill the internal table "MONITOR", to make monitor entries
    only goods receipt is considered
      IF ( COMM_STRUCTURE-processkey EQ '000'   "Other Receipts
        OR COMM_STRUCTURE-processkey EQ '001'   "Goods Receipt / Vendor
        OR COMM_STRUCTURE-processkey EQ '004'   "Material Transfer
        OR COMM_STRUCTURE-processkey EQ '005'   "Stock Adjustment InvD
        OR COMM_STRUCTURE-processkey EQ '006'   "Stock Adjustment Other
        OR COMM_STRUCTURE-processkey EQ '010' ) "Receipt from Stock Transfer
       AND COMM_STRUCTURE-bwapplnm EQ 'MM'
    only movements which are relevant for stock control
       AND COMM_STRUCTURE-stockrelev EQ '1'
       AND COMM_STRUCTURE-cpquabu <> 0.
    only consignment stock is considered
        CASE COMM_STRUCTURE-stockcat.
          WHEN 'K'.
            RESULT = COMM_STRUCTURE-cpquabu.
            RETURNCODE = 0.
          WHEN space.
            IF COMM_STRUCTURE-stocktype CA 'KLM'.
              RESULT = COMM_STRUCTURE-cpquabu.
              RETURNCODE = 0.
            ELSE.
              RETURNCODE = 4.
            ENDIF.
          WHEN OTHERS.
            RETURNCODE = 4.
        ENDCASE.
      ELSE.
    if the returncode is not equal zero, the result will not be updated
        RETURNCODE = 4.
      ENDIF.
    if abort is not equal zero, the update process will be canceled
      ABORT = 0.
    ENDFORM.                    "routine_0014
    FORM routine_0041
      USING
        COMM_STRUCTURE type tys_SC_1__RULE_11
      CHANGING
        RESULT         TYPE tys_TG_1_full-GN_VENDOR
        RETURNCODE     LIKE sy-subrc
        ABORT          LIKE sy-subrc
      RAISING
        cx_sy_arithmetic_error
        cx_sy_conversion_error.
    init variables
    fill the internal table "MONITOR", to make monitor entries
    ... determine consolidated key
      IF COMM_STRUCTURE-stockcat EQ 'K'.
        PERFORM  gn_get_global_key TABLES MONITOR
                              USING    COMM_STRUCTURE-gn_r3_ssy
                                       g_c_bwbeoty_r3vendor
                                       COMM_STRUCTURE-vendor
                                       RECORD_NO
                                       RECORD_ALL
                              CHANGING RESULT
                                       ABORT.
    if the returncode is not equal zero, the result will not be updated
      Endif.
      RETURNCODE = 0.
    ENDFORM.                    "routine_0041
    FORM routine_0010
      USING
        COMM_STRUCTURE type tys_SC_1__RULE_12
      CHANGING
        RESULT         TYPE tys_TG_1_full-ISSVS_VAL
        RETURNCODE     LIKE sy-subrc
        ABORT          LIKE sy-subrc
      RAISING
        cx_sy_arithmetic_error
        cx_sy_conversion_error.
    init variables
    fill the internal table "MONITOR", to make monitor entries
    only goods issue is considered
      IF ( COMM_STRUCTURE-processkey EQ '100'   "Other Issues
        OR COMM_STRUCTURE-processkey EQ '101'   "Returns / Vendor
        OR COMM_STRUCTURE-processkey EQ '104'   "Material Transfer
        OR COMM_STRUCTURE-processkey EQ '105'   "Stock Adjustment InvD
        OR COMM_STRUCTURE-processkey EQ '106

  • BW 3.5 Update rule routine and start routine convert to BI 7.0 Endroutine.

    I have bw 3.5 update routine and update rules start routine( r/3 to ODS). i need to replicate that routine into BI 7.0 endroutine with the same logic with some minor changes(DSO to DSO).
    IN BW 3.5 the data is getting from r/3 where as in BI7.0 the data fetching from DSO itself but the logic is same as bw 3.5.
    following is the start routine:
    DATA: G_FISCPER_TO TYPE /BI0/OIFISCPER,
          G_CALMONTH   LIKE /BI0/PCALMONTH-CALMONTH,
          G_MONAT      TYPE /BIC/OIYRDFMONAT.
    ABORT = 0.
    ------ Globale Variable füllen --------------------------------------*
      CALL FUNCTION 'Y_RDF_FISCPER_FOR_INFOPACKAGE'
        EXPORTING
          I_ISOURCE    = '0FI_AA_001' (*** this is infosurce getting from r/3, in 7.0 this one is DSO 'B")
        IMPORTING
          E_FISCPER_TO = G_FISCPER_TO
          E_MONAT      = G_MONAT
        EXCEPTIONS
          OTHERS       = 1.
      IF SY-SUBRC = 0.
        CALL FUNCTION 'Y_RDE_FISCPER_TO_CALMONTH'
          EXPORTING
            I_PERIV    = 'K4'
            I_BDATJ    = G_FISCPER_TO(4)
            I_POPER    = G_FISCPER_TO+4(3)
          IMPORTING
            E_CALMONTH = G_CALMONTH
          EXCEPTIONS
            OTHERS     = 1.
        IF SY-SUBRC NE 0 OR G_CALMONTH IS INITIAL.
          CALL FUNCTION 'Y_RDN_MONITOR_SET'
            EXPORTING
              I_MSGID   = 'YRDFBW'
              I_MSGNO   = '027'
              I_MSGV1   = '0FI_AA_001'
              I_MSGV2   = 'YRDF_FIAA_PERIOD'
            TABLES
              T_MONITOR = MONITOR.
          ABORT = 1.
        ENDIF.
      ELSE.
        CALL FUNCTION 'Y_RDN_MONITOR_SET'
          EXPORTING
            I_MSGID   = 'YRDFBW'
            I_MSGNO   = '027'
            I_MSGV1   = '0FI_AA_001'
            I_MSGV2   = 'YRDF_FIAA_PERIOD'
          TABLES
            T_MONITOR = MONITOR.
        ABORT = 1.
      ENDIF.
    Update routine:
    RETURNCODE = 0.
      ABORT = 0.
      CLEAR RESULT.
      IF NOT COMM_STRUCTURE-ASSET_MAIN BETWEEN '000000200000' AND
                                               '000000299999'.
        CALL FUNCTION 'Y_RDF_GET_CCTR_0ASSET'
          EXPORTING
            I_COMP_CODE  = COMM_STRUCTURE-COMP_CODE
            I_ASSET      = COMM_STRUCTURE-ASSET
            I_ASSET_MAIN = COMM_STRUCTURE-ASSET_MAIN
          IMPORTING
            E_COSTCENTER = RESULT
          EXCEPTIONS
            OTHERS       = 1.
        IF SY-SUBRC NE 0 OR RESULT IS INITIAL.
          CALL FUNCTION 'Y_RDN_MONITOR_SET'
            EXPORTING
              I_MSGID   = 'YRDFBW'
              I_MSGTY   = 'E'
              I_MSGNO   = '061'
              I_MSGV1   = COMM_STRUCTURE-COMP_CODE
              I_MSGV2   = COMM_STRUCTURE-ASSET
              I_MSGV3   = COMM_STRUCTURE-ASSET_MAIN
            TABLES
              T_MONITOR = MONITOR.
          RETURNCODE = 1.
        ENDIF.
      ENDIF.
    How can i write this in BI7.0?
    Thanks

    Hi ,
    solved on my own. Thankyou very much..
    thanks & regards,
    M.S
    Edited by: M.S on Oct 27, 2009 6:57 AM
    Edited by: M.S on Oct 27, 2009 6:59 AM

  • Re: Raising Exceptions Vs returning erro[Ref:C809787]

    Hi Steve !
    Probably the following explanation might help in resolving the issue raised by
    you:
    At a more abstract level, there is only one thing, i.e. the EVENT. According to
    it's definition, an event is a relatively infrequent occurrence in one portion (lets
    call it event raiser) of the application, which some other portion (or portions,
    lets call them event handlers) (of the same application) are interested to respond
    to it. Now there are two scenarios:
    (A) Event raiser and Event handler(s) are being executed under different threads
    of control (Asynchronous) and
    (B) Event raiser and Event Handler(s) are being executed under same thread of
    control (Synchronous).
    So, Exception Handling belongs to scenario B where the method raising the
    exception (Event Raiser or exception raiser) and the method handling it (Event
    Handler or exception block) are under the same thread of control. More ever it has
    to be insured that at a time only one handler (first the inner most one) receives
    the message.
    Fort&eacute; provides a generic Event handling mechanism (Post Event and Event Loop) to
    handle the scenario A (which is the more generic one). But it also provides a
    specialized Event Handling mechanism (Raise Exception and Exception block) to
    efficiently handle the relatively simple scenario B. Why I am saying that the later
    is efficient because it won't be needing to register the event queue address of the
    interested task (after all there is only one task involved) and put the event
    message in queue.
    Finally let me mentioned that it is just my view based on the understanding I
    have and it may not be true. Only a person from fort&eacute; can confirm it. I will really
    appreciate if somebody correct and or refine it.
    Wish a Very Very Happy New Year to all Fort&eacute; Users
    Regard,
    Kailash.
    [email protected] wrote:
    I would agree with Eric entirely. Exceptions seem to me to be a much more
    complete solution to the problem of error handling. A little bit of effort up
    front in making clear the strategy for exception handling and specifying the
    exceptions that can be raised by a class\method will provide an excellent method
    for error handling.
    In the case of ensuring exceptions are always handled, a top level handler for
    GenericException will usually do the job, allowing you to write error
    information out to logs, screen, etc, and then shut down gracefully.
    The only issue I would raise with exceptions is that they are not propagated
    outside an asynchronous task. If an exception is not handled within an
    asynchronous, it will not propagate to the task that started that asynchronous
    task. Forte provides return and exception events when starting asynchronous
    tasks to cope with this, but it seems a shame to have one method of dealing with
    errors (exceptions) for synchronous behaviour, and another (events) for
    asynchronous behaviour.
    Steve Elvin
    Systems Developer
    Frontline Ltd.
    UK
    Mark,
    The problem with return codes is that there is an underlying assumption
    that the receiver will always catch and interpret that error code. This
    may or may not be good thing, depending on how you architect your
    application. If, on the other hand, you want to ensure that an error is
    always handled, if not by the receiver then by the Forte, Exceptions are
    the way to go. To extend this mechanism further, I would subclass
    GenericException and created my own error code attribute on that
    subclass. That way the receiver has the choice of interpreting the
    exception based on that error code, and wrapping it in a
    MessageDialog/window or do the usual 'errormgr.showerrors()'.
    Exceptions seem a more flexible approach to me. That is, if you can live
    with the fact that by using it, you're violating the 'exceptions for
    behavioral anomalies' software engineering principle !
    Best wishes.
    Eric Pereira
    Forte Consultant
    ----Original Message Follows----
    From: "Kallambella, Ajith" <[email protected]>
    To: "'Mark Sundsten'" <[email protected]>, [email protected]
    Cc: [email protected]
    Subject: RE: Raising Exceptions Vs returning error codes
    Date: Wed, 30 Dec 1998 08:52:39 -0500
    Reply-To: "Kallambella, Ajith" <[email protected]>
    Mark,
    Identifying conditions where you would rather use an exception
    to an error_code ( and vice-versa ) normally depends on
    your application design. Usually exceptions
    are used to handle behavioral anomalies which are
    not expected during the normal course of execution of
    the program, and which would affect the continuity of
    your algorithm if ignored. Examples would be a fatal
    error, a semantically invalid( but syntactically-valid
    token ) etc.
    Error_codes and return status's can be used to handle
    anticipated and recoverable errors. Example would
    be presentation layer validations. In any normal
    UI system, the user is expected to make errors and it
    would be annoying to throw an exception( and to handle
    it ), every time user enters wrong data. A well
    modeled client layer should not only handle
    data-validation errors , but should be smart enough
    to encourage users to input correct or
    "near-correct" data. Examples could be
    making use of look-up windows etc. Interestingly,
    Express uses exceptions to handle data-validations.
    As you see, exceptions fit well into your processing
    logic where severity of damage caused by an error
    is more. Where as error_codes fit well into presentation
    logic( and some not-so-critical processing logic ) where
    errors are usually recoverable and normal path of
    execution can be easily restored.
    Hope this helps. I would be very interested to hear
    what others have to say.
    Ajith Kallambella. M
    Forte Systems Engineer,
    International Business Corporation.
    -----Original Message-----
    From: Mark Sundsten [mailto:[email protected]]
    Sent: Tuesday, December 29, 1998 2:10 PM
    To: [email protected]
    Cc: [email protected]
    Subject: Raising Exceptions vs returning error codes
    When dealing with error handling, I find myself struggling with the
    choice
    of
    raising exceptions (and handling them) from the caller
    vs returning an error code of somekind.
    When would you want to use one over the other?
    Should you always use exception handling?
    Any discussion would be appreciated.
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>
    Get Your Private, Free Email at http://www.hotmail.com
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>-
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>

    Hi Steve !
    Probably the following explanation might help in resolving the issue raised by
    you:
    At a more abstract level, there is only one thing, i.e. the EVENT. According to
    it's definition, an event is a relatively infrequent occurrence in one portion (lets
    call it event raiser) of the application, which some other portion (or portions,
    lets call them event handlers) (of the same application) are interested to respond
    to it. Now there are two scenarios:
    (A) Event raiser and Event handler(s) are being executed under different threads
    of control (Asynchronous) and
    (B) Event raiser and Event Handler(s) are being executed under same thread of
    control (Synchronous).
    So, Exception Handling belongs to scenario B where the method raising the
    exception (Event Raiser or exception raiser) and the method handling it (Event
    Handler or exception block) are under the same thread of control. More ever it has
    to be insured that at a time only one handler (first the inner most one) receives
    the message.
    Fort&eacute; provides a generic Event handling mechanism (Post Event and Event Loop) to
    handle the scenario A (which is the more generic one). But it also provides a
    specialized Event Handling mechanism (Raise Exception and Exception block) to
    efficiently handle the relatively simple scenario B. Why I am saying that the later
    is efficient because it won't be needing to register the event queue address of the
    interested task (after all there is only one task involved) and put the event
    message in queue.
    Finally let me mentioned that it is just my view based on the understanding I
    have and it may not be true. Only a person from fort&eacute; can confirm it. I will really
    appreciate if somebody correct and or refine it.
    Wish a Very Very Happy New Year to all Fort&eacute; Users
    Regard,
    Kailash.
    [email protected] wrote:
    I would agree with Eric entirely. Exceptions seem to me to be a much more
    complete solution to the problem of error handling. A little bit of effort up
    front in making clear the strategy for exception handling and specifying the
    exceptions that can be raised by a class\method will provide an excellent method
    for error handling.
    In the case of ensuring exceptions are always handled, a top level handler for
    GenericException will usually do the job, allowing you to write error
    information out to logs, screen, etc, and then shut down gracefully.
    The only issue I would raise with exceptions is that they are not propagated
    outside an asynchronous task. If an exception is not handled within an
    asynchronous, it will not propagate to the task that started that asynchronous
    task. Forte provides return and exception events when starting asynchronous
    tasks to cope with this, but it seems a shame to have one method of dealing with
    errors (exceptions) for synchronous behaviour, and another (events) for
    asynchronous behaviour.
    Steve Elvin
    Systems Developer
    Frontline Ltd.
    UK
    Mark,
    The problem with return codes is that there is an underlying assumption
    that the receiver will always catch and interpret that error code. This
    may or may not be good thing, depending on how you architect your
    application. If, on the other hand, you want to ensure that an error is
    always handled, if not by the receiver then by the Forte, Exceptions are
    the way to go. To extend this mechanism further, I would subclass
    GenericException and created my own error code attribute on that
    subclass. That way the receiver has the choice of interpreting the
    exception based on that error code, and wrapping it in a
    MessageDialog/window or do the usual 'errormgr.showerrors()'.
    Exceptions seem a more flexible approach to me. That is, if you can live
    with the fact that by using it, you're violating the 'exceptions for
    behavioral anomalies' software engineering principle !
    Best wishes.
    Eric Pereira
    Forte Consultant
    ----Original Message Follows----
    From: "Kallambella, Ajith" <[email protected]>
    To: "'Mark Sundsten'" <[email protected]>, [email protected]
    Cc: [email protected]
    Subject: RE: Raising Exceptions Vs returning error codes
    Date: Wed, 30 Dec 1998 08:52:39 -0500
    Reply-To: "Kallambella, Ajith" <[email protected]>
    Mark,
    Identifying conditions where you would rather use an exception
    to an error_code ( and vice-versa ) normally depends on
    your application design. Usually exceptions
    are used to handle behavioral anomalies which are
    not expected during the normal course of execution of
    the program, and which would affect the continuity of
    your algorithm if ignored. Examples would be a fatal
    error, a semantically invalid( but syntactically-valid
    token ) etc.
    Error_codes and return status's can be used to handle
    anticipated and recoverable errors. Example would
    be presentation layer validations. In any normal
    UI system, the user is expected to make errors and it
    would be annoying to throw an exception( and to handle
    it ), every time user enters wrong data. A well
    modeled client layer should not only handle
    data-validation errors , but should be smart enough
    to encourage users to input correct or
    "near-correct" data. Examples could be
    making use of look-up windows etc. Interestingly,
    Express uses exceptions to handle data-validations.
    As you see, exceptions fit well into your processing
    logic where severity of damage caused by an error
    is more. Where as error_codes fit well into presentation
    logic( and some not-so-critical processing logic ) where
    errors are usually recoverable and normal path of
    execution can be easily restored.
    Hope this helps. I would be very interested to hear
    what others have to say.
    Ajith Kallambella. M
    Forte Systems Engineer,
    International Business Corporation.
    -----Original Message-----
    From: Mark Sundsten [mailto:[email protected]]
    Sent: Tuesday, December 29, 1998 2:10 PM
    To: [email protected]
    Cc: [email protected]
    Subject: Raising Exceptions vs returning error codes
    When dealing with error handling, I find myself struggling with the
    choice
    of
    raising exceptions (and handling them) from the caller
    vs returning an error code of somekind.
    When would you want to use one over the other?
    Should you always use exception handling?
    Any discussion would be appreciated.
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>
    Get Your Private, Free Email at http://www.hotmail.com
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>-
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>

  • Start routine errors while activating transformations 2LIS_13_VDITM

    Hi Friends,
    I have an error while activating transformation for Cube: 0SD_C03
    Transformation Z2LIS_13_VDITM
    The start routine error is like this->
    Start Routine: Syntax error in routine
    Rule (target: 0SUBTOT_1S, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0SUBTOT_2S, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0SUBTOT_3S, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0SUBTOT_4S, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0SUBTOT_5S, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0SUBTOT_6S, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0QUANT_B, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0DOC_ITEMS, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0NET_VAL_S, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0COST_VAL_S, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0GR_WT_KG, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0NT_WT_KG, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0VOLUME_CDM, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0BP_GRP, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0CP_CATEG, group: 01 Standard Group): Syntax error in routine
    S:RSTRAN:552 38 0CRM_PROD 01 Standard Group 0MATERIAL
    Rule (target: 0DEB_CRED, group: 01 Standard Group): Syntax error in routine
    Rule (target: 0PROD_CATEG, group: 01 Standard Group): Syntax error in routine
    Key rule 43 (target field: 0VERSION): Initial update set
    pls guys if some one can suggest me to solve this i would be very greateful
    Bala
    Edited by: bala dondeti on Jun 20, 2011 12:32 PM
    Edited by: bala dondeti on Jun 20, 2011 12:43 PM

    Thanks for the info Umesh,
    Just to be sure - I should simply change "SOURCE_PACKAGE" to "DATA_PACKAGE" in the code of the start routine? "Source_Package" is present in two places in that code:
    METHODS
          start_routine
            IMPORTING
              request                  type rsrequest
              datapackid               type rsdatapid
            EXPORTING
              monitor                  type rstr_ty_t_monitors
            CHANGING
              SOURCE_PACKAGE              type tyt_SC_1
            RAISING
              cx_rsrout_abort.
    and then after that in:
    Migrated update rule call
      Perform routine_9998
      TABLES
        SOURCE_PACKAGE
      CHANGING
        l_abort.
    Or should I revert to the 3.5 version? (as a side note, that Data Source (2LIS_13_VDITM) has been activated in 7.0 version by default, when I replicated data sources in BW).
    Praveen, as to your remarks, I have the datasource 2LIS_13_VDITM (in version 7.0) active, along with the appropriate Infosource. Transformation between the DataSource and InfoSource is active, and only the transformation between the InforSource and the Cube poses problems.
    BR,
    Alek

  • Start Routine logic problem !

    Experts ,
    in my start routine,
    my Source-field-fieldname has value "ABC123"
    and i need to assing this value in reverse order like "123ABC" to the Infoobject.
    How do i get this output ?
    thankss

    Hi Honar ,
    Please use this code to reverse the strings.I think you want it like
    Input : "ABA123"
    Output : "321CBA"
    for this use below code
    data : v_Input (20) type c .
    data : v_Output(20) type c.
    LOOP AT SOURCE_PACKAGE ASSIGNING <SOURCE_FIELDS> .
    v_Input =   <SOURCE_FIELDS>-FIELDNAME .
    CALL FUNCTION 'STRING_REVERSE'
    EXPORTING
    string =v_Input
    lang = 'E'
    IMPORTING
    RSTRING = v_Output
    EXCEPTIONS
    TOO_SMALL = 1
    OTHERS = 2
    <SOURCE_FIELDS>-FIELDNAME = v_Output .
    ENDLOOP .
    This will work .
    If you have different requirement then please tell me .
    Regards,
    Jaya

  • Start Routine - Do not load data that doesnt exist in ODS

    Hello Gurus!
    I am loading between two cubes. I only want to load products that exist in a seperate ods.
    Can someone help me out with the code for this?
    NB I am using 3.5

    data declaration :
    $$ begin of global - insert your declaration only below this line  -
        DATA : itab TYPE TABLE OF /bic/aXXXXXX00.
        DATA : w_itab LIKE LINE OF itab.
        data : v_ind type i.
    coding :
    $$ begin of routine - insert your code only below this line        -
        ... "insert your code here
    *--  fill table "MONITOR" with values of structure "MONITOR_REC"
    *-   to make monitor entries
        ... "to cancel the update process
       raise exception type CX_RSROUT_ABORT.
    SELECT *
    FROM /bic/aXXXXXX00
    INTO TABLE itab
    FOR ALL ENTRIES IN SOURCE_PACKAGE
    WHERE field1 EQ SOURCE_PACKAGE-field1.
    LOOP AT SOURCE_PACKAGE ASSIGNING <source_fields>.
    v_ind = sy-tabix.
    READ TABLE itab INTO w_itab
    WITH KEY field1    = <source_fields>-field1.
    if sy-subrc ne 0.
    delete itab index v_ind.
    endif.
    endloop.

Maybe you are looking for

  • Production order stock

    Dear All, Any movement type is used for sale order stock to order stock. Regards, Devi.G

  • ICloud isn't ready yet for me..how about you?

    iCloud is becoming that "thing" that has everyone excited abou the next best thing in computing...however, we are still working and living in a real world. iCloud for Windows. Not compatible with Windows XP. Epic fail. XP has the largest install base

  • Logic to update the table with IDOC numbers

    Hi all, I have an issue while I am running my interface. The IDOCs are getting generated and are displaying in WE02 successfully. But in my logic, I have a requirement to update these created IDOCs in a customized database table. This table has the I

  • Photo to Wallpaper Troubles

    How do you down scale a photo to fit my wallpeper? You can zoom in but cant zoom out to make photo fit to screen size...

  • How to narrate in Adobe Premier Elements?

    I am using an external Yeti microphone to record narration in Adobe Premier Elements.  I have set up the microphone in the system preferences and also in the Adobe program.  I can hit record but there is no sound on the playback.  What setting am I m