on 06-13-2006 6:22 PM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
83 | |
24 | |
12 | |
9 | |
7 | |
6 | |
5 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.