cancel
Showing results for 
Search instead for 
Did you mean: 

Slice Data automatically or through function

Former Member
0 Kudos

Hi,

Is it possible to create a data slice through a function or through status switch? - we need to slice data for a version once data is copied to a new verison, without any manual intervention.

If yes can you pl. guide through the process.

Thanks in advance.

Krishna

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Dear all,

has anyone ever tried to use this logic with BI7 Integrated Planning? Where is the data slice information stored now? It is definitely not the UPC_ tables any more.

Kind regards

Lars Biederstedt

Former Member
0 Kudos

Hi,

The data slices for IP are stored in the following tables

RSPLS_DS

RSPLS_DS_FIELD

RSPLS_DS_HEAD

RSPLS_DS_RANGE

RSPLS_DST

thanks

Former Member
0 Kudos

Thank You, Anand.

Former Member
0 Kudos

Hi,

The answer is yes it's possible to do that. Attached is the code for a program that we use for changing the dataslice. At period end we copy the data from actuals to forecast and lock the forecast version from P1 to current period-1. We have automated this using ABAP and it's called from a process chain.

hope this was helpfull

REPORT  XXXXXXXXXXXXXXXX NO STANDARD PAGE HEADING
                                 LINE-SIZE 80
                                 LINE-COUNT 65
                                 MESSAGE-ID zsem.
TYPE-POOLS: slis,
            icon.

*-----------------------------------------------------------------------
TABLES: upc_dataslice,   "Data Slices
        upc_dataslicet,  "Data Slices - Text Table
        upc_area,        "Planning Areas
        upc_areat.       "Planning Areas - Text Table
*----------------------------------------------------------------------
TYPES: BEGIN OF ys_slice,
         sort TYPE upc_dataslice-sort,
         guid TYPE upc_dataslice-guid,
         inactive TYPE upc_dataslice-inactive,
         text TYPE upc_dataslicet-text,
         t_optios TYPE upc_yt_optios,
         r_chasel TYPE REF TO if_sem_chasel,
         status(1) TYPE c,
       END OF ys_slice.

DATA: w_variant_ds        LIKE disvariant,
      w_retcode           LIKE syst-subrc,
      w_repid             LIKE syst-repid,
      w_prev_period       TYPE /bi0/oifiscper,
      w_t_upc_dataslice#  TYPE i,
      w_t_upc_dataslicet# TYPE i,
      w_low               TYPE upc_ys_optios-low,
      w_area              LIKE upc_areat-area,
      w_name              LIKE upc_areat-text.

DATA: BEGIN OF lt_text OCCURS 0,
           area  LIKE upc_dataslicet-area,
           text  LIKE upc_dataslicet-text,
         END OF lt_text.

DATA: lt_return TYPE ddshretval OCCURS 1 WITH HEADER LINE.

DATA: BEGIN OF dynp_value_tab OCCURS 0.
        INCLUDE STRUCTURE dynpread.
DATA: END   OF dynp_value_tab.


************************************************************************
*                      I N T E R N A L   T A B L E S                   *
************************************************************************
DATA: i_data_slice TYPE TABLE OF upc_dataslice,
      wa_data_slice TYPE upc_dataslice.

DATA: p_slice TYPE upc_y_sort,
      g_buper LIKE t009b-poper,
      g_gjahr LIKE t009b-bdatj,
      g_date  LIKE sy-datum.

DATA: i_optios TYPE upc_yt_optios,
      g_period TYPE /bi0/oifiscper.

DATA: lt_optios TYPE upc_yt_optios.

************************************************************************
*            F I E L D   S Y M B O L S                                 *
************************************************************************
FIELD-SYMBOLS: <fs_optios> TYPE upc_ys_optios.
************************************************************************
*            S E L E C T-O P T I O N S / P A R A M E T E R S           *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN SKIP 1.

PARAMETERS: p_parea LIKE upc_areat-area OBLIGATORY,
            p_name  LIKE upc_areat-text OBLIGATORY.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN END OF BLOCK b1.

*ALV Variant
************************************************************************
*                   I N I T I A L I Z A T I O N                        *
************************************************************************
INITIALIZATION.
  w_repid = sy-repid.

************************************************************************
*               A T   S E L E C T I O N  -  S C R E E N                *
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_parea.
  PERFORM f4_area.
*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_name.
  PERFORM f4_name.
*
************************************************************************
*            S T A R T   -   O F   -  S E L E C T I O N                *
************************************************************************
START-OF-SELECTION.
*
* validate input parameter fields
  PERFORM validate_input_parameters.
*
* continue processing if parameter fields are valid
  CHECK w_retcode IS INITIAL.
*
* get data slice and activate/deactivate it
  PERFORM get_dataslice_details.
*
* continue processing if dataslice is found
  CHECK w_retcode IS INITIAL.
*
* determine the previous fiscal period
  PERFORM derive_prev_fiscal_period CHANGING w_prev_period.
*
* get_data slice selections
  PERFORM upc_optios_get.
*
* continue processing if field selections is found
  CHECK w_retcode IS INITIAL.
*
* change selected data using previous period
  PERFORM change_selection.
*
* update the options using UPC_OPTIOS_INSERT
  PERFORM upc_optios_insert.
*
************************************************************************
*               E N D  -  O F  -  S E L E C T I O N                    *
************************************************************************
END-OF-SELECTION.
*
* check for success or errors, report accordingly
  PERFORM success_or_error.

************************************************************************
*                         F  O  R  M  S                                *
************************************************************************
*&---------------------------------------------------------------------*
*&      Form  f4_area
*&---------------------------------------------------------------------*
FORM f4_area.

  REFRESH lt_return. CLEAR lt_return.
  REFRESH dynp_value_tab. CLEAR dynp_value_tab.

  IF NOT dynp_value_tab-fieldinp IS INITIAL.
    MOVE: 'P_PAREA' TO dynp_value_tab-fieldname.
  ELSE.
    CLEAR: dynp_value_tab-fieldname.
  ENDIF.
  APPEND dynp_value_tab.

  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname               = sy-repid
      dynumb               = sy-dynnr
    TABLES
      dynpfields           = dynp_value_tab
    EXCEPTIONS
      invalid_abapworkarea = 04
      invalid_dynprofield  = 08
      invalid_dynproname   = 12
      invalid_dynpronummer = 16
      invalid_request      = 20
      no_fielddescription  = 24
      undefind_error       = 28.

  READ TABLE dynp_value_tab INDEX 1.

  MOVE: dynp_value_tab-fieldvalue TO p_parea.

  IF NOT p_parea IS INITIAL.

    SELECT SINGLE * FROM upc_areat
                      INTO upc_areat
        WHERE langu = sy-langu
        AND   area  = p_parea.

    IF sy-subrc <> 0.
      w_retcode = 1006.
      PERFORM success_or_error.
    ENDIF.
  ELSE.

    SELECT area text
        INTO TABLE lt_text
        FROM upc_areat
        WHERE langu = sy-langu.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
*   DDIC_STRUCTURE         = ' '
        retfield               = 'AREA'
*   PVALKEY                = ' '
*    DYNPPROG               = w_repid
*    DYNPNR                 = DYNN
*    DYNPROFIELD            = TF
*   STEPL                  = 0
      window_title           = text-m02
*   VALUE                  = ' '
        value_org              = 'S'
*   MULTIPLE_CHOICE        = ' '
*    DISPLAY                = 'F'
*   CALLBACK_PROGRAM       = W_repid
*   CALLBACK_FORM          = ' '
      TABLES
        value_tab              = lt_text
*    FIELD_TAB              = field_tab
        return_tab             = lt_return
*    DYNPFLD_MAPPING        = SELC
     EXCEPTIONS
       parameter_error        = 1
       no_values_found        = 2
       OTHERS                 = 3.

    IF sy-subrc <> 0.
*    perform return_message.
    ELSE.
      READ TABLE lt_return INDEX 1.
      p_parea = lt_return-fieldval.
    ENDIF.
  ENDIF.

ENDFORM.                                                    " f4_area
*&---------------------------------------------------------------------*
*&      Form  f4_name
*&---------------------------------------------------------------------*
FORM f4_name.

  IF p_parea IS INITIAL.

    MOVE: 'P_PAREA' TO dynp_value_tab-fieldname.
    APPEND dynp_value_tab.

    CALL FUNCTION 'DYNP_VALUES_READ'
      EXPORTING
        dyname               = sy-repid
        dynumb               = sy-dynnr
      TABLES
        dynpfields           = dynp_value_tab
      EXCEPTIONS
        invalid_abapworkarea = 04
        invalid_dynprofield  = 08
        invalid_dynproname   = 12
        invalid_dynpronummer = 16
        invalid_request      = 20
        no_fielddescription  = 24
        undefind_error       = 28.

    READ TABLE dynp_value_tab INDEX 1.

    MOVE: dynp_value_tab-fieldvalue TO p_parea.
    IF p_parea IS INITIAL.
      w_retcode = 1003.
      PERFORM success_or_error.
    ENDIF.
  ENDIF.

**************************************************
  IF NOT p_name IS INITIAL.

    SELECT * FROM upc_dataslicet
             INTO upc_dataslicet
             UP TO 1 ROWS
        WHERE langu = sy-langu
        AND   area  = p_parea
        AND   text  = p_name.
    ENDSELECT.

    IF sy-subrc <> 0.
      w_retcode = 1007.
      PERFORM success_or_error.
    ENDIF.

  ENDIF.

  REFRESH lt_return. CLEAR lt_return.
  REFRESH dynp_value_tab. CLEAR dynp_value_tab.

  MOVE: 'P_NAME' TO dynp_value_tab-fieldname.

  APPEND dynp_value_tab.
*
  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname               = sy-repid
      dynumb               = sy-dynnr
    TABLES
      dynpfields           = dynp_value_tab
    EXCEPTIONS
      invalid_abapworkarea = 04
      invalid_dynprofield  = 08
      invalid_dynproname   = 12
      invalid_dynpronummer = 16
      invalid_request      = 20
      no_fielddescription  = 24
      undefind_error       = 28.
*
  READ TABLE dynp_value_tab INDEX 1.

  MOVE: dynp_value_tab-fieldvalue TO p_name.

  SELECT area text
      INTO TABLE lt_text
      FROM upc_dataslicet
      WHERE langu = sy-langu
      AND   area  = p_parea.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
*   DDIC_STRUCTURE         = ' '
      retfield               = 'TEXT'
*   PVALKEY                = ' '
*    DYNPPROG               = w_repid
*    DYNPNR                 = DYNN
*    DYNPROFIELD            = TF
*   STEPL                  = 0
    window_title           = text-m02
*   VALUE                  = ' '
      value_org              = 'S'
*   MULTIPLE_CHOICE        = ' '
*    DISPLAY                = 'F'
*   CALLBACK_PROGRAM       = W_repid
*   CALLBACK_FORM          = ' '
    TABLES
      value_tab              = lt_text
*    FIELD_TAB              = field_tab
      return_tab             = lt_return
*    DYNPFLD_MAPPING        = SELC
   EXCEPTIONS
     parameter_error        = 1
     no_values_found        = 2
     OTHERS                 = 3.

  IF sy-subrc <> 0.
*    perform return_message.
  ELSE.
    READ TABLE lt_return INDEX 1.
    p_name = lt_return-fieldval.
  ENDIF.

ENDFORM.                                                    " f4_name
*&---------------------------------------------------------------------*
*&      Form  derive_prev_fiscal_period
*&---------------------------------------------------------------------*
FORM derive_prev_fiscal_period
                   CHANGING w_prev_period TYPE /bi0/oifiscper.
  DATA: l_buper LIKE t009b-poper,
        l_gjahr LIKE t009b-bdatj,
        l_date  LIKE sy-datum.

* setermine current period from todays date
  CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'
    EXPORTING
      i_date               = sy-datlo
*   I_MONMIT             = 00
      i_periv              = '05'
   IMPORTING
     e_buper              = l_buper
     e_gjahr              = l_gjahr
   EXCEPTIONS
     input_false          = 1
     t009_notfound        = 2
     t009b_notfound       = 3
     OTHERS               = 4
            .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

* determine first date for current period
  CALL FUNCTION 'FIRST_DAY_IN_PERIOD_GET'
    EXPORTING
      i_gjahr              = l_gjahr
*   I_MONMIT             = 00
      i_periv              = '05'
      i_poper              = l_buper
   IMPORTING
     e_date               = l_date
   EXCEPTIONS
     input_false          = 1
     t009_notfound        = 2
     t009b_notfound       = 3
     OTHERS               = 4
            .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

* determine last date in previous period
  l_date = l_date - 1.

  CLEAR: l_buper, l_gjahr.

* re-determine period using new derived date--> will be previous period
  CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'
    EXPORTING
      i_date               = l_date
*   I_MONMIT             = 00
      i_periv              = '05'
   IMPORTING
     e_buper              = l_buper
     e_gjahr              = l_gjahr
   EXCEPTIONS
     input_false          = 1
     t009_notfound        = 2
     t009b_notfound       = 3
     OTHERS               = 4
            .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CONCATENATE l_gjahr l_buper INTO w_prev_period.

ENDFORM.                    " derive_prev_fiscal_period
*&---------------------------------------------------------------------*
*&      Form  UPC_OPTIOS_GET
*&---------------------------------------------------------------------*
FORM upc_optios_get.
  CALL FUNCTION 'UPC_OPTIOS_GET'
   EXPORTING
   i_guid          = wa_data_slice-guid
*   I_PFTYP         = '1'
   IMPORTING
     et_optios     = i_optios.

  READ TABLE i_optios ASSIGNING <fs_optios>
             WITH KEY fieldname = '0FISCPER'.

  IF sy-subrc <> 0.
    w_retcode = 1004.
  ENDIF.

ENDFORM.                    " UPC_OPTIOS_GET
*&---------------------------------------------------------------------*
*&      Form  change_selection
*&---------------------------------------------------------------------*
FORM change_selection.

  IF w_prev_period+4(3)  = '001'.
    <fs_optios>-sign  = 'I'.
    <fs_optios>-optio = 'EQ'.
    <fs_optios>-low   = w_prev_period.   "YYYYPPP
    <fs_optios>-high  = ' '.
  ELSE.
    <fs_optios>-sign  = 'I'.
    <fs_optios>-optio = 'BT'.
    CONCATENATE w_prev_period(4) '001' INTO w_low.
    <fs_optios>-low   = w_low.
    <fs_optios>-high = w_prev_period.    "YYYYPPP
  ENDIF.
*

ENDFORM.                    " change_selection
*&---------------------------------------------------------------------*
*&      Form  UPC_OPTIOS_INSERT
*&---------------------------------------------------------------------*
FORM upc_optios_insert.

  CALL FUNCTION 'UPC_OPTIOS_INSERT'
    EXPORTING
      it_optios = i_optios.

  IF sy-subrc <> 0.
    w_retcode = 1005.
  ENDIF.

ENDFORM.                    " UPC_OPTIOS_INSERT
*&---------------------------------------------------------------------*
*&      Form  success_or_error
*&---------------------------------------------------------------------*
FORM success_or_error.
*
  CASE w_retcode.

    WHEN 0.    "successful
      COMMIT WORK.
      MESSAGE s000 WITH 'DataSlice Updated Successfully'.

    WHEN 1001. "dataslice not found
      MESSAGE i000 WITH 'DataSlice not found'.

    WHEN 1002. "multiple records found
      MESSAGE i000 WITH 'Multiple records found'.

    WHEN 1003. "must select Area first
      MESSAGE i000 WITH 'Select an Area first before a Name'.

    WHEN 1004. "0FISCPER not found
      MESSAGE i000 WITH ')FISCPER not found'.

    WHEN 1005. "Insert error
      MESSAGE i000 WITH 'INSERT error'.

    WHEN 1006. "Area not found
      MESSAGE i000 WITH 'Planning Area not found'.

    WHEN 1007. "Name not found
      MESSAGE i002 WITH 'Name not found with Planning Area ' p_parea.

    WHEN OTHERS. "unknown
      MESSAGE i000 WITH 'Unknown'.

  ENDCASE.

ENDFORM.                    " success_or_error
*&---------------------------------------------------------------------*
*&      Form  get_dataslice_details
*&---------------------------------------------------------------------*
FORM get_dataslice_details.

  SELECT upc_dataslicet~mandt upc_dataslicet~area upc_dataslicet~sort
          upc_dataslice~guid upc_dataslice~inactive
          INTO CORRESPONDING FIELDS OF TABLE i_data_slice
      FROM upc_dataslicet INNER JOIN upc_dataslice ON
      upc_dataslice~area = upc_dataslicet~area AND
      upc_dataslice~sort = upc_dataslicet~sort
      CLIENT specified
        WHERE upc_dataslicet~langu = sy-langu
        AND   upc_dataslicet~area  = p_parea
        AND   upc_dataslicet~text  = p_name.

  IF sy-subrc NE 0.
    w_retcode = 1001.
    EXIT.
  ENDIF.

  DESCRIBE TABLE i_data_slice LINES sy-tabix.
  IF sy-tabix > 1.
    w_retcode = 1002.
    EXIT.
  ENDIF.

  READ TABLE i_data_slice INTO wa_data_slice INDEX 1.

ENDFORM.                    " get_dataslice_details
*&---------------------------------------------------------------------*
*&      Form  validate_input_parameters
*&---------------------------------------------------------------------*
FORM validate_input_parameters.

  SELECT SINGLE * FROM upc_areat
                  INTO upc_areat
    WHERE langu = sy-langu
    AND   area  = p_parea.

  IF sy-subrc <> 0.
    w_retcode = 1006.
    EXIT.
  ENDIF.

  SELECT * FROM upc_dataslicet
           INTO upc_dataslicet
           UP TO 1 ROWS
    WHERE langu = sy-langu
    AND   area  = p_parea
    AND   text  = p_name.
  ENDSELECT.

  IF sy-subrc <> 0.
    w_retcode = 1007.
    EXIT.
  ENDIF.

ENDFORM.                    " validate_input_parameters

Former Member
0 Kudos

Thanks for the quick response and the sample code Anand.

Regads

Krishna